+ * Daniel Lemire, Leonid Boytsov, Nathan Kurz,
+ * SIMD Compression and the Intersection of Sorted Integers
+ * http://arxiv.org/abs/1401.6399
+ *
+ *
+ * @author Daniel Lemire
*/
-public final class BinaryPacking implements IntegerCODEC {
+public final class BinaryPacking implements IntegerCODEC, SkippableIntegerCODEC {
+ public final static int BLOCK_SIZE = 32;
+ private static final int MAX_BIT_WIDTH = Integer.SIZE;
+
+ @Override
+ public void compress(int[] in, IntWrapper inpos, int inlength,
+ int[] out, IntWrapper outpos) {
+ inlength = Util.greatestMultiple(inlength, BLOCK_SIZE);
+ if (inlength == 0)
+ return;
+ out[outpos.get()] = inlength;
+ outpos.increment();
+ headlessCompress(in, inpos, inlength, out, outpos);
+ }
+
+ @Override
+ public void headlessCompress(int[] in, IntWrapper inpos, int inlength,
+ int[] out, IntWrapper outpos) {
+ inlength = Util.greatestMultiple(inlength, BLOCK_SIZE);
+ int tmpoutpos = outpos.get();
+ int s = inpos.get();
+ for (; s + BLOCK_SIZE * 4 - 1 < inpos.get() + inlength; s += BLOCK_SIZE * 4) {
+ final int mbits1 = Util.maxbits(in, s, BLOCK_SIZE);
+ final int mbits2 = Util.maxbits(in, s + BLOCK_SIZE, BLOCK_SIZE);
+ final int mbits3 = Util.maxbits(in, s + 2 * BLOCK_SIZE, BLOCK_SIZE);
+ final int mbits4 = Util.maxbits(in, s + 3 * BLOCK_SIZE, BLOCK_SIZE);
+ out[tmpoutpos++] = (mbits1 << 24) | (mbits2 << 16)
+ | (mbits3 << 8) | (mbits4);
+ BitPacking.fastpackwithoutmask(in, s, out, tmpoutpos,
+ mbits1);
+ tmpoutpos += mbits1;
+ BitPacking.fastpackwithoutmask(in, s + BLOCK_SIZE, out,
+ tmpoutpos, mbits2);
+ tmpoutpos += mbits2;
+ BitPacking.fastpackwithoutmask(in, s + 2 * BLOCK_SIZE, out,
+ tmpoutpos, mbits3);
+ tmpoutpos += mbits3;
+ BitPacking.fastpackwithoutmask(in, s + 3 * BLOCK_SIZE, out,
+ tmpoutpos, mbits4);
+ tmpoutpos += mbits4;
+ }
+ for (; s < inpos.get() + inlength; s += BLOCK_SIZE ) {
+ final int mbits = Util.maxbits(in, s, BLOCK_SIZE);
+ out[tmpoutpos++] = mbits;
+ BitPacking.fastpackwithoutmask(in, s, out, tmpoutpos,
+ mbits);
+ tmpoutpos += mbits;
+
+ }
+ inpos.add(inlength);
+ outpos.set(tmpoutpos);
+ }
+
+ @Override
+ public void uncompress(int[] in, IntWrapper inpos, int inlength,
+ int[] out, IntWrapper outpos) {
+ if (inlength == 0)
+ return;
+ final int outlength = in[inpos.get()];
+ inpos.increment();
+ headlessUncompress(in,inpos, inlength,out,outpos,outlength);
+ }
- @Override
-public void compress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) {
- inlength = inlength / 128 * 128;
-
- out[outpos.get()] = inlength;
- outpos.increment();
- int tmpoutpos = outpos.get();
- for (int s = inpos.get(); s < inpos.get() + inlength; s += 32 * 4) {
- final int mbits1 = Util.maxbits(in, s, 32);
- final int mbits2 = Util.maxbits(in, s + 32, 32);
- final int mbits3 = Util.maxbits(in, s + 2 * 32, 32);
- final int mbits4 = Util.maxbits(in, s + 3 * 32, 32);
- out[tmpoutpos++] = (mbits1 << 24) | (mbits2 << 16) | (mbits3 << 8)
- | (mbits4);
- BitPacking.fastpackwithoutmask(in, s, out, tmpoutpos, mbits1);
- tmpoutpos += mbits1;
- BitPacking.fastpackwithoutmask(in, s + 32, out, tmpoutpos, mbits2);
- tmpoutpos += mbits2;
- BitPacking.fastpackwithoutmask(in, s + 2 * 32, out, tmpoutpos, mbits3);
- tmpoutpos += mbits3;
- BitPacking.fastpackwithoutmask(in, s + 3 * 32, out, tmpoutpos, mbits4);
- tmpoutpos += mbits4;
- }
- inpos.add(inlength);
- outpos.set(tmpoutpos);
- }
+ @Override
+ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength,
+ int[] out, IntWrapper outpos, int num) {
+ final int outlength = Util.greatestMultiple(num, BLOCK_SIZE);
+ int tmpinpos = inpos.get();
+ int s = outpos.get();
+ for (; s + BLOCK_SIZE * 4 - 1 < outpos.get() + outlength; s += BLOCK_SIZE * 4) {
+ final int mbits1 = (in[tmpinpos] >>> 24);
+ final int mbits2 = (in[tmpinpos] >>> 16) & 0xFF;
+ final int mbits3 = (in[tmpinpos] >>> 8) & 0xFF;
+ final int mbits4 = (in[tmpinpos]) & 0xFF;
+ ++tmpinpos;
+ BitPacking.fastunpack(in, tmpinpos, out, s, mbits1);
+ tmpinpos += mbits1;
+ BitPacking
+ .fastunpack(in, tmpinpos, out, s + BLOCK_SIZE, mbits2);
+ tmpinpos += mbits2;
+ BitPacking.fastunpack(in, tmpinpos, out, s + 2 * BLOCK_SIZE,
+ mbits3);
+ tmpinpos += mbits3;
+ BitPacking.fastunpack(in, tmpinpos, out, s + 3 * BLOCK_SIZE,
+ mbits4);
+ tmpinpos += mbits4;
+ }
+ for (; s < outpos.get() + outlength; s += BLOCK_SIZE ) {
+ final int mbits = in[tmpinpos];
+ ++tmpinpos;
+ BitPacking.fastunpack(in, tmpinpos, out, s, mbits);
+ tmpinpos += mbits;
+ }
+ outpos.add(outlength);
+ inpos.set(tmpinpos);
+ }
- @Override
-public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) {
- // Util.assertTrue(inpos.get()+inlength <= in.length);
- final int outlength = in[inpos.get()];
- inpos.increment();
- int tmpinpos = inpos.get();
- for (int s = outpos.get(); s < outpos.get() + outlength; s += 32 * 4) {
- final int mbits1 = (in[tmpinpos] >>> 24);
- final int mbits2 = (in[tmpinpos] >>> 16) & 0xFF;
- final int mbits3 = (in[tmpinpos] >>> 8) & 0xFF;
- final int mbits4 = (in[tmpinpos]) & 0xFF;
- ++tmpinpos;
- BitPacking.fastunpack(in, tmpinpos, out, s, mbits1);
- tmpinpos += mbits1;
- BitPacking.fastunpack(in, tmpinpos, out, s + 32, mbits2);
- tmpinpos += mbits2;
- BitPacking.fastunpack(in, tmpinpos, out, s + 2 * 32, mbits3);
- tmpinpos += mbits3;
- BitPacking.fastunpack(in, tmpinpos, out, s + 3 * 32, mbits4);
- tmpinpos += mbits4;
- }
- outpos.add(outlength);
- inpos.set(tmpinpos);
- }
+ @Override
+ public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) {
+ int blockCount = inlength / BLOCK_SIZE;
+ int headersSizeInInts = blockCount / Integer.BYTES + (blockCount % Integer.BYTES);
+ int blocksSizeInInts = blockCount * MAX_BIT_WIDTH;
+ compressedPositions.add(blockCount * BLOCK_SIZE);
+ return headersSizeInInts + blocksSizeInInts;
+ }
+ @Override
+ public String toString() {
+ return this.getClass().getSimpleName();
+ }
}
diff --git a/src/main/java/me/lemire/integercompression/BitPacking.java b/src/main/java/me/lemire/integercompression/BitPacking.java
index b4e234b..8652be4 100644
--- a/src/main/java/me/lemire/integercompression/BitPacking.java
+++ b/src/main/java/me/lemire/integercompression/BitPacking.java
@@ -9,7126 +9,4663 @@
import java.util.Arrays;
+/**
+ * Bitpacking routines
+ *
+ * For sufficiently compressible and long arrays, it is faster and better than other PFOR
+ * schemes.
+ *
+ * Note that this does not use differential coding: if you are working on sorted
+ * lists, you should first compute deltas, @see me.lemire.integercompression.differential.Delta#delta.
*
+ * For multi-threaded applications, each thread should use its own FastPFOR
+ * object.
+ *
* @author Daniel Lemire
*/
-public final class FastPFOR implements IntegerCODEC {
- int PageSize;
- final static int BlockSize = 128;
- final static int overheadofeachexcept = 8;
-
- int[][] datatobepacked = new int[32][];
- ByteBuffer bytecontainer;
-
- public FastPFOR(int pagesize) {
- PageSize = pagesize;
- initArrays();
- }
-
- public FastPFOR() {
- PageSize = 65536;
- initArrays();
- }
-
- public void initArrays() {
- bytecontainer = ByteBuffer.allocateDirect(3 * PageSize / BlockSize
- + PageSize);
- for (int k = 1; k < 32; ++k)
- datatobepacked[k] = new int[PageSize / 32 * 4];// heuristic
- }
-
- @Override
- public void compress(int[] in, IntWrapper inpos, int inlength, int[] out,
- IntWrapper outpos) {
- inlength = inlength / 128 * 128;
-
- final int finalinpos = inpos.get() + inlength;
- out[outpos.get()] = inlength;
- outpos.increment();
- while (inpos.get() != finalinpos) {
- int thissize = finalinpos > PageSize + inpos.get() ? PageSize
- : (finalinpos - inpos.get());
- encodePage(in, inpos, thissize, out, outpos);
- }
- }
-
- public static void getBestBFromData(int[] in, int pos,
- byte[] bestbbestcexceptmaxb) {
- int freqs[] = new int[32];
- for (int k = pos; k < BlockSize + pos; ++k)
- freqs[Util.bits(in[k])]++;
- bestbbestcexceptmaxb[0] = 31;
- while (freqs[bestbbestcexceptmaxb[0]] == 0)
- bestbbestcexceptmaxb[0]--;
- bestbbestcexceptmaxb[2] = bestbbestcexceptmaxb[0];
- int bestcost = bestbbestcexceptmaxb[0] * BlockSize;
- byte cexcept = 0;
- bestbbestcexceptmaxb[1] = cexcept;
- for (int b = bestbbestcexceptmaxb[0] - 1; b >= 0; --b) {
- cexcept += freqs[b + 1];
- if (cexcept < 0)
- break;
- int thiscost = cexcept * overheadofeachexcept + cexcept
- * (bestbbestcexceptmaxb[2] - b) + b * BlockSize + 8;// the
- // extra
- // 8 is
- // the
- // cost
- // of
- // storing
- // maxbits
- if (thiscost < bestcost) {
- bestcost = thiscost;
- bestbbestcexceptmaxb[0] = (byte) b;
- bestbbestcexceptmaxb[1] = cexcept;
- }
- }
- }
-
- private void encodePage(int[] in, IntWrapper inpos, int thissize,
- int[] out, IntWrapper outpos) {
- final int headerpos = outpos.get();
- outpos.increment();
- int tmpoutpos = outpos.get();
- int[] datapointers = new int[32];
- bytecontainer.clear();
- final byte[] bestbbestcexceptmaxb = new byte[3];
- int tmpinpos = inpos.get();
- for (final int finalinpos = tmpinpos + thissize; tmpinpos + BlockSize <= finalinpos; tmpinpos += BlockSize) {
- getBestBFromData(in, tmpinpos, bestbbestcexceptmaxb);
- final int tmpbestb = bestbbestcexceptmaxb[0];
- bytecontainer.put(bestbbestcexceptmaxb[0]);
- bytecontainer.put(bestbbestcexceptmaxb[1]);
- if (bestbbestcexceptmaxb[1] > 0) {
- bytecontainer.put(bestbbestcexceptmaxb[2]);
- final int index = bestbbestcexceptmaxb[2]
- - bestbbestcexceptmaxb[0];
- if (datapointers[index] + bestbbestcexceptmaxb[1] >= datatobepacked[index].length) {
- int newsize = 2 * (datapointers[index] + bestbbestcexceptmaxb[1]);
- newsize = (newsize + 31) / 32 * 32;// make sure it is a
- // multiple of
- // 32
- datatobepacked[index] = Arrays.copyOf(
- datatobepacked[index], newsize);
- }
- final int maxval = 1 << bestbbestcexceptmaxb[0];
- for (int k = 0; k < BlockSize; ++k) {
- if (in[k + tmpinpos] >= maxval) {
- // we have an exception
- bytecontainer.put((byte) k);
- datatobepacked[index][datapointers[index]++] = in[k
- + tmpinpos] >>> tmpbestb;
- }
- }
- }
- for (int k = 0; k < 128; k += 32) {
- BitPacking.fastpack(in, tmpinpos + k, out, tmpoutpos, tmpbestb);
- tmpoutpos += tmpbestb;
- }
- }
- inpos.set(tmpinpos);
- out[headerpos] = tmpoutpos - headerpos;
- while ((bytecontainer.position() & 3) != 0)
- bytecontainer.put((byte) 0);
- final int bytesize = bytecontainer.position();
- out[tmpoutpos++] = bytesize;
- final int howmanyints = bytesize / 4;
- bytecontainer.flip();
- bytecontainer.asIntBuffer().get(out, tmpoutpos, howmanyints);
- tmpoutpos += howmanyints;
- int bitmap = 0;
- for (int k = 1; k <= 31; ++k) {
- if (datapointers[k] != 0)
- bitmap |= (1 << (k - 1));
- }
- out[tmpoutpos++] = bitmap;
- for (int k = 1; k <= 31; ++k) {
-
- if (datapointers[k] != 0) {
- out[tmpoutpos++] = datapointers[k];// size
- for (int j = 0; j < datapointers[k]; j += 32) {
- BitPacking
- .fastpack(datatobepacked[k], j, out, tmpoutpos, k);
- tmpoutpos += k;
- }
- }
- }
- outpos.set(tmpoutpos);
- }
-
- @Override
- public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out,
- IntWrapper outpos) {
- // Util.assertTrue(inpos.get()+inlength <= in.length);
- int mynvalue = in[inpos.get()];
- inpos.increment();
- int finalout = outpos.get() + mynvalue;
- while (outpos.get() != finalout) {
- int thissize = finalout > PageSize + outpos.get() ? PageSize
- : (finalout - outpos.get());
- decodePage(in, inpos, out, outpos, thissize);
- }
- }
-
- private void decodePage(int[] in, IntWrapper inpos, int[] out,
- IntWrapper outpos, int thissize) {
- final int initpos = inpos.get();
- final int wheremeta = in[inpos.get()];
- inpos.increment();
- int inexcept = initpos + wheremeta;
- final int bytesize = in[inexcept++];
- bytecontainer.clear();
- // Util.assertTrue((bytesize & 3) == 0);
- bytecontainer.asIntBuffer().put(in, inexcept, bytesize / 4);
- inexcept += bytesize / 4;
-
- final int bitmap = in[inexcept++];
- for (int k = 1; k <= 31; ++k) {
- if ((bitmap & (1 << (k - 1))) != 0) {
- int size = in[inexcept++];
- if (datatobepacked[k].length < size)
- datatobepacked[k] = new int[(size + 31) / 32 * 32];
- for (int j = 0; j < size; j += 32) {
- BitPacking
- .fastunpack(in, inexcept, datatobepacked[k], j, k);
- inexcept += k;
- }
- }
- }
- int[] datapointers = new int[32];
- int tmpoutpos = outpos.get();
- int tmpinpos = inpos.get();
-
- for (int run = 0; run < thissize / BlockSize; ++run, tmpoutpos += BlockSize) {
- final byte b = bytecontainer.get();
- final byte cexcept = bytecontainer.get();
- for (int k = 0; k < 128; k += 32) {
- BitPacking.fastunpack(in, tmpinpos, out, tmpoutpos + k, b);
- tmpinpos += b;
- }
- if (cexcept > 0) {
- final byte maxbits = bytecontainer.get();
- final int index = maxbits - b;
- for (int k = 0; k < cexcept; ++k) {
- final byte pos = bytecontainer.get();
- final int exceptvalue = datatobepacked[index][datapointers[index]++];
- out[pos + tmpoutpos] |= exceptvalue << b;
- }
-
- }
- }
- outpos.set(tmpoutpos);
- inpos.set(inexcept);
- }
-
- @Override
- public String toString() {
- return this.getClass().getName();
- }
+public class FastPFOR implements IntegerCODEC,SkippableIntegerCODEC {
+ final static int OVERHEAD_OF_EACH_EXCEPT = 8;
+ private static final int OVERHEAD_OF_EACH_PAGE_IN_INTS = 36; // 1 int for the header
+ // 1 int for the byte array size
+ // 1 int for the bitmap
+ // 1 int for byte array padding (to align to 4 bytes)
+ // 32 to have enough space to bit-pack the exceptions
+ private static final int OVERHEAD_OF_EACH_BLOCK_IN_INTS = 1; // 1 byte for the number of bits allocated per truncated integer
+ // 1 byte for the number of exceptions
+ /**
+ *
+ */
+ public final static int DEFAULT_PAGE_SIZE = 65536;
+ /**
+ *
+ */
+ public final static int BLOCK_SIZE = 256;
+
+ final int pageSize;
+ final int[][] dataTobePacked = new int[33][];
+ final ByteBuffer byteContainer;
+
+ // Working area for compress and uncompress.
+ final int[] dataPointers = new int[33];
+ final int[] freqs = new int[33];
+ final int[] bestbbestcexceptmaxb = new int[3];
+
+
+ /**
+ * Construct the FastPFOR CODEC.
+ *
+ * @param pagesize
+ * the desired page size (recommended value is FastPFOR.DEFAULT_PAGE_SIZE)
+ */
+ FastPFOR(int pagesize) {
+ pageSize = pagesize;
+ // Initiate arrrays.
+ byteContainer = makeBuffer(3 * pageSize
+ / BLOCK_SIZE + pageSize);
+ byteContainer.order(ByteOrder.LITTLE_ENDIAN);
+ for (int k = 1; k < dataTobePacked.length; ++k)
+ dataTobePacked[k] = new int[pageSize / 32 * 4]; // heuristic
+ }
+
+ /**
+ * Construct the fastPFOR CODEC with default parameters.
+ */
+ public FastPFOR() {
+ this( DEFAULT_PAGE_SIZE);
+ }
+
+ /**
+ * Compress data in blocks of BLOCK_SIZE integers (if fewer than BLOCK_SIZE integers
+ * are provided, nothing is done).
+ *
+ * @see IntegerCODEC#compress(int[], IntWrapper, int, int[], IntWrapper)
+ */
+ @Override
+ public void headlessCompress(int[] in, IntWrapper inpos, int inlength,
+ int[] out, IntWrapper outpos) {
+ inlength = Util.greatestMultiple(inlength, BLOCK_SIZE);
+ // Allocate memory for working area.
+
+ final int finalinpos = inpos.get() + inlength;
+ while (inpos.get() != finalinpos) {
+ int thissize = Math.min(pageSize,
+ finalinpos - inpos.get());
+ encodePage(in, inpos, thissize, out, outpos);
+ }
+
+
+ }
+
+ private void getBestBFromData(int[] in, int pos) {
+ Arrays.fill(freqs, 0);
+ for (int k = pos, k_end = pos + BLOCK_SIZE; k < k_end; ++k) {
+ freqs[Util.bits(in[k])]++;
+ }
+ bestbbestcexceptmaxb[0] = 32;
+ while (freqs[bestbbestcexceptmaxb[0]] == 0)
+ bestbbestcexceptmaxb[0]--;
+ bestbbestcexceptmaxb[2] = bestbbestcexceptmaxb[0];
+ int bestcost = bestbbestcexceptmaxb[0] * BLOCK_SIZE;
+ int cexcept = 0;
+ bestbbestcexceptmaxb[1] = cexcept;
+ for (int b = bestbbestcexceptmaxb[0] - 1; b >= 0; --b) {
+ cexcept += freqs[b + 1];
+ if (cexcept == BLOCK_SIZE)
+ break;
+ // the extra 8 is the cost of storing maxbits
+ int thiscost = cexcept * OVERHEAD_OF_EACH_EXCEPT
+ + cexcept * (bestbbestcexceptmaxb[2] - b) + b
+ * BLOCK_SIZE + 8;
+ if(bestbbestcexceptmaxb[2] - b == 1) thiscost -= cexcept;
+ if (thiscost < bestcost) {
+ bestcost = thiscost;
+ bestbbestcexceptmaxb[0] = b;
+ bestbbestcexceptmaxb[1] = cexcept;
+ }
+ }
+ }
+
+ private void encodePage(int[] in, IntWrapper inpos, int thissize,
+ int[] out, IntWrapper outpos) {
+ final int headerpos = outpos.get();
+ outpos.increment();
+ int tmpoutpos = outpos.get();
+
+ // Clear working area.
+ Arrays.fill(dataPointers, 0);
+ byteContainer.clear();
+
+ int tmpinpos = inpos.get();
+ for (final int finalinpos = tmpinpos + thissize - BLOCK_SIZE; tmpinpos <= finalinpos; tmpinpos += BLOCK_SIZE) {
+ getBestBFromData(in, tmpinpos);
+ final int tmpbestb = bestbbestcexceptmaxb[0];
+ byteContainer.put((byte)bestbbestcexceptmaxb[0]);
+ byteContainer.put((byte)bestbbestcexceptmaxb[1]);
+ if (bestbbestcexceptmaxb[1] > 0) {
+ byteContainer.put((byte)bestbbestcexceptmaxb[2]);
+ final int index = bestbbestcexceptmaxb[2]
+ - bestbbestcexceptmaxb[0];
+ if (dataPointers[index]
+ + bestbbestcexceptmaxb[1] >= dataTobePacked[index].length) {
+ int newsize = 2 * (dataPointers[index] + bestbbestcexceptmaxb[1]);
+ // make sure it is a multiple of 32
+ newsize = Util
+ .greatestMultiple(newsize + 31, 32);
+ dataTobePacked[index] = Arrays.copyOf(
+ dataTobePacked[index], newsize);
+ }
+ for (int k = 0; k < BLOCK_SIZE; ++k) {
+ if ((in[k + tmpinpos] >>> bestbbestcexceptmaxb[0]) != 0) {
+ // we have an exception
+ byteContainer.put((byte) k);
+ dataTobePacked[index][dataPointers[index]++] = in[k
+ + tmpinpos] >>> tmpbestb;
+ }
+ }
+
+ }
+ for (int k = 0; k < BLOCK_SIZE; k += 32) {
+ BitPacking.fastpack(in, tmpinpos + k, out,
+ tmpoutpos, tmpbestb);
+ tmpoutpos += tmpbestb;
+ }
+ }
+ inpos.set(tmpinpos);
+ out[headerpos] = tmpoutpos - headerpos;
+ final int bytesize = byteContainer.position();
+ while ((byteContainer.position() & 3) != 0)
+ byteContainer.put((byte) 0);
+ out[tmpoutpos++] = bytesize;
+ final int howmanyints = byteContainer.position() / 4;
+ byteContainer.flip();
+ byteContainer.asIntBuffer().get(out, tmpoutpos, howmanyints);
+ tmpoutpos += howmanyints;
+ int bitmap = 0;
+ for (int k = 2; k <= 32; ++k) {
+ if (dataPointers[k] != 0)
+ bitmap |= (1 << (k - 1));
+ }
+ out[tmpoutpos++] = bitmap;
+
+ for (int k = 2; k <= 32; ++k) {
+ if (dataPointers[k] != 0) {
+ out[tmpoutpos++] = dataPointers[k];// size
+ int j = 0;
+ for (; j < dataPointers[k]; j += 32) {
+ BitPacking.fastpack(dataTobePacked[k],
+ j, out, tmpoutpos, k);
+ tmpoutpos += k;
+ }
+ int overflow = j - dataPointers[k];
+ tmpoutpos -= overflow * k / 32;
+ }
+ }
+ outpos.set(tmpoutpos);
+ }
+
+ /**
+ * Uncompress data in blocks of integers. In this particular case,
+ * the inlength parameter is ignored: it is deduced from the compressed
+ * data.
+ *
+ * @see IntegerCODEC#compress(int[], IntWrapper, int, int[], IntWrapper)
+ */
+ @Override
+ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength,
+ int[] out, IntWrapper outpos, int mynvalue) {
+ mynvalue = Util.greatestMultiple(mynvalue, BLOCK_SIZE);
+ int finalout = outpos.get() + mynvalue;
+ while (outpos.get() != finalout) {
+ int thissize = Math.min(pageSize,
+ finalout - outpos.get());
+ decodePage(in, inpos, out, outpos, thissize);
+ }
+ }
+
+ @Override
+ public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) {
+ inlength = Util.greatestMultiple(inlength, BLOCK_SIZE);
+
+ int pageCount = (inlength + pageSize - 1) / pageSize;
+ int blockCount = inlength / BLOCK_SIZE;
+
+ // getBestBFromData limits the memory used for exceptions so that the total size of the block does not exceed BLOCK_SIZE integers.
+ int blockSizeInInts = OVERHEAD_OF_EACH_BLOCK_IN_INTS + BLOCK_SIZE;
+ return OVERHEAD_OF_EACH_PAGE_IN_INTS * pageCount + blockSizeInInts * blockCount + 24;
+ }
+
+ private void decodePage(int[] in, IntWrapper inpos, int[] out,
+ IntWrapper outpos, int thissize) {
+ final int initpos = inpos.get();
+ final int wheremeta = in[inpos.get()];
+ inpos.increment();
+ int inexcept = initpos + wheremeta;
+ final int bytesize = in[inexcept++];
+ byteContainer.clear();
+ byteContainer.asIntBuffer().put(in, inexcept, (bytesize + 3) / 4);
+ inexcept += (bytesize + 3)/ 4;
+
+ final int bitmap = in[inexcept++];
+ for (int k = 2; k <= 32; ++k) {
+ if ((bitmap & (1 << (k - 1))) != 0) {
+ int size = in[inexcept++];
+ int roundedup = Util
+ .greatestMultiple(size + 31, 32);
+ if (dataTobePacked[k].length < roundedup)
+ dataTobePacked[k] = new int[roundedup];
+ if(inexcept + roundedup/32*k <= in.length) {
+ int j = 0;
+ for (; j < size; j += 32) {
+ BitPacking.fastunpack(in, inexcept,
+ dataTobePacked[k], j, k);
+ inexcept += k;
+ }
+ int overflow = j - size;
+ inexcept -= overflow * k / 32;
+ } else {
+ int j = 0;
+ int[] buf = new int[roundedup/32*k];
+ int initinexcept = inexcept;
+ System.arraycopy(in, inexcept, buf, 0, in.length - inexcept);
+ for (; j < size; j += 32) {
+ BitPacking.fastunpack(buf, inexcept-initinexcept,
+ dataTobePacked[k], j, k);
+ inexcept += k;
+ }
+ int overflow = j - size;
+ inexcept -= overflow * k / 32;
+ }
+ }
+ }
+ Arrays.fill(dataPointers, 0);
+ int tmpoutpos = outpos.get();
+ int tmpinpos = inpos.get();
+
+ for (int run = 0, run_end = thissize / BLOCK_SIZE; run < run_end; ++run, tmpoutpos += BLOCK_SIZE) {
+ final int b = byteContainer.get();
+ final int cexcept = byteContainer.get() & 0xFF;
+ for (int k = 0; k < BLOCK_SIZE; k += 32) {
+ BitPacking.fastunpack(in, tmpinpos, out,
+ tmpoutpos + k, b);
+ tmpinpos += b;
+ }
+ if (cexcept > 0) {
+ final int maxbits = byteContainer.get();
+ final int index = maxbits - b;
+ if(index == 1) {
+ for (int k = 0; k < cexcept; ++k) {
+ final int pos = byteContainer.get() &0xFF;
+ out[pos + tmpoutpos] |= 1 << b;
+ }
+ } else {
+ for (int k = 0; k < cexcept; ++k) {
+ final int pos = byteContainer.get() &0xFF;
+ final int exceptvalue = dataTobePacked[index][dataPointers[index]++];
+ out[pos + tmpoutpos] |= exceptvalue << b;
+ }
+ }
+ }
+ }
+ outpos.set(tmpoutpos);
+ inpos.set(inexcept);
+ }
+ @Override
+ public void compress(int[] in, IntWrapper inpos, int inlength, int[] out,
+ IntWrapper outpos) {
+ inlength = Util.greatestMultiple(inlength, BLOCK_SIZE);
+ if (inlength == 0)
+ return;
+ out[outpos.get()] = inlength;
+ outpos.increment();
+ headlessCompress(in, inpos, inlength, out, outpos);
+ }
+
+ @Override
+ public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out,
+ IntWrapper outpos) {
+ if (inlength == 0)
+ return;
+ final int outlength = in[inpos.get()];
+ inpos.increment();
+ headlessUncompress(in, inpos, inlength, out, outpos, outlength);
+ }
+ @Override
+ public String toString() {
+ return this.getClass().getSimpleName();
+ }
+
+ /**
+ * Creates a new buffer of the requested size.
+ *
+ * In case you need a different way to allocate buffers, you can override this method
+ * with a custom behavior. The default implementation allocates a new Java direct
+ * {@link ByteBuffer} on each invocation.
+ *
+ * @param sizeInBytes
+ * @return
+ */
+ protected ByteBuffer makeBuffer(int sizeInBytes) {
+ return ByteBuffer.allocateDirect(sizeInBytes);
+ }
}
diff --git a/src/main/java/me/lemire/integercompression/FastPFOR128.java b/src/main/java/me/lemire/integercompression/FastPFOR128.java
new file mode 100644
index 0000000..0557c62
--- /dev/null
+++ b/src/main/java/me/lemire/integercompression/FastPFOR128.java
@@ -0,0 +1,346 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+package me.lemire.integercompression;
+
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.util.Arrays;
+
+/**
+ * This class is similar to FastPFOR but uses a small block size.
+ *
+ * Note that this does not use differential coding: if you are working on sorted
+ * lists, you should first compute deltas, @see me.lemire.integercompression.differential.Delta#delta.
+ *
+ * For multi-threaded applications, each thread should use its own FastPFOR
+ * object.
+ *
+ * @author Daniel Lemire
+ */
+public class FastPFOR128 implements IntegerCODEC,SkippableIntegerCODEC {
+ final static int OVERHEAD_OF_EACH_EXCEPT = 8;
+ private static final int OVERHEAD_OF_EACH_PAGE_IN_INTS = 36; // 1 int for the header
+ // 1 int for the byte array size
+ // 1 int for the bitmap
+ // 1 int for byte array padding (to align to 4 bytes)
+ // 32 to have enough space to bit-pack the exceptions
+ private static final int OVERHEAD_OF_EACH_BLOCK_IN_INTS = 1; // 1 byte for the number of bits allocated per truncated integer
+ // 1 byte for the number of exceptions
+ /**
+ *
+ */
+ public final static int DEFAULT_PAGE_SIZE = 65536;
+ /**
+ *
+ */
+ public final static int BLOCK_SIZE = 128;
+
+ final int pageSize;
+ final int[][] dataTobePacked = new int[33][];
+ final ByteBuffer byteContainer;
+
+ // Working area for compress and uncompress.
+ final int[] dataPointers = new int[33];
+ final int[] freqs = new int[33];
+ final int[] bestbbestcexceptmaxb = new int[3];
+
+ /**
+ * Construct the FastPFOR CODEC.
+ *
+ * @param pagesize
+ * the desired page size (recommended value is FastPFOR.DEFAULT_PAGE_SIZE)
+ */
+ public FastPFOR128(int pagesize) {
+ pageSize = pagesize;
+ // Initiate arrrays.
+ byteContainer = makeBuffer(3 * pageSize
+ / BLOCK_SIZE + pageSize);
+ byteContainer.order(ByteOrder.LITTLE_ENDIAN);
+ for (int k = 1; k < dataTobePacked.length; ++k)
+ dataTobePacked[k] = new int[pageSize / 32 * 4]; // heuristic
+ }
+ /**
+ * Construct the fastPFOR CODEC with default parameters.
+ */
+ public FastPFOR128() {
+ this(DEFAULT_PAGE_SIZE);
+ }
+
+ /**
+ * Compress data in blocks of BLOCK_SIZE integers (if fewer than BLOCK_SIZE integers
+ * are provided, nothing is done).
+ *
+ * @see IntegerCODEC#compress(int[], IntWrapper, int, int[], IntWrapper)
+ */
+ @Override
+ public void headlessCompress(int[] in, IntWrapper inpos, int inlength,
+ int[] out, IntWrapper outpos) {
+ inlength = Util.greatestMultiple(inlength, BLOCK_SIZE);
+ final int finalinpos = inpos.get() + inlength;
+ while (inpos.get() != finalinpos) {
+ int thissize = Math.min(pageSize,
+ finalinpos - inpos.get());
+ encodePage(in, inpos, thissize, out, outpos);
+ }
+ }
+
+ private void getBestBFromData(int[] in, int pos) {
+ Arrays.fill(freqs, 0);
+ for (int k = pos, k_end = pos + BLOCK_SIZE; k < k_end; ++k) {
+ freqs[Util.bits(in[k])]++;
+ }
+ bestbbestcexceptmaxb[0] = 32;
+ while (freqs[bestbbestcexceptmaxb[0]] == 0)
+ bestbbestcexceptmaxb[0]--;
+ bestbbestcexceptmaxb[2] = bestbbestcexceptmaxb[0];
+ int bestcost = bestbbestcexceptmaxb[0] * BLOCK_SIZE;
+ int cexcept = 0;
+ bestbbestcexceptmaxb[1] = cexcept;
+ for (int b = bestbbestcexceptmaxb[0] - 1; b >= 0; --b) {
+ cexcept += freqs[b + 1];
+ if (cexcept == BLOCK_SIZE)
+ break;
+ // the extra 8 is the cost of storing maxbits
+ int thiscost = cexcept * OVERHEAD_OF_EACH_EXCEPT
+ + cexcept * (bestbbestcexceptmaxb[2] - b) + b
+ * BLOCK_SIZE + 8;
+ if(bestbbestcexceptmaxb[2] - b == 1) thiscost -= cexcept;
+ if (thiscost < bestcost) {
+ bestcost = thiscost;
+ bestbbestcexceptmaxb[0] = b;
+ bestbbestcexceptmaxb[1] = cexcept;
+ }
+ }
+ }
+
+ private void encodePage(int[] in, IntWrapper inpos, int thissize,
+ int[] out, IntWrapper outpos) {
+ final int headerpos = outpos.get();
+ outpos.increment();
+ int tmpoutpos = outpos.get();
+
+ // Clear working area.
+ Arrays.fill(dataPointers, 0);
+ byteContainer.clear();
+
+ int tmpinpos = inpos.get();
+ for (final int finalinpos = tmpinpos + thissize - BLOCK_SIZE; tmpinpos <= finalinpos; tmpinpos += BLOCK_SIZE) {
+ getBestBFromData(in, tmpinpos);
+ final int tmpbestb = bestbbestcexceptmaxb[0];
+ byteContainer.put((byte)bestbbestcexceptmaxb[0]);
+ byteContainer.put((byte)bestbbestcexceptmaxb[1]);
+ if (bestbbestcexceptmaxb[1] > 0) {
+ byteContainer.put((byte)bestbbestcexceptmaxb[2]);
+ final int index = bestbbestcexceptmaxb[2]
+ - bestbbestcexceptmaxb[0];
+ if (dataPointers[index]
+ + bestbbestcexceptmaxb[1] >= dataTobePacked[index].length) {
+ int newsize = 2 * (dataPointers[index] + bestbbestcexceptmaxb[1]);
+ // make sure it is a multiple of 32
+ newsize = Util
+ .greatestMultiple(newsize + 31, 32);
+ dataTobePacked[index] = Arrays.copyOf(
+ dataTobePacked[index], newsize);
+ }
+ for (int k = 0; k < BLOCK_SIZE; ++k) {
+ if ((in[k + tmpinpos] >>> bestbbestcexceptmaxb[0]) != 0) {
+ // we have an exception
+ byteContainer.put((byte) k);
+ dataTobePacked[index][dataPointers[index]++] = in[k
+ + tmpinpos] >>> tmpbestb;
+ }
+ }
+
+ }
+ for (int k = 0; k < BLOCK_SIZE; k += 32) {
+ BitPacking.fastpack(in, tmpinpos + k, out,
+ tmpoutpos, tmpbestb);
+ tmpoutpos += tmpbestb;
+ }
+ }
+ inpos.set(tmpinpos);
+ out[headerpos] = tmpoutpos - headerpos;
+ final int bytesize = byteContainer.position();
+ while ((byteContainer.position() & 3) != 0)
+ byteContainer.put((byte) 0);
+ out[tmpoutpos++] = bytesize;
+ final int howmanyints = byteContainer.position() / 4;
+ byteContainer.flip();
+ byteContainer.asIntBuffer().get(out, tmpoutpos, howmanyints);
+ tmpoutpos += howmanyints;
+ int bitmap = 0;
+ for (int k = 2; k <= 32; ++k) {
+ if (dataPointers[k] != 0)
+ bitmap |= (1 << (k - 1));
+ }
+ out[tmpoutpos++] = bitmap;
+
+ for (int k = 2; k <= 32; ++k) {
+ if (dataPointers[k] != 0) {
+ out[tmpoutpos++] = dataPointers[k];// size
+ int j = 0;
+ for (; j < dataPointers[k]; j += 32) {
+ BitPacking.fastpack(dataTobePacked[k],
+ j, out, tmpoutpos, k);
+ tmpoutpos += k;
+ }
+ int overflow = j - dataPointers[k];
+ tmpoutpos -= overflow * k / 32;
+ }
+ }
+ outpos.set(tmpoutpos);
+ }
+
+ /**
+ * Uncompress data in blocks of integers. In this particular case,
+ * the inlength parameter is ignored: it is deduced from the compressed
+ * data.
+ *
+ * @see IntegerCODEC#compress(int[], IntWrapper, int, int[], IntWrapper)
+ */
+ @Override
+ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength,
+ int[] out, IntWrapper outpos, int mynvalue) {
+ if (inlength == 0)
+ return;
+ mynvalue = Util.greatestMultiple(mynvalue, BLOCK_SIZE);
+ int finalout = outpos.get() + mynvalue;
+ while (outpos.get() != finalout) {
+ int thissize = Math.min(pageSize,
+ finalout - outpos.get());
+ decodePage(in, inpos, out, outpos, thissize);
+ }
+ }
+
+ @Override
+ public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) {
+ inlength = Util.greatestMultiple(inlength, BLOCK_SIZE);
+
+ int pageCount = (inlength + pageSize - 1) / pageSize;
+ int blockCount = inlength / BLOCK_SIZE;
+
+ // getBestBFromData limits the memory used for exceptions so that the total size of the block does not exceed BLOCK_SIZE integers.
+ int blockSizeInInts = OVERHEAD_OF_EACH_BLOCK_IN_INTS + BLOCK_SIZE;
+ return OVERHEAD_OF_EACH_PAGE_IN_INTS * pageCount + blockSizeInInts * blockCount + 24;
+ }
+
+ private void decodePage(int[] in, IntWrapper inpos, int[] out,
+ IntWrapper outpos, int thissize) {
+ final int initpos = inpos.get();
+ final int wheremeta = in[inpos.get()];
+ inpos.increment();
+ int inexcept = initpos + wheremeta;
+ final int bytesize = in[inexcept++];
+ byteContainer.clear();
+ byteContainer.asIntBuffer().put(in, inexcept, (bytesize + 3) / 4);
+ inexcept += (bytesize + 3)/ 4;
+
+ final int bitmap = in[inexcept++];
+ for (int k = 2; k <= 32; ++k) {
+ if ((bitmap & (1 << (k - 1))) != 0) {
+ int size = in[inexcept++];
+ int roundedup = Util
+ .greatestMultiple(size + 31, 32);
+ if (dataTobePacked[k].length < roundedup)
+ dataTobePacked[k] = new int[roundedup];
+ if(inexcept + roundedup/32*k <= in.length) {
+ int j = 0;
+ for (; j < size; j += 32) {
+ BitPacking.fastunpack(in, inexcept,
+ dataTobePacked[k], j, k);
+ inexcept += k;
+ }
+ int overflow = j - size;
+ inexcept -= overflow * k / 32;
+ } else {
+ int j = 0;
+ int[] buf = new int[roundedup/32*k];
+ int initinexcept = inexcept;
+ System.arraycopy(in, inexcept, buf, 0, in.length - inexcept);
+ for (; j < size; j += 32) {
+ BitPacking.fastunpack(buf, inexcept-initinexcept,
+ dataTobePacked[k], j, k);
+ inexcept += k;
+ }
+ int overflow = j - size;
+ inexcept -= overflow * k / 32;
+ }
+ }
+ }
+ Arrays.fill(dataPointers, 0);
+ int tmpoutpos = outpos.get();
+ int tmpinpos = inpos.get();
+
+ for (int run = 0, run_end = thissize / BLOCK_SIZE; run < run_end; ++run, tmpoutpos += BLOCK_SIZE) {
+ final int b = byteContainer.get();
+ final int cexcept = byteContainer.get() & 0xFF;
+ for (int k = 0; k < BLOCK_SIZE; k += 32) {
+ BitPacking.fastunpack(in, tmpinpos, out,
+ tmpoutpos + k, b);
+ tmpinpos += b;
+ }
+ if (cexcept > 0) {
+ final int maxbits = byteContainer.get();
+ final int index = maxbits - b;
+ if(index == 1) {
+ for (int k = 0; k < cexcept; ++k) {
+ final int pos = byteContainer.get() &0xFF;
+ out[pos + tmpoutpos] |= 1 << b;
+ }
+ } else {
+ for (int k = 0; k < cexcept; ++k) {
+ final int pos = byteContainer.get() &0xFF;
+ final int exceptvalue = dataTobePacked[index][dataPointers[index]++];
+ out[pos + tmpoutpos] |= exceptvalue << b;
+ }
+ }
+ }
+ }
+ outpos.set(tmpoutpos);
+ inpos.set(inexcept);
+ }
+
+ @Override
+ public void compress(int[] in, IntWrapper inpos, int inlength, int[] out,
+ IntWrapper outpos) {
+ inlength = Util.greatestMultiple(inlength, BLOCK_SIZE);
+ if (inlength == 0)
+ return;
+ out[outpos.get()] = inlength;
+ outpos.increment();
+ headlessCompress(in, inpos, inlength, out, outpos);
+ }
+
+ @Override
+ public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out,
+ IntWrapper outpos) {
+ if (inlength == 0)
+ return;
+ final int outlength = in[inpos.get()];
+ inpos.increment();
+ headlessUncompress(in, inpos, inlength, out, outpos, outlength);
+ }
+
+ @Override
+ public String toString() {
+ return this.getClass().getSimpleName();
+ }
+
+ /**
+ * Creates a new buffer of the requested size.
+ *
+ * In case you need a different way to allocate buffers, you can override this method
+ * with a custom behavior. The default implementation allocates a new Java direct
+ * {@link ByteBuffer} on each invocation.
+ *
+ * @param sizeInBytes
+ * @return
+ */
+ protected ByteBuffer makeBuffer(int sizeInBytes) {
+ return ByteBuffer.allocateDirect(sizeInBytes);
+ }
+}
diff --git a/src/main/java/me/lemire/integercompression/GroupSimple9.java b/src/main/java/me/lemire/integercompression/GroupSimple9.java
new file mode 100644
index 0000000..bd8acfa
--- /dev/null
+++ b/src/main/java/me/lemire/integercompression/GroupSimple9.java
@@ -0,0 +1,3558 @@
+package me.lemire.integercompression;
+
+/**
+ * Group Simple 9 is a variation on Simple 9 that preserves the same
+ * compression ratios but offers higher decoding speed by regrouping
+ * the 32-bit words into pairs of 64-bit words.
+ *
+ * original by Kun Jiang, Yuexiang Yang and Qinghua Zheng source:
+ * https://github.com/deeper2/simple
+ *
+ * Adapted by D. Lemire.
+ */
+
+public final class GroupSimple9 implements IntegerCODEC, SkippableIntegerCODEC {
+
+ private static final int[][] M = { { 0, 1, 2, 3, 4, 5, 6, 7, 8 }, { 9, 10, 11, 12, 13, 14, 15, 16, 17 },
+ { 18, 19, 20, 21, 22, 23, 24, 25, 26 }, { 27, 28, 29, 30, 31, 32, 33, 34, 35 },
+ { 36, 37, 38, 39, 40, 41, 42, 43, 44 }, { 45, 46, 47, 48, 49, 50, 51, 52, 53 },
+ { 54, 55, 56, 57, 58, 59, 60, 61, 62 }, { 63, 64, 65, 66, 67, 68, 69, 70, 71 },
+ { 72, 73, 74, 75, 76, 77, 78, 79, 80 } };
+
+ @Override
+ public void compress(int[] in, IntWrapper inpos, int inlength, int out[], IntWrapper outpos) {
+ if (inlength == 0)
+ return;
+ out[outpos.get()] = inlength;
+ outpos.increment();
+ headlessCompress(in, inpos, inlength, out, outpos);
+ }
+
+ private void encode0(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 24; i++)
+ out[outf + 0] = (out[outf + 0] << 1) + (in[inf + i]);
+ for (int i = 0; i < 4; i++)
+ out[outf + 1] = (out[outf + 1] << 1) + in[inf + 24 + i];
+ for (int i = 0; i < 28; i++)
+ out[outf + 1] = (out[outf + 1] << 1) + in[inf + 28 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode1(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 24; i++)
+ out[outf + 0] = (out[outf + 0] << 1) + in[inf + i];
+ for (int i = 0; i < 4; i++)
+ out[outf + 1] = (out[outf + 1] << 1) + in[inf + 24 + i];
+ for (int i = 0; i < 14; i++)
+ out[outf + 1] = (out[outf + 1] << 2) + in[inf + 28 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode2(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 24; i++)
+ out[outf + 0] = (out[outf + 0] << 1) + in[inf + i];
+ for (int i = 0; i < 4; i++)
+ out[outf + 1] = (out[outf + 1] << 1) + in[inf + 24 + i];
+ for (int i = 0; i < 9; i++)
+ out[outf + 1] = (out[outf + 1] << 3) + in[inf + 28 + i];// 第二个28位是低位存储的,所以浪费的1比特在最顶端。
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode3(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 24; i++)
+ out[outf + 0] = (out[outf + 0] << 1) + in[inf + i];
+ for (int i = 0; i < 4; i++)
+ out[outf + 1] = (out[outf + 1] << 1) + in[inf + 24 + i];
+ for (int i = 0; i < 7; i++)
+ out[outf + 1] = (out[outf + 1] << 4) + in[inf + 28 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode4(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 24; i++)
+ out[outf + 0] = (out[outf + 0] << 1) + in[inf + i];
+ for (int i = 0; i < 4; i++)
+ out[outf + 1] = (out[outf + 1] << 1) + in[inf + 24 + i];
+ for (int i = 0; i < 5; i++)
+ out[outf + 1] = (out[outf + 1] << 5) + in[inf + 28 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode5(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 24; i++)
+ out[outf + 0] = (out[outf + 0] << 1) + in[inf + i];
+ for (int i = 0; i < 4; i++)
+ out[outf + 1] = (out[outf + 1] << 1) + in[inf + 24 + i];
+ for (int i = 0; i < 4; i++)
+ out[outf + 1] = (out[outf + 1] << 7) + in[inf + 28 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode6(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 24; i++)
+ out[outf + 0] = (out[outf + 0] << 1) + in[inf + i];
+ for (int i = 0; i < 4; i++)
+ out[outf + 1] = (out[outf + 1] << 1) + in[inf + 24 + i];
+ for (int i = 0; i < 3; i++)
+ out[outf + 1] = (out[outf + 1] << 9) + in[inf + 28 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode7(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 24; i++)
+ out[outf + 0] = (out[outf + 0] << 1) + in[inf + i];
+ for (int i = 0; i < 4; i++)
+ out[outf + 1] = (out[outf + 1] << 1) + in[inf + 24 + i];
+ for (int i = 0; i < 2; i++)
+ out[outf + 1] = (out[outf + 1] << 14) + in[inf + 28 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode8(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 24; i++)
+ out[outf + 0] = (out[outf + 0] << 1) + in[inf + i];
+ for (int i = 0; i < 4; i++)
+ out[outf + 1] = (out[outf + 1] << 1) + in[inf + 24 + i];
+ for (int i = 0; i < 1; i++)
+ out[outf + 1] = (out[outf + 1] << 28) + in[inf + 28 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode9(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 12; i++)
+ out[outf + 0] = (out[outf + 0] << 2) + in[inf + i];
+ for (int i = 0; i < 2; i++)
+ out[outf + 1] = (out[outf + 1] << 2) + in[inf + 12 + i];
+ for (int i = 0; i < 28; i++)
+ out[outf + 1] = (out[outf + 1] << 1) + in[inf + 14 + i];
+
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode10(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 12; i++) {
+ out[outf + 0] = (out[outf + 0] << 2) + in[inf + i];
+
+ }
+ for (int i = 0; i < 2; i++)
+ out[outf + 1] = (out[outf + 1] << 2) + in[inf + 12 + i];
+ for (int i = 0; i < 14; i++)
+ out[outf + 1] = (out[outf + 1] << 2) + in[inf + 14 + i];
+
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode11(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 12; i++)
+ out[outf + 0] = (out[outf + 0] << 2) + in[inf + i];
+ for (int i = 0; i < 2; i++)
+ out[outf + 1] = (out[outf + 1] << 2) + in[inf + 12 + i];
+ for (int i = 0; i < 9; i++)
+ out[outf + 1] = (out[outf + 1] << 3) + in[inf + 14 + i];
+
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode12(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 12; i++)
+ out[outf + 0] = (out[outf + 0] << 2) + in[inf + i];
+ for (int i = 0; i < 2; i++)
+ out[outf + 1] = (out[outf + 1] << 2) + in[inf + 12 + i];
+ for (int i = 0; i < 7; i++)
+ out[outf + 1] = (out[outf + 1] << 4) + in[inf + 14 + i];
+
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode13(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 12; i++)
+ out[outf + 0] = (out[outf + 0] << 2) + in[inf + i];
+ for (int i = 0; i < 2; i++)
+ out[outf + 1] = (out[outf + 1] << 2) + in[inf + 12 + i];
+ for (int i = 0; i < 5; i++)
+ out[outf + 1] = (out[outf + 1] << 5) + in[inf + 14 + i];
+
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode14(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 12; i++)
+ out[outf + 0] = (out[outf + 0] << 2) + in[inf + i];
+ for (int i = 0; i < 2; i++)
+ out[outf + 1] = (out[outf + 1] << 2) + in[inf + 12 + i];
+ for (int i = 0; i < 4; i++)
+ out[outf + 1] = (out[outf + 1] << 7) + in[inf + 14 + i];
+
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode15(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 12; i++)
+ out[outf + 0] = (out[outf + 0] << 2) + in[inf + i];
+ for (int i = 0; i < 2; i++)
+ out[outf + 1] = (out[outf + 1] << 2) + in[inf + 12 + i];
+ for (int i = 0; i < 3; i++)
+ out[outf + 1] = (out[outf + 1] << 9) + in[inf + 14 + i];
+
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode16(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 12; i++)
+ out[outf + 0] = (out[outf + 0] << 2) + in[inf + i];
+ for (int i = 0; i < 2; i++)
+ out[outf + 1] = (out[outf + 1] << 2) + in[inf + 12 + i];
+ for (int i = 0; i < 2; i++)
+ out[outf + 1] = (out[outf + 1] << 14) + in[inf + 14 + i];
+
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode17(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 12; i++)
+ out[outf + 0] = (out[outf + 0] << 2) + in[inf + i];
+ for (int i = 0; i < 2; i++)
+ out[outf + 1] = (out[outf + 1] << 2) + in[inf + 12 + i];
+ for (int i = 0; i < 1; i++)
+ out[outf + 1] = (out[outf + 1] << 28) + in[inf + 14 + i];
+
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode18(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 8; i++)
+ out[outf + 0] = (out[outf + 0] << 3) + in[inf + i];
+ for (int i = 0; i < 1; i++)
+ out[outf + 1] = (out[outf + 1] << 3) + in[inf + 8 + i];
+ for (int i = 0; i < 28; i++)
+ out[outf + 1] = (out[outf + 1] << 1) + in[inf + 9 + i];
+
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode19(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 8; i++)
+ out[outf + 0] = (out[outf + 0] << 3) + in[inf + i];
+ for (int i = 0; i < 1; i++)
+ out[outf + 1] = (out[outf + 1] << 3) + in[inf + 8 + i];
+ for (int i = 0; i < 14; i++)
+ out[outf + 1] = (out[outf + 1] << 2) + in[inf + 9 + i];
+
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode20(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 8; i++)
+ out[outf + 0] = (out[outf + 0] << 3) + in[inf + i];
+ for (int i = 0; i < 1; i++)
+ out[outf + 1] = (out[outf + 1] << 3) + in[inf + 8 + i];
+ for (int i = 0; i < 9; i++)
+ out[outf + 1] = (out[outf + 1] << 3) + in[inf + 9 + i];
+
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode21(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 8; i++)
+ out[outf + 0] = (out[outf + 0] << 3) + in[inf + i];
+ for (int i = 0; i < 1; i++)
+ out[outf + 1] = (out[outf + 1] << 3) + in[inf + 8 + i];
+ for (int i = 0; i < 7; i++)
+ out[outf + 1] = (out[outf + 1] << 4) + in[inf + 9 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode22(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 8; i++)
+ out[outf + 0] = (out[outf + 0] << 3) + in[inf + i];
+ for (int i = 0; i < 1; i++)
+ out[outf + 1] = (out[outf + 1] << 3) + in[inf + 8 + i];
+ for (int i = 0; i < 5; i++)
+ out[outf + 1] = (out[outf + 1] << 5) + in[inf + 9 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode23(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 8; i++)
+ out[outf + 0] = (out[outf + 0] << 3) + in[inf + i];
+ for (int i = 0; i < 1; i++)
+ out[outf + 1] = (out[outf + 1] << 3) + in[inf + 8 + i];
+ for (int i = 0; i < 4; i++)
+ out[outf + 1] = (out[outf + 1] << 7) + in[inf + 9 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode24(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 8; i++)
+ out[outf + 0] = (out[outf + 0] << 3) + in[inf + i];
+ for (int i = 0; i < 1; i++)
+ out[outf + 1] = (out[outf + 1] << 3) + in[inf + 8 + i];
+ for (int i = 0; i < 3; i++)
+ out[outf + 1] = (out[outf + 1] << 9) + in[inf + 9 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode25(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 8; i++)
+ out[outf + 0] = (out[outf + 0] << 3) + in[inf + i];
+ for (int i = 0; i < 1; i++)
+ out[outf + 1] = (out[outf + 1] << 3) + in[inf + 8 + i];
+ for (int i = 0; i < 2; i++)
+ out[outf + 1] = (out[outf + 1] << 14) + in[inf + 9 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode26(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 8; i++)
+ out[outf + 0] = (out[outf + 0] << 3) + in[inf + i];
+ for (int i = 0; i < 1; i++)
+ out[outf + 1] = (out[outf + 1] << 3) + in[inf + 8 + i];
+ for (int i = 0; i < 1; i++)
+ out[outf + 1] = (out[outf + 1] << 28) + in[inf + 9 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode27(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 6; i++)
+ out[outf + 0] = (out[outf + 0] << 4) + in[inf + i];
+ for (int i = 0; i < 1; i++)
+ out[outf + 1] = (out[outf + 1] << 4) + in[inf + 6 + i];
+ for (int i = 0; i < 28; i++)
+ out[outf + 1] = (out[outf + 1] << 1) + in[inf + 7 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode28(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 6; i++)
+ out[outf + 0] = (out[outf + 0] << 4) + in[inf + i];
+ for (int i = 0; i < 1; i++)
+ out[outf + 1] = (out[outf + 1] << 4) + in[inf + 6 + i];
+ for (int i = 0; i < 14; i++)
+ out[outf + 1] = (out[outf + 1] << 2) + in[inf + 7 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode29(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 6; i++)
+ out[outf + 0] = (out[outf + 0] << 4) + in[inf + i];
+ for (int i = 0; i < 1; i++)
+ out[outf + 1] = (out[outf + 1] << 4) + in[inf + 6 + i];
+ for (int i = 0; i < 9; i++)
+ out[outf + 1] = (out[outf + 1] << 3) + in[inf + 7 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode30(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 6; i++)
+ out[outf + 0] = (out[outf + 0] << 4) + in[inf + i];
+ for (int i = 0; i < 1; i++)
+ out[outf + 1] = (out[outf + 1] << 4) + in[inf + 6 + i];
+ for (int i = 0; i < 7; i++)
+ out[outf + 1] = (out[outf + 1] << 4) + in[inf + 7 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode31(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 6; i++)
+ out[outf + 0] = (out[outf + 0] << 4) + in[inf + i];
+ for (int i = 0; i < 1; i++)
+ out[outf + 1] = (out[outf + 1] << 4) + in[inf + 6 + i];
+ for (int i = 0; i < 5; i++)
+ out[outf + 1] = (out[outf + 1] << 5) + in[inf + 7 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode32(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 6; i++)
+ out[outf + 0] = (out[outf + 0] << 4) + in[inf + i];
+ for (int i = 0; i < 1; i++)
+ out[outf + 1] = (out[outf + 1] << 4) + in[inf + 6 + i];
+ for (int i = 0; i < 4; i++)
+ out[outf + 1] = (out[outf + 1] << 7) + in[inf + 7 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode33(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 6; i++)
+ out[outf + 0] = (out[outf + 0] << 4) + in[inf + i];
+ for (int i = 0; i < 1; i++)
+ out[outf + 1] = (out[outf + 1] << 4) + in[inf + 6 + i];
+ for (int i = 0; i < 3; i++)
+ out[outf + 1] = (out[outf + 1] << 9) + in[inf + 7 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode34(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 6; i++)
+ out[outf + 0] = (out[outf + 0] << 4) + in[inf + i];
+ for (int i = 0; i < 1; i++)
+ out[outf + 1] = (out[outf + 1] << 4) + in[inf + 6 + i];
+ for (int i = 0; i < 2; i++)
+ out[outf + 1] = (out[outf + 1] << 14) + in[inf + 7 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode35(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 6; i++)
+ out[outf + 0] = (out[outf + 0] << 4) + in[inf + i];
+ for (int i = 0; i < 1; i++)
+ out[outf + 1] = (out[outf + 1] << 4) + in[inf + 6 + i];
+ for (int i = 0; i < 1; i++)
+ out[outf + 1] = (out[outf + 1] << 28) + in[inf + 7 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode36(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 4; i++)
+ out[outf + 0] = (out[outf + 0] << 5) + in[inf + i];
+ out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1);
+ out[outf + 1] = (out[outf + 1] << 1) + ((in[inf + 4] << 31) >>> 31);
+ for (int i = 0; i < 28; i++)
+ out[outf + 1] = (out[outf + 1] << 1) + in[inf + 5 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode37(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 4; i++)
+ out[outf + 0] = (out[outf + 0] << 5) + in[inf + i];
+ out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1);
+ out[outf + 1] = (out[outf + 1] << 1) + ((in[inf + 4] << 31) >>> 31);
+ for (int i = 0; i < 14; i++)
+ out[outf + 1] = (out[outf + 1] << 2) + in[inf + 5 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode38(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 4; i++)
+ out[outf + 0] = (out[outf + 0] << 5) + in[inf + i];
+ out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1);
+ out[outf + 1] = (out[outf + 1] << 1) + ((in[inf + 4] << 31) >>> 31);
+ for (int i = 0; i < 9; i++)
+ out[outf + 1] = (out[outf + 1] << 3) + in[inf + 5 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode39(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 4; i++)
+ out[outf + 0] = (out[outf + 0] << 5) + in[inf + i];
+ out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1);
+ out[outf + 1] = (out[outf + 1] << 1) + ((in[inf + 4] << 31) >>> 31);
+ for (int i = 0; i < 7; i++)
+ out[outf + 1] = (out[outf + 1] << 4) + in[inf + 5 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode40(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 4; i++)
+ out[outf + 0] = (out[outf + 0] << 5) + in[inf + i];
+ out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1);
+ out[outf + 1] = (out[outf + 1] << 1) + ((in[inf + 4] << 31) >>> 31);
+ for (int i = 0; i < 5; i++)
+ out[outf + 1] = (out[outf + 1] << 5) + in[inf + 5 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode41(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 4; i++)
+ out[outf + 0] = (out[outf + 0] << 5) + in[inf + i];
+ out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1);
+ out[outf + 1] = (out[outf + 1] << 1) + ((in[inf + 4] << 31) >>> 31);
+ for (int i = 0; i < 4; i++)
+ out[outf + 1] = (out[outf + 1] << 7) + in[inf + 5 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode42(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 4; i++)
+ out[outf + 0] = (out[outf + 0] << 5) + in[inf + i];
+ out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1);
+ out[outf + 1] = (out[outf + 1] << 1) + ((in[inf + 4] << 31) >>> 31);
+ for (int i = 0; i < 3; i++)
+ out[outf + 1] = (out[outf + 1] << 9) + in[inf + 5 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode43(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 4; i++)
+ out[outf + 0] = (out[outf + 0] << 5) + in[inf + i];
+ out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1);
+ out[outf + 1] = (out[outf + 1] << 1) + ((in[inf + 4] << 31) >>> 31);
+ for (int i = 0; i < 2; i++)
+ out[outf + 1] = (out[outf + 1] << 14) + in[inf + 5 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode44(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 4; i++)
+ out[outf + 0] = (out[outf + 0] << 5) + in[inf + i];
+ out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1);
+ out[outf + 1] = (out[outf + 1] << 1) + ((in[inf + 4] << 31) >>> 31);
+ for (int i = 0; i < 1; i++)
+ out[outf + 1] = (out[outf + 1] << 28) + in[inf + 5 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode45(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 3; i++)
+ out[outf + 0] = (out[outf + 0] << 7) + in[inf + i];
+ out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4);
+ out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 3] << 28) >>> 28);
+ for (int i = 0; i < 28; i++)
+ out[outf + 1] = (out[outf + 1] << 1) + in[inf + 4 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode46(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 3; i++)
+ out[outf + 0] = (out[outf + 0] << 7) + in[inf + i];
+ out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4);
+ out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 3] << 28) >>> 28);
+ for (int i = 0; i < 14; i++)
+ out[outf + 1] = (out[outf + 1] << 2) + in[inf + 4 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode47(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 3; i++)
+ out[outf + 0] = (out[outf + 0] << 7) + in[inf + i];
+ out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4);
+ out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 3] << 28) >>> 28);
+ for (int i = 0; i < 9; i++)
+ out[outf + 1] = (out[outf + 1] << 3) + in[inf + 4 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode48(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 3; i++)
+ out[outf + 0] = (out[outf + 0] << 7) + in[inf + i];
+ out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4);
+ out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 3] << 28) >>> 28);
+ for (int i = 0; i < 7; i++)
+ out[outf + 1] = (out[outf + 1] << 4) + in[inf + 4 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode49(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 3; i++)
+ out[outf + 0] = (out[outf + 0] << 7) + in[inf + i];
+ out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4);
+ out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 3] << 28) >>> 28);
+ for (int i = 0; i < 5; i++)
+ out[outf + 1] = (out[outf + 1] << 5) + in[inf + 4 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode50(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 3; i++)
+ out[outf + 0] = (out[outf + 0] << 7) + in[inf + i];
+ out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4);
+ out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 3] << 28) >>> 28);
+ for (int i = 0; i < 4; i++)
+ out[outf + 1] = (out[outf + 1] << 7) + in[inf + 4 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode51(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 3; i++)
+ out[outf + 0] = (out[outf + 0] << 7) + in[inf + i];
+ out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4);
+ out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 3] << 28) >>> 28);
+ for (int i = 0; i < 3; i++)
+ out[outf + 1] = (out[outf + 1] << 9) + in[inf + 4 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode52(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 3; i++)
+ out[outf + 0] = (out[outf + 0] << 7) + in[inf + i];
+ out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4);
+ out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 3] << 28) >>> 28);
+ for (int i = 0; i < 2; i++)
+ out[outf + 1] = (out[outf + 1] << 14) + in[inf + 4 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode53(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 3; i++)
+ out[outf + 0] = (out[outf + 0] << 7) + in[inf + i];
+ out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4);
+ out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 3] << 28) >>> 28);
+ for (int i = 0; i < 1; i++)
+ out[outf + 1] = (out[outf + 1] << 28) + in[inf + 4 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode54(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 2; i++)
+ out[outf + 0] = (out[outf + 0] << 9) + in[inf + i];
+ out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3);
+ out[outf + 1] = (out[outf + 1] << 3) + ((in[inf + 2] << 29) >>> 29);
+ for (int i = 0; i < 28; i++)
+ out[outf + 1] = (out[outf + 1] << 1) + in[inf + 3 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode55(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 2; i++)
+ out[outf + 0] = (out[outf + 0] << 9) + in[inf + i];
+ out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3);
+ out[outf + 1] = (out[outf + 1] << 3) + ((in[inf + 2] << 29) >>> 29);
+ for (int i = 0; i < 14; i++)
+ out[outf + 1] = (out[outf + 1] << 2) + in[inf + 3 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode56(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 2; i++)
+ out[outf + 0] = (out[outf + 0] << 9) + in[inf + i];
+ out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3);
+ out[outf + 1] = (out[outf + 1] << 3) + ((in[inf + 2] << 29) >>> 29);
+ for (int i = 0; i < 9; i++)
+ out[outf + 1] = (out[outf + 1] << 3) + in[inf + 3 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode57(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 2; i++)
+ out[outf + 0] = (out[outf + 0] << 9) + in[inf + i];
+ out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3);
+ out[outf + 1] = (out[outf + 1] << 3) + ((in[inf + 2] << 29) >>> 29);
+ for (int i = 0; i < 7; i++)
+ out[outf + 1] = (out[outf + 1] << 4) + in[inf + 3 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode58(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 2; i++)
+ out[outf + 0] = (out[outf + 0] << 9) + in[inf + i];
+ out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3);
+ out[outf + 1] = (out[outf + 1] << 3) + ((in[inf + 2] << 29) >>> 29);
+ for (int i = 0; i < 5; i++)
+ out[outf + 1] = (out[outf + 1] << 5) + in[inf + 3 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode59(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 2; i++)
+ out[outf + 0] = (out[outf + 0] << 9) + in[inf + i];
+ out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3);
+ out[outf + 1] = (out[outf + 1] << 3) + ((in[inf + 2] << 29) >>> 29);
+ for (int i = 0; i < 4; i++)
+ out[outf + 1] = (out[outf + 1] << 7) + in[inf + 3 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode60(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 2; i++)
+ out[outf + 0] = (out[outf + 0] << 9) + in[inf + i];
+ out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3);
+ out[outf + 1] = (out[outf + 1] << 3) + ((in[inf + 2] << 29) >>> 29);
+ for (int i = 0; i < 3; i++)
+ out[outf + 1] = (out[outf + 1] << 9) + in[inf + 3 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode61(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 2; i++)
+ out[outf + 0] = (out[outf + 0] << 9) + in[inf + i];
+ out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3);
+ out[outf + 1] = (out[outf + 1] << 3) + ((in[inf + 2] << 29) >>> 29);
+ for (int i = 0; i < 2; i++)
+ out[outf + 1] = (out[outf + 1] << 14) + in[inf + 3 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode62(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ for (int i = 0; i < 2; i++)
+ out[outf + 0] = (out[outf + 0] << 9) + in[inf + i];
+ out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3);
+ out[outf + 1] = (out[outf + 1] << 3) + ((in[inf + 2] << 29) >>> 29);
+ for (int i = 0; i < 1; i++)
+ out[outf + 1] = (out[outf + 1] << 28) + in[inf + 3 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode63(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+
+ out[outf + 0] = (out[outf + 0] << 14) + in[inf];
+ out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4);
+ out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 1] << 28) >>> 28);
+ for (int i = 0; i < 28; i++)
+ out[outf + 1] = (out[outf + 1] << 1) + in[inf + 2 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode64(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ out[outf + 0] = (out[outf + 0] << 14) + in[inf];
+ out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4);
+ out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 1] << 28) >>> 28);
+ for (int i = 0; i < 14; i++)
+ out[outf + 1] = (out[outf + 1] << 2) + in[inf + 2 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode65(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ out[outf + 0] = (out[outf + 0] << 14) + in[inf];
+ out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4);
+ out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 1] << 28) >>> 28);
+ for (int i = 0; i < 9; i++)
+ out[outf + 1] = (out[outf + 1] << 3) + in[inf + 2 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode66(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ out[outf + 0] = (out[outf + 0] << 14) + in[inf];
+ out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4);
+ out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 1] << 28) >>> 28);
+ for (int i = 0; i < 7; i++)
+ out[outf + 1] = (out[outf + 1] << 4) + in[inf + 2 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode67(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ out[outf + 0] = (out[outf + 0] << 14) + in[inf];
+ out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4);
+ out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 1] << 28) >>> 28);
+ for (int i = 0; i < 5; i++)
+ out[outf + 1] = (out[outf + 1] << 5) + in[inf + 2 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode68(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ out[outf + 0] = (out[outf + 0] << 14) + in[inf];
+ out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4);
+ out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 1] << 28) >>> 28);
+ for (int i = 0; i < 4; i++)
+ out[outf + 1] = (out[outf + 1] << 7) + in[inf + 2 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode69(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ out[outf + 0] = (out[outf + 0] << 14) + in[inf];
+ out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4);
+ out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 1] << 28) >>> 28);
+ for (int i = 0; i < 3; i++)
+ out[outf + 1] = (out[outf + 1] << 9) + in[inf + 2 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode70(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ out[outf + 0] = (out[outf + 0] << 14) + in[inf];
+ out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4);
+ out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 1] << 28) >>> 28);
+ for (int i = 0; i < 2; i++)
+ out[outf + 1] = (out[outf + 1] << 14) + in[inf + 2 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode71(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ out[outf + 0] = (out[outf + 0] << 14) + in[inf];
+ out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4);
+ out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 1] << 28) >>> 28);
+ for (int i = 0; i < 1; i++)
+ out[outf + 1] = (out[outf + 1] << 28) + in[inf + 2 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode72(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+
+ out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4);
+ out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28);
+ for (int i = 0; i < 28; i++)
+ out[outf + 1] = (out[outf + 1] << 1) + in[inf + 1 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode73(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4);
+ out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28);
+ for (int i = 0; i < 14; i++)
+ out[outf + 1] = (out[outf + 1] << 2) + in[inf + 1 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode74(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4);
+ out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28);
+ for (int i = 0; i < 9; i++)
+ out[outf + 1] = (out[outf + 1] << 3) + in[inf + 1 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode75(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4);
+ out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28);
+ for (int i = 0; i < 7; i++)
+ out[outf + 1] = (out[outf + 1] << 4) + in[inf + 1 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode76(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4);
+ out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28);
+ for (int i = 0; i < 5; i++)
+ out[outf + 1] = (out[outf + 1] << 5) + in[inf + 1 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode77(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4);
+ out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28);
+ for (int i = 0; i < 4; i++)
+ out[outf + 1] = (out[outf + 1] << 7) + in[inf + 1 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode78(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4);
+ out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28);
+ for (int i = 0; i < 3; i++)
+ out[outf + 1] = (out[outf + 1] << 9) + in[inf + 1 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode79(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4);
+ out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28);
+ for (int i = 0; i < 2; i++)
+ out[outf + 1] = (out[outf + 1] << 14) + in[inf + 1 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ private void encode80(final int[] in, final int inf, final int code, final int[] out,
+ final int outf) {
+ out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4);
+ out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28);
+ for (int i = 0; i < 1; i++)
+ out[outf + 1] = (out[outf + 1] << 28) + in[inf + 1 + i];
+ out[outf + 0] = code << 24 | out[outf + 0];
+
+ }
+
+ @Override
+ public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) {
+ if (inlength == 0)
+ return;
+ final int outlength = in[inpos.get()];
+ inpos.increment();
+ headlessUncompress(in, inpos, inlength, out, outpos, outlength);
+ }
+
+
+
+ private void decode80(int val, int valn, int[] out, int currentPos) {
+ // number : 1, bitwidth : 28
+ out[currentPos++] = (val << 8) >>> 4 | (valn >>> 28);
+ // number : 1, bitwidth : 28
+ out[currentPos++] = (valn << 4) >>> 4;
+ }
+
+ private void decode79(int val, int valn, int[] out, int currentPos) {
+ // number : 1, bitwidth : 28
+ out[currentPos++] = (val << 8) >>> 4 | (valn >>> 28);
+ // number :2, bitwidth : 14
+ out[currentPos++] = (valn << 4) >>> 18;
+ out[currentPos++] = (valn << 18) >>> 18;
+ }
+
+ private void decode78(int val, int valn, int[] out, int currentPos) {
+ // number : 1, bitwidth : 28
+ out[currentPos++] = (val << 8) >>> 4 | (valn >>> 27);
+ // number : 3, bitwidth :9
+ out[currentPos++] = (valn << 5) >>> 23;
+ out[currentPos++] = (valn << 14) >>> 23;
+ out[currentPos++] = (valn << 23) >>> 23;
+ }
+
+ private void decode77(int val, int valn, int[] out, int currentPos) {
+ // number : 1, bitwidth : 28
+ out[currentPos++] = (val << 8) >>> 4 | (valn >>> 28);
+ // number : 4, bitwidth : 7
+ out[currentPos++] = (valn << 4) >>> 25;
+ out[currentPos++] = (valn << 11) >>> 25;
+ out[currentPos++] = (valn << 18) >>> 25;
+ out[currentPos++] = (valn << 25) >>> 25;
+ }
+
+ private void decode76(int val, int valn, int[] out, int currentPos) {
+ // number : 5, bitwidth : 5
+ out[currentPos++] = (val << 8) >>> 4 | (valn >>> 25);
+ // number : 14, bitwidth : 2
+ out[currentPos++] = (valn << 7) >>> 27;
+ out[currentPos++] = (valn << 12) >>> 27;
+ out[currentPos++] = (valn << 17) >>> 27;
+ out[currentPos++] = (valn << 22) >>> 27;
+ out[currentPos++] = (valn << 27) >>> 27;
+ }
+
+ private void decode75(int val, int valn, int[] out, int currentPos) {
+ // number : 1, bitwidth : 28
+ out[currentPos++] = (val << 8) >>> 4 | (valn >>> 28);
+ // number : 7, bitwidth : 4
+ out[currentPos++] = (valn << 4) >>> 28;
+ out[currentPos++] = (valn << 8) >>> 28;
+ out[currentPos++] = (valn << 12) >>> 28;
+ out[currentPos++] = (valn << 16) >>> 28;
+ out[currentPos++] = (valn << 20) >>> 28;
+ out[currentPos++] = (valn << 24) >>> 28;
+ out[currentPos++] = (valn << 28) >>> 28;
+ }
+
+ private void decode74(int val, int valn, int[] out, int currentPos) {
+ // number : 1, bitwidth : 28
+ out[currentPos++] = (val << 8) >>> 4 | (valn >>> 27);
+ // number : 9, bitwidth : 3
+ out[currentPos++] = (valn << 5) >>> 29;
+ out[currentPos++] = (valn << 8) >>> 29;
+ out[currentPos++] = (valn << 11) >>> 29;
+ out[currentPos++] = (valn << 14) >>> 29;
+ out[currentPos++] = (valn << 17) >>> 29;
+ out[currentPos++] = (valn << 20) >>> 29;
+ out[currentPos++] = (valn << 23) >>> 29;
+ out[currentPos++] = (valn << 26) >>> 29;
+ out[currentPos++] = (valn << 29) >>> 29;
+ }
+
+ private void decode73(int val, int valn, int[] out, int currentPos) {
+ // number : 1, bitwidth : 28
+ out[currentPos++] = (val << 8) >>> 4 | (valn >>> 28);
+ // number : 14, bitwidth : 2
+ out[currentPos++] = (valn << 4) >>> 30;
+ out[currentPos++] = (valn << 6) >>> 30;
+ out[currentPos++] = (valn << 8) >>> 30;
+ out[currentPos++] = (valn << 10) >>> 30;
+ out[currentPos++] = (valn << 12) >>> 30;
+ out[currentPos++] = (valn << 14) >>> 30;
+ out[currentPos++] = (valn << 16) >>> 30;
+ out[currentPos++] = (valn << 18) >>> 30;
+ out[currentPos++] = (valn << 20) >>> 30;
+ out[currentPos++] = (valn << 22) >>> 30; // 10
+ out[currentPos++] = (valn << 24) >>> 30;
+ out[currentPos++] = (valn << 26) >>> 30;
+ out[currentPos++] = (valn << 28) >>> 30;
+ out[currentPos++] = (valn << 30) >>> 30;
+ }
+
+ private void decode72(int val, int valn, int[] out, int currentPos) {
+ // number : 1, bitwidth : 28
+ out[currentPos++] = (val << 8) >>> 4 | (valn >>> 28);
+ // number : 28, bitwidth : 1
+ out[currentPos++] = (valn << 4) >>> 31;
+ out[currentPos++] = (valn << 5) >>> 31;
+ out[currentPos++] = (valn << 6) >>> 31;
+ out[currentPos++] = (valn << 7) >>> 31;
+ out[currentPos++] = (valn << 8) >>> 31;
+ out[currentPos++] = (valn << 9) >>> 31;
+ out[currentPos++] = (valn << 10) >>> 31;
+ out[currentPos++] = (valn << 11) >>> 31;
+ out[currentPos++] = (valn << 12) >>> 31;
+ out[currentPos++] = (valn << 13) >>> 31; // 10
+ out[currentPos++] = (valn << 14) >>> 31;
+ out[currentPos++] = (valn << 15) >>> 31;
+ out[currentPos++] = (valn << 16) >>> 31;
+ out[currentPos++] = (valn << 17) >>> 31;
+ out[currentPos++] = (valn << 18) >>> 31;
+ out[currentPos++] = (valn << 19) >>> 31;
+ out[currentPos++] = (valn << 20) >>> 31;
+ out[currentPos++] = (valn << 21) >>> 31;
+ out[currentPos++] = (valn << 22) >>> 31;
+ out[currentPos++] = (valn << 23) >>> 31; // 20
+ out[currentPos++] = (valn << 24) >>> 31;
+ out[currentPos++] = (valn << 25) >>> 31;
+ out[currentPos++] = (valn << 26) >>> 31;
+ out[currentPos++] = (valn << 27) >>> 31;
+ out[currentPos++] = (valn << 28) >>> 31;
+ out[currentPos++] = (valn << 29) >>> 31;
+ out[currentPos++] = (valn << 30) >>> 31;
+ out[currentPos++] = (valn << 31) >>> 31;
+ }
+
+ private void decode71(int val, int valn, int[] out, int currentPos) {
+ // number : 2, bitwidth : 14
+ out[currentPos++] = (val << 8) >>> 18;
+ out[currentPos++] = (val << 22) >>> 18 | (valn >>> 28);
+ // number : 1, bitwidth : 28
+ out[currentPos++] = (valn << 4) >>> 4;
+ }
+
+ private void decode70(int val, int valn, int[] out, int currentPos) {
+ // number : 2, bitwidth : 14
+ out[currentPos++] = (val << 8) >>> 18;
+ out[currentPos++] = (val << 22) >>> 18 | (valn >>> 28);
+ // number : 2, bitwidth : 14
+ out[currentPos++] = (valn << 4) >>> 18;
+ out[currentPos++] = (valn << 18) >>> 18;
+ }
+
+ private void decode69(int val, int valn, int[] out, int currentPos) {
+ // number : 2, bitwidth : 14
+ out[currentPos++] = (val << 8) >>> 18;
+ out[currentPos++] = (val << 22) >>> 18 | (valn >>> 27);
+ // number : 3, bitwidth : 9
+ out[currentPos++] = (valn << 5) >>> 23;
+ out[currentPos++] = (valn << 14) >>> 23;
+ out[currentPos++] = (valn << 23) >>> 23;
+ }
+
+ private void decode68(int val, int valn, int[] out, int currentPos) {
+ // number : 2, bitwidth : 14
+ out[currentPos++] = (val << 8) >>> 18;
+ out[currentPos++] = (val << 22) >>> 18 | (valn >>> 28);
+ // number : 4, bitwidth : 7
+ out[currentPos++] = (valn << 4) >>> 25;
+ out[currentPos++] = (valn << 11) >>> 25;
+ out[currentPos++] = (valn << 18) >>> 25;
+ out[currentPos++] = (valn << 25) >>> 25;
+ }
+
+ private void decode67(int val, int valn, int[] out, int currentPos) {
+ // number : 2, bitwidth : 14
+ out[currentPos++] = (val << 8) >>> 18;
+ out[currentPos++] = (val << 22) >>> 18 | (valn >>> 25);
+ // number : 5, bitwidth : 5
+ out[currentPos++] = (valn << 7) >>> 27;
+ out[currentPos++] = (valn << 12) >>> 27;
+ out[currentPos++] = (valn << 17) >>> 27;
+ out[currentPos++] = (valn << 22) >>> 27;
+ out[currentPos++] = (valn << 27) >>> 27;
+ }
+
+ private void decode66(int val, int valn, int[] out, int currentPos) {
+ // number : 2, bitwidth : 14
+ out[currentPos++] = (val << 8) >>> 18;
+ out[currentPos++] = (val << 22) >>> 18 | (valn >>> 28);
+ // number : 7, bitwidth : 4
+ out[currentPos++] = (valn << 4) >>> 28;
+ out[currentPos++] = (valn << 8) >>> 28;
+ out[currentPos++] = (valn << 12) >>> 28;
+ out[currentPos++] = (valn << 16) >>> 28;
+ out[currentPos++] = (valn << 20) >>> 28;
+ out[currentPos++] = (valn << 24) >>> 28;
+ out[currentPos++] = (valn << 28) >>> 28;
+ }
+
+ private void decode65(int val, int valn, int[] out, int currentPos) {
+ // number : 2, bitwidth : 14
+ out[currentPos++] = (val << 8) >>> 18;
+ out[currentPos++] = (val << 22) >>> 18 | (valn >>> 27);
+ // number : 9, bitwidth : 3
+ out[currentPos++] = (valn << 5) >>> 29;
+ out[currentPos++] = (valn << 8) >>> 29;
+ out[currentPos++] = (valn << 11) >>> 29;
+ out[currentPos++] = (valn << 14) >>> 29;
+ out[currentPos++] = (valn << 17) >>> 29;
+ out[currentPos++] = (valn << 20) >>> 29;
+ out[currentPos++] = (valn << 23) >>> 29;
+ out[currentPos++] = (valn << 26) >>> 29;
+ out[currentPos++] = (valn << 29) >>> 29;
+ }
+
+ private void decode64(int val, int valn, int[] out, int currentPos) {
+ // number : 2, bitwidth : 14
+ out[currentPos++] = (val << 8) >>> 18;
+ out[currentPos++] = (val << 22) >>> 18 | (valn >>> 28);
+ // number : 14, bitwidth : 2
+ out[currentPos++] = (valn << 4) >>> 30;
+ out[currentPos++] = (valn << 6) >>> 30;
+ out[currentPos++] = (valn << 8) >>> 30;
+ out[currentPos++] = (valn << 10) >>> 30;
+ out[currentPos++] = (valn << 12) >>> 30;
+ out[currentPos++] = (valn << 14) >>> 30;
+ out[currentPos++] = (valn << 16) >>> 30;
+ out[currentPos++] = (valn << 18) >>> 30;
+ out[currentPos++] = (valn << 20) >>> 30;
+ out[currentPos++] = (valn << 22) >>> 30; // 10
+ out[currentPos++] = (valn << 24) >>> 30;
+ out[currentPos++] = (valn << 26) >>> 30;
+ out[currentPos++] = (valn << 28) >>> 30;
+ out[currentPos++] = (valn << 30) >>> 30;
+ }
+
+ private void decode63(int val, int valn, int[] out, int currentPos) {
+ // number : 2, bitwidth : 14
+ out[currentPos++] = (val << 8) >>> 18;
+ out[currentPos++] = (val << 22) >>> 18 | (valn >>> 28);
+ // number : 28, bitwidth : 1
+ out[currentPos++] = (valn << 4) >>> 31;
+ out[currentPos++] = (valn << 5) >>> 31;
+ out[currentPos++] = (valn << 6) >>> 31;
+ out[currentPos++] = (valn << 7) >>> 31;
+ out[currentPos++] = (valn << 8) >>> 31;
+ out[currentPos++] = (valn << 9) >>> 31;
+ out[currentPos++] = (valn << 10) >>> 31;
+ out[currentPos++] = (valn << 11) >>> 31;
+ out[currentPos++] = (valn << 12) >>> 31;
+ out[currentPos++] = (valn << 13) >>> 31; // 10
+ out[currentPos++] = (valn << 14) >>> 31;
+ out[currentPos++] = (valn << 15) >>> 31;
+ out[currentPos++] = (valn << 16) >>> 31;
+ out[currentPos++] = (valn << 17) >>> 31;
+ out[currentPos++] = (valn << 18) >>> 31;
+ out[currentPos++] = (valn << 19) >>> 31;
+ out[currentPos++] = (valn << 20) >>> 31;
+ out[currentPos++] = (valn << 21) >>> 31;
+ out[currentPos++] = (valn << 22) >>> 31;
+ out[currentPos++] = (valn << 23) >>> 31; // 20
+ out[currentPos++] = (valn << 24) >>> 31;
+ out[currentPos++] = (valn << 25) >>> 31;
+ out[currentPos++] = (valn << 26) >>> 31;
+ out[currentPos++] = (valn << 27) >>> 31;
+ out[currentPos++] = (valn << 28) >>> 31;
+ out[currentPos++] = (valn << 29) >>> 31;
+ out[currentPos++] = (valn << 30) >>> 31;
+ out[currentPos++] = (valn << 31) >>> 31;
+ }
+
+ private void decode62(int val, int valn, int[] out, int currentPos) {
+ // number : 3, bitwidth : 9
+ out[currentPos++] = (val << 8) >>> 23;
+ out[currentPos++] = (val << 17) >>> 23;
+ out[currentPos++] = (val << 26) >>> 23 | (valn >>> 28);
+ // number : 1, bitwidth : 28
+ out[currentPos++] = (valn << 4) >>> 4;
+ }
+
+ private void decode61(int val, int valn, int[] out, int currentPos) {
+ // number : 3, bitwidth : 9
+ out[currentPos++] = (val << 8) >>> 23;
+ out[currentPos++] = (val << 17) >>> 23;
+ out[currentPos++] = (val << 26) >>> 23 | (valn >>> 28);
+ // number : 2, bitwidth : 14
+ out[currentPos++] = (valn << 4) >>> 18;
+ out[currentPos++] = (valn << 18) >>> 18;
+ }
+
+ private void decode60(int val, int valn, int[] out, int currentPos) {
+ // number : 3, bitwidth : 9
+ out[currentPos++] = (val << 8) >>> 23;
+ out[currentPos++] = (val << 17) >>> 23;
+ out[currentPos++] = (val << 26) >>> 23 | (valn >>> 27);
+ // number : 3, bitwidth : 9
+ out[currentPos++] = (valn << 5) >>> 23;
+ out[currentPos++] = (valn << 14) >>> 23;
+ out[currentPos++] = (valn << 23) >>> 23;
+ }
+
+ private void decode59(int val, int valn, int[] out, int currentPos) {
+ // number : 3, bitwidth : 9
+ out[currentPos++] = (val << 8) >>> 23;
+ out[currentPos++] = (val << 17) >>> 23;
+ out[currentPos++] = (val << 26) >>> 23 | (valn >>> 28);
+ // number : 4, bitwidth : 7
+ out[currentPos++] = (valn << 4) >>> 25;
+ out[currentPos++] = (valn << 11) >>> 25;
+ out[currentPos++] = (valn << 18) >>> 25;
+ out[currentPos++] = (valn << 25) >>> 25;
+ }
+
+ private void decode58(int val, int valn, int[] out, int currentPos) {
+ // number : 3, bitwidth : 9
+ out[currentPos++] = (val << 8) >>> 23;
+ out[currentPos++] = (val << 17) >>> 23;
+ out[currentPos++] = (val << 26) >>> 23 | (valn >>> 25);
+ // number : 5, bitwidth : 5
+ out[currentPos++] = (valn << 7) >>> 27;
+ out[currentPos++] = (valn << 12) >>> 27;
+ out[currentPos++] = (valn << 17) >>> 27;
+ out[currentPos++] = (valn << 22) >>> 27;
+ out[currentPos++] = (valn << 27) >>> 27;
+ }
+
+ private void decode57(int val, int valn, int[] out, int currentPos) {
+ // number : 3, bitwidth : 9
+ out[currentPos++] = (val << 8) >>> 23;
+ out[currentPos++] = (val << 17) >>> 23;
+ out[currentPos++] = (val << 26) >>> 23 | (valn >>> 28);
+ // number : 7, bitwidth : 4
+ out[currentPos++] = (valn << 4) >>> 28;
+ out[currentPos++] = (valn << 8) >>> 28;
+ out[currentPos++] = (valn << 12) >>> 28;
+ out[currentPos++] = (valn << 16) >>> 28;
+ out[currentPos++] = (valn << 20) >>> 28;
+ out[currentPos++] = (valn << 24) >>> 28;
+ out[currentPos++] = (valn << 28) >>> 28;
+ }
+
+ private void decode56(int val, int valn, int[] out, int currentPos) {
+ // number : 3, bitwidth : 9
+ out[currentPos++] = (val << 8) >>> 23;
+ out[currentPos++] = (val << 17) >>> 23;
+ out[currentPos++] = (val << 26) >>> 23 | (valn >>> 27);
+ // number : 9, bitwidth : 3
+ out[currentPos++] = (valn << 5) >>> 29;
+ out[currentPos++] = (valn << 8) >>> 29;
+ out[currentPos++] = (valn << 11) >>> 29;
+ out[currentPos++] = (valn << 14) >>> 29;
+ out[currentPos++] = (valn << 17) >>> 29;
+ out[currentPos++] = (valn << 20) >>> 29;
+ out[currentPos++] = (valn << 23) >>> 29;
+ out[currentPos++] = (valn << 26) >>> 29;
+ out[currentPos++] = (valn << 29) >>> 29;
+ }
+
+ private void decode55(int val, int valn, int[] out, int currentPos) {
+ // number : 3, bitwidth : 9
+ out[currentPos++] = (val << 8) >>> 23;
+ out[currentPos++] = (val << 17) >>> 23;
+ out[currentPos++] = (val << 26) >>> 23 | (valn >>> 28);
+ // number : 14, bitwidth : 2
+ out[currentPos++] = (valn << 4) >>> 30;
+ out[currentPos++] = (valn << 6) >>> 30;
+ out[currentPos++] = (valn << 8) >>> 30;
+ out[currentPos++] = (valn << 10) >>> 30;
+ out[currentPos++] = (valn << 12) >>> 30;
+ out[currentPos++] = (valn << 14) >>> 30;
+ out[currentPos++] = (valn << 16) >>> 30;
+ out[currentPos++] = (valn << 18) >>> 30;
+ out[currentPos++] = (valn << 20) >>> 30;
+ out[currentPos++] = (valn << 22) >>> 30; // 10
+ out[currentPos++] = (valn << 24) >>> 30;
+ out[currentPos++] = (valn << 26) >>> 30;
+ out[currentPos++] = (valn << 28) >>> 30;
+ out[currentPos++] = (valn << 30) >>> 30;
+ }
+
+ private void decode54(int val, int valn, int[] out, int currentPos) {
+ // number : 3, bitwidth : 9
+ out[currentPos++] = (val << 8) >>> 23;
+ out[currentPos++] = (val << 17) >>> 23;
+ out[currentPos++] = (val << 26) >>> 23 | (valn >>> 28);
+ // number : 28, bitwidth : 1
+ out[currentPos++] = (valn << 4) >>> 31;
+ out[currentPos++] = (valn << 5) >>> 31;
+ out[currentPos++] = (valn << 6) >>> 31;
+ out[currentPos++] = (valn << 7) >>> 31;
+ out[currentPos++] = (valn << 8) >>> 31;
+ out[currentPos++] = (valn << 9) >>> 31;
+ out[currentPos++] = (valn << 10) >>> 31;
+ out[currentPos++] = (valn << 11) >>> 31;
+ out[currentPos++] = (valn << 12) >>> 31;
+ out[currentPos++] = (valn << 13) >>> 31; // 10
+ out[currentPos++] = (valn << 14) >>> 31;
+ out[currentPos++] = (valn << 15) >>> 31;
+ out[currentPos++] = (valn << 16) >>> 31;
+ out[currentPos++] = (valn << 17) >>> 31;
+ out[currentPos++] = (valn << 18) >>> 31;
+ out[currentPos++] = (valn << 19) >>> 31;
+ out[currentPos++] = (valn << 20) >>> 31;
+ out[currentPos++] = (valn << 21) >>> 31;
+ out[currentPos++] = (valn << 22) >>> 31;
+ out[currentPos++] = (valn << 23) >>> 31; // 20
+ out[currentPos++] = (valn << 24) >>> 31;
+ out[currentPos++] = (valn << 25) >>> 31;
+ out[currentPos++] = (valn << 26) >>> 31;
+ out[currentPos++] = (valn << 27) >>> 31;
+ out[currentPos++] = (valn << 28) >>> 31;
+ out[currentPos++] = (valn << 29) >>> 31;
+ out[currentPos++] = (valn << 30) >>> 31;
+ out[currentPos++] = (valn << 31) >>> 31;
+ }
+
+ private void decode53(int val, int valn, int[] out, int currentPos) {
+ // number : 4, bitwidth : 7
+ out[currentPos++] = (val << 8) >>> 25;
+ out[currentPos++] = (val << 15) >>> 25;
+ out[currentPos++] = (val << 22) >>> 25;
+ out[currentPos++] = (val << 29) >>> 25 | (valn >>> 28);
+ // number : 1, bitwidth : 28
+ out[currentPos++] = (valn << 4) >>> 4;
+ }
+
+ private void decode52(int val, int valn, int[] out, int currentPos) {
+ // number : 4, bitwidth : 7
+ out[currentPos++] = (val << 8) >>> 25;
+ out[currentPos++] = (val << 15) >>> 25;
+ out[currentPos++] = (val << 22) >>> 25;
+ out[currentPos++] = (val << 29) >>> 25 | (valn >>> 28);
+ // number : 2, bitwidth : 14
+ out[currentPos++] = (valn << 4) >>> 18;
+ out[currentPos++] = (valn << 18) >>> 18;
+ }
+
+ private void decode51(int val, int valn, int[] out, int currentPos) {
+ // number : 4, bitwidth : 7
+ out[currentPos++] = (val << 8) >>> 25;
+ out[currentPos++] = (val << 15) >>> 25;
+ out[currentPos++] = (val << 22) >>> 25;
+ out[currentPos++] = (val << 29) >>> 25 | (valn >>> 27);
+ // number : 3, bitwidth : 9
+ out[currentPos++] = (valn << 5) >>> 23;
+ out[currentPos++] = (valn << 14) >>> 23;
+ out[currentPos++] = (valn << 23) >>> 23;
+ }
+
+ private void decode50(int val, int valn, int[] out, int currentPos) {
+ // number : 4, bitwidth : 7
+ out[currentPos++] = (val << 8) >>> 25;
+ out[currentPos++] = (val << 15) >>> 25;
+ out[currentPos++] = (val << 22) >>> 25;
+ out[currentPos++] = (val << 29) >>> 25 | (valn >>> 28);
+ // number : 4, bitwidth : 7
+ out[currentPos++] = (valn << 4) >>> 25;
+ out[currentPos++] = (valn << 11) >>> 25;
+ out[currentPos++] = (valn << 18) >>> 25;
+ out[currentPos++] = (valn << 25) >>> 25;
+ }
+
+ private void decode49(int val, int valn, int[] out, int currentPos) {
+ // number : 4, bitwidth : 7
+ out[currentPos++] = (val << 8) >>> 25;
+ out[currentPos++] = (val << 15) >>> 25;
+ out[currentPos++] = (val << 22) >>> 25;
+ out[currentPos++] = (val << 29) >>> 25 | (valn >>> 25);
+ // number : 5, bitwidth : 5
+ out[currentPos++] = (valn << 7) >>> 27;
+ out[currentPos++] = (valn << 12) >>> 27;
+ out[currentPos++] = (valn << 17) >>> 27;
+ out[currentPos++] = (valn << 22) >>> 27;
+ out[currentPos++] = (valn << 27) >>> 27;
+ }
+
+ private void decode48(int val, int valn, int[] out, int currentPos) {
+ // number : 4, bitwidth : 7
+ out[currentPos++] = (val << 8) >>> 25;
+ out[currentPos++] = (val << 15) >>> 25;
+ out[currentPos++] = (val << 22) >>> 25;
+ out[currentPos++] = (val << 29) >>> 25 | (valn >>> 28);
+ // number : 7, bitwidth : 4
+ out[currentPos++] = (valn << 4) >>> 28;
+ out[currentPos++] = (valn << 8) >>> 28;
+ out[currentPos++] = (valn << 12) >>> 28;
+ out[currentPos++] = (valn << 16) >>> 28;
+ out[currentPos++] = (valn << 20) >>> 28;
+ out[currentPos++] = (valn << 24) >>> 28;
+ out[currentPos++] = (valn << 28) >>> 28;
+ }
+
+ private void decode47(int val, int valn, int[] out, int currentPos) {
+ // number : 4, bitwidth : 7
+ out[currentPos++] = (val << 8) >>> 25;
+ out[currentPos++] = (val << 15) >>> 25;
+ out[currentPos++] = (val << 22) >>> 25;
+ out[currentPos++] = (val << 29) >>> 25 | (valn >>> 27);
+ // number : 9, bitwidth : 3
+ out[currentPos++] = (valn << 5) >>> 29;
+ out[currentPos++] = (valn << 8) >>> 29;
+ out[currentPos++] = (valn << 11) >>> 29;
+ out[currentPos++] = (valn << 14) >>> 29;
+ out[currentPos++] = (valn << 17) >>> 29;
+ out[currentPos++] = (valn << 20) >>> 29;
+ out[currentPos++] = (valn << 23) >>> 29;
+ out[currentPos++] = (valn << 26) >>> 29;
+ out[currentPos++] = (valn << 29) >>> 29;
+ }
+
+ private void decode46(int val, int valn, int[] out, int currentPos) {
+ // number : 4, bitwidth : 7
+ out[currentPos++] = (val << 8) >>> 25;
+ out[currentPos++] = (val << 15) >>> 25;
+ out[currentPos++] = (val << 22) >>> 25;
+ out[currentPos++] = (val << 29) >>> 25 | (valn >>> 28);
+ // number : 14, bitwidth : 2
+ out[currentPos++] = (valn << 4) >>> 30;
+ out[currentPos++] = (valn << 6) >>> 30;
+ out[currentPos++] = (valn << 8) >>> 30;
+ out[currentPos++] = (valn << 10) >>> 30;
+ out[currentPos++] = (valn << 12) >>> 30;
+ out[currentPos++] = (valn << 14) >>> 30;
+ out[currentPos++] = (valn << 16) >>> 30;
+ out[currentPos++] = (valn << 18) >>> 30;
+ out[currentPos++] = (valn << 20) >>> 30;
+ out[currentPos++] = (valn << 22) >>> 30; // 10
+ out[currentPos++] = (valn << 24) >>> 30;
+ out[currentPos++] = (valn << 26) >>> 30;
+ out[currentPos++] = (valn << 28) >>> 30;
+ out[currentPos++] = (valn << 30) >>> 30;
+ }
+
+ private void decode45(int val, int valn, int[] out, int currentPos) {
+ // number : 4, bitwidth : 7
+ out[currentPos++] = (val << 8) >>> 25;
+ out[currentPos++] = (val << 15) >>> 25;
+ out[currentPos++] = (val << 22) >>> 25;
+ out[currentPos++] = (val << 29) >>> 25 | (valn >>> 28);
+ // number : 28, bitwidth : 1
+ out[currentPos++] = (valn << 4) >>> 31;
+ out[currentPos++] = (valn << 5) >>> 31;
+ out[currentPos++] = (valn << 6) >>> 31;
+ out[currentPos++] = (valn << 7) >>> 31;
+ out[currentPos++] = (valn << 8) >>> 31;
+ out[currentPos++] = (valn << 9) >>> 31;
+ out[currentPos++] = (valn << 10) >>> 31;
+ out[currentPos++] = (valn << 11) >>> 31;
+ out[currentPos++] = (valn << 12) >>> 31;
+ out[currentPos++] = (valn << 13) >>> 31; // 10
+ out[currentPos++] = (valn << 14) >>> 31;
+ out[currentPos++] = (valn << 15) >>> 31;
+ out[currentPos++] = (valn << 16) >>> 31;
+ out[currentPos++] = (valn << 17) >>> 31;
+ out[currentPos++] = (valn << 18) >>> 31;
+ out[currentPos++] = (valn << 19) >>> 31;
+ out[currentPos++] = (valn << 20) >>> 31;
+ out[currentPos++] = (valn << 21) >>> 31;
+ out[currentPos++] = (valn << 22) >>> 31;
+ out[currentPos++] = (valn << 23) >>> 31; // 20
+ out[currentPos++] = (valn << 24) >>> 31;
+ out[currentPos++] = (valn << 25) >>> 31;
+ out[currentPos++] = (valn << 26) >>> 31;
+ out[currentPos++] = (valn << 27) >>> 31;
+ out[currentPos++] = (valn << 28) >>> 31;
+ out[currentPos++] = (valn << 29) >>> 31;
+ out[currentPos++] = (valn << 30) >>> 31;
+ out[currentPos++] = (valn << 31) >>> 31;
+ }
+
+ private void decode44(int val, int valn, int[] out, int currentPos) {
+ // number : 5, bitwidth : 5
+ out[currentPos++] = (val << 8) >>> 27;
+ out[currentPos++] = (val << 13) >>> 27;
+ out[currentPos++] = (val << 18) >>> 27;
+ out[currentPos++] = (val << 23) >>> 27;
+ out[currentPos++] = (val << 28) >>> 27 | (valn >>> 28);
+ // number : 1, bitwidth : 28
+ out[currentPos++] = (valn << 4) >>> 4;
+ }
+
+ private void decode43(int val, int valn, int[] out, int currentPos) {
+ // number : 5, bitwidth : 5
+ out[currentPos++] = (val << 8) >>> 27;
+ out[currentPos++] = (val << 13) >>> 27;
+ out[currentPos++] = (val << 18) >>> 27;
+ out[currentPos++] = (val << 23) >>> 27;
+ out[currentPos++] = (val << 28) >>> 27 | (valn >>> 28);
+ // number : 2, bitwidth : 14
+ out[currentPos++] = (valn << 4) >>> 18;
+ out[currentPos++] = (valn << 18) >>> 18;
+ }
+
+ private void decode42(int val, int valn, int[] out, int currentPos) {
+ // number : 5, bitwidth : 5
+ out[currentPos++] = (val << 8) >>> 27;
+ out[currentPos++] = (val << 13) >>> 27;
+ out[currentPos++] = (val << 18) >>> 27;
+ out[currentPos++] = (val << 23) >>> 27;
+ out[currentPos++] = (val << 28) >>> 27 | (valn >>> 27);
+ // number : 3, bitwidth : 9
+ out[currentPos++] = (valn << 5) >>> 23;
+ out[currentPos++] = (valn << 14) >>> 23;
+ out[currentPos++] = (valn << 23) >>> 23;
+ }
+
+ private void decode41(int val, int valn, int[] out, int currentPos) {
+ // number : 5, bitwidth : 5
+ out[currentPos++] = (val << 8) >>> 27;
+ out[currentPos++] = (val << 13) >>> 27;
+ out[currentPos++] = (val << 18) >>> 27;
+ out[currentPos++] = (val << 23) >>> 27;
+ out[currentPos++] = (val << 28) >>> 27 | (valn >>> 28);
+ // number : 4, bitwidth : 7
+ out[currentPos++] = (valn << 4) >>> 25;
+ out[currentPos++] = (valn << 11) >>> 25;
+ out[currentPos++] = (valn << 18) >>> 25;
+ out[currentPos++] = (valn << 25) >>> 25;
+ }
+
+ private void decode40(int val, int valn, int[] out, int currentPos) {
+ // number : 5, bitwidth : 5
+ out[currentPos++] = (val << 8) >>> 27;
+ out[currentPos++] = (val << 13) >>> 27;
+ out[currentPos++] = (val << 18) >>> 27;
+ out[currentPos++] = (val << 23) >>> 27;
+ out[currentPos++] = (val << 28) >>> 27 | (valn >>> 25);
+ // number : 5, bitwidth : 5
+ out[currentPos++] = (valn << 7) >>> 27;
+ out[currentPos++] = (valn << 12) >>> 27;
+ out[currentPos++] = (valn << 17) >>> 27;
+ out[currentPos++] = (valn << 22) >>> 27;
+ out[currentPos++] = (valn << 27) >>> 27;
+ }
+
+ private void decode39(int val, int valn, int[] out, int currentPos) {
+ // number : 5, bitwidth : 5
+ out[currentPos++] = (val << 8) >>> 27;
+ out[currentPos++] = (val << 13) >>> 27;
+ out[currentPos++] = (val << 18) >>> 27;
+ out[currentPos++] = (val << 23) >>> 27;
+ out[currentPos++] = (val << 28) >>> 27 | (valn >>> 28);
+ // number : 7, bitwidth : 4
+ out[currentPos++] = (valn << 4) >>> 28;
+ out[currentPos++] = (valn << 8) >>> 28;
+ out[currentPos++] = (valn << 12) >>> 28;
+ out[currentPos++] = (valn << 16) >>> 28;
+ out[currentPos++] = (valn << 20) >>> 28;
+ out[currentPos++] = (valn << 24) >>> 28;
+ out[currentPos++] = (valn << 28) >>> 28;
+ }
+
+ private void decode38(int val, int valn, int[] out, int currentPos) {
+ // number : 5, bitwidth : 5
+ out[currentPos++] = (val << 8) >>> 27;
+ out[currentPos++] = (val << 13) >>> 27;
+ out[currentPos++] = (val << 18) >>> 27;
+ out[currentPos++] = (val << 23) >>> 27;
+ out[currentPos++] = (val << 28) >>> 27 | (valn >>> 27);
+ // number : 9, bitwidth : 3
+ out[currentPos++] = (valn << 5) >>> 29;
+ out[currentPos++] = (valn << 8) >>> 29;
+ out[currentPos++] = (valn << 11) >>> 29;
+ out[currentPos++] = (valn << 14) >>> 29;
+ out[currentPos++] = (valn << 17) >>> 29;
+ out[currentPos++] = (valn << 20) >>> 29;
+ out[currentPos++] = (valn << 23) >>> 29;
+ out[currentPos++] = (valn << 26) >>> 29;
+ out[currentPos++] = (valn << 29) >>> 29;
+ }
+
+ private void decode37(int val, int valn, int[] out, int currentPos) {
+ // number : 5, bitwidth : 5
+ out[currentPos++] = (val << 8) >>> 27;
+ out[currentPos++] = (val << 13) >>> 27;
+ out[currentPos++] = (val << 18) >>> 27;
+ out[currentPos++] = (val << 23) >>> 27;
+ out[currentPos++] = (val << 28) >>> 27 | (valn >>> 28);
+ // number : 14, bitwidth : 2
+ out[currentPos++] = (valn << 4) >>> 30;
+ out[currentPos++] = (valn << 6) >>> 30;
+ out[currentPos++] = (valn << 8) >>> 30;
+ out[currentPos++] = (valn << 10) >>> 30;
+ out[currentPos++] = (valn << 12) >>> 30;
+ out[currentPos++] = (valn << 14) >>> 30;
+ out[currentPos++] = (valn << 16) >>> 30;
+ out[currentPos++] = (valn << 18) >>> 30;
+ out[currentPos++] = (valn << 20) >>> 30;
+ out[currentPos++] = (valn << 22) >>> 30; // 10
+ out[currentPos++] = (valn << 24) >>> 30;
+ out[currentPos++] = (valn << 26) >>> 30;
+ out[currentPos++] = (valn << 28) >>> 30;
+ out[currentPos++] = (valn << 30) >>> 30;
+ }
+
+ private void decode36(int val, int valn, int[] out, int currentPos) {
+ // number : 5, bitwidth : 5
+ out[currentPos++] = (val << 8) >>> 27;
+ out[currentPos++] = (val << 13) >>> 27;
+ out[currentPos++] = (val << 18) >>> 27;
+ out[currentPos++] = (val << 23) >>> 27;
+ out[currentPos++] = (val << 28) >>> 27 | (valn >>> 28);
+ // number : 28, bitwidth : 1
+ out[currentPos++] = (valn << 4) >>> 31;
+ out[currentPos++] = (valn << 5) >>> 31;
+ out[currentPos++] = (valn << 6) >>> 31;
+ out[currentPos++] = (valn << 7) >>> 31;
+ out[currentPos++] = (valn << 8) >>> 31;
+ out[currentPos++] = (valn << 9) >>> 31;
+ out[currentPos++] = (valn << 10) >>> 31;
+ out[currentPos++] = (valn << 11) >>> 31;
+ out[currentPos++] = (valn << 12) >>> 31;
+ out[currentPos++] = (valn << 13) >>> 31; // 10
+ out[currentPos++] = (valn << 14) >>> 31;
+ out[currentPos++] = (valn << 15) >>> 31;
+ out[currentPos++] = (valn << 16) >>> 31;
+ out[currentPos++] = (valn << 17) >>> 31;
+ out[currentPos++] = (valn << 18) >>> 31;
+ out[currentPos++] = (valn << 19) >>> 31;
+ out[currentPos++] = (valn << 20) >>> 31;
+ out[currentPos++] = (valn << 21) >>> 31;
+ out[currentPos++] = (valn << 22) >>> 31;
+ out[currentPos++] = (valn << 23) >>> 31; // 20
+ out[currentPos++] = (valn << 24) >>> 31;
+ out[currentPos++] = (valn << 25) >>> 31;
+ out[currentPos++] = (valn << 26) >>> 31;
+ out[currentPos++] = (valn << 27) >>> 31;
+ out[currentPos++] = (valn << 28) >>> 31;
+ out[currentPos++] = (valn << 29) >>> 31;
+ out[currentPos++] = (valn << 30) >>> 31;
+ out[currentPos++] = (valn << 31) >>> 31;
+ }
+
+ private void decode35(int val, int valn, int[] out, int currentPos) {
+ // number : 7, bitwidth : 4
+ out[currentPos++] = (val << 8) >>> 28;
+ out[currentPos++] = (val << 12) >>> 28;
+ out[currentPos++] = (val << 16) >>> 28;
+ out[currentPos++] = (val << 20) >>> 28;
+ out[currentPos++] = (val << 24) >>> 28;
+ out[currentPos++] = (val << 28) >>> 28;
+ out[currentPos++] = (valn << 0) >>> 28;
+ // number : 1, bitwidth : 28
+ out[currentPos++] = (valn << 4) >>> 4;
+ }
+
+ private void decode34(int val, int valn, int[] out, int currentPos) {
+ // number : 7, bitwidth : 4
+ out[currentPos++] = (val << 8) >>> 28;
+ out[currentPos++] = (val << 12) >>> 28;
+ out[currentPos++] = (val << 16) >>> 28;
+ out[currentPos++] = (val << 20) >>> 28;
+ out[currentPos++] = (val << 24) >>> 28;
+ out[currentPos++] = (val << 28) >>> 28;
+ out[currentPos++] = (valn << 0) >>> 28;
+ // number : 2, bitwidth : 14
+ out[currentPos++] = (valn << 4) >>> 18;
+ out[currentPos++] = (valn << 18) >>> 18;
+ }
+
+ private void decode33(int val, int valn, int[] out, int currentPos) {
+ // number : 7, bitwidth : 4
+ out[currentPos++] = (val << 8) >>> 28;
+ out[currentPos++] = (val << 12) >>> 28;
+ out[currentPos++] = (val << 16) >>> 28;
+ out[currentPos++] = (val << 20) >>> 28;
+ out[currentPos++] = (val << 24) >>> 28;
+ out[currentPos++] = (val << 28) >>> 28;
+ out[currentPos++] = (valn << 1) >>> 28;
+ // number : 3, bitwidth : 9
+ out[currentPos++] = (valn << 5) >>> 23;
+ out[currentPos++] = (valn << 14) >>> 23;
+ out[currentPos++] = (valn << 23) >>> 23;
+ }
+
+ private void decode32(int val, int valn, int[] out, int currentPos) {
+ // number : 7, bitwidth : 4
+ out[currentPos++] = (val << 8) >>> 28;
+ out[currentPos++] = (val << 12) >>> 28;
+ out[currentPos++] = (val << 16) >>> 28;
+ out[currentPos++] = (val << 20) >>> 28;
+ out[currentPos++] = (val << 24) >>> 28;
+ out[currentPos++] = (val << 28) >>> 28;
+ out[currentPos++] = (valn << 0) >>> 28;
+ // number : 4, bitwidth : 7
+ out[currentPos++] = (valn << 4) >>> 25;
+ out[currentPos++] = (valn << 11) >>> 25;
+ out[currentPos++] = (valn << 18) >>> 25;
+ out[currentPos++] = (valn << 25) >>> 25;
+ }
+
+ private void decode31(int val, int valn, int[] out, int currentPos) {
+ // number : 7, bitwidth : 4
+ out[currentPos++] = (val << 8) >>> 28;
+ out[currentPos++] = (val << 12) >>> 28;
+ out[currentPos++] = (val << 16) >>> 28;
+ out[currentPos++] = (val << 20) >>> 28;
+ out[currentPos++] = (val << 24) >>> 28;
+ out[currentPos++] = (val << 28) >>> 28;
+ out[currentPos++] = (valn << 3) >>> 28;
+ // number : 5, bitwidth : 5
+ out[currentPos++] = (valn << 7) >>> 27;
+ out[currentPos++] = (valn << 12) >>> 27;
+ out[currentPos++] = (valn << 17) >>> 27;
+ out[currentPos++] = (valn << 22) >>> 27;
+ out[currentPos++] = (valn << 27) >>> 27;
+ }
+
+ private void decode30(int val, int valn, int[] out, int currentPos) {
+ // number : 7, bitwidth : 4
+ out[currentPos++] = (val << 8) >>> 28;
+ out[currentPos++] = (val << 12) >>> 28;
+ out[currentPos++] = (val << 16) >>> 28;
+ out[currentPos++] = (val << 20) >>> 28;
+ out[currentPos++] = (val << 24) >>> 28;
+ out[currentPos++] = (val << 28) >>> 28;
+ out[currentPos++] = (valn << 0) >>> 28;
+ // number : 7, bitwidth : 4
+ out[currentPos++] = (valn << 4) >>> 28;
+ out[currentPos++] = (valn << 8) >>> 28;
+ out[currentPos++] = (valn << 12) >>> 28;
+ out[currentPos++] = (valn << 16) >>> 28;
+ out[currentPos++] = (valn << 20) >>> 28;
+ out[currentPos++] = (valn << 24) >>> 28;
+ out[currentPos++] = (valn << 28) >>> 28;
+ }
+
+ private void decode29(int val, int valn, int[] out, int currentPos) {
+ // number : 7, bitwidth : 4
+ out[currentPos++] = (val << 8) >>> 28;
+ out[currentPos++] = (val << 12) >>> 28;
+ out[currentPos++] = (val << 16) >>> 28;
+ out[currentPos++] = (val << 20) >>> 28;
+ out[currentPos++] = (val << 24) >>> 28;
+ out[currentPos++] = (val << 28) >>> 28;
+ out[currentPos++] = (valn << 1) >>> 28;
+ // number : 9, bitwidth : 3
+ out[currentPos++] = (valn << 5) >>> 29;
+ out[currentPos++] = (valn << 8) >>> 29;
+ out[currentPos++] = (valn << 11) >>> 29;
+ out[currentPos++] = (valn << 14) >>> 29;
+ out[currentPos++] = (valn << 17) >>> 29;
+ out[currentPos++] = (valn << 20) >>> 29;
+ out[currentPos++] = (valn << 23) >>> 29;
+ out[currentPos++] = (valn << 26) >>> 29;
+ out[currentPos++] = (valn << 29) >>> 29;
+ }
+
+ private void decode28(int val, int valn, int[] out, int currentPos) {
+ // number : 7, bitwidth : 4
+ out[currentPos++] = (val << 8) >>> 28;
+ out[currentPos++] = (val << 12) >>> 28;
+ out[currentPos++] = (val << 16) >>> 28;
+ out[currentPos++] = (val << 20) >>> 28;
+ out[currentPos++] = (val << 24) >>> 28;
+ out[currentPos++] = (val << 28) >>> 28;
+ out[currentPos++] = (valn << 0) >>> 28;
+ // number : 14, bitwidth : 2
+ out[currentPos++] = (valn << 4) >>> 30;
+ out[currentPos++] = (valn << 6) >>> 30;
+ out[currentPos++] = (valn << 8) >>> 30;
+ out[currentPos++] = (valn << 10) >>> 30;
+ out[currentPos++] = (valn << 12) >>> 30;
+ out[currentPos++] = (valn << 14) >>> 30;
+ out[currentPos++] = (valn << 16) >>> 30;
+ out[currentPos++] = (valn << 18) >>> 30;
+ out[currentPos++] = (valn << 20) >>> 30;
+ out[currentPos++] = (valn << 22) >>> 30; // 10
+ out[currentPos++] = (valn << 24) >>> 30;
+ out[currentPos++] = (valn << 26) >>> 30;
+ out[currentPos++] = (valn << 28) >>> 30;
+ out[currentPos++] = (valn << 30) >>> 30;
+ }
+
+ private void decode27(int val, int valn, int[] out, int currentPos) {
+ // number : 7, bitwidth : 4
+ out[currentPos++] = (val << 8) >>> 28;
+ out[currentPos++] = (val << 12) >>> 28;
+ out[currentPos++] = (val << 16) >>> 28;
+ out[currentPos++] = (val << 20) >>> 28;
+ out[currentPos++] = (val << 24) >>> 28;
+ out[currentPos++] = (val << 28) >>> 28;
+ out[currentPos++] = (valn << 0) >>> 28;
+ // number : 28, bitwidth : 1
+ out[currentPos++] = (valn << 4) >>> 31;
+ out[currentPos++] = (valn << 5) >>> 31;
+ out[currentPos++] = (valn << 6) >>> 31;
+ out[currentPos++] = (valn << 7) >>> 31;
+ out[currentPos++] = (valn << 8) >>> 31;
+ out[currentPos++] = (valn << 9) >>> 31;
+ out[currentPos++] = (valn << 10) >>> 31;
+ out[currentPos++] = (valn << 11) >>> 31;
+ out[currentPos++] = (valn << 12) >>> 31;
+ out[currentPos++] = (valn << 13) >>> 31; // 10
+ out[currentPos++] = (valn << 14) >>> 31;
+ out[currentPos++] = (valn << 15) >>> 31;
+ out[currentPos++] = (valn << 16) >>> 31;
+ out[currentPos++] = (valn << 17) >>> 31;
+ out[currentPos++] = (valn << 18) >>> 31;
+ out[currentPos++] = (valn << 19) >>> 31;
+ out[currentPos++] = (valn << 20) >>> 31;
+ out[currentPos++] = (valn << 21) >>> 31;
+ out[currentPos++] = (valn << 22) >>> 31;
+ out[currentPos++] = (valn << 23) >>> 31; // 20
+ out[currentPos++] = (valn << 24) >>> 31;
+ out[currentPos++] = (valn << 25) >>> 31;
+ out[currentPos++] = (valn << 26) >>> 31;
+ out[currentPos++] = (valn << 27) >>> 31;
+ out[currentPos++] = (valn << 28) >>> 31;
+ out[currentPos++] = (valn << 29) >>> 31;
+ out[currentPos++] = (valn << 30) >>> 31;
+ out[currentPos++] = (valn << 31) >>> 31;
+ }
+
+ private void decode26(int val, int valn, int[] out, int currentPos) {
+ // number : 9, bitwidth : 3
+ out[currentPos++] = (val << 8) >>> 29;
+ out[currentPos++] = (val << 11) >>> 29;
+ out[currentPos++] = (val << 14) >>> 29;
+ out[currentPos++] = (val << 17) >>> 29;
+ out[currentPos++] = (val << 20) >>> 29;
+ out[currentPos++] = (val << 23) >>> 29;
+ out[currentPos++] = (val << 26) >>> 29;
+ out[currentPos++] = (val << 29) >>> 29;
+ out[currentPos++] = (valn << 1) >>> 29;
+ // number : 1, bitwidth : 28
+ out[currentPos++] = (valn << 4) >>> 4;
+ }
+
+ private void decode25(int val, int valn, int[] out, int currentPos) {
+ // number : 9, bitwidth : 3
+ out[currentPos++] = (val << 8) >>> 29;
+ out[currentPos++] = (val << 11) >>> 29;
+ out[currentPos++] = (val << 14) >>> 29;
+ out[currentPos++] = (val << 17) >>> 29;
+ out[currentPos++] = (val << 20) >>> 29;
+ out[currentPos++] = (val << 23) >>> 29;
+ out[currentPos++] = (val << 26) >>> 29;
+ out[currentPos++] = (val << 29) >>> 29;
+ out[currentPos++] = (valn << 1) >>> 29;
+ // number : 2, bitwidth : 14
+ out[currentPos++] = (valn << 4) >>> 18;
+ out[currentPos++] = (valn << 18) >>> 18;
+ }
+
+ private void decode24(int val, int valn, int[] out, int currentPos) {
+ // number : 9, bitwidth : 3
+ out[currentPos++] = (val << 8) >>> 29;
+ out[currentPos++] = (val << 11) >>> 29;
+ out[currentPos++] = (val << 14) >>> 29;
+ out[currentPos++] = (val << 17) >>> 29;
+ out[currentPos++] = (val << 20) >>> 29;
+ out[currentPos++] = (val << 23) >>> 29;
+ out[currentPos++] = (val << 26) >>> 29;
+ out[currentPos++] = (val << 29) >>> 29;
+ out[currentPos++] = (valn << 2) >>> 29;
+ // number : 3, bitwidth : 9
+ out[currentPos++] = (valn << 5) >>> 23;
+ out[currentPos++] = (valn << 14) >>> 23;
+ out[currentPos++] = (valn << 23) >>> 23;
+ }
+
+ private void decode23(int val, int valn, int[] out, int currentPos) {
+ // number : 9, bitwidth : 3
+ out[currentPos++] = (val << 8) >>> 29;
+ out[currentPos++] = (val << 11) >>> 29;
+ out[currentPos++] = (val << 14) >>> 29;
+ out[currentPos++] = (val << 17) >>> 29;
+ out[currentPos++] = (val << 20) >>> 29;
+ out[currentPos++] = (val << 23) >>> 29;
+ out[currentPos++] = (val << 26) >>> 29;
+ out[currentPos++] = (val << 29) >>> 29;
+ out[currentPos++] = (valn << 1) >>> 29;
+ // number : 4, bitwidth : 7
+ out[currentPos++] = (valn << 4) >>> 25;
+ out[currentPos++] = (valn << 11) >>> 25;
+ out[currentPos++] = (valn << 18) >>> 25;
+ out[currentPos++] = (valn << 25) >>> 25;
+ }
+
+ private void decode22(int val, int valn, int[] out, int currentPos) {
+ // number : 9, bitwidth : 3
+ out[currentPos++] = (val << 8) >>> 29;
+ out[currentPos++] = (val << 11) >>> 29;
+ out[currentPos++] = (val << 14) >>> 29;
+ out[currentPos++] = (val << 17) >>> 29;
+ out[currentPos++] = (val << 20) >>> 29;
+ out[currentPos++] = (val << 23) >>> 29;
+ out[currentPos++] = (val << 26) >>> 29;
+ out[currentPos++] = (val << 29) >>> 29;
+ out[currentPos++] = (valn << 4) >>> 29;
+ // number : 5, bitwidth : 5
+ out[currentPos++] = (valn << 7) >>> 27;
+ out[currentPos++] = (valn << 12) >>> 27;
+ out[currentPos++] = (valn << 17) >>> 27;
+ out[currentPos++] = (valn << 22) >>> 27;
+ out[currentPos++] = (valn << 27) >>> 27;
+ }
+
+ private void decode21(int val, int valn, int[] out, int currentPos) {
+ // number : 9, bitwidth : 3
+ out[currentPos++] = (val << 8) >>> 29;
+ out[currentPos++] = (val << 11) >>> 29;
+ out[currentPos++] = (val << 14) >>> 29;
+ out[currentPos++] = (val << 17) >>> 29;
+ out[currentPos++] = (val << 20) >>> 29;
+ out[currentPos++] = (val << 23) >>> 29;
+ out[currentPos++] = (val << 26) >>> 29;
+ out[currentPos++] = (val << 29) >>> 29;
+ out[currentPos++] = (valn << 1) >>> 29;
+ // number : 7, bitwidth : 4
+ out[currentPos++] = (valn << 4) >>> 28;
+ out[currentPos++] = (valn << 8) >>> 28;
+ out[currentPos++] = (valn << 12) >>> 28;
+ out[currentPos++] = (valn << 16) >>> 28;
+ out[currentPos++] = (valn << 20) >>> 28;
+ out[currentPos++] = (valn << 24) >>> 28;
+ out[currentPos++] = (valn << 28) >>> 28;
+ }
+
+ private void decode20(int val, int valn, int[] out, int currentPos) {
+ // number : 9, bitwidth : 3
+ out[currentPos++] = (val << 8) >>> 29;
+ out[currentPos++] = (val << 11) >>> 29;
+ out[currentPos++] = (val << 14) >>> 29;
+ out[currentPos++] = (val << 17) >>> 29;
+ out[currentPos++] = (val << 20) >>> 29;
+ out[currentPos++] = (val << 23) >>> 29;
+ out[currentPos++] = (val << 26) >>> 29;
+ out[currentPos++] = (val << 29) >>> 29;
+ out[currentPos++] = (valn << 2) >>> 29;
+ // number : 9, bitwidth : 3
+ out[currentPos++] = (valn << 5) >>> 29;
+ out[currentPos++] = (valn << 8) >>> 29;
+ out[currentPos++] = (valn << 11) >>> 29;
+ out[currentPos++] = (valn << 14) >>> 29;
+ out[currentPos++] = (valn << 17) >>> 29;
+ out[currentPos++] = (valn << 20) >>> 29;
+ out[currentPos++] = (valn << 23) >>> 29;
+ out[currentPos++] = (valn << 26) >>> 29;
+ out[currentPos++] = (valn << 29) >>> 29;
+ }
+
+ private void decode19(int val, int valn, int[] out, int currentPos) {
+ // number : 9, bitwidth : 3
+ out[currentPos++] = (val << 8) >>> 29;
+ out[currentPos++] = (val << 11) >>> 29;
+ out[currentPos++] = (val << 14) >>> 29;
+ out[currentPos++] = (val << 17) >>> 29;
+ out[currentPos++] = (val << 20) >>> 29;
+ out[currentPos++] = (val << 23) >>> 29;
+ out[currentPos++] = (val << 26) >>> 29;
+ out[currentPos++] = (val << 29) >>> 29;
+ out[currentPos++] = (valn << 1) >>> 29;
+ // number : 14, bitwidth : 2
+ out[currentPos++] = (valn << 4) >>> 30;
+ out[currentPos++] = (valn << 6) >>> 30;
+ out[currentPos++] = (valn << 8) >>> 30;
+ out[currentPos++] = (valn << 10) >>> 30;
+ out[currentPos++] = (valn << 12) >>> 30;
+ out[currentPos++] = (valn << 14) >>> 30;
+ out[currentPos++] = (valn << 16) >>> 30;
+ out[currentPos++] = (valn << 18) >>> 30;
+ out[currentPos++] = (valn << 20) >>> 30;
+ out[currentPos++] = (valn << 22) >>> 30; // 10
+ out[currentPos++] = (valn << 24) >>> 30;
+ out[currentPos++] = (valn << 26) >>> 30;
+ out[currentPos++] = (valn << 28) >>> 30;
+ out[currentPos++] = (valn << 30) >>> 30;
+ }
+
+ private void decode18(int val, int valn, int[] out, int currentPos) {
+ // number : 9, bitwidth : 3
+ out[currentPos++] = (val << 8) >>> 29;
+ out[currentPos++] = (val << 11) >>> 29;
+ out[currentPos++] = (val << 14) >>> 29;
+ out[currentPos++] = (val << 17) >>> 29;
+ out[currentPos++] = (val << 20) >>> 29;
+ out[currentPos++] = (val << 23) >>> 29;
+ out[currentPos++] = (val << 26) >>> 29;
+ out[currentPos++] = (val << 29) >>> 29;
+ out[currentPos++] = (valn << 1) >>> 29;
+ // number : 28, bitwidth : 1
+ out[currentPos++] = (valn << 4) >>> 31;
+ out[currentPos++] = (valn << 5) >>> 31;
+ out[currentPos++] = (valn << 6) >>> 31;
+ out[currentPos++] = (valn << 7) >>> 31;
+ out[currentPos++] = (valn << 8) >>> 31;
+ out[currentPos++] = (valn << 9) >>> 31;
+ out[currentPos++] = (valn << 10) >>> 31;
+ out[currentPos++] = (valn << 11) >>> 31;
+ out[currentPos++] = (valn << 12) >>> 31;
+ out[currentPos++] = (valn << 13) >>> 31; // 10
+ out[currentPos++] = (valn << 14) >>> 31;
+ out[currentPos++] = (valn << 15) >>> 31;
+ out[currentPos++] = (valn << 16) >>> 31;
+ out[currentPos++] = (valn << 17) >>> 31;
+ out[currentPos++] = (valn << 18) >>> 31;
+ out[currentPos++] = (valn << 19) >>> 31;
+ out[currentPos++] = (valn << 20) >>> 31;
+ out[currentPos++] = (valn << 21) >>> 31;
+ out[currentPos++] = (valn << 22) >>> 31;
+ out[currentPos++] = (valn << 23) >>> 31; // 20
+ out[currentPos++] = (valn << 24) >>> 31;
+ out[currentPos++] = (valn << 25) >>> 31;
+ out[currentPos++] = (valn << 26) >>> 31;
+ out[currentPos++] = (valn << 27) >>> 31;
+ out[currentPos++] = (valn << 28) >>> 31;
+ out[currentPos++] = (valn << 29) >>> 31;
+ out[currentPos++] = (valn << 30) >>> 31;
+ out[currentPos++] = (valn << 31) >>> 31;
+ }
+
+ private void decode17(int val, int valn, int[] out, int currentPos) {
+ // number : 14, bitwidth : 2
+ out[currentPos++] = (val << 8) >>> 30;
+ out[currentPos++] = (val << 10) >>> 30;
+ out[currentPos++] = (val << 12) >>> 30;
+ out[currentPos++] = (val << 14) >>> 30;
+ out[currentPos++] = (val << 16) >>> 30;
+ out[currentPos++] = (val << 18) >>> 30;
+ out[currentPos++] = (val << 20) >>> 30;
+ out[currentPos++] = (val << 22) >>> 30; // 10
+ out[currentPos++] = (val << 24) >>> 30;
+ out[currentPos++] = (val << 26) >>> 30;
+ out[currentPos++] = (val << 28) >>> 30;
+ out[currentPos++] = (val << 30) >>> 30;
+ out[currentPos++] = (valn << 0) >>> 30;
+ out[currentPos++] = (valn << 2) >>> 30;
+ // number : 1, bitwidth : 28
+ out[currentPos++] = (valn << 4) >>> 4;
+ }
+
+ private void decode16(int val, int valn, int[] out, int currentPos) {
+ // number : 14, bitwidth : 2
+ out[currentPos++] = (val << 8) >>> 30;
+ out[currentPos++] = (val << 10) >>> 30;
+ out[currentPos++] = (val << 12) >>> 30;
+ out[currentPos++] = (val << 14) >>> 30;
+ out[currentPos++] = (val << 16) >>> 30;
+ out[currentPos++] = (val << 18) >>> 30;
+ out[currentPos++] = (val << 20) >>> 30;
+ out[currentPos++] = (val << 22) >>> 30; // 10
+ out[currentPos++] = (val << 24) >>> 30;
+ out[currentPos++] = (val << 26) >>> 30;
+ out[currentPos++] = (val << 28) >>> 30;
+ out[currentPos++] = (val << 30) >>> 30;
+ out[currentPos++] = (valn << 0) >>> 30;
+ out[currentPos++] = (valn << 2) >>> 30;
+ // number : 2, bitwidth : 14
+ out[currentPos++] = (valn << 4) >>> 18;
+ out[currentPos++] = (valn << 18) >>> 18;
+ }
+
+ private void decode15(int val, int valn, int[] out, int currentPos) {
+ // number : 14, bitwidth : 2
+ out[currentPos++] = (val << 8) >>> 30;
+ out[currentPos++] = (val << 10) >>> 30;
+ out[currentPos++] = (val << 12) >>> 30;
+ out[currentPos++] = (val << 14) >>> 30;
+ out[currentPos++] = (val << 16) >>> 30;
+ out[currentPos++] = (val << 18) >>> 30;
+ out[currentPos++] = (val << 20) >>> 30;
+ out[currentPos++] = (val << 22) >>> 30; // 10
+ out[currentPos++] = (val << 24) >>> 30;
+ out[currentPos++] = (val << 26) >>> 30;
+ out[currentPos++] = (val << 28) >>> 30;
+ out[currentPos++] = (val << 30) >>> 30;
+ out[currentPos++] = (valn << 1) >>> 30;
+ out[currentPos++] = (valn << 3) >>> 30;
+ // number : 3, bitwidth : 9
+ out[currentPos++] = (valn << 5) >>> 23;
+ out[currentPos++] = (valn << 14) >>> 23;
+ out[currentPos++] = (valn << 23) >>> 23;
+ }
+
+ private void decode14(int val, int valn, int[] out, int currentPos) {
+ // number : 14, bitwidth : 2
+ out[currentPos++] = (val << 8) >>> 30;
+ out[currentPos++] = (val << 10) >>> 30;
+ out[currentPos++] = (val << 12) >>> 30;
+ out[currentPos++] = (val << 14) >>> 30;
+ out[currentPos++] = (val << 16) >>> 30;
+ out[currentPos++] = (val << 18) >>> 30;
+ out[currentPos++] = (val << 20) >>> 30;
+ out[currentPos++] = (val << 22) >>> 30; // 10
+ out[currentPos++] = (val << 24) >>> 30;
+ out[currentPos++] = (val << 26) >>> 30;
+ out[currentPos++] = (val << 28) >>> 30;
+ out[currentPos++] = (val << 30) >>> 30;
+ out[currentPos++] = (valn << 0) >>> 30;
+ out[currentPos++] = (valn << 2) >>> 30;
+ // number : 4, bitwidth : 7
+ out[currentPos++] = (valn << 4) >>> 25;
+ out[currentPos++] = (valn << 11) >>> 25;
+ out[currentPos++] = (valn << 18) >>> 25;
+ out[currentPos++] = (valn << 25) >>> 25;
+ }
+
+ private void decode13(int val, int valn, int[] out, int currentPos) {
+ // number : 14, bitwidth : 2
+ out[currentPos++] = (val << 8) >>> 30;
+ out[currentPos++] = (val << 10) >>> 30;
+ out[currentPos++] = (val << 12) >>> 30;
+ out[currentPos++] = (val << 14) >>> 30;
+ out[currentPos++] = (val << 16) >>> 30;
+ out[currentPos++] = (val << 18) >>> 30;
+ out[currentPos++] = (val << 20) >>> 30;
+ out[currentPos++] = (val << 22) >>> 30; // 10
+ out[currentPos++] = (val << 24) >>> 30;
+ out[currentPos++] = (val << 26) >>> 30;
+ out[currentPos++] = (val << 28) >>> 30;
+ out[currentPos++] = (val << 30) >>> 30;
+ out[currentPos++] = (valn << 3) >>> 30;
+ out[currentPos++] = (valn << 5) >>> 30;
+ // number : 5, bitwidth : 5
+ out[currentPos++] = (valn << 7) >>> 27;
+ out[currentPos++] = (valn << 12) >>> 27;
+ out[currentPos++] = (valn << 17) >>> 27;
+ out[currentPos++] = (valn << 22) >>> 27;
+ out[currentPos++] = (valn << 27) >>> 27;
+
+ }
+
+ private void decode12(int val, int valn, int[] out, int currentPos) {
+ // number : 14, bitwidth : 2
+ out[currentPos++] = (val << 8) >>> 30;
+ out[currentPos++] = (val << 10) >>> 30;
+ out[currentPos++] = (val << 12) >>> 30;
+ out[currentPos++] = (val << 14) >>> 30;
+ out[currentPos++] = (val << 16) >>> 30;
+ out[currentPos++] = (val << 18) >>> 30;
+ out[currentPos++] = (val << 20) >>> 30;
+ out[currentPos++] = (val << 22) >>> 30; // 10
+ out[currentPos++] = (val << 24) >>> 30;
+ out[currentPos++] = (val << 26) >>> 30;
+ out[currentPos++] = (val << 28) >>> 30;
+ out[currentPos++] = (val << 30) >>> 30;
+ out[currentPos++] = (valn << 0) >>> 30;
+ out[currentPos++] = (valn << 2) >>> 30;
+ // number : 7, bitwidth : 4
+ out[currentPos++] = (valn << 4) >>> 28;
+ out[currentPos++] = (valn << 8) >>> 28;
+ out[currentPos++] = (valn << 12) >>> 28;
+ out[currentPos++] = (valn << 16) >>> 28;
+ out[currentPos++] = (valn << 20) >>> 28;
+ out[currentPos++] = (valn << 24) >>> 28;
+ out[currentPos++] = (valn << 28) >>> 28;
+
+ }
+
+ private void decode11(int val, int valn, int[] out, int currentPos) {
+ // number : 14, bitwidth : 2
+ out[currentPos++] = (val << 8) >>> 30;
+ out[currentPos++] = (val << 10) >>> 30;
+ out[currentPos++] = (val << 12) >>> 30;
+ out[currentPos++] = (val << 14) >>> 30;
+ out[currentPos++] = (val << 16) >>> 30;
+ out[currentPos++] = (val << 18) >>> 30;
+ out[currentPos++] = (val << 20) >>> 30;
+ out[currentPos++] = (val << 22) >>> 30; // 10
+ out[currentPos++] = (val << 24) >>> 30;
+ out[currentPos++] = (val << 26) >>> 30;
+ out[currentPos++] = (val << 28) >>> 30;
+ out[currentPos++] = (val << 30) >>> 30;
+ out[currentPos++] = (valn << 1) >>> 30;
+ out[currentPos++] = (valn << 3) >>> 30;
+ // number : 9, bitwidth : 3
+ out[currentPos++] = (valn << 5) >>> 29;
+ out[currentPos++] = (valn << 8) >>> 29;
+ out[currentPos++] = (valn << 11) >>> 29;
+ out[currentPos++] = (valn << 14) >>> 29;
+ out[currentPos++] = (valn << 17) >>> 29;
+ out[currentPos++] = (valn << 20) >>> 29;
+ out[currentPos++] = (valn << 23) >>> 29;
+ out[currentPos++] = (valn << 26) >>> 29;
+ out[currentPos++] = (valn << 29) >>> 29;
+
+ }
+
+ private void decode10(int val, int valn, int[] out, int currentPos) {
+ // number : 14, bitwidth : 2
+ out[currentPos++] = (val << 8) >>> 30;
+ out[currentPos++] = (val << 10) >>> 30;
+ out[currentPos++] = (val << 12) >>> 30;
+ out[currentPos++] = (val << 14) >>> 30;
+ out[currentPos++] = (val << 16) >>> 30;
+ out[currentPos++] = (val << 18) >>> 30;
+ out[currentPos++] = (val << 20) >>> 30;
+ out[currentPos++] = (val << 22) >>> 30; // 10
+ out[currentPos++] = (val << 24) >>> 30;
+ out[currentPos++] = (val << 26) >>> 30;
+ out[currentPos++] = (val << 28) >>> 30;
+ out[currentPos++] = (val << 30) >>> 30;
+ out[currentPos++] = (valn << 0) >>> 30;
+ out[currentPos++] = (valn << 2) >>> 30;
+ // number : 14, bitwidth : 2
+ out[currentPos++] = (valn << 4) >>> 30;
+ out[currentPos++] = (valn << 6) >>> 30;
+ out[currentPos++] = (valn << 8) >>> 30;
+ out[currentPos++] = (valn << 10) >>> 30;
+ out[currentPos++] = (valn << 12) >>> 30;
+ out[currentPos++] = (valn << 14) >>> 30;
+ out[currentPos++] = (valn << 16) >>> 30;
+ out[currentPos++] = (valn << 18) >>> 30;
+ out[currentPos++] = (valn << 20) >>> 30;
+ out[currentPos++] = (valn << 22) >>> 30; // 10
+ out[currentPos++] = (valn << 24) >>> 30;
+ out[currentPos++] = (valn << 26) >>> 30;
+ out[currentPos++] = (valn << 28) >>> 30;
+ out[currentPos++] = (valn << 30) >>> 30;
+ }
+
+ private void decode9(int val, int valn, int[] out, int currentPos) {
+ // number : 14, bitwidth : 2
+ out[currentPos++] = (val << 8) >>> 30;
+ out[currentPos++] = (val << 10) >>> 30;
+ out[currentPos++] = (val << 12) >>> 30;
+ out[currentPos++] = (val << 14) >>> 30;
+ out[currentPos++] = (val << 16) >>> 30;
+ out[currentPos++] = (val << 18) >>> 30;
+ out[currentPos++] = (val << 20) >>> 30;
+ out[currentPos++] = (val << 22) >>> 30; // 10
+ out[currentPos++] = (val << 24) >>> 30;
+ out[currentPos++] = (val << 26) >>> 30;
+ out[currentPos++] = (val << 28) >>> 30;
+ out[currentPos++] = (val << 30) >>> 30;
+ out[currentPos++] = (valn << 0) >>> 30;
+ out[currentPos++] = (valn << 2) >>> 30;
+ // number : 28, bitwidth : 1
+ out[currentPos++] = (valn << 4) >>> 31;
+ out[currentPos++] = (valn << 5) >>> 31;
+ out[currentPos++] = (valn << 6) >>> 31;
+ out[currentPos++] = (valn << 7) >>> 31;
+ out[currentPos++] = (valn << 8) >>> 31;
+ out[currentPos++] = (valn << 9) >>> 31;
+ out[currentPos++] = (valn << 10) >>> 31;
+ out[currentPos++] = (valn << 11) >>> 31;
+ out[currentPos++] = (valn << 12) >>> 31;
+ out[currentPos++] = (valn << 13) >>> 31; // 10
+ out[currentPos++] = (valn << 14) >>> 31;
+ out[currentPos++] = (valn << 15) >>> 31;
+ out[currentPos++] = (valn << 16) >>> 31;
+ out[currentPos++] = (valn << 17) >>> 31;
+ out[currentPos++] = (valn << 18) >>> 31;
+ out[currentPos++] = (valn << 19) >>> 31;
+ out[currentPos++] = (valn << 20) >>> 31;
+ out[currentPos++] = (valn << 21) >>> 31;
+ out[currentPos++] = (valn << 22) >>> 31;
+ out[currentPos++] = (valn << 23) >>> 31; // 20
+ out[currentPos++] = (valn << 24) >>> 31;
+ out[currentPos++] = (valn << 25) >>> 31;
+ out[currentPos++] = (valn << 26) >>> 31;
+ out[currentPos++] = (valn << 27) >>> 31;
+ out[currentPos++] = (valn << 28) >>> 31;
+ out[currentPos++] = (valn << 29) >>> 31;
+ out[currentPos++] = (valn << 30) >>> 31;
+ out[currentPos++] = (valn << 31) >>> 31;
+ }
+
+ private void decode8(int val, int valn, int[] out, int currentPos) {
+ // number : 28, bitwidth : 1
+ out[currentPos++] = (val << 8) >>> 31;
+ out[currentPos++] = (val << 9) >>> 31;
+ out[currentPos++] = (val << 10) >>> 31;
+ out[currentPos++] = (val << 11) >>> 31;
+ out[currentPos++] = (val << 12) >>> 31;
+ out[currentPos++] = (val << 13) >>> 31; // 10
+ out[currentPos++] = (val << 14) >>> 31;
+ out[currentPos++] = (val << 15) >>> 31;
+ out[currentPos++] = (val << 16) >>> 31;
+ out[currentPos++] = (val << 17) >>> 31;
+ out[currentPos++] = (val << 18) >>> 31;
+ out[currentPos++] = (val << 19) >>> 31;
+ out[currentPos++] = (val << 20) >>> 31;
+ out[currentPos++] = (val << 21) >>> 31;
+ out[currentPos++] = (val << 22) >>> 31;
+ out[currentPos++] = (val << 23) >>> 31; // 20
+ out[currentPos++] = (val << 24) >>> 31;
+ out[currentPos++] = (val << 25) >>> 31;
+ out[currentPos++] = (val << 26) >>> 31;
+ out[currentPos++] = (val << 27) >>> 31;
+ out[currentPos++] = (val << 28) >>> 31;
+ out[currentPos++] = (val << 29) >>> 31;
+ out[currentPos++] = (val << 30) >>> 31;
+ out[currentPos++] = (val << 31) >>> 31;
+ out[currentPos++] = valn >>> 31;
+ out[currentPos++] = (valn << 1) >>> 31;
+ out[currentPos++] = (valn << 2) >>> 31;
+ out[currentPos++] = (valn << 3) >>> 31;
+ // number : 1, bitwidth : 28
+ out[currentPos++] = (valn << 4) >>> 4;
+ }
+
+ private void decode7(int val, int valn, int[] out, int currentPos) {
+ // number : 28, bitwidth : 1
+ out[currentPos++] = (val << 8) >>> 31;
+ out[currentPos++] = (val << 9) >>> 31;
+ out[currentPos++] = (val << 10) >>> 31;
+ out[currentPos++] = (val << 11) >>> 31;
+ out[currentPos++] = (val << 12) >>> 31;
+ out[currentPos++] = (val << 13) >>> 31; // 10
+ out[currentPos++] = (val << 14) >>> 31;
+ out[currentPos++] = (val << 15) >>> 31;
+ out[currentPos++] = (val << 16) >>> 31;
+ out[currentPos++] = (val << 17) >>> 31;
+ out[currentPos++] = (val << 18) >>> 31;
+ out[currentPos++] = (val << 19) >>> 31;
+ out[currentPos++] = (val << 20) >>> 31;
+ out[currentPos++] = (val << 21) >>> 31;
+ out[currentPos++] = (val << 22) >>> 31;
+ out[currentPos++] = (val << 23) >>> 31; // 20
+ out[currentPos++] = (val << 24) >>> 31;
+ out[currentPos++] = (val << 25) >>> 31;
+ out[currentPos++] = (val << 26) >>> 31;
+ out[currentPos++] = (val << 27) >>> 31;
+ out[currentPos++] = (val << 28) >>> 31;
+ out[currentPos++] = (val << 29) >>> 31;
+ out[currentPos++] = (val << 30) >>> 31;
+ out[currentPos++] = (val << 31) >>> 31;
+ out[currentPos++] = valn >>> 31;
+ out[currentPos++] = (valn << 1) >>> 31;
+ out[currentPos++] = (valn << 2) >>> 31;
+ out[currentPos++] = (valn << 3) >>> 31;
+ // number : 2, bitwidth : 14
+ out[currentPos++] = (valn << 4) >>> 18;
+ out[currentPos++] = (valn << 18) >>> 18;
+ }
+
+ private void decode6(int val, int valn, int[] out, int currentPos) {
+ // number : 28, bitwidth : 1
+ out[currentPos++] = (val << 8) >>> 31;
+ out[currentPos++] = (val << 9) >>> 31;
+ out[currentPos++] = (val << 10) >>> 31;
+ out[currentPos++] = (val << 11) >>> 31;
+ out[currentPos++] = (val << 12) >>> 31;
+ out[currentPos++] = (val << 13) >>> 31; // 10
+ out[currentPos++] = (val << 14) >>> 31;
+ out[currentPos++] = (val << 15) >>> 31;
+ out[currentPos++] = (val << 16) >>> 31;
+ out[currentPos++] = (val << 17) >>> 31;
+ out[currentPos++] = (val << 18) >>> 31;
+ out[currentPos++] = (val << 19) >>> 31;
+ out[currentPos++] = (val << 20) >>> 31;
+ out[currentPos++] = (val << 21) >>> 31;
+ out[currentPos++] = (val << 22) >>> 31;
+ out[currentPos++] = (val << 23) >>> 31; // 20
+ out[currentPos++] = (val << 24) >>> 31;
+ out[currentPos++] = (val << 25) >>> 31;
+ out[currentPos++] = (val << 26) >>> 31;
+ out[currentPos++] = (val << 27) >>> 31;
+ out[currentPos++] = (val << 28) >>> 31;
+ out[currentPos++] = (val << 29) >>> 31;
+ out[currentPos++] = (val << 30) >>> 31;
+ out[currentPos++] = (val << 31) >>> 31;
+ out[currentPos++] = (valn << 1) >>> 31;
+ out[currentPos++] = (valn << 2) >>> 31;
+ out[currentPos++] = (valn << 3) >>> 31;
+ out[currentPos++] = (valn << 4) >>> 31;
+ // number : 3, bitwidth : 9
+ out[currentPos++] = (valn << 5) >>> 23;
+ out[currentPos++] = (valn << 14) >>> 23;
+ out[currentPos++] = (valn << 23) >>> 23;
+ }
+
+ private void decode5(int val, int valn, int[] out, int currentPos) {
+ // number : 28, bitwidth : 1
+ out[currentPos++] = (val << 8) >>> 31;
+ out[currentPos++] = (val << 9) >>> 31;
+ out[currentPos++] = (val << 10) >>> 31;
+ out[currentPos++] = (val << 11) >>> 31;
+ out[currentPos++] = (val << 12) >>> 31;
+ out[currentPos++] = (val << 13) >>> 31; // 10
+ out[currentPos++] = (val << 14) >>> 31;
+ out[currentPos++] = (val << 15) >>> 31;
+ out[currentPos++] = (val << 16) >>> 31;
+ out[currentPos++] = (val << 17) >>> 31;
+ out[currentPos++] = (val << 18) >>> 31;
+ out[currentPos++] = (val << 19) >>> 31;
+ out[currentPos++] = (val << 20) >>> 31;
+ out[currentPos++] = (val << 21) >>> 31;
+ out[currentPos++] = (val << 22) >>> 31;
+ out[currentPos++] = (val << 23) >>> 31; // 20
+ out[currentPos++] = (val << 24) >>> 31;
+ out[currentPos++] = (val << 25) >>> 31;
+ out[currentPos++] = (val << 26) >>> 31;
+ out[currentPos++] = (val << 27) >>> 31;
+ out[currentPos++] = (val << 28) >>> 31;
+ out[currentPos++] = (val << 29) >>> 31;
+ out[currentPos++] = (val << 30) >>> 31;
+ out[currentPos++] = (val << 31) >>> 31;
+ out[currentPos++] = valn >>> 31;
+ out[currentPos++] = (valn << 1) >>> 31;
+ out[currentPos++] = (valn << 2) >>> 31;
+ out[currentPos++] = (valn << 3) >>> 31;
+ // number : 4, bitwidth : 7
+ out[currentPos++] = (valn << 4) >>> 25;
+ out[currentPos++] = (valn << 11) >>> 25;
+ out[currentPos++] = (valn << 18) >>> 25;
+ out[currentPos++] = (valn << 25) >>> 25;
+ }
+
+ private void decode4(int val, int valn, int[] out, int currentPos) {
+ // number : 28, bitwidth : 1
+ out[currentPos++] = (val << 8) >>> 31;
+ out[currentPos++] = (val << 9) >>> 31;
+ out[currentPos++] = (val << 10) >>> 31;
+ out[currentPos++] = (val << 11) >>> 31;
+ out[currentPos++] = (val << 12) >>> 31;
+ out[currentPos++] = (val << 13) >>> 31; // 10
+ out[currentPos++] = (val << 14) >>> 31;
+ out[currentPos++] = (val << 15) >>> 31;
+ out[currentPos++] = (val << 16) >>> 31;
+ out[currentPos++] = (val << 17) >>> 31;
+ out[currentPos++] = (val << 18) >>> 31;
+ out[currentPos++] = (val << 19) >>> 31;
+ out[currentPos++] = (val << 20) >>> 31;
+ out[currentPos++] = (val << 21) >>> 31;
+ out[currentPos++] = (val << 22) >>> 31;
+ out[currentPos++] = (val << 23) >>> 31; // 20
+ out[currentPos++] = (val << 24) >>> 31;
+ out[currentPos++] = (val << 25) >>> 31;
+ out[currentPos++] = (val << 26) >>> 31;
+ out[currentPos++] = (val << 27) >>> 31;
+ out[currentPos++] = (val << 28) >>> 31;
+ out[currentPos++] = (val << 29) >>> 31;
+ out[currentPos++] = (val << 30) >>> 31;
+ out[currentPos++] = (val << 31) >>> 31;
+ out[currentPos++] = (valn << 3) >>> 31;// 头部3bit
+ out[currentPos++] = (valn << 4) >>> 31;
+ out[currentPos++] = (valn << 5) >>> 31;
+ out[currentPos++] = (valn << 6) >>> 31;
+ // number : 5, bitwidth : 5
+ out[currentPos++] = (valn << 7) >>> 27;
+ out[currentPos++] = (valn << 12) >>> 27;
+ out[currentPos++] = (valn << 17) >>> 27;
+ out[currentPos++] = (valn << 22) >>> 27;
+ out[currentPos++] = (valn << 27) >>> 27;
+ }
+
+ private void decode3(int val, int valn, int[] out, int currentPos) {
+ // number : 28, bitwidth : 1
+ out[currentPos++] = (val << 8) >>> 31;
+ out[currentPos++] = (val << 9) >>> 31;
+ out[currentPos++] = (val << 10) >>> 31;
+ out[currentPos++] = (val << 11) >>> 31;
+ out[currentPos++] = (val << 12) >>> 31;
+ out[currentPos++] = (val << 13) >>> 31; // 10
+ out[currentPos++] = (val << 14) >>> 31;
+ out[currentPos++] = (val << 15) >>> 31;
+ out[currentPos++] = (val << 16) >>> 31;
+ out[currentPos++] = (val << 17) >>> 31;
+ out[currentPos++] = (val << 18) >>> 31;
+ out[currentPos++] = (val << 19) >>> 31;
+ out[currentPos++] = (val << 20) >>> 31;
+ out[currentPos++] = (val << 21) >>> 31;
+ out[currentPos++] = (val << 22) >>> 31;
+ out[currentPos++] = (val << 23) >>> 31; // 20
+ out[currentPos++] = (val << 24) >>> 31;
+ out[currentPos++] = (val << 25) >>> 31;
+ out[currentPos++] = (val << 26) >>> 31;
+ out[currentPos++] = (val << 27) >>> 31;
+ out[currentPos++] = (val << 28) >>> 31;
+ out[currentPos++] = (val << 29) >>> 31;
+ out[currentPos++] = (val << 30) >>> 31;
+ out[currentPos++] = (val << 31) >>> 31;
+ out[currentPos++] = valn >>> 31;
+ out[currentPos++] = (valn << 1) >>> 31;
+ out[currentPos++] = (valn << 2) >>> 31;
+ out[currentPos++] = (valn << 3) >>> 31;
+ // number : 7, bitwidth : 4
+ out[currentPos++] = (valn << 4) >>> 28;
+ out[currentPos++] = (valn << 8) >>> 28;
+ out[currentPos++] = (valn << 12) >>> 28;
+ out[currentPos++] = (valn << 16) >>> 28;
+ out[currentPos++] = (valn << 20) >>> 28;
+ out[currentPos++] = (valn << 24) >>> 28;
+ out[currentPos++] = (valn << 28) >>> 28;
+ }
+
+ private void decode2(int val, int valn, int[] out, int currentPos) {
+ // number : 28, bitwidth : 1
+ out[currentPos++] = (val << 8) >>> 31;
+ out[currentPos++] = (val << 9) >>> 31;
+ out[currentPos++] = (val << 10) >>> 31;
+ out[currentPos++] = (val << 11) >>> 31;
+ out[currentPos++] = (val << 12) >>> 31;
+ out[currentPos++] = (val << 13) >>> 31; // 10
+ out[currentPos++] = (val << 14) >>> 31;
+ out[currentPos++] = (val << 15) >>> 31;
+ out[currentPos++] = (val << 16) >>> 31;
+ out[currentPos++] = (val << 17) >>> 31;
+ out[currentPos++] = (val << 18) >>> 31;
+ out[currentPos++] = (val << 19) >>> 31;
+ out[currentPos++] = (val << 20) >>> 31;
+ out[currentPos++] = (val << 21) >>> 31;
+ out[currentPos++] = (val << 22) >>> 31;
+ out[currentPos++] = (val << 23) >>> 31; // 20
+ out[currentPos++] = (val << 24) >>> 31;
+ out[currentPos++] = (val << 25) >>> 31;
+ out[currentPos++] = (val << 26) >>> 31;
+ out[currentPos++] = (val << 27) >>> 31;
+ out[currentPos++] = (val << 28) >>> 31;
+ out[currentPos++] = (val << 29) >>> 31;
+ out[currentPos++] = (val << 30) >>> 31;
+ out[currentPos++] = (val << 31) >>> 31;
+ out[currentPos++] = (valn << 1) >>> 31;// 头部1bit
+ out[currentPos++] = (valn << 2) >>> 31;
+ out[currentPos++] = (valn << 3) >>> 31;
+ out[currentPos++] = (valn << 4) >>> 31;
+ // number : 9, bitwidth : 3
+ out[currentPos++] = (valn << 5) >>> 29;
+ out[currentPos++] = (valn << 8) >>> 29;
+ out[currentPos++] = (valn << 11) >>> 29;
+ out[currentPos++] = (valn << 14) >>> 29;
+ out[currentPos++] = (valn << 17) >>> 29;
+ out[currentPos++] = (valn << 20) >>> 29;
+ out[currentPos++] = (valn << 23) >>> 29;
+ out[currentPos++] = (valn << 26) >>> 29;
+ out[currentPos++] = (valn << 29) >>> 29;
+ }
+
+ private void decode1(int val, int valn, int[] out, int currentPos) {
+ // number : 28, bitwidth : 1
+ out[currentPos++] = (val << 8) >>> 31;
+ out[currentPos++] = (val << 9) >>> 31;
+ out[currentPos++] = (val << 10) >>> 31;
+ out[currentPos++] = (val << 11) >>> 31;
+ out[currentPos++] = (val << 12) >>> 31;
+ out[currentPos++] = (val << 13) >>> 31; // 10
+ out[currentPos++] = (val << 14) >>> 31;
+ out[currentPos++] = (val << 15) >>> 31;
+ out[currentPos++] = (val << 16) >>> 31;
+ out[currentPos++] = (val << 17) >>> 31;
+ out[currentPos++] = (val << 18) >>> 31;
+ out[currentPos++] = (val << 19) >>> 31;
+ out[currentPos++] = (val << 20) >>> 31;
+ out[currentPos++] = (val << 21) >>> 31;
+ out[currentPos++] = (val << 22) >>> 31;
+ out[currentPos++] = (val << 23) >>> 31;// 20
+ out[currentPos++] = (val << 24) >>> 31;
+ out[currentPos++] = (val << 25) >>> 31;
+ out[currentPos++] = (val << 26) >>> 31;
+ out[currentPos++] = (val << 27) >>> 31;
+ out[currentPos++] = (val << 28) >>> 31;
+ out[currentPos++] = (val << 29) >>> 31;
+ out[currentPos++] = (val << 30) >>> 31;
+ out[currentPos++] = (val << 31) >>> 31;
+ out[currentPos++] = valn >>> 31;
+ out[currentPos++] = (valn << 1) >>> 31;
+ out[currentPos++] = (valn << 2) >>> 31;
+ out[currentPos++] = (valn << 3) >>> 31;
+ // number : 14, bitwidth : 2
+ out[currentPos++] = (valn << 4) >>> 30;
+ out[currentPos++] = (valn << 6) >>> 30;
+ out[currentPos++] = (valn << 8) >>> 30;
+ out[currentPos++] = (valn << 10) >>> 30;
+ out[currentPos++] = (valn << 12) >>> 30;
+ out[currentPos++] = (valn << 14) >>> 30;
+ out[currentPos++] = (valn << 16) >>> 30;
+ out[currentPos++] = (valn << 18) >>> 30;
+ out[currentPos++] = (valn << 20) >>> 30;
+ out[currentPos++] = (valn << 22) >>> 30; // 10
+ out[currentPos++] = (valn << 24) >>> 30;
+ out[currentPos++] = (valn << 26) >>> 30;
+ out[currentPos++] = (valn << 28) >>> 30;
+ out[currentPos++] = (valn << 30) >>> 30;
+ }
+
+ private void decode0(int val, int valn, int[] out, int currentPos) {
+ // number : 28, bitwidth : 1
+ out[currentPos++] = (val << 8) >>> 31;
+ out[currentPos++] = (val << 9) >>> 31;
+ out[currentPos++] = (val << 10) >>> 31;
+ out[currentPos++] = (val << 11) >>> 31;
+ out[currentPos++] = (val << 12) >>> 31;
+ out[currentPos++] = (val << 13) >>> 31; // 10
+ out[currentPos++] = (val << 14) >>> 31;
+ out[currentPos++] = (val << 15) >>> 31;
+ out[currentPos++] = (val << 16) >>> 31;
+ out[currentPos++] = (val << 17) >>> 31;
+ out[currentPos++] = (val << 18) >>> 31;
+ out[currentPos++] = (val << 19) >>> 31;
+ out[currentPos++] = (val << 20) >>> 31;
+ out[currentPos++] = (val << 21) >>> 31;
+ out[currentPos++] = (val << 22) >>> 31;
+ out[currentPos++] = (val << 23) >>> 31; // 20
+ out[currentPos++] = (val << 24) >>> 31;
+ out[currentPos++] = (val << 25) >>> 31;
+ out[currentPos++] = (val << 26) >>> 31;
+ out[currentPos++] = (val << 27) >>> 31;
+ out[currentPos++] = (val << 28) >>> 31;
+ out[currentPos++] = (val << 29) >>> 31;
+ out[currentPos++] = (val << 30) >>> 31;
+ out[currentPos++] = (val << 31) >>> 31;
+ out[currentPos++] = valn >>> 31;
+ out[currentPos++] = (valn << 1) >>> 31;
+ out[currentPos++] = (valn << 2) >>> 31;
+ out[currentPos++] = (valn << 3) >>> 31;
+ // number : 28, bitwidth : 1
+ out[currentPos++] = (valn << 4) >>> 31;
+ out[currentPos++] = (valn << 5) >>> 31;
+ out[currentPos++] = (valn << 6) >>> 31;
+ out[currentPos++] = (valn << 7) >>> 31;
+ out[currentPos++] = (valn << 8) >>> 31;
+ out[currentPos++] = (valn << 9) >>> 31;
+ out[currentPos++] = (valn << 10) >>> 31;
+ out[currentPos++] = (valn << 11) >>> 31;
+ out[currentPos++] = (valn << 12) >>> 31;
+ out[currentPos++] = (valn << 13) >>> 31; // 10
+ out[currentPos++] = (valn << 14) >>> 31;
+ out[currentPos++] = (valn << 15) >>> 31;
+ out[currentPos++] = (valn << 16) >>> 31;
+ out[currentPos++] = (valn << 17) >>> 31;
+ out[currentPos++] = (valn << 18) >>> 31;
+ out[currentPos++] = (valn << 19) >>> 31;
+ out[currentPos++] = (valn << 20) >>> 31;
+ out[currentPos++] = (valn << 21) >>> 31;
+ out[currentPos++] = (valn << 22) >>> 31;
+ out[currentPos++] = (valn << 23) >>> 31; // 20
+ out[currentPos++] = (valn << 24) >>> 31;
+ out[currentPos++] = (valn << 25) >>> 31;
+ out[currentPos++] = (valn << 26) >>> 31;
+ out[currentPos++] = (valn << 27) >>> 31;
+ out[currentPos++] = (valn << 28) >>> 31;
+ out[currentPos++] = (valn << 29) >>> 31;
+ out[currentPos++] = (valn << 30) >>> 31;
+ out[currentPos++] = (valn << 31) >>> 31;
+ }
+
+
+ private final static int bitLength[] = { 1, 2, 3, 4, 5, 7, 9, 14, 28 };
+
+ private final static int codeNum[] = { 28, 14, 9, 7, 5, 4, 3, 2, 1 };
+
+ @Override
+ public String toString() {
+ return this.getClass().getSimpleName();
+ }
+
+ @Override
+ public void headlessCompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) {
+ int tmpoutpos = outpos.get();
+ int currentPos = inpos.get();
+ int selector1 = 0;
+ int selector2 = 0;
+ final int finalin = currentPos + inlength;
+ while (currentPos < finalin - 28 * 2) {
+ int nextCurrentPos = currentPos;
+ mainloop1: for (selector1=0; selector1 <= 8; selector1++) {
+ int compressedNum = codeNum[selector1];
+ //if (finalin <= nextCurrentPos + compressedNum - 1)
+ // compressedNum = finalin - nextCurrentPos;
+ int b = bitLength[selector1];
+ int max = 1 << b;
+ int i = 0;
+ for (; i < compressedNum; i++) {
+ if (Util.smallerorequalthan(max, in[nextCurrentPos + i]))
+ continue mainloop1;
+ }
+ nextCurrentPos += compressedNum;
+ break;
+ }
+ mainloop2: for (selector2 = 0; selector2 <= 8; selector2++) {
+ int compressedNum = codeNum[selector2];
+ //if (finalin <= nextCurrentPos + compressedNum - 1)
+ // compressedNum = finalin - nextCurrentPos;
+ int b = bitLength[selector2];
+ int max = 1 << b;
+ int i = 0;
+ for (; i < compressedNum; i++) {
+ if (Util.smallerorequalthan(max, in[nextCurrentPos + i]))
+ continue mainloop2;
+ }
+ nextCurrentPos += compressedNum;
+ break;
+ }
+ int code = M[selector1][selector2];
+ out[tmpoutpos] = 0;
+ out[tmpoutpos + 1] = 0;
+ switch (code) {
+ case 0:
+ encode0(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 1:
+ encode1(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 2:
+ encode2(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 3:
+ encode3(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 4:
+ encode4(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 5:
+ encode5(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 6:
+ encode6(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 7:
+ encode7(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 8:
+ encode8(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 9:
+ encode9(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 10:
+ encode10(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 11:
+ encode11(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 12:
+ encode12(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 13:
+ encode13(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 14:
+ encode14(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 15:
+ encode15(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 16:
+ encode16(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 17:
+ encode17(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 18:
+ encode18(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 19:
+ encode19(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 20:
+ encode20(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 21:
+ encode21(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 22:
+ encode22(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 23:
+ encode23(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 24:
+ encode24(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 25:
+ encode25(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 26:
+ encode26(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 27:
+ encode27(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 28:
+ encode28(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 29:
+ encode29(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 30:
+ encode30(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 31:
+ encode31(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 32:
+ encode32(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 33:
+ encode33(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 34:
+ encode34(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 35:
+ encode35(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 36:
+ encode36(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 37:
+ encode37(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 38:
+ encode38(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 39:
+ encode39(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 40:
+ encode40(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 41:
+ encode41(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 42:
+ encode42(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 43:
+ encode43(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 44:
+ encode44(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 45:
+ encode45(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 46:
+ encode46(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 47:
+ encode47(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 48:
+ encode48(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 49:
+ encode49(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 50:
+ encode50(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 51:
+ encode51(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 52:
+ encode52(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 53:
+ encode53(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 54:
+ encode54(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 55:
+ encode55(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 56:
+ encode56(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 57:
+ encode57(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 58:
+ encode58(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 59:
+ encode59(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 60:
+ encode60(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 61:
+ encode61(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 62:
+ encode62(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 63:
+ encode63(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 64:
+ encode64(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 65:
+ encode65(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 66:
+ encode66(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 67:
+ encode67(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 68:
+ encode68(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 69:
+ encode69(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 70:
+ encode70(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 71:
+ encode71(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 72:
+ encode72(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 73:
+ encode73(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 74:
+ encode74(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 75:
+ encode75(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 76:
+ encode76(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 77:
+ encode77(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 78:
+ encode78(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 79:
+ encode79(in, currentPos, code, out, tmpoutpos);
+ break;
+ case 80:
+ encode80(in, currentPos, code, out, tmpoutpos);
+ break;
+ default:
+ throw new RuntimeException("unsupported code");
+ }// end switch
+ tmpoutpos += 2;
+ currentPos = nextCurrentPos;
+ }
+
+ outer: while (currentPos < finalin) {
+ mainloop: for (int selector = 0; selector < 8; selector++) {
+ int res = 0;
+ int compressedNum = codeNum[selector];
+ if (finalin <= currentPos + compressedNum - 1)
+ compressedNum = finalin - currentPos;
+ int b = bitLength[selector];
+ int max = 1 << b;
+ int i = 0;
+ for (; i < compressedNum; i++) {
+ if (Util.smallerorequalthan(max, in[currentPos + i]))
+ continue mainloop;
+ res = (res << b) + in[currentPos + i];
+ }
+ if (compressedNum != codeNum[selector]) {
+ res <<= (codeNum[selector] - compressedNum) * b;
+ }
+ res |= selector << 28;
+ out[tmpoutpos++] = res;
+
+ currentPos += compressedNum;
+ continue outer;
+ }
+ final int selector = 8;
+ out[tmpoutpos++] = in[currentPos++] | (selector << 28);
+ }
+ inpos.set(currentPos);
+ outpos.set(tmpoutpos);
+ }
+
+ @Override
+ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos, int num) {
+ int currentPos = outpos.get();
+ int tmpinpos = inpos.get();
+ final int finalout = currentPos + num;
+ while (currentPos < finalout - 2 * 28) {
+
+ int val = in[tmpinpos++];
+ int valn = in[tmpinpos++];
+ int header = val >>> 24;
+ switch (header) {
+ case 0: {
+ decode0(val, valn, out, currentPos);
+ currentPos+=56;
+ break;
+ }
+ case 1: {
+ decode1(val, valn, out, currentPos);
+ currentPos+=42;
+ break;
+ }
+ case 2: {
+ decode2(val, valn, out, currentPos);
+ currentPos+=37;
+ break;
+ }
+ case 3: {
+ decode3(val, valn, out, currentPos);
+ currentPos+=35;
+ break;
+ }
+ case 4: {
+ decode4(val, valn, out, currentPos);
+ currentPos+=33;
+ break;
+ }
+ case 5: {
+ decode5(val, valn, out, currentPos);
+ currentPos+=32;
+ break;
+ }
+ case 6: {
+ decode6(val, valn, out, currentPos);
+ currentPos+=31;
+ break;
+ }
+ case 7: {
+ decode7(val, valn, out, currentPos);
+ currentPos+=30;
+ break;
+ }
+ case 8: {
+ decode8(val, valn, out, currentPos);
+ currentPos+=29;
+ break;
+ }
+ case 9: {
+ decode9(val, valn, out, currentPos);
+ currentPos+=42;
+ break;
+ }
+ case 10: {
+ decode10(val, valn, out, currentPos);
+ currentPos+=28;
+ break;
+ }
+ case 11: {
+ decode11(val, valn, out, currentPos);
+ currentPos+=23;
+ break;
+ }
+ case 12: {
+ decode12(val, valn, out, currentPos);
+ currentPos+=21;
+ break;
+ }
+ case 13: {
+ decode13(val, valn, out, currentPos);
+ currentPos+=19;
+ break;
+ }
+ case 14: {
+ decode14(val, valn, out, currentPos);
+ currentPos+=18;
+ break;
+ }
+ case 15: {
+ decode15(val, valn, out, currentPos);
+ currentPos+=17;
+ break;
+ }
+ case 16: {
+ decode16(val, valn, out, currentPos);
+ currentPos+=16;
+ break;
+ }
+ case 17: {
+ decode17(val, valn, out, currentPos);
+ currentPos+=15;
+ break;
+ }
+ case 18: {
+ decode18(val, valn, out, currentPos);
+ currentPos+=37;
+ break;
+ }
+ case 19: {
+ decode19(val, valn, out, currentPos);
+ currentPos+=23;
+ break;
+ }
+ case 20: {
+ decode20(val, valn, out, currentPos);
+ currentPos+=18;
+ break;
+ }
+ case 21: {
+ decode21(val, valn, out, currentPos);
+ currentPos+=16;
+ break;
+ }
+ case 22: {
+ decode22(val, valn, out, currentPos);
+ currentPos+=14;
+ break;
+ }
+ case 23: {
+ decode23(val, valn, out, currentPos);
+ currentPos+=13;
+ break;
+ }
+ case 24: {
+ decode24(val, valn, out, currentPos);
+ currentPos+=12;
+ break;
+ }
+ case 25: {
+ decode25(val, valn, out, currentPos);
+ currentPos+=11;
+ break;
+ }
+ case 26: {
+ decode26(val, valn, out, currentPos);
+ currentPos+=10;
+ break;
+ }
+ case 27: {
+ decode27(val, valn, out, currentPos);
+ currentPos+=35;
+ break;
+ }
+ case 28: {
+ decode28(val, valn, out, currentPos);
+ currentPos+=21;
+ break;
+ }
+ case 29: {
+ decode29(val, valn, out, currentPos);
+ currentPos+=16;
+ break;
+ }
+
+ case 30: {
+ decode30(val, valn, out, currentPos);
+ currentPos+=14;
+ break;
+ }
+ case 31: {
+ decode31(val, valn, out, currentPos);
+ currentPos+=12;
+ break;
+ }
+ case 32: {
+ decode32(val, valn, out, currentPos);
+ currentPos+=11;
+ break;
+ }
+ case 33: {
+ decode33(val, valn, out, currentPos);
+ currentPos+=10;
+ break;
+ }
+ case 34: {
+ decode34(val, valn, out, currentPos);
+ currentPos+=9;
+ break;
+ }
+ case 35: {
+ decode35(val, valn, out, currentPos);
+ currentPos+=8;
+ break;
+ }
+ case 36: {
+ decode36(val, valn, out, currentPos);
+ currentPos+=33;
+ break;
+ }
+ case 37: {
+ decode37(val, valn, out, currentPos);
+ currentPos+=19;
+ break;
+ }
+ case 38: {
+ decode38(val, valn, out, currentPos);
+ currentPos+=14;
+ break;
+ }
+ case 39: {
+ decode39(val, valn, out, currentPos);
+ currentPos+=12;
+ break;
+ }
+ case 40: {
+ decode40(val, valn, out, currentPos);
+ currentPos+=10;
+ break;
+ }
+ case 41: {
+ decode41(val, valn, out, currentPos);
+ currentPos+=9;
+ break;
+ }
+ case 42: {
+ decode42(val, valn, out, currentPos);
+ currentPos+=8;
+ break;
+ }
+ case 43: {
+ decode43(val, valn, out, currentPos);
+ currentPos+=7;
+ break;
+ }
+ case 44: {
+ decode44(val, valn, out, currentPos);
+ currentPos+=6;
+ break;
+ }
+ case 45: {
+ decode45(val, valn, out, currentPos);
+ currentPos+=32;
+ break;
+ }
+ case 46: {
+ decode46(val, valn, out, currentPos);
+ currentPos+=18;
+ break;
+ }
+ case 47: {
+ decode47(val, valn, out, currentPos);
+ currentPos+=13;
+ break;
+ }
+ case 48: {
+ decode48(val, valn, out, currentPos);
+ currentPos+=11;
+ break;
+ }
+ case 49: {
+ decode49(val, valn, out, currentPos);
+ currentPos+=9;
+ break;
+ }
+ case 50: {
+ decode50(val, valn, out, currentPos);
+ currentPos+=8;
+ break;
+ }
+ case 51: {
+ decode51(val, valn, out, currentPos);
+ currentPos+=7;
+ break;
+ }
+ case 52: {
+ decode52(val, valn, out, currentPos);
+ currentPos+=6;
+ break;
+ }
+ case 53: {
+ decode53(val, valn, out, currentPos);
+ currentPos+=5;
+ break;
+ }
+ case 54: {
+ decode54(val, valn, out, currentPos);
+ currentPos+=31;
+ break;
+ }
+ case 55: {
+ decode55(val, valn, out, currentPos);
+ currentPos+=17;
+ break;
+ }
+ case 56: {
+ decode56(val, valn, out, currentPos);
+ currentPos+=12;
+ break;
+ }
+ case 57: {
+ decode57(val, valn, out, currentPos);
+ currentPos+=10;
+ break;
+ }
+ case 58: {
+ decode58(val, valn, out, currentPos);
+ currentPos+=8;
+ break;
+ }
+ case 59: {
+ decode59(val, valn, out, currentPos);
+ currentPos+=7;
+ break;
+ }
+ case 60: {
+ decode60(val, valn, out, currentPos);
+ currentPos+=6;
+ break;
+ }
+ case 61: {
+ decode61(val, valn, out, currentPos);
+ currentPos+=5;
+ break;
+ }
+ case 62: {
+ decode62(val, valn, out, currentPos);
+ currentPos+=4;
+ break;
+ }
+ case 63: {
+ decode63(val, valn, out, currentPos);
+ currentPos+=30;
+ break;
+ }
+ case 64: {
+ decode64(val, valn, out, currentPos);
+ currentPos+=16;
+ break;
+ }
+ case 65: {
+ decode65(val, valn, out, currentPos);
+ currentPos+=11;
+ break;
+ }
+ case 66: {
+ decode66(val, valn, out, currentPos);
+ currentPos+=9;
+ break;
+ }
+ case 67: {
+ decode67(val, valn, out, currentPos);
+ currentPos+=7;
+ break;
+ }
+ case 68: {
+ decode68(val, valn, out, currentPos);
+ currentPos+=6;
+ break;
+ }
+ case 69: {
+ decode69(val, valn, out, currentPos);
+ currentPos+=5;
+ break;
+ }
+ case 70: {
+ decode70(val, valn, out, currentPos);
+ currentPos+=4;
+ break;
+ }
+ case 71: {
+ decode71(val, valn, out, currentPos);
+ currentPos+=3;
+ break;
+ }
+ case 72: {
+ decode72(val, valn, out, currentPos);
+ currentPos+=29;
+ break;
+ }
+ case 73: {
+ decode73(val, valn, out, currentPos);
+ currentPos+=15;
+ break;
+ }
+ case 74: {
+ decode74(val, valn, out, currentPos);
+ currentPos+=10;
+ break;
+ }
+ case 75: {
+ decode75(val, valn, out, currentPos);
+ currentPos+=8;
+ break;
+ }
+ case 76: {
+ decode76(val, valn, out, currentPos);
+ currentPos+=6;
+ break;
+ }
+ case 77: {
+ decode77(val, valn, out, currentPos);
+ currentPos+=5;
+ break;
+ }
+ case 78: {
+ decode78(val, valn, out, currentPos);
+ currentPos+=4;
+ break;
+ }
+ case 79: {
+ decode79(val, valn, out, currentPos);
+ currentPos+=3;
+ break;
+ }
+ case 80: {
+ decode80(val, valn, out, currentPos);
+ currentPos+=2;
+ break;
+ }
+ default:
+ throw new RuntimeException("Wrong code: " + header);
+ }// end switch
+ } // end while
+
+ while (currentPos < finalout) {
+ int val = in[tmpinpos++];
+ int header = val >>> 28;
+ switch (header) {
+ case 0: { // number : 28, bitwidth : 1
+ final int howmany = finalout - currentPos < 28 ? finalout - currentPos : 28;
+ for (int k = 0; k < howmany; ++k) {
+ out[currentPos++] = (val << (k + 4)) >>> 31;
+ }
+ break;
+ }
+ case 1: { // number : 14, bitwidth : 2
+ final int howmany = finalout - currentPos < 14 ? finalout - currentPos : 14;
+ for (int k = 0; k < howmany; ++k) {
+ out[currentPos++] = (val << (2 * k + 4)) >>> 30;
+ }
+ break;
+ }
+ case 2: { // number : 9, bitwidth : 3
+ final int howmany = finalout - currentPos < 9 ? finalout - currentPos : 9;
+ for (int k = 0; k < howmany; ++k) {
+ out[currentPos++] = (val << (3 * k + 5)) >>> 29;
+ }
+ break;
+ }
+ case 3: { // number : 7, bitwidth : 4
+ final int howmany = finalout - currentPos < 7 ? finalout - currentPos : 7;
+ for (int k = 0; k < howmany; ++k) {
+ out[currentPos++] = (val << (4 * k + 4)) >>> 28;
+ }
+ break;
+ }
+ case 4: { // number : 5, bitwidth : 5
+ final int howmany = finalout - currentPos < 5 ? finalout - currentPos : 5;
+ for (int k = 0; k < howmany; ++k) {
+ out[currentPos++] = (val << (5 * k + 7)) >>> 27;
+ }
+ break;
+ }
+ case 5: { // number : 4, bitwidth : 7
+ final int howmany = finalout - currentPos < 4 ? finalout - currentPos : 4;
+ for (int k = 0; k < howmany; ++k) {
+ out[currentPos++] = (val << (7 * k + 4)) >>> 25;
+ }
+ break;
+ }
+ case 6: { // number : 3, bitwidth : 9
+ final int howmany = finalout - currentPos < 3 ? finalout - currentPos : 3;
+ for (int k = 0; k < howmany; ++k) {
+ out[currentPos++] = (val << (9 * k + 5)) >>> 23;
+ }
+ break;
+ }
+ case 7: { // number : 2, bitwidth : 14
+ final int howmany = finalout - currentPos < 2 ? finalout - currentPos : 2;
+ for (int k = 0; k < howmany; ++k) {
+ out[currentPos++] = (val << (14 * k + 4)) >>> 18;
+ }
+ break;
+ }
+ case 8: { // number : 1, bitwidth : 28
+ out[currentPos++] = (val << 4) >>> 4;
+ break;
+ }
+ default: {
+ throw new RuntimeException("shouldn't happen");
+ }
+ }
+ }
+
+ outpos.set(finalout);
+ inpos.set(tmpinpos);
+
+ }
+
+ @Override
+ public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) {
+ compressedPositions.add(inlength);
+ return inlength;
+ }
+}
diff --git a/src/main/java/me/lemire/integercompression/IntCompressor.java b/src/main/java/me/lemire/integercompression/IntCompressor.java
new file mode 100644
index 0000000..30f755c
--- /dev/null
+++ b/src/main/java/me/lemire/integercompression/IntCompressor.java
@@ -0,0 +1,65 @@
+package me.lemire.integercompression;
+
+import java.util.Arrays;
+
+/**
+ * This is a convenience class that wraps a codec to provide
+ * a "friendly" API.
+ *
+ */
+public class IntCompressor {
+
+
+ SkippableIntegerCODEC codec;
+ /**
+ * Constructor wrapping a codec.
+ *
+ * @param c the underlying codec
+ */
+ public IntCompressor(SkippableIntegerCODEC c) {
+ codec = c;
+ }
+
+ /**
+ * Constructor with default codec.
+ */
+ public IntCompressor() {
+ codec = new SkippableComposition(new BinaryPacking(),
+ new VariableByte());
+ }
+
+ /**
+ * Compress an array and returns the compressed result as a new array.
+ *
+ * @param input array to be compressed
+ * @return compressed array
+ */
+ public int[] compress(int[] input) {
+ int maxCompressedLength = codec.maxHeadlessCompressedLength(new IntWrapper(0), input.length);
+ int[] compressed = new int[maxCompressedLength + 1]; // +1 to store the length of the input
+ // Store at index=0 the length of the input, hence enabling .headlessCompress
+ compressed[0] = input.length;
+ IntWrapper outpos = new IntWrapper(1);
+ codec.headlessCompress(input, new IntWrapper(0), input.length, compressed, outpos);
+ compressed = Arrays.copyOf(compressed,outpos.intValue());
+ return compressed;
+ }
+
+ /**
+ * Uncompress an array and returns the uncompressed result as a new array.
+ *
+ * @param compressed compressed array
+ * @return uncompressed array
+ */
+ public int[] uncompress(int[] compressed) {
+ // Read at index=0 the length of the input, hence enabling .headlessUncompress
+ int[] decompressed = new int[compressed[0]];
+ IntWrapper inpos = new IntWrapper(1);
+ codec.headlessUncompress(compressed, inpos,
+ compressed.length - inpos.intValue(),
+ decompressed, new IntWrapper(0),
+ decompressed.length);
+ return decompressed;
+ }
+
+}
diff --git a/src/main/java/me/lemire/integercompression/IntWrapper.java b/src/main/java/me/lemire/integercompression/IntWrapper.java
index 02e4479..6bd8f0b 100644
--- a/src/main/java/me/lemire/integercompression/IntWrapper.java
+++ b/src/main/java/me/lemire/integercompression/IntWrapper.java
@@ -7,58 +7,85 @@
package me.lemire.integercompression;
/**
+ * Essentially a mutable wrapper around an integer.
+ *
* @author dwu
*/
public final class IntWrapper extends Number {
- private static final long serialVersionUID = 1L;
- private int value;
+ private static final long serialVersionUID = 1L;
+ private int value;
- public IntWrapper() {
- this(0);
- }
+ /**
+ * Constructor: value set to 0.
+ */
+ public IntWrapper() {
+ this(0);
+ }
- public IntWrapper(int v) {
- this.value = v;
- }
+ /**
+ * Construction: value set to provided argument.
+ *
+ * @param v
+ * value to wrap
+ */
+ public IntWrapper(final int v) {
+ this.value = v;
+ }
- public void add(int v) {
- this.value += v;
- }
+ /**
+ * add the provided value to the integer
+ * @param v value to add
+ */
+ public void add(int v) {
+ this.value += v;
+ }
- @Override
- public double doubleValue() {
- return this.value;
- }
+ @Override
+ public double doubleValue() {
+ return this.value;
+ }
- @Override
- public float floatValue() {
- return this.value;
- }
+ @Override
+ public float floatValue() {
+ return this.value;
+ }
- public int get() {
- return this.value;
- }
+ /**
+ * @return the integer value
+ */
+ public int get() {
+ return this.value;
+ }
- public void increment() {
- this.value++;
- }
+ /**
+ * add 1 to the integer value
+ */
+ public void increment() {
+ this.value++;
+ }
- @Override
- public int intValue() {
- return this.value;
- }
+ @Override
+ public int intValue() {
+ return this.value;
+ }
- @Override
- public long longValue() {
- return this.value;
- }
+ @Override
+ public long longValue() {
+ return this.value;
+ }
- public void set(int value) {
- this.value = value;
- }
+ /**
+ * Set the value to that of the specified integer.
+ *
+ * @param value
+ * specified integer value
+ */
+ public void set(final int value) {
+ this.value = value;
+ }
- @Override
- public String toString() {
- return Integer.toString(this.value);
- }
+ @Override
+ public String toString() {
+ return Integer.toString(this.value);
+ }
}
diff --git a/src/main/java/me/lemire/integercompression/IntegerCODEC.java b/src/main/java/me/lemire/integercompression/IntegerCODEC.java
index e3a419d..1dd9a4c 100644
--- a/src/main/java/me/lemire/integercompression/IntegerCODEC.java
+++ b/src/main/java/me/lemire/integercompression/IntegerCODEC.java
@@ -7,20 +7,54 @@
package me.lemire.integercompression;
-
+/**
+ * Interface describing a standard CODEC to compress integers.
+ *
+ * @author Daniel Lemire
+ *
+ */
public interface IntegerCODEC {
- /**
- * Both inpos and outpos are modified to represent how much
- * data was read and written to
- * if 12 ints (inlength = 12) are compressed to 3 ints, then
- * inpos will be incremented by 12 while outpos will be
- * incremented by 3
- * we use IntWrapper to pass the values by reference.
- */
- public void compress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos);
+ /**
+ * Compress data from an array to another array.
+ *
+ * Both inpos and outpos are modified to represent how much data was
+ * read and written to. If 12 ints (inlength = 12) are compressed to 3
+ * ints, then inpos will be incremented by 12 while outpos will be
+ * incremented by 3. We use IntWrapper to pass the values by reference.
+ *
+ * @param in
+ * input array
+ * @param inpos
+ * where to start reading in the array
+ * @param inlength
+ * how many integers to compress
+ * @param out
+ * output array
+ * @param outpos
+ * where to write in the output array
+ */
+ public void compress(int[] in, IntWrapper inpos, int inlength,
+ int[] out, IntWrapper outpos);
- // returns how many integers we decompressed
- public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos);
+ /**
+ * Uncompress data from an array to another array.
+ *
+ * Both inpos and outpos parameters are modified to indicate new
+ * positions after read/write.
+ *
+ * @param in
+ * array containing data in compressed form
+ * @param inpos
+ * where to start reading in the array
+ * @param inlength
+ * length of the compressed data (ignored by some
+ * schemes)
+ * @param out
+ * array where to write the compressed output
+ * @param outpos
+ * where to start writing the uncompressed output in out
+ */
+ public void uncompress(int[] in, IntWrapper inpos, int inlength,
+ int[] out, IntWrapper outpos);
-
}
diff --git a/src/main/java/me/lemire/integercompression/IntegratedBinaryPacking.java b/src/main/java/me/lemire/integercompression/IntegratedBinaryPacking.java
deleted file mode 100644
index 0efccea..0000000
--- a/src/main/java/me/lemire/integercompression/IntegratedBinaryPacking.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/**
- * This code is released under the
- * Apache License Version 2.0 http://www.apache.org/licenses/.
- *
- * (c) Daniel Lemire, http://lemire.me/en/
- */
-
-package me.lemire.integercompression;
-
-public class IntegratedBinaryPacking implements IntegratedIntegerCODEC {
-
- @Override
- public void compress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) {
- inlength = inlength / 128 * 128;
- out[outpos.get()] = inlength;
- outpos.increment();
- int tmpoutpos = outpos.get();
- int initoffset = 0;
- for (int s = inpos.get(); s < inpos.get() + inlength; s += 32 * 4) {
- final int mbits1 = Util.maxdiffbits(initoffset, in, s, 32);
- int initoffset2 = in[s+31];
- final int mbits2 = Util.maxdiffbits(initoffset2, in, s + 32, 32);
- int initoffset3 = in[s+32+31];
- final int mbits3 = Util.maxdiffbits(initoffset3, in, s + 2 * 32, 32);
- int initoffset4 = in[s+2*32+31];
- final int mbits4 = Util.maxdiffbits(initoffset4, in, s + 3 * 32, 32);
- out[tmpoutpos++] = (mbits1 << 24) | (mbits2 << 16) | (mbits3 << 8)
- | (mbits4);
- IntegratedBitPacking.integratedpack(initoffset, in, s, out, tmpoutpos, mbits1);
- tmpoutpos += mbits1;
- IntegratedBitPacking.integratedpack(initoffset2, in, s + 32, out, tmpoutpos, mbits2);
- tmpoutpos += mbits2;
- IntegratedBitPacking.integratedpack(initoffset3, in, s + 2 * 32, out, tmpoutpos, mbits3);
- tmpoutpos += mbits3;
- IntegratedBitPacking.integratedpack(initoffset4, in, s + 3 * 32, out, tmpoutpos, mbits4);
- tmpoutpos += mbits4;
- initoffset = in[s+3*32+31];
- }
- inpos.add(inlength);
- outpos.set(tmpoutpos);
- }
-
- @Override
- public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) {
- // Util.assertTrue(inpos.get()+inlength <= in.length);
- final int outlength = in[inpos.get()];
- inpos.increment();
- int tmpinpos = inpos.get();
- int initoffset = 0;
- for (int s = outpos.get(); s < outpos.get() + outlength; s += 32 * 4) {
- final int mbits1 = (in[tmpinpos] >>> 24);
- final int mbits2 = (in[tmpinpos] >>> 16) & 0xFF;
- final int mbits3 = (in[tmpinpos] >>> 8) & 0xFF;
- final int mbits4 = (in[tmpinpos]) & 0xFF;
- ++tmpinpos;
- IntegratedBitPacking.integratedunpack(initoffset, in, tmpinpos, out, s, mbits1);
- tmpinpos += mbits1;
- initoffset = out[s+31];
- IntegratedBitPacking.integratedunpack(initoffset,in, tmpinpos, out, s + 32, mbits2);
- tmpinpos += mbits2;
- initoffset = out[s+32+31];
- IntegratedBitPacking.integratedunpack(initoffset,in, tmpinpos, out, s + 2 * 32, mbits3);
- tmpinpos += mbits3;
- initoffset = out[s+2*32+31];
- IntegratedBitPacking.integratedunpack(initoffset,in, tmpinpos, out, s + 3 * 32, mbits4);
- tmpinpos += mbits4;
- initoffset = out[s+3*32+31];
- }
- outpos.add(outlength);
- inpos.set(tmpinpos);
- }
-
-
-}
diff --git a/src/main/java/me/lemire/integercompression/IntegratedBitPacking.java b/src/main/java/me/lemire/integercompression/IntegratedBitPacking.java
deleted file mode 100644
index 9ab36cb..0000000
--- a/src/main/java/me/lemire/integercompression/IntegratedBitPacking.java
+++ /dev/null
@@ -1,4927 +0,0 @@
-/**
- * This code is released under the
- * Apache License Version 2.0 http://www.apache.org/licenses/.
- *
- * (c) Daniel Lemire, http://lemire.me/en/
- */
-
-package me.lemire.integercompression;
-
-import java.util.Arrays;
-
-public final class IntegratedBitPacking {
-
-
-
-
-public static void integratedpack1(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = (in[ 0 + inpos] - initoffset )
- | ( ( in[ 1 + inpos] - in [1 + inpos - 1] ) << 1 )
- | ( ( in[ 2 + inpos] - in [2 + inpos - 1] ) << 2 )
- | ( ( in[ 3 + inpos] - in [3 + inpos - 1] ) << 3 )
- | ( ( in[ 4 + inpos] - in [4 + inpos - 1] ) << 4 )
- | ( ( in[ 5 + inpos] - in [5 + inpos - 1] ) << 5 )
- | ( ( in[ 6 + inpos] - in [6 + inpos - 1] ) << 6 )
- | ( ( in[ 7 + inpos] - in [7 + inpos - 1] ) << 7 )
- | ( ( in[ 8 + inpos] - in [8 + inpos - 1] ) << 8 )
- | ( ( in[ 9 + inpos] - in [9 + inpos - 1] ) << 9 )
- | ( ( in[ 10 + inpos] - in [10 + inpos - 1] ) << 10 )
- | ( ( in[ 11 + inpos] - in [11 + inpos - 1] ) << 11 )
- | ( ( in[ 12 + inpos] - in [12 + inpos - 1] ) << 12 )
- | ( ( in[ 13 + inpos] - in [13 + inpos - 1] ) << 13 )
- | ( ( in[ 14 + inpos] - in [14 + inpos - 1] ) << 14 )
- | ( ( in[ 15 + inpos] - in [15 + inpos - 1] ) << 15 )
- | ( ( in[ 16 + inpos] - in [16 + inpos - 1] ) << 16 )
- | ( ( in[ 17 + inpos] - in [17 + inpos - 1] ) << 17 )
- | ( ( in[ 18 + inpos] - in [18 + inpos - 1] ) << 18 )
- | ( ( in[ 19 + inpos] - in [19 + inpos - 1] ) << 19 )
- | ( ( in[ 20 + inpos] - in [20 + inpos - 1] ) << 20 )
- | ( ( in[ 21 + inpos] - in [21 + inpos - 1] ) << 21 )
- | ( ( in[ 22 + inpos] - in [22 + inpos - 1] ) << 22 )
- | ( ( in[ 23 + inpos] - in [23 + inpos - 1] ) << 23 )
- | ( ( in[ 24 + inpos] - in [24 + inpos - 1] ) << 24 )
- | ( ( in[ 25 + inpos] - in [25 + inpos - 1] ) << 25 )
- | ( ( in[ 26 + inpos] - in [26 + inpos - 1] ) << 26 )
- | ( ( in[ 27 + inpos] - in [27 + inpos - 1] ) << 27 )
- | ( ( in[ 28 + inpos] - in [28 + inpos - 1] ) << 28 )
- | ( ( in[ 29 + inpos] - in [29 + inpos - 1] ) << 29 )
- | ( ( in[ 30 + inpos] - in [30 + inpos - 1] ) << 30 )
- | ( ( in[ 31 + inpos] - in [31 + inpos - 1] ) << 31 )
- ;
-}
-
-
-
-
-public static void integratedpack2(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = (in[ 0 + inpos] - initoffset )
- | ( ( in[ 1 + inpos] - in [1 + inpos - 1] ) << 2 )
- | ( ( in[ 2 + inpos] - in [2 + inpos - 1] ) << 4 )
- | ( ( in[ 3 + inpos] - in [3 + inpos - 1] ) << 6 )
- | ( ( in[ 4 + inpos] - in [4 + inpos - 1] ) << 8 )
- | ( ( in[ 5 + inpos] - in [5 + inpos - 1] ) << 10 )
- | ( ( in[ 6 + inpos] - in [6 + inpos - 1] ) << 12 )
- | ( ( in[ 7 + inpos] - in [7 + inpos - 1] ) << 14 )
- | ( ( in[ 8 + inpos] - in [8 + inpos - 1] ) << 16 )
- | ( ( in[ 9 + inpos] - in [9 + inpos - 1] ) << 18 )
- | ( ( in[ 10 + inpos] - in [10 + inpos - 1] ) << 20 )
- | ( ( in[ 11 + inpos] - in [11 + inpos - 1] ) << 22 )
- | ( ( in[ 12 + inpos] - in [12 + inpos - 1] ) << 24 )
- | ( ( in[ 13 + inpos] - in [13 + inpos - 1] ) << 26 )
- | ( ( in[ 14 + inpos] - in [14 + inpos - 1] ) << 28 )
- | ( ( in[ 15 + inpos] - in [15 + inpos - 1] ) << 30 )
- ;
- out[ 1 + outpos] = (in[ 16 + inpos] - in [16 + inpos - 1] )
- | ( ( in[ 17 + inpos] - in [17 + inpos - 1] ) << 2 )
- | ( ( in[ 18 + inpos] - in [18 + inpos - 1] ) << 4 )
- | ( ( in[ 19 + inpos] - in [19 + inpos - 1] ) << 6 )
- | ( ( in[ 20 + inpos] - in [20 + inpos - 1] ) << 8 )
- | ( ( in[ 21 + inpos] - in [21 + inpos - 1] ) << 10 )
- | ( ( in[ 22 + inpos] - in [22 + inpos - 1] ) << 12 )
- | ( ( in[ 23 + inpos] - in [23 + inpos - 1] ) << 14 )
- | ( ( in[ 24 + inpos] - in [24 + inpos - 1] ) << 16 )
- | ( ( in[ 25 + inpos] - in [25 + inpos - 1] ) << 18 )
- | ( ( in[ 26 + inpos] - in [26 + inpos - 1] ) << 20 )
- | ( ( in[ 27 + inpos] - in [27 + inpos - 1] ) << 22 )
- | ( ( in[ 28 + inpos] - in [28 + inpos - 1] ) << 24 )
- | ( ( in[ 29 + inpos] - in [29 + inpos - 1] ) << 26 )
- | ( ( in[ 30 + inpos] - in [30 + inpos - 1] ) << 28 )
- | ( ( in[ 31 + inpos] - in [31 + inpos - 1] ) << 30 )
- ;
-}
-
-
-
-
-public static void integratedpack3(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = (in[ 0 + inpos] - initoffset )
- | ( ( in[ 1 + inpos] - in [1 + inpos - 1] ) << 3 )
- | ( ( in[ 2 + inpos] - in [2 + inpos - 1] ) << 6 )
- | ( ( in[ 3 + inpos] - in [3 + inpos - 1] ) << 9 )
- | ( ( in[ 4 + inpos] - in [4 + inpos - 1] ) << 12 )
- | ( ( in[ 5 + inpos] - in [5 + inpos - 1] ) << 15 )
- | ( ( in[ 6 + inpos] - in [6 + inpos - 1] ) << 18 )
- | ( ( in[ 7 + inpos] - in [7 + inpos - 1] ) << 21 )
- | ( ( in[ 8 + inpos] - in [8 + inpos - 1] ) << 24 )
- | ( ( in[ 9 + inpos] - in [9 + inpos - 1] ) << 27 )
- | ( ( in[ 10 + inpos] - in [10 + inpos - 1] ) << 30 )
- ;
- out[ 1 + outpos] = ( in[ 10 + inpos] - in [10 + inpos - 1] ) >>> ( 3 - 1 )
- | ( ( in[ 11 + inpos] - in [11 + inpos - 1] ) << 1 )
- | ( ( in[ 12 + inpos] - in [12 + inpos - 1] ) << 4 )
- | ( ( in[ 13 + inpos] - in [13 + inpos - 1] ) << 7 )
- | ( ( in[ 14 + inpos] - in [14 + inpos - 1] ) << 10 )
- | ( ( in[ 15 + inpos] - in [15 + inpos - 1] ) << 13 )
- | ( ( in[ 16 + inpos] - in [16 + inpos - 1] ) << 16 )
- | ( ( in[ 17 + inpos] - in [17 + inpos - 1] ) << 19 )
- | ( ( in[ 18 + inpos] - in [18 + inpos - 1] ) << 22 )
- | ( ( in[ 19 + inpos] - in [19 + inpos - 1] ) << 25 )
- | ( ( in[ 20 + inpos] - in [20 + inpos - 1] ) << 28 )
- | ( ( in[ 21 + inpos] - in [21 + inpos - 1] ) << 31 )
- ;
- out[ 2 + outpos] = ( in[ 21 + inpos] - in [21 + inpos - 1] ) >>> ( 3 - 2 )
- | ( ( in[ 22 + inpos] - in [22 + inpos - 1] ) << 2 )
- | ( ( in[ 23 + inpos] - in [23 + inpos - 1] ) << 5 )
- | ( ( in[ 24 + inpos] - in [24 + inpos - 1] ) << 8 )
- | ( ( in[ 25 + inpos] - in [25 + inpos - 1] ) << 11 )
- | ( ( in[ 26 + inpos] - in [26 + inpos - 1] ) << 14 )
- | ( ( in[ 27 + inpos] - in [27 + inpos - 1] ) << 17 )
- | ( ( in[ 28 + inpos] - in [28 + inpos - 1] ) << 20 )
- | ( ( in[ 29 + inpos] - in [29 + inpos - 1] ) << 23 )
- | ( ( in[ 30 + inpos] - in [30 + inpos - 1] ) << 26 )
- | ( ( in[ 31 + inpos] - in [31 + inpos - 1] ) << 29 )
- ;
-}
-
-
-
-
-public static void integratedpack4(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = (in[ 0 + inpos] - initoffset )
- | ( ( in[ 1 + inpos] - in [1 + inpos - 1] ) << 4 )
- | ( ( in[ 2 + inpos] - in [2 + inpos - 1] ) << 8 )
- | ( ( in[ 3 + inpos] - in [3 + inpos - 1] ) << 12 )
- | ( ( in[ 4 + inpos] - in [4 + inpos - 1] ) << 16 )
- | ( ( in[ 5 + inpos] - in [5 + inpos - 1] ) << 20 )
- | ( ( in[ 6 + inpos] - in [6 + inpos - 1] ) << 24 )
- | ( ( in[ 7 + inpos] - in [7 + inpos - 1] ) << 28 )
- ;
- out[ 1 + outpos] = (in[ 8 + inpos] - in [8 + inpos - 1] )
- | ( ( in[ 9 + inpos] - in [9 + inpos - 1] ) << 4 )
- | ( ( in[ 10 + inpos] - in [10 + inpos - 1] ) << 8 )
- | ( ( in[ 11 + inpos] - in [11 + inpos - 1] ) << 12 )
- | ( ( in[ 12 + inpos] - in [12 + inpos - 1] ) << 16 )
- | ( ( in[ 13 + inpos] - in [13 + inpos - 1] ) << 20 )
- | ( ( in[ 14 + inpos] - in [14 + inpos - 1] ) << 24 )
- | ( ( in[ 15 + inpos] - in [15 + inpos - 1] ) << 28 )
- ;
- out[ 2 + outpos] = (in[ 16 + inpos] - in [16 + inpos - 1] )
- | ( ( in[ 17 + inpos] - in [17 + inpos - 1] ) << 4 )
- | ( ( in[ 18 + inpos] - in [18 + inpos - 1] ) << 8 )
- | ( ( in[ 19 + inpos] - in [19 + inpos - 1] ) << 12 )
- | ( ( in[ 20 + inpos] - in [20 + inpos - 1] ) << 16 )
- | ( ( in[ 21 + inpos] - in [21 + inpos - 1] ) << 20 )
- | ( ( in[ 22 + inpos] - in [22 + inpos - 1] ) << 24 )
- | ( ( in[ 23 + inpos] - in [23 + inpos - 1] ) << 28 )
- ;
- out[ 3 + outpos] = (in[ 24 + inpos] - in [24 + inpos - 1] )
- | ( ( in[ 25 + inpos] - in [25 + inpos - 1] ) << 4 )
- | ( ( in[ 26 + inpos] - in [26 + inpos - 1] ) << 8 )
- | ( ( in[ 27 + inpos] - in [27 + inpos - 1] ) << 12 )
- | ( ( in[ 28 + inpos] - in [28 + inpos - 1] ) << 16 )
- | ( ( in[ 29 + inpos] - in [29 + inpos - 1] ) << 20 )
- | ( ( in[ 30 + inpos] - in [30 + inpos - 1] ) << 24 )
- | ( ( in[ 31 + inpos] - in [31 + inpos - 1] ) << 28 )
- ;
-}
-
-
-
-
-public static void integratedpack5(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = (in[ 0 + inpos] - initoffset )
- | ( ( in[ 1 + inpos] - in [1 + inpos - 1] ) << 5 )
- | ( ( in[ 2 + inpos] - in [2 + inpos - 1] ) << 10 )
- | ( ( in[ 3 + inpos] - in [3 + inpos - 1] ) << 15 )
- | ( ( in[ 4 + inpos] - in [4 + inpos - 1] ) << 20 )
- | ( ( in[ 5 + inpos] - in [5 + inpos - 1] ) << 25 )
- | ( ( in[ 6 + inpos] - in [6 + inpos - 1] ) << 30 )
- ;
- out[ 1 + outpos] = ( in[ 6 + inpos] - in [6 + inpos - 1] ) >>> ( 5 - 3 )
- | ( ( in[ 7 + inpos] - in [7 + inpos - 1] ) << 3 )
- | ( ( in[ 8 + inpos] - in [8 + inpos - 1] ) << 8 )
- | ( ( in[ 9 + inpos] - in [9 + inpos - 1] ) << 13 )
- | ( ( in[ 10 + inpos] - in [10 + inpos - 1] ) << 18 )
- | ( ( in[ 11 + inpos] - in [11 + inpos - 1] ) << 23 )
- | ( ( in[ 12 + inpos] - in [12 + inpos - 1] ) << 28 )
- ;
- out[ 2 + outpos] = ( in[ 12 + inpos] - in [12 + inpos - 1] ) >>> ( 5 - 1 )
- | ( ( in[ 13 + inpos] - in [13 + inpos - 1] ) << 1 )
- | ( ( in[ 14 + inpos] - in [14 + inpos - 1] ) << 6 )
- | ( ( in[ 15 + inpos] - in [15 + inpos - 1] ) << 11 )
- | ( ( in[ 16 + inpos] - in [16 + inpos - 1] ) << 16 )
- | ( ( in[ 17 + inpos] - in [17 + inpos - 1] ) << 21 )
- | ( ( in[ 18 + inpos] - in [18 + inpos - 1] ) << 26 )
- | ( ( in[ 19 + inpos] - in [19 + inpos - 1] ) << 31 )
- ;
- out[ 3 + outpos] = ( in[ 19 + inpos] - in [19 + inpos - 1] ) >>> ( 5 - 4 )
- | ( ( in[ 20 + inpos] - in [20 + inpos - 1] ) << 4 )
- | ( ( in[ 21 + inpos] - in [21 + inpos - 1] ) << 9 )
- | ( ( in[ 22 + inpos] - in [22 + inpos - 1] ) << 14 )
- | ( ( in[ 23 + inpos] - in [23 + inpos - 1] ) << 19 )
- | ( ( in[ 24 + inpos] - in [24 + inpos - 1] ) << 24 )
- | ( ( in[ 25 + inpos] - in [25 + inpos - 1] ) << 29 )
- ;
- out[ 4 + outpos] = ( in[ 25 + inpos] - in [25 + inpos - 1] ) >>> ( 5 - 2 )
- | ( ( in[ 26 + inpos] - in [26 + inpos - 1] ) << 2 )
- | ( ( in[ 27 + inpos] - in [27 + inpos - 1] ) << 7 )
- | ( ( in[ 28 + inpos] - in [28 + inpos - 1] ) << 12 )
- | ( ( in[ 29 + inpos] - in [29 + inpos - 1] ) << 17 )
- | ( ( in[ 30 + inpos] - in [30 + inpos - 1] ) << 22 )
- | ( ( in[ 31 + inpos] - in [31 + inpos - 1] ) << 27 )
- ;
-}
-
-
-
-
-public static void integratedpack6(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = (in[ 0 + inpos] - initoffset )
- | ( ( in[ 1 + inpos] - in [1 + inpos - 1] ) << 6 )
- | ( ( in[ 2 + inpos] - in [2 + inpos - 1] ) << 12 )
- | ( ( in[ 3 + inpos] - in [3 + inpos - 1] ) << 18 )
- | ( ( in[ 4 + inpos] - in [4 + inpos - 1] ) << 24 )
- | ( ( in[ 5 + inpos] - in [5 + inpos - 1] ) << 30 )
- ;
- out[ 1 + outpos] = ( in[ 5 + inpos] - in [5 + inpos - 1] ) >>> ( 6 - 4 )
- | ( ( in[ 6 + inpos] - in [6 + inpos - 1] ) << 4 )
- | ( ( in[ 7 + inpos] - in [7 + inpos - 1] ) << 10 )
- | ( ( in[ 8 + inpos] - in [8 + inpos - 1] ) << 16 )
- | ( ( in[ 9 + inpos] - in [9 + inpos - 1] ) << 22 )
- | ( ( in[ 10 + inpos] - in [10 + inpos - 1] ) << 28 )
- ;
- out[ 2 + outpos] = ( in[ 10 + inpos] - in [10 + inpos - 1] ) >>> ( 6 - 2 )
- | ( ( in[ 11 + inpos] - in [11 + inpos - 1] ) << 2 )
- | ( ( in[ 12 + inpos] - in [12 + inpos - 1] ) << 8 )
- | ( ( in[ 13 + inpos] - in [13 + inpos - 1] ) << 14 )
- | ( ( in[ 14 + inpos] - in [14 + inpos - 1] ) << 20 )
- | ( ( in[ 15 + inpos] - in [15 + inpos - 1] ) << 26 )
- ;
- out[ 3 + outpos] = (in[ 16 + inpos] - in [16 + inpos - 1] )
- | ( ( in[ 17 + inpos] - in [17 + inpos - 1] ) << 6 )
- | ( ( in[ 18 + inpos] - in [18 + inpos - 1] ) << 12 )
- | ( ( in[ 19 + inpos] - in [19 + inpos - 1] ) << 18 )
- | ( ( in[ 20 + inpos] - in [20 + inpos - 1] ) << 24 )
- | ( ( in[ 21 + inpos] - in [21 + inpos - 1] ) << 30 )
- ;
- out[ 4 + outpos] = ( in[ 21 + inpos] - in [21 + inpos - 1] ) >>> ( 6 - 4 )
- | ( ( in[ 22 + inpos] - in [22 + inpos - 1] ) << 4 )
- | ( ( in[ 23 + inpos] - in [23 + inpos - 1] ) << 10 )
- | ( ( in[ 24 + inpos] - in [24 + inpos - 1] ) << 16 )
- | ( ( in[ 25 + inpos] - in [25 + inpos - 1] ) << 22 )
- | ( ( in[ 26 + inpos] - in [26 + inpos - 1] ) << 28 )
- ;
- out[ 5 + outpos] = ( in[ 26 + inpos] - in [26 + inpos - 1] ) >>> ( 6 - 2 )
- | ( ( in[ 27 + inpos] - in [27 + inpos - 1] ) << 2 )
- | ( ( in[ 28 + inpos] - in [28 + inpos - 1] ) << 8 )
- | ( ( in[ 29 + inpos] - in [29 + inpos - 1] ) << 14 )
- | ( ( in[ 30 + inpos] - in [30 + inpos - 1] ) << 20 )
- | ( ( in[ 31 + inpos] - in [31 + inpos - 1] ) << 26 )
- ;
-}
-
-
-
-
-public static void integratedpack7(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = (in[ 0 + inpos] - initoffset )
- | ( ( in[ 1 + inpos] - in [1 + inpos - 1] ) << 7 )
- | ( ( in[ 2 + inpos] - in [2 + inpos - 1] ) << 14 )
- | ( ( in[ 3 + inpos] - in [3 + inpos - 1] ) << 21 )
- | ( ( in[ 4 + inpos] - in [4 + inpos - 1] ) << 28 )
- ;
- out[ 1 + outpos] = ( in[ 4 + inpos] - in [4 + inpos - 1] ) >>> ( 7 - 3 )
- | ( ( in[ 5 + inpos] - in [5 + inpos - 1] ) << 3 )
- | ( ( in[ 6 + inpos] - in [6 + inpos - 1] ) << 10 )
- | ( ( in[ 7 + inpos] - in [7 + inpos - 1] ) << 17 )
- | ( ( in[ 8 + inpos] - in [8 + inpos - 1] ) << 24 )
- | ( ( in[ 9 + inpos] - in [9 + inpos - 1] ) << 31 )
- ;
- out[ 2 + outpos] = ( in[ 9 + inpos] - in [9 + inpos - 1] ) >>> ( 7 - 6 )
- | ( ( in[ 10 + inpos] - in [10 + inpos - 1] ) << 6 )
- | ( ( in[ 11 + inpos] - in [11 + inpos - 1] ) << 13 )
- | ( ( in[ 12 + inpos] - in [12 + inpos - 1] ) << 20 )
- | ( ( in[ 13 + inpos] - in [13 + inpos - 1] ) << 27 )
- ;
- out[ 3 + outpos] = ( in[ 13 + inpos] - in [13 + inpos - 1] ) >>> ( 7 - 2 )
- | ( ( in[ 14 + inpos] - in [14 + inpos - 1] ) << 2 )
- | ( ( in[ 15 + inpos] - in [15 + inpos - 1] ) << 9 )
- | ( ( in[ 16 + inpos] - in [16 + inpos - 1] ) << 16 )
- | ( ( in[ 17 + inpos] - in [17 + inpos - 1] ) << 23 )
- | ( ( in[ 18 + inpos] - in [18 + inpos - 1] ) << 30 )
- ;
- out[ 4 + outpos] = ( in[ 18 + inpos] - in [18 + inpos - 1] ) >>> ( 7 - 5 )
- | ( ( in[ 19 + inpos] - in [19 + inpos - 1] ) << 5 )
- | ( ( in[ 20 + inpos] - in [20 + inpos - 1] ) << 12 )
- | ( ( in[ 21 + inpos] - in [21 + inpos - 1] ) << 19 )
- | ( ( in[ 22 + inpos] - in [22 + inpos - 1] ) << 26 )
- ;
- out[ 5 + outpos] = ( in[ 22 + inpos] - in [22 + inpos - 1] ) >>> ( 7 - 1 )
- | ( ( in[ 23 + inpos] - in [23 + inpos - 1] ) << 1 )
- | ( ( in[ 24 + inpos] - in [24 + inpos - 1] ) << 8 )
- | ( ( in[ 25 + inpos] - in [25 + inpos - 1] ) << 15 )
- | ( ( in[ 26 + inpos] - in [26 + inpos - 1] ) << 22 )
- | ( ( in[ 27 + inpos] - in [27 + inpos - 1] ) << 29 )
- ;
- out[ 6 + outpos] = ( in[ 27 + inpos] - in [27 + inpos - 1] ) >>> ( 7 - 4 )
- | ( ( in[ 28 + inpos] - in [28 + inpos - 1] ) << 4 )
- | ( ( in[ 29 + inpos] - in [29 + inpos - 1] ) << 11 )
- | ( ( in[ 30 + inpos] - in [30 + inpos - 1] ) << 18 )
- | ( ( in[ 31 + inpos] - in [31 + inpos - 1] ) << 25 )
- ;
-}
-
-
-
-
-public static void integratedpack8(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = (in[ 0 + inpos] - initoffset )
- | ( ( in[ 1 + inpos] - in [1 + inpos - 1] ) << 8 )
- | ( ( in[ 2 + inpos] - in [2 + inpos - 1] ) << 16 )
- | ( ( in[ 3 + inpos] - in [3 + inpos - 1] ) << 24 )
- ;
- out[ 1 + outpos] = (in[ 4 + inpos] - in [4 + inpos - 1] )
- | ( ( in[ 5 + inpos] - in [5 + inpos - 1] ) << 8 )
- | ( ( in[ 6 + inpos] - in [6 + inpos - 1] ) << 16 )
- | ( ( in[ 7 + inpos] - in [7 + inpos - 1] ) << 24 )
- ;
- out[ 2 + outpos] = (in[ 8 + inpos] - in [8 + inpos - 1] )
- | ( ( in[ 9 + inpos] - in [9 + inpos - 1] ) << 8 )
- | ( ( in[ 10 + inpos] - in [10 + inpos - 1] ) << 16 )
- | ( ( in[ 11 + inpos] - in [11 + inpos - 1] ) << 24 )
- ;
- out[ 3 + outpos] = (in[ 12 + inpos] - in [12 + inpos - 1] )
- | ( ( in[ 13 + inpos] - in [13 + inpos - 1] ) << 8 )
- | ( ( in[ 14 + inpos] - in [14 + inpos - 1] ) << 16 )
- | ( ( in[ 15 + inpos] - in [15 + inpos - 1] ) << 24 )
- ;
- out[ 4 + outpos] = (in[ 16 + inpos] - in [16 + inpos - 1] )
- | ( ( in[ 17 + inpos] - in [17 + inpos - 1] ) << 8 )
- | ( ( in[ 18 + inpos] - in [18 + inpos - 1] ) << 16 )
- | ( ( in[ 19 + inpos] - in [19 + inpos - 1] ) << 24 )
- ;
- out[ 5 + outpos] = (in[ 20 + inpos] - in [20 + inpos - 1] )
- | ( ( in[ 21 + inpos] - in [21 + inpos - 1] ) << 8 )
- | ( ( in[ 22 + inpos] - in [22 + inpos - 1] ) << 16 )
- | ( ( in[ 23 + inpos] - in [23 + inpos - 1] ) << 24 )
- ;
- out[ 6 + outpos] = (in[ 24 + inpos] - in [24 + inpos - 1] )
- | ( ( in[ 25 + inpos] - in [25 + inpos - 1] ) << 8 )
- | ( ( in[ 26 + inpos] - in [26 + inpos - 1] ) << 16 )
- | ( ( in[ 27 + inpos] - in [27 + inpos - 1] ) << 24 )
- ;
- out[ 7 + outpos] = (in[ 28 + inpos] - in [28 + inpos - 1] )
- | ( ( in[ 29 + inpos] - in [29 + inpos - 1] ) << 8 )
- | ( ( in[ 30 + inpos] - in [30 + inpos - 1] ) << 16 )
- | ( ( in[ 31 + inpos] - in [31 + inpos - 1] ) << 24 )
- ;
-}
-
-
-
-
-public static void integratedpack9(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = (in[ 0 + inpos] - initoffset )
- | ( ( in[ 1 + inpos] - in [1 + inpos - 1] ) << 9 )
- | ( ( in[ 2 + inpos] - in [2 + inpos - 1] ) << 18 )
- | ( ( in[ 3 + inpos] - in [3 + inpos - 1] ) << 27 )
- ;
- out[ 1 + outpos] = ( in[ 3 + inpos] - in [3 + inpos - 1] ) >>> ( 9 - 4 )
- | ( ( in[ 4 + inpos] - in [4 + inpos - 1] ) << 4 )
- | ( ( in[ 5 + inpos] - in [5 + inpos - 1] ) << 13 )
- | ( ( in[ 6 + inpos] - in [6 + inpos - 1] ) << 22 )
- | ( ( in[ 7 + inpos] - in [7 + inpos - 1] ) << 31 )
- ;
- out[ 2 + outpos] = ( in[ 7 + inpos] - in [7 + inpos - 1] ) >>> ( 9 - 8 )
- | ( ( in[ 8 + inpos] - in [8 + inpos - 1] ) << 8 )
- | ( ( in[ 9 + inpos] - in [9 + inpos - 1] ) << 17 )
- | ( ( in[ 10 + inpos] - in [10 + inpos - 1] ) << 26 )
- ;
- out[ 3 + outpos] = ( in[ 10 + inpos] - in [10 + inpos - 1] ) >>> ( 9 - 3 )
- | ( ( in[ 11 + inpos] - in [11 + inpos - 1] ) << 3 )
- | ( ( in[ 12 + inpos] - in [12 + inpos - 1] ) << 12 )
- | ( ( in[ 13 + inpos] - in [13 + inpos - 1] ) << 21 )
- | ( ( in[ 14 + inpos] - in [14 + inpos - 1] ) << 30 )
- ;
- out[ 4 + outpos] = ( in[ 14 + inpos] - in [14 + inpos - 1] ) >>> ( 9 - 7 )
- | ( ( in[ 15 + inpos] - in [15 + inpos - 1] ) << 7 )
- | ( ( in[ 16 + inpos] - in [16 + inpos - 1] ) << 16 )
- | ( ( in[ 17 + inpos] - in [17 + inpos - 1] ) << 25 )
- ;
- out[ 5 + outpos] = ( in[ 17 + inpos] - in [17 + inpos - 1] ) >>> ( 9 - 2 )
- | ( ( in[ 18 + inpos] - in [18 + inpos - 1] ) << 2 )
- | ( ( in[ 19 + inpos] - in [19 + inpos - 1] ) << 11 )
- | ( ( in[ 20 + inpos] - in [20 + inpos - 1] ) << 20 )
- | ( ( in[ 21 + inpos] - in [21 + inpos - 1] ) << 29 )
- ;
- out[ 6 + outpos] = ( in[ 21 + inpos] - in [21 + inpos - 1] ) >>> ( 9 - 6 )
- | ( ( in[ 22 + inpos] - in [22 + inpos - 1] ) << 6 )
- | ( ( in[ 23 + inpos] - in [23 + inpos - 1] ) << 15 )
- | ( ( in[ 24 + inpos] - in [24 + inpos - 1] ) << 24 )
- ;
- out[ 7 + outpos] = ( in[ 24 + inpos] - in [24 + inpos - 1] ) >>> ( 9 - 1 )
- | ( ( in[ 25 + inpos] - in [25 + inpos - 1] ) << 1 )
- | ( ( in[ 26 + inpos] - in [26 + inpos - 1] ) << 10 )
- | ( ( in[ 27 + inpos] - in [27 + inpos - 1] ) << 19 )
- | ( ( in[ 28 + inpos] - in [28 + inpos - 1] ) << 28 )
- ;
- out[ 8 + outpos] = ( in[ 28 + inpos] - in [28 + inpos - 1] ) >>> ( 9 - 5 )
- | ( ( in[ 29 + inpos] - in [29 + inpos - 1] ) << 5 )
- | ( ( in[ 30 + inpos] - in [30 + inpos - 1] ) << 14 )
- | ( ( in[ 31 + inpos] - in [31 + inpos - 1] ) << 23 )
- ;
-}
-
-
-
-
-public static void integratedpack10(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = (in[ 0 + inpos] - initoffset )
- | ( ( in[ 1 + inpos] - in [1 + inpos - 1] ) << 10 )
- | ( ( in[ 2 + inpos] - in [2 + inpos - 1] ) << 20 )
- | ( ( in[ 3 + inpos] - in [3 + inpos - 1] ) << 30 )
- ;
- out[ 1 + outpos] = ( in[ 3 + inpos] - in [3 + inpos - 1] ) >>> ( 10 - 8 )
- | ( ( in[ 4 + inpos] - in [4 + inpos - 1] ) << 8 )
- | ( ( in[ 5 + inpos] - in [5 + inpos - 1] ) << 18 )
- | ( ( in[ 6 + inpos] - in [6 + inpos - 1] ) << 28 )
- ;
- out[ 2 + outpos] = ( in[ 6 + inpos] - in [6 + inpos - 1] ) >>> ( 10 - 6 )
- | ( ( in[ 7 + inpos] - in [7 + inpos - 1] ) << 6 )
- | ( ( in[ 8 + inpos] - in [8 + inpos - 1] ) << 16 )
- | ( ( in[ 9 + inpos] - in [9 + inpos - 1] ) << 26 )
- ;
- out[ 3 + outpos] = ( in[ 9 + inpos] - in [9 + inpos - 1] ) >>> ( 10 - 4 )
- | ( ( in[ 10 + inpos] - in [10 + inpos - 1] ) << 4 )
- | ( ( in[ 11 + inpos] - in [11 + inpos - 1] ) << 14 )
- | ( ( in[ 12 + inpos] - in [12 + inpos - 1] ) << 24 )
- ;
- out[ 4 + outpos] = ( in[ 12 + inpos] - in [12 + inpos - 1] ) >>> ( 10 - 2 )
- | ( ( in[ 13 + inpos] - in [13 + inpos - 1] ) << 2 )
- | ( ( in[ 14 + inpos] - in [14 + inpos - 1] ) << 12 )
- | ( ( in[ 15 + inpos] - in [15 + inpos - 1] ) << 22 )
- ;
- out[ 5 + outpos] = (in[ 16 + inpos] - in [16 + inpos - 1] )
- | ( ( in[ 17 + inpos] - in [17 + inpos - 1] ) << 10 )
- | ( ( in[ 18 + inpos] - in [18 + inpos - 1] ) << 20 )
- | ( ( in[ 19 + inpos] - in [19 + inpos - 1] ) << 30 )
- ;
- out[ 6 + outpos] = ( in[ 19 + inpos] - in [19 + inpos - 1] ) >>> ( 10 - 8 )
- | ( ( in[ 20 + inpos] - in [20 + inpos - 1] ) << 8 )
- | ( ( in[ 21 + inpos] - in [21 + inpos - 1] ) << 18 )
- | ( ( in[ 22 + inpos] - in [22 + inpos - 1] ) << 28 )
- ;
- out[ 7 + outpos] = ( in[ 22 + inpos] - in [22 + inpos - 1] ) >>> ( 10 - 6 )
- | ( ( in[ 23 + inpos] - in [23 + inpos - 1] ) << 6 )
- | ( ( in[ 24 + inpos] - in [24 + inpos - 1] ) << 16 )
- | ( ( in[ 25 + inpos] - in [25 + inpos - 1] ) << 26 )
- ;
- out[ 8 + outpos] = ( in[ 25 + inpos] - in [25 + inpos - 1] ) >>> ( 10 - 4 )
- | ( ( in[ 26 + inpos] - in [26 + inpos - 1] ) << 4 )
- | ( ( in[ 27 + inpos] - in [27 + inpos - 1] ) << 14 )
- | ( ( in[ 28 + inpos] - in [28 + inpos - 1] ) << 24 )
- ;
- out[ 9 + outpos] = ( in[ 28 + inpos] - in [28 + inpos - 1] ) >>> ( 10 - 2 )
- | ( ( in[ 29 + inpos] - in [29 + inpos - 1] ) << 2 )
- | ( ( in[ 30 + inpos] - in [30 + inpos - 1] ) << 12 )
- | ( ( in[ 31 + inpos] - in [31 + inpos - 1] ) << 22 )
- ;
-}
-
-
-
-
-public static void integratedpack11(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = (in[ 0 + inpos] - initoffset )
- | ( ( in[ 1 + inpos] - in [1 + inpos - 1] ) << 11 )
- | ( ( in[ 2 + inpos] - in [2 + inpos - 1] ) << 22 )
- ;
- out[ 1 + outpos] = ( in[ 2 + inpos] - in [2 + inpos - 1] ) >>> ( 11 - 1 )
- | ( ( in[ 3 + inpos] - in [3 + inpos - 1] ) << 1 )
- | ( ( in[ 4 + inpos] - in [4 + inpos - 1] ) << 12 )
- | ( ( in[ 5 + inpos] - in [5 + inpos - 1] ) << 23 )
- ;
- out[ 2 + outpos] = ( in[ 5 + inpos] - in [5 + inpos - 1] ) >>> ( 11 - 2 )
- | ( ( in[ 6 + inpos] - in [6 + inpos - 1] ) << 2 )
- | ( ( in[ 7 + inpos] - in [7 + inpos - 1] ) << 13 )
- | ( ( in[ 8 + inpos] - in [8 + inpos - 1] ) << 24 )
- ;
- out[ 3 + outpos] = ( in[ 8 + inpos] - in [8 + inpos - 1] ) >>> ( 11 - 3 )
- | ( ( in[ 9 + inpos] - in [9 + inpos - 1] ) << 3 )
- | ( ( in[ 10 + inpos] - in [10 + inpos - 1] ) << 14 )
- | ( ( in[ 11 + inpos] - in [11 + inpos - 1] ) << 25 )
- ;
- out[ 4 + outpos] = ( in[ 11 + inpos] - in [11 + inpos - 1] ) >>> ( 11 - 4 )
- | ( ( in[ 12 + inpos] - in [12 + inpos - 1] ) << 4 )
- | ( ( in[ 13 + inpos] - in [13 + inpos - 1] ) << 15 )
- | ( ( in[ 14 + inpos] - in [14 + inpos - 1] ) << 26 )
- ;
- out[ 5 + outpos] = ( in[ 14 + inpos] - in [14 + inpos - 1] ) >>> ( 11 - 5 )
- | ( ( in[ 15 + inpos] - in [15 + inpos - 1] ) << 5 )
- | ( ( in[ 16 + inpos] - in [16 + inpos - 1] ) << 16 )
- | ( ( in[ 17 + inpos] - in [17 + inpos - 1] ) << 27 )
- ;
- out[ 6 + outpos] = ( in[ 17 + inpos] - in [17 + inpos - 1] ) >>> ( 11 - 6 )
- | ( ( in[ 18 + inpos] - in [18 + inpos - 1] ) << 6 )
- | ( ( in[ 19 + inpos] - in [19 + inpos - 1] ) << 17 )
- | ( ( in[ 20 + inpos] - in [20 + inpos - 1] ) << 28 )
- ;
- out[ 7 + outpos] = ( in[ 20 + inpos] - in [20 + inpos - 1] ) >>> ( 11 - 7 )
- | ( ( in[ 21 + inpos] - in [21 + inpos - 1] ) << 7 )
- | ( ( in[ 22 + inpos] - in [22 + inpos - 1] ) << 18 )
- | ( ( in[ 23 + inpos] - in [23 + inpos - 1] ) << 29 )
- ;
- out[ 8 + outpos] = ( in[ 23 + inpos] - in [23 + inpos - 1] ) >>> ( 11 - 8 )
- | ( ( in[ 24 + inpos] - in [24 + inpos - 1] ) << 8 )
- | ( ( in[ 25 + inpos] - in [25 + inpos - 1] ) << 19 )
- | ( ( in[ 26 + inpos] - in [26 + inpos - 1] ) << 30 )
- ;
- out[ 9 + outpos] = ( in[ 26 + inpos] - in [26 + inpos - 1] ) >>> ( 11 - 9 )
- | ( ( in[ 27 + inpos] - in [27 + inpos - 1] ) << 9 )
- | ( ( in[ 28 + inpos] - in [28 + inpos - 1] ) << 20 )
- | ( ( in[ 29 + inpos] - in [29 + inpos - 1] ) << 31 )
- ;
- out[ 10 + outpos] = ( in[ 29 + inpos] - in [29 + inpos - 1] ) >>> ( 11 - 10 )
- | ( ( in[ 30 + inpos] - in [30 + inpos - 1] ) << 10 )
- | ( ( in[ 31 + inpos] - in [31 + inpos - 1] ) << 21 )
- ;
-}
-
-
-
-
-public static void integratedpack12(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = (in[ 0 + inpos] - initoffset )
- | ( ( in[ 1 + inpos] - in [1 + inpos - 1] ) << 12 )
- | ( ( in[ 2 + inpos] - in [2 + inpos - 1] ) << 24 )
- ;
- out[ 1 + outpos] = ( in[ 2 + inpos] - in [2 + inpos - 1] ) >>> ( 12 - 4 )
- | ( ( in[ 3 + inpos] - in [3 + inpos - 1] ) << 4 )
- | ( ( in[ 4 + inpos] - in [4 + inpos - 1] ) << 16 )
- | ( ( in[ 5 + inpos] - in [5 + inpos - 1] ) << 28 )
- ;
- out[ 2 + outpos] = ( in[ 5 + inpos] - in [5 + inpos - 1] ) >>> ( 12 - 8 )
- | ( ( in[ 6 + inpos] - in [6 + inpos - 1] ) << 8 )
- | ( ( in[ 7 + inpos] - in [7 + inpos - 1] ) << 20 )
- ;
- out[ 3 + outpos] = (in[ 8 + inpos] - in [8 + inpos - 1] )
- | ( ( in[ 9 + inpos] - in [9 + inpos - 1] ) << 12 )
- | ( ( in[ 10 + inpos] - in [10 + inpos - 1] ) << 24 )
- ;
- out[ 4 + outpos] = ( in[ 10 + inpos] - in [10 + inpos - 1] ) >>> ( 12 - 4 )
- | ( ( in[ 11 + inpos] - in [11 + inpos - 1] ) << 4 )
- | ( ( in[ 12 + inpos] - in [12 + inpos - 1] ) << 16 )
- | ( ( in[ 13 + inpos] - in [13 + inpos - 1] ) << 28 )
- ;
- out[ 5 + outpos] = ( in[ 13 + inpos] - in [13 + inpos - 1] ) >>> ( 12 - 8 )
- | ( ( in[ 14 + inpos] - in [14 + inpos - 1] ) << 8 )
- | ( ( in[ 15 + inpos] - in [15 + inpos - 1] ) << 20 )
- ;
- out[ 6 + outpos] = (in[ 16 + inpos] - in [16 + inpos - 1] )
- | ( ( in[ 17 + inpos] - in [17 + inpos - 1] ) << 12 )
- | ( ( in[ 18 + inpos] - in [18 + inpos - 1] ) << 24 )
- ;
- out[ 7 + outpos] = ( in[ 18 + inpos] - in [18 + inpos - 1] ) >>> ( 12 - 4 )
- | ( ( in[ 19 + inpos] - in [19 + inpos - 1] ) << 4 )
- | ( ( in[ 20 + inpos] - in [20 + inpos - 1] ) << 16 )
- | ( ( in[ 21 + inpos] - in [21 + inpos - 1] ) << 28 )
- ;
- out[ 8 + outpos] = ( in[ 21 + inpos] - in [21 + inpos - 1] ) >>> ( 12 - 8 )
- | ( ( in[ 22 + inpos] - in [22 + inpos - 1] ) << 8 )
- | ( ( in[ 23 + inpos] - in [23 + inpos - 1] ) << 20 )
- ;
- out[ 9 + outpos] = (in[ 24 + inpos] - in [24 + inpos - 1] )
- | ( ( in[ 25 + inpos] - in [25 + inpos - 1] ) << 12 )
- | ( ( in[ 26 + inpos] - in [26 + inpos - 1] ) << 24 )
- ;
- out[ 10 + outpos] = ( in[ 26 + inpos] - in [26 + inpos - 1] ) >>> ( 12 - 4 )
- | ( ( in[ 27 + inpos] - in [27 + inpos - 1] ) << 4 )
- | ( ( in[ 28 + inpos] - in [28 + inpos - 1] ) << 16 )
- | ( ( in[ 29 + inpos] - in [29 + inpos - 1] ) << 28 )
- ;
- out[ 11 + outpos] = ( in[ 29 + inpos] - in [29 + inpos - 1] ) >>> ( 12 - 8 )
- | ( ( in[ 30 + inpos] - in [30 + inpos - 1] ) << 8 )
- | ( ( in[ 31 + inpos] - in [31 + inpos - 1] ) << 20 )
- ;
-}
-
-
-
-
-public static void integratedpack13(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = (in[ 0 + inpos] - initoffset )
- | ( ( in[ 1 + inpos] - in [1 + inpos - 1] ) << 13 )
- | ( ( in[ 2 + inpos] - in [2 + inpos - 1] ) << 26 )
- ;
- out[ 1 + outpos] = ( in[ 2 + inpos] - in [2 + inpos - 1] ) >>> ( 13 - 7 )
- | ( ( in[ 3 + inpos] - in [3 + inpos - 1] ) << 7 )
- | ( ( in[ 4 + inpos] - in [4 + inpos - 1] ) << 20 )
- ;
- out[ 2 + outpos] = ( in[ 4 + inpos] - in [4 + inpos - 1] ) >>> ( 13 - 1 )
- | ( ( in[ 5 + inpos] - in [5 + inpos - 1] ) << 1 )
- | ( ( in[ 6 + inpos] - in [6 + inpos - 1] ) << 14 )
- | ( ( in[ 7 + inpos] - in [7 + inpos - 1] ) << 27 )
- ;
- out[ 3 + outpos] = ( in[ 7 + inpos] - in [7 + inpos - 1] ) >>> ( 13 - 8 )
- | ( ( in[ 8 + inpos] - in [8 + inpos - 1] ) << 8 )
- | ( ( in[ 9 + inpos] - in [9 + inpos - 1] ) << 21 )
- ;
- out[ 4 + outpos] = ( in[ 9 + inpos] - in [9 + inpos - 1] ) >>> ( 13 - 2 )
- | ( ( in[ 10 + inpos] - in [10 + inpos - 1] ) << 2 )
- | ( ( in[ 11 + inpos] - in [11 + inpos - 1] ) << 15 )
- | ( ( in[ 12 + inpos] - in [12 + inpos - 1] ) << 28 )
- ;
- out[ 5 + outpos] = ( in[ 12 + inpos] - in [12 + inpos - 1] ) >>> ( 13 - 9 )
- | ( ( in[ 13 + inpos] - in [13 + inpos - 1] ) << 9 )
- | ( ( in[ 14 + inpos] - in [14 + inpos - 1] ) << 22 )
- ;
- out[ 6 + outpos] = ( in[ 14 + inpos] - in [14 + inpos - 1] ) >>> ( 13 - 3 )
- | ( ( in[ 15 + inpos] - in [15 + inpos - 1] ) << 3 )
- | ( ( in[ 16 + inpos] - in [16 + inpos - 1] ) << 16 )
- | ( ( in[ 17 + inpos] - in [17 + inpos - 1] ) << 29 )
- ;
- out[ 7 + outpos] = ( in[ 17 + inpos] - in [17 + inpos - 1] ) >>> ( 13 - 10 )
- | ( ( in[ 18 + inpos] - in [18 + inpos - 1] ) << 10 )
- | ( ( in[ 19 + inpos] - in [19 + inpos - 1] ) << 23 )
- ;
- out[ 8 + outpos] = ( in[ 19 + inpos] - in [19 + inpos - 1] ) >>> ( 13 - 4 )
- | ( ( in[ 20 + inpos] - in [20 + inpos - 1] ) << 4 )
- | ( ( in[ 21 + inpos] - in [21 + inpos - 1] ) << 17 )
- | ( ( in[ 22 + inpos] - in [22 + inpos - 1] ) << 30 )
- ;
- out[ 9 + outpos] = ( in[ 22 + inpos] - in [22 + inpos - 1] ) >>> ( 13 - 11 )
- | ( ( in[ 23 + inpos] - in [23 + inpos - 1] ) << 11 )
- | ( ( in[ 24 + inpos] - in [24 + inpos - 1] ) << 24 )
- ;
- out[ 10 + outpos] = ( in[ 24 + inpos] - in [24 + inpos - 1] ) >>> ( 13 - 5 )
- | ( ( in[ 25 + inpos] - in [25 + inpos - 1] ) << 5 )
- | ( ( in[ 26 + inpos] - in [26 + inpos - 1] ) << 18 )
- | ( ( in[ 27 + inpos] - in [27 + inpos - 1] ) << 31 )
- ;
- out[ 11 + outpos] = ( in[ 27 + inpos] - in [27 + inpos - 1] ) >>> ( 13 - 12 )
- | ( ( in[ 28 + inpos] - in [28 + inpos - 1] ) << 12 )
- | ( ( in[ 29 + inpos] - in [29 + inpos - 1] ) << 25 )
- ;
- out[ 12 + outpos] = ( in[ 29 + inpos] - in [29 + inpos - 1] ) >>> ( 13 - 6 )
- | ( ( in[ 30 + inpos] - in [30 + inpos - 1] ) << 6 )
- | ( ( in[ 31 + inpos] - in [31 + inpos - 1] ) << 19 )
- ;
-}
-
-
-
-
-public static void integratedpack14(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = (in[ 0 + inpos] - initoffset )
- | ( ( in[ 1 + inpos] - in [1 + inpos - 1] ) << 14 )
- | ( ( in[ 2 + inpos] - in [2 + inpos - 1] ) << 28 )
- ;
- out[ 1 + outpos] = ( in[ 2 + inpos] - in [2 + inpos - 1] ) >>> ( 14 - 10 )
- | ( ( in[ 3 + inpos] - in [3 + inpos - 1] ) << 10 )
- | ( ( in[ 4 + inpos] - in [4 + inpos - 1] ) << 24 )
- ;
- out[ 2 + outpos] = ( in[ 4 + inpos] - in [4 + inpos - 1] ) >>> ( 14 - 6 )
- | ( ( in[ 5 + inpos] - in [5 + inpos - 1] ) << 6 )
- | ( ( in[ 6 + inpos] - in [6 + inpos - 1] ) << 20 )
- ;
- out[ 3 + outpos] = ( in[ 6 + inpos] - in [6 + inpos - 1] ) >>> ( 14 - 2 )
- | ( ( in[ 7 + inpos] - in [7 + inpos - 1] ) << 2 )
- | ( ( in[ 8 + inpos] - in [8 + inpos - 1] ) << 16 )
- | ( ( in[ 9 + inpos] - in [9 + inpos - 1] ) << 30 )
- ;
- out[ 4 + outpos] = ( in[ 9 + inpos] - in [9 + inpos - 1] ) >>> ( 14 - 12 )
- | ( ( in[ 10 + inpos] - in [10 + inpos - 1] ) << 12 )
- | ( ( in[ 11 + inpos] - in [11 + inpos - 1] ) << 26 )
- ;
- out[ 5 + outpos] = ( in[ 11 + inpos] - in [11 + inpos - 1] ) >>> ( 14 - 8 )
- | ( ( in[ 12 + inpos] - in [12 + inpos - 1] ) << 8 )
- | ( ( in[ 13 + inpos] - in [13 + inpos - 1] ) << 22 )
- ;
- out[ 6 + outpos] = ( in[ 13 + inpos] - in [13 + inpos - 1] ) >>> ( 14 - 4 )
- | ( ( in[ 14 + inpos] - in [14 + inpos - 1] ) << 4 )
- | ( ( in[ 15 + inpos] - in [15 + inpos - 1] ) << 18 )
- ;
- out[ 7 + outpos] = (in[ 16 + inpos] - in [16 + inpos - 1] )
- | ( ( in[ 17 + inpos] - in [17 + inpos - 1] ) << 14 )
- | ( ( in[ 18 + inpos] - in [18 + inpos - 1] ) << 28 )
- ;
- out[ 8 + outpos] = ( in[ 18 + inpos] - in [18 + inpos - 1] ) >>> ( 14 - 10 )
- | ( ( in[ 19 + inpos] - in [19 + inpos - 1] ) << 10 )
- | ( ( in[ 20 + inpos] - in [20 + inpos - 1] ) << 24 )
- ;
- out[ 9 + outpos] = ( in[ 20 + inpos] - in [20 + inpos - 1] ) >>> ( 14 - 6 )
- | ( ( in[ 21 + inpos] - in [21 + inpos - 1] ) << 6 )
- | ( ( in[ 22 + inpos] - in [22 + inpos - 1] ) << 20 )
- ;
- out[ 10 + outpos] = ( in[ 22 + inpos] - in [22 + inpos - 1] ) >>> ( 14 - 2 )
- | ( ( in[ 23 + inpos] - in [23 + inpos - 1] ) << 2 )
- | ( ( in[ 24 + inpos] - in [24 + inpos - 1] ) << 16 )
- | ( ( in[ 25 + inpos] - in [25 + inpos - 1] ) << 30 )
- ;
- out[ 11 + outpos] = ( in[ 25 + inpos] - in [25 + inpos - 1] ) >>> ( 14 - 12 )
- | ( ( in[ 26 + inpos] - in [26 + inpos - 1] ) << 12 )
- | ( ( in[ 27 + inpos] - in [27 + inpos - 1] ) << 26 )
- ;
- out[ 12 + outpos] = ( in[ 27 + inpos] - in [27 + inpos - 1] ) >>> ( 14 - 8 )
- | ( ( in[ 28 + inpos] - in [28 + inpos - 1] ) << 8 )
- | ( ( in[ 29 + inpos] - in [29 + inpos - 1] ) << 22 )
- ;
- out[ 13 + outpos] = ( in[ 29 + inpos] - in [29 + inpos - 1] ) >>> ( 14 - 4 )
- | ( ( in[ 30 + inpos] - in [30 + inpos - 1] ) << 4 )
- | ( ( in[ 31 + inpos] - in [31 + inpos - 1] ) << 18 )
- ;
-}
-
-
-
-
-public static void integratedpack15(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = (in[ 0 + inpos] - initoffset )
- | ( ( in[ 1 + inpos] - in [1 + inpos - 1] ) << 15 )
- | ( ( in[ 2 + inpos] - in [2 + inpos - 1] ) << 30 )
- ;
- out[ 1 + outpos] = ( in[ 2 + inpos] - in [2 + inpos - 1] ) >>> ( 15 - 13 )
- | ( ( in[ 3 + inpos] - in [3 + inpos - 1] ) << 13 )
- | ( ( in[ 4 + inpos] - in [4 + inpos - 1] ) << 28 )
- ;
- out[ 2 + outpos] = ( in[ 4 + inpos] - in [4 + inpos - 1] ) >>> ( 15 - 11 )
- | ( ( in[ 5 + inpos] - in [5 + inpos - 1] ) << 11 )
- | ( ( in[ 6 + inpos] - in [6 + inpos - 1] ) << 26 )
- ;
- out[ 3 + outpos] = ( in[ 6 + inpos] - in [6 + inpos - 1] ) >>> ( 15 - 9 )
- | ( ( in[ 7 + inpos] - in [7 + inpos - 1] ) << 9 )
- | ( ( in[ 8 + inpos] - in [8 + inpos - 1] ) << 24 )
- ;
- out[ 4 + outpos] = ( in[ 8 + inpos] - in [8 + inpos - 1] ) >>> ( 15 - 7 )
- | ( ( in[ 9 + inpos] - in [9 + inpos - 1] ) << 7 )
- | ( ( in[ 10 + inpos] - in [10 + inpos - 1] ) << 22 )
- ;
- out[ 5 + outpos] = ( in[ 10 + inpos] - in [10 + inpos - 1] ) >>> ( 15 - 5 )
- | ( ( in[ 11 + inpos] - in [11 + inpos - 1] ) << 5 )
- | ( ( in[ 12 + inpos] - in [12 + inpos - 1] ) << 20 )
- ;
- out[ 6 + outpos] = ( in[ 12 + inpos] - in [12 + inpos - 1] ) >>> ( 15 - 3 )
- | ( ( in[ 13 + inpos] - in [13 + inpos - 1] ) << 3 )
- | ( ( in[ 14 + inpos] - in [14 + inpos - 1] ) << 18 )
- ;
- out[ 7 + outpos] = ( in[ 14 + inpos] - in [14 + inpos - 1] ) >>> ( 15 - 1 )
- | ( ( in[ 15 + inpos] - in [15 + inpos - 1] ) << 1 )
- | ( ( in[ 16 + inpos] - in [16 + inpos - 1] ) << 16 )
- | ( ( in[ 17 + inpos] - in [17 + inpos - 1] ) << 31 )
- ;
- out[ 8 + outpos] = ( in[ 17 + inpos] - in [17 + inpos - 1] ) >>> ( 15 - 14 )
- | ( ( in[ 18 + inpos] - in [18 + inpos - 1] ) << 14 )
- | ( ( in[ 19 + inpos] - in [19 + inpos - 1] ) << 29 )
- ;
- out[ 9 + outpos] = ( in[ 19 + inpos] - in [19 + inpos - 1] ) >>> ( 15 - 12 )
- | ( ( in[ 20 + inpos] - in [20 + inpos - 1] ) << 12 )
- | ( ( in[ 21 + inpos] - in [21 + inpos - 1] ) << 27 )
- ;
- out[ 10 + outpos] = ( in[ 21 + inpos] - in [21 + inpos - 1] ) >>> ( 15 - 10 )
- | ( ( in[ 22 + inpos] - in [22 + inpos - 1] ) << 10 )
- | ( ( in[ 23 + inpos] - in [23 + inpos - 1] ) << 25 )
- ;
- out[ 11 + outpos] = ( in[ 23 + inpos] - in [23 + inpos - 1] ) >>> ( 15 - 8 )
- | ( ( in[ 24 + inpos] - in [24 + inpos - 1] ) << 8 )
- | ( ( in[ 25 + inpos] - in [25 + inpos - 1] ) << 23 )
- ;
- out[ 12 + outpos] = ( in[ 25 + inpos] - in [25 + inpos - 1] ) >>> ( 15 - 6 )
- | ( ( in[ 26 + inpos] - in [26 + inpos - 1] ) << 6 )
- | ( ( in[ 27 + inpos] - in [27 + inpos - 1] ) << 21 )
- ;
- out[ 13 + outpos] = ( in[ 27 + inpos] - in [27 + inpos - 1] ) >>> ( 15 - 4 )
- | ( ( in[ 28 + inpos] - in [28 + inpos - 1] ) << 4 )
- | ( ( in[ 29 + inpos] - in [29 + inpos - 1] ) << 19 )
- ;
- out[ 14 + outpos] = ( in[ 29 + inpos] - in [29 + inpos - 1] ) >>> ( 15 - 2 )
- | ( ( in[ 30 + inpos] - in [30 + inpos - 1] ) << 2 )
- | ( ( in[ 31 + inpos] - in [31 + inpos - 1] ) << 17 )
- ;
-}
-
-
-
-
-public static void integratedpack16(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = (in[ 0 + inpos] - initoffset )
- | ( ( in[ 1 + inpos] - in [1 + inpos - 1] ) << 16 )
- ;
- out[ 1 + outpos] = (in[ 2 + inpos] - in [2 + inpos - 1] )
- | ( ( in[ 3 + inpos] - in [3 + inpos - 1] ) << 16 )
- ;
- out[ 2 + outpos] = (in[ 4 + inpos] - in [4 + inpos - 1] )
- | ( ( in[ 5 + inpos] - in [5 + inpos - 1] ) << 16 )
- ;
- out[ 3 + outpos] = (in[ 6 + inpos] - in [6 + inpos - 1] )
- | ( ( in[ 7 + inpos] - in [7 + inpos - 1] ) << 16 )
- ;
- out[ 4 + outpos] = (in[ 8 + inpos] - in [8 + inpos - 1] )
- | ( ( in[ 9 + inpos] - in [9 + inpos - 1] ) << 16 )
- ;
- out[ 5 + outpos] = (in[ 10 + inpos] - in [10 + inpos - 1] )
- | ( ( in[ 11 + inpos] - in [11 + inpos - 1] ) << 16 )
- ;
- out[ 6 + outpos] = (in[ 12 + inpos] - in [12 + inpos - 1] )
- | ( ( in[ 13 + inpos] - in [13 + inpos - 1] ) << 16 )
- ;
- out[ 7 + outpos] = (in[ 14 + inpos] - in [14 + inpos - 1] )
- | ( ( in[ 15 + inpos] - in [15 + inpos - 1] ) << 16 )
- ;
- out[ 8 + outpos] = (in[ 16 + inpos] - in [16 + inpos - 1] )
- | ( ( in[ 17 + inpos] - in [17 + inpos - 1] ) << 16 )
- ;
- out[ 9 + outpos] = (in[ 18 + inpos] - in [18 + inpos - 1] )
- | ( ( in[ 19 + inpos] - in [19 + inpos - 1] ) << 16 )
- ;
- out[ 10 + outpos] = (in[ 20 + inpos] - in [20 + inpos - 1] )
- | ( ( in[ 21 + inpos] - in [21 + inpos - 1] ) << 16 )
- ;
- out[ 11 + outpos] = (in[ 22 + inpos] - in [22 + inpos - 1] )
- | ( ( in[ 23 + inpos] - in [23 + inpos - 1] ) << 16 )
- ;
- out[ 12 + outpos] = (in[ 24 + inpos] - in [24 + inpos - 1] )
- | ( ( in[ 25 + inpos] - in [25 + inpos - 1] ) << 16 )
- ;
- out[ 13 + outpos] = (in[ 26 + inpos] - in [26 + inpos - 1] )
- | ( ( in[ 27 + inpos] - in [27 + inpos - 1] ) << 16 )
- ;
- out[ 14 + outpos] = (in[ 28 + inpos] - in [28 + inpos - 1] )
- | ( ( in[ 29 + inpos] - in [29 + inpos - 1] ) << 16 )
- ;
- out[ 15 + outpos] = (in[ 30 + inpos] - in [30 + inpos - 1] )
- | ( ( in[ 31 + inpos] - in [31 + inpos - 1] ) << 16 )
- ;
-}
-
-
-
-
-public static void integratedpack17(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = (in[ 0 + inpos] - initoffset )
- | ( ( in[ 1 + inpos] - in [1 + inpos - 1] ) << 17 )
- ;
- out[ 1 + outpos] = ( in[ 1 + inpos] - in [1 + inpos - 1] ) >>> ( 17 - 2 )
- | ( ( in[ 2 + inpos] - in [2 + inpos - 1] ) << 2 )
- | ( ( in[ 3 + inpos] - in [3 + inpos - 1] ) << 19 )
- ;
- out[ 2 + outpos] = ( in[ 3 + inpos] - in [3 + inpos - 1] ) >>> ( 17 - 4 )
- | ( ( in[ 4 + inpos] - in [4 + inpos - 1] ) << 4 )
- | ( ( in[ 5 + inpos] - in [5 + inpos - 1] ) << 21 )
- ;
- out[ 3 + outpos] = ( in[ 5 + inpos] - in [5 + inpos - 1] ) >>> ( 17 - 6 )
- | ( ( in[ 6 + inpos] - in [6 + inpos - 1] ) << 6 )
- | ( ( in[ 7 + inpos] - in [7 + inpos - 1] ) << 23 )
- ;
- out[ 4 + outpos] = ( in[ 7 + inpos] - in [7 + inpos - 1] ) >>> ( 17 - 8 )
- | ( ( in[ 8 + inpos] - in [8 + inpos - 1] ) << 8 )
- | ( ( in[ 9 + inpos] - in [9 + inpos - 1] ) << 25 )
- ;
- out[ 5 + outpos] = ( in[ 9 + inpos] - in [9 + inpos - 1] ) >>> ( 17 - 10 )
- | ( ( in[ 10 + inpos] - in [10 + inpos - 1] ) << 10 )
- | ( ( in[ 11 + inpos] - in [11 + inpos - 1] ) << 27 )
- ;
- out[ 6 + outpos] = ( in[ 11 + inpos] - in [11 + inpos - 1] ) >>> ( 17 - 12 )
- | ( ( in[ 12 + inpos] - in [12 + inpos - 1] ) << 12 )
- | ( ( in[ 13 + inpos] - in [13 + inpos - 1] ) << 29 )
- ;
- out[ 7 + outpos] = ( in[ 13 + inpos] - in [13 + inpos - 1] ) >>> ( 17 - 14 )
- | ( ( in[ 14 + inpos] - in [14 + inpos - 1] ) << 14 )
- | ( ( in[ 15 + inpos] - in [15 + inpos - 1] ) << 31 )
- ;
- out[ 8 + outpos] = ( in[ 15 + inpos] - in [15 + inpos - 1] ) >>> ( 17 - 16 )
- | ( ( in[ 16 + inpos] - in [16 + inpos - 1] ) << 16 )
- ;
- out[ 9 + outpos] = ( in[ 16 + inpos] - in [16 + inpos - 1] ) >>> ( 17 - 1 )
- | ( ( in[ 17 + inpos] - in [17 + inpos - 1] ) << 1 )
- | ( ( in[ 18 + inpos] - in [18 + inpos - 1] ) << 18 )
- ;
- out[ 10 + outpos] = ( in[ 18 + inpos] - in [18 + inpos - 1] ) >>> ( 17 - 3 )
- | ( ( in[ 19 + inpos] - in [19 + inpos - 1] ) << 3 )
- | ( ( in[ 20 + inpos] - in [20 + inpos - 1] ) << 20 )
- ;
- out[ 11 + outpos] = ( in[ 20 + inpos] - in [20 + inpos - 1] ) >>> ( 17 - 5 )
- | ( ( in[ 21 + inpos] - in [21 + inpos - 1] ) << 5 )
- | ( ( in[ 22 + inpos] - in [22 + inpos - 1] ) << 22 )
- ;
- out[ 12 + outpos] = ( in[ 22 + inpos] - in [22 + inpos - 1] ) >>> ( 17 - 7 )
- | ( ( in[ 23 + inpos] - in [23 + inpos - 1] ) << 7 )
- | ( ( in[ 24 + inpos] - in [24 + inpos - 1] ) << 24 )
- ;
- out[ 13 + outpos] = ( in[ 24 + inpos] - in [24 + inpos - 1] ) >>> ( 17 - 9 )
- | ( ( in[ 25 + inpos] - in [25 + inpos - 1] ) << 9 )
- | ( ( in[ 26 + inpos] - in [26 + inpos - 1] ) << 26 )
- ;
- out[ 14 + outpos] = ( in[ 26 + inpos] - in [26 + inpos - 1] ) >>> ( 17 - 11 )
- | ( ( in[ 27 + inpos] - in [27 + inpos - 1] ) << 11 )
- | ( ( in[ 28 + inpos] - in [28 + inpos - 1] ) << 28 )
- ;
- out[ 15 + outpos] = ( in[ 28 + inpos] - in [28 + inpos - 1] ) >>> ( 17 - 13 )
- | ( ( in[ 29 + inpos] - in [29 + inpos - 1] ) << 13 )
- | ( ( in[ 30 + inpos] - in [30 + inpos - 1] ) << 30 )
- ;
- out[ 16 + outpos] = ( in[ 30 + inpos] - in [30 + inpos - 1] ) >>> ( 17 - 15 )
- | ( ( in[ 31 + inpos] - in [31 + inpos - 1] ) << 15 )
- ;
-}
-
-
-
-
-public static void integratedpack18(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = (in[ 0 + inpos] - initoffset )
- | ( ( in[ 1 + inpos] - in [1 + inpos - 1] ) << 18 )
- ;
- out[ 1 + outpos] = ( in[ 1 + inpos] - in [1 + inpos - 1] ) >>> ( 18 - 4 )
- | ( ( in[ 2 + inpos] - in [2 + inpos - 1] ) << 4 )
- | ( ( in[ 3 + inpos] - in [3 + inpos - 1] ) << 22 )
- ;
- out[ 2 + outpos] = ( in[ 3 + inpos] - in [3 + inpos - 1] ) >>> ( 18 - 8 )
- | ( ( in[ 4 + inpos] - in [4 + inpos - 1] ) << 8 )
- | ( ( in[ 5 + inpos] - in [5 + inpos - 1] ) << 26 )
- ;
- out[ 3 + outpos] = ( in[ 5 + inpos] - in [5 + inpos - 1] ) >>> ( 18 - 12 )
- | ( ( in[ 6 + inpos] - in [6 + inpos - 1] ) << 12 )
- | ( ( in[ 7 + inpos] - in [7 + inpos - 1] ) << 30 )
- ;
- out[ 4 + outpos] = ( in[ 7 + inpos] - in [7 + inpos - 1] ) >>> ( 18 - 16 )
- | ( ( in[ 8 + inpos] - in [8 + inpos - 1] ) << 16 )
- ;
- out[ 5 + outpos] = ( in[ 8 + inpos] - in [8 + inpos - 1] ) >>> ( 18 - 2 )
- | ( ( in[ 9 + inpos] - in [9 + inpos - 1] ) << 2 )
- | ( ( in[ 10 + inpos] - in [10 + inpos - 1] ) << 20 )
- ;
- out[ 6 + outpos] = ( in[ 10 + inpos] - in [10 + inpos - 1] ) >>> ( 18 - 6 )
- | ( ( in[ 11 + inpos] - in [11 + inpos - 1] ) << 6 )
- | ( ( in[ 12 + inpos] - in [12 + inpos - 1] ) << 24 )
- ;
- out[ 7 + outpos] = ( in[ 12 + inpos] - in [12 + inpos - 1] ) >>> ( 18 - 10 )
- | ( ( in[ 13 + inpos] - in [13 + inpos - 1] ) << 10 )
- | ( ( in[ 14 + inpos] - in [14 + inpos - 1] ) << 28 )
- ;
- out[ 8 + outpos] = ( in[ 14 + inpos] - in [14 + inpos - 1] ) >>> ( 18 - 14 )
- | ( ( in[ 15 + inpos] - in [15 + inpos - 1] ) << 14 )
- ;
- out[ 9 + outpos] = (in[ 16 + inpos] - in [16 + inpos - 1] )
- | ( ( in[ 17 + inpos] - in [17 + inpos - 1] ) << 18 )
- ;
- out[ 10 + outpos] = ( in[ 17 + inpos] - in [17 + inpos - 1] ) >>> ( 18 - 4 )
- | ( ( in[ 18 + inpos] - in [18 + inpos - 1] ) << 4 )
- | ( ( in[ 19 + inpos] - in [19 + inpos - 1] ) << 22 )
- ;
- out[ 11 + outpos] = ( in[ 19 + inpos] - in [19 + inpos - 1] ) >>> ( 18 - 8 )
- | ( ( in[ 20 + inpos] - in [20 + inpos - 1] ) << 8 )
- | ( ( in[ 21 + inpos] - in [21 + inpos - 1] ) << 26 )
- ;
- out[ 12 + outpos] = ( in[ 21 + inpos] - in [21 + inpos - 1] ) >>> ( 18 - 12 )
- | ( ( in[ 22 + inpos] - in [22 + inpos - 1] ) << 12 )
- | ( ( in[ 23 + inpos] - in [23 + inpos - 1] ) << 30 )
- ;
- out[ 13 + outpos] = ( in[ 23 + inpos] - in [23 + inpos - 1] ) >>> ( 18 - 16 )
- | ( ( in[ 24 + inpos] - in [24 + inpos - 1] ) << 16 )
- ;
- out[ 14 + outpos] = ( in[ 24 + inpos] - in [24 + inpos - 1] ) >>> ( 18 - 2 )
- | ( ( in[ 25 + inpos] - in [25 + inpos - 1] ) << 2 )
- | ( ( in[ 26 + inpos] - in [26 + inpos - 1] ) << 20 )
- ;
- out[ 15 + outpos] = ( in[ 26 + inpos] - in [26 + inpos - 1] ) >>> ( 18 - 6 )
- | ( ( in[ 27 + inpos] - in [27 + inpos - 1] ) << 6 )
- | ( ( in[ 28 + inpos] - in [28 + inpos - 1] ) << 24 )
- ;
- out[ 16 + outpos] = ( in[ 28 + inpos] - in [28 + inpos - 1] ) >>> ( 18 - 10 )
- | ( ( in[ 29 + inpos] - in [29 + inpos - 1] ) << 10 )
- | ( ( in[ 30 + inpos] - in [30 + inpos - 1] ) << 28 )
- ;
- out[ 17 + outpos] = ( in[ 30 + inpos] - in [30 + inpos - 1] ) >>> ( 18 - 14 )
- | ( ( in[ 31 + inpos] - in [31 + inpos - 1] ) << 14 )
- ;
-}
-
-
-
-
-public static void integratedpack19(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = (in[ 0 + inpos] - initoffset )
- | ( ( in[ 1 + inpos] - in [1 + inpos - 1] ) << 19 )
- ;
- out[ 1 + outpos] = ( in[ 1 + inpos] - in [1 + inpos - 1] ) >>> ( 19 - 6 )
- | ( ( in[ 2 + inpos] - in [2 + inpos - 1] ) << 6 )
- | ( ( in[ 3 + inpos] - in [3 + inpos - 1] ) << 25 )
- ;
- out[ 2 + outpos] = ( in[ 3 + inpos] - in [3 + inpos - 1] ) >>> ( 19 - 12 )
- | ( ( in[ 4 + inpos] - in [4 + inpos - 1] ) << 12 )
- | ( ( in[ 5 + inpos] - in [5 + inpos - 1] ) << 31 )
- ;
- out[ 3 + outpos] = ( in[ 5 + inpos] - in [5 + inpos - 1] ) >>> ( 19 - 18 )
- | ( ( in[ 6 + inpos] - in [6 + inpos - 1] ) << 18 )
- ;
- out[ 4 + outpos] = ( in[ 6 + inpos] - in [6 + inpos - 1] ) >>> ( 19 - 5 )
- | ( ( in[ 7 + inpos] - in [7 + inpos - 1] ) << 5 )
- | ( ( in[ 8 + inpos] - in [8 + inpos - 1] ) << 24 )
- ;
- out[ 5 + outpos] = ( in[ 8 + inpos] - in [8 + inpos - 1] ) >>> ( 19 - 11 )
- | ( ( in[ 9 + inpos] - in [9 + inpos - 1] ) << 11 )
- | ( ( in[ 10 + inpos] - in [10 + inpos - 1] ) << 30 )
- ;
- out[ 6 + outpos] = ( in[ 10 + inpos] - in [10 + inpos - 1] ) >>> ( 19 - 17 )
- | ( ( in[ 11 + inpos] - in [11 + inpos - 1] ) << 17 )
- ;
- out[ 7 + outpos] = ( in[ 11 + inpos] - in [11 + inpos - 1] ) >>> ( 19 - 4 )
- | ( ( in[ 12 + inpos] - in [12 + inpos - 1] ) << 4 )
- | ( ( in[ 13 + inpos] - in [13 + inpos - 1] ) << 23 )
- ;
- out[ 8 + outpos] = ( in[ 13 + inpos] - in [13 + inpos - 1] ) >>> ( 19 - 10 )
- | ( ( in[ 14 + inpos] - in [14 + inpos - 1] ) << 10 )
- | ( ( in[ 15 + inpos] - in [15 + inpos - 1] ) << 29 )
- ;
- out[ 9 + outpos] = ( in[ 15 + inpos] - in [15 + inpos - 1] ) >>> ( 19 - 16 )
- | ( ( in[ 16 + inpos] - in [16 + inpos - 1] ) << 16 )
- ;
- out[ 10 + outpos] = ( in[ 16 + inpos] - in [16 + inpos - 1] ) >>> ( 19 - 3 )
- | ( ( in[ 17 + inpos] - in [17 + inpos - 1] ) << 3 )
- | ( ( in[ 18 + inpos] - in [18 + inpos - 1] ) << 22 )
- ;
- out[ 11 + outpos] = ( in[ 18 + inpos] - in [18 + inpos - 1] ) >>> ( 19 - 9 )
- | ( ( in[ 19 + inpos] - in [19 + inpos - 1] ) << 9 )
- | ( ( in[ 20 + inpos] - in [20 + inpos - 1] ) << 28 )
- ;
- out[ 12 + outpos] = ( in[ 20 + inpos] - in [20 + inpos - 1] ) >>> ( 19 - 15 )
- | ( ( in[ 21 + inpos] - in [21 + inpos - 1] ) << 15 )
- ;
- out[ 13 + outpos] = ( in[ 21 + inpos] - in [21 + inpos - 1] ) >>> ( 19 - 2 )
- | ( ( in[ 22 + inpos] - in [22 + inpos - 1] ) << 2 )
- | ( ( in[ 23 + inpos] - in [23 + inpos - 1] ) << 21 )
- ;
- out[ 14 + outpos] = ( in[ 23 + inpos] - in [23 + inpos - 1] ) >>> ( 19 - 8 )
- | ( ( in[ 24 + inpos] - in [24 + inpos - 1] ) << 8 )
- | ( ( in[ 25 + inpos] - in [25 + inpos - 1] ) << 27 )
- ;
- out[ 15 + outpos] = ( in[ 25 + inpos] - in [25 + inpos - 1] ) >>> ( 19 - 14 )
- | ( ( in[ 26 + inpos] - in [26 + inpos - 1] ) << 14 )
- ;
- out[ 16 + outpos] = ( in[ 26 + inpos] - in [26 + inpos - 1] ) >>> ( 19 - 1 )
- | ( ( in[ 27 + inpos] - in [27 + inpos - 1] ) << 1 )
- | ( ( in[ 28 + inpos] - in [28 + inpos - 1] ) << 20 )
- ;
- out[ 17 + outpos] = ( in[ 28 + inpos] - in [28 + inpos - 1] ) >>> ( 19 - 7 )
- | ( ( in[ 29 + inpos] - in [29 + inpos - 1] ) << 7 )
- | ( ( in[ 30 + inpos] - in [30 + inpos - 1] ) << 26 )
- ;
- out[ 18 + outpos] = ( in[ 30 + inpos] - in [30 + inpos - 1] ) >>> ( 19 - 13 )
- | ( ( in[ 31 + inpos] - in [31 + inpos - 1] ) << 13 )
- ;
-}
-
-
-
-
-public static void integratedpack20(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = (in[ 0 + inpos] - initoffset )
- | ( ( in[ 1 + inpos] - in [1 + inpos - 1] ) << 20 )
- ;
- out[ 1 + outpos] = ( in[ 1 + inpos] - in [1 + inpos - 1] ) >>> ( 20 - 8 )
- | ( ( in[ 2 + inpos] - in [2 + inpos - 1] ) << 8 )
- | ( ( in[ 3 + inpos] - in [3 + inpos - 1] ) << 28 )
- ;
- out[ 2 + outpos] = ( in[ 3 + inpos] - in [3 + inpos - 1] ) >>> ( 20 - 16 )
- | ( ( in[ 4 + inpos] - in [4 + inpos - 1] ) << 16 )
- ;
- out[ 3 + outpos] = ( in[ 4 + inpos] - in [4 + inpos - 1] ) >>> ( 20 - 4 )
- | ( ( in[ 5 + inpos] - in [5 + inpos - 1] ) << 4 )
- | ( ( in[ 6 + inpos] - in [6 + inpos - 1] ) << 24 )
- ;
- out[ 4 + outpos] = ( in[ 6 + inpos] - in [6 + inpos - 1] ) >>> ( 20 - 12 )
- | ( ( in[ 7 + inpos] - in [7 + inpos - 1] ) << 12 )
- ;
- out[ 5 + outpos] = (in[ 8 + inpos] - in [8 + inpos - 1] )
- | ( ( in[ 9 + inpos] - in [9 + inpos - 1] ) << 20 )
- ;
- out[ 6 + outpos] = ( in[ 9 + inpos] - in [9 + inpos - 1] ) >>> ( 20 - 8 )
- | ( ( in[ 10 + inpos] - in [10 + inpos - 1] ) << 8 )
- | ( ( in[ 11 + inpos] - in [11 + inpos - 1] ) << 28 )
- ;
- out[ 7 + outpos] = ( in[ 11 + inpos] - in [11 + inpos - 1] ) >>> ( 20 - 16 )
- | ( ( in[ 12 + inpos] - in [12 + inpos - 1] ) << 16 )
- ;
- out[ 8 + outpos] = ( in[ 12 + inpos] - in [12 + inpos - 1] ) >>> ( 20 - 4 )
- | ( ( in[ 13 + inpos] - in [13 + inpos - 1] ) << 4 )
- | ( ( in[ 14 + inpos] - in [14 + inpos - 1] ) << 24 )
- ;
- out[ 9 + outpos] = ( in[ 14 + inpos] - in [14 + inpos - 1] ) >>> ( 20 - 12 )
- | ( ( in[ 15 + inpos] - in [15 + inpos - 1] ) << 12 )
- ;
- out[ 10 + outpos] = (in[ 16 + inpos] - in [16 + inpos - 1] )
- | ( ( in[ 17 + inpos] - in [17 + inpos - 1] ) << 20 )
- ;
- out[ 11 + outpos] = ( in[ 17 + inpos] - in [17 + inpos - 1] ) >>> ( 20 - 8 )
- | ( ( in[ 18 + inpos] - in [18 + inpos - 1] ) << 8 )
- | ( ( in[ 19 + inpos] - in [19 + inpos - 1] ) << 28 )
- ;
- out[ 12 + outpos] = ( in[ 19 + inpos] - in [19 + inpos - 1] ) >>> ( 20 - 16 )
- | ( ( in[ 20 + inpos] - in [20 + inpos - 1] ) << 16 )
- ;
- out[ 13 + outpos] = ( in[ 20 + inpos] - in [20 + inpos - 1] ) >>> ( 20 - 4 )
- | ( ( in[ 21 + inpos] - in [21 + inpos - 1] ) << 4 )
- | ( ( in[ 22 + inpos] - in [22 + inpos - 1] ) << 24 )
- ;
- out[ 14 + outpos] = ( in[ 22 + inpos] - in [22 + inpos - 1] ) >>> ( 20 - 12 )
- | ( ( in[ 23 + inpos] - in [23 + inpos - 1] ) << 12 )
- ;
- out[ 15 + outpos] = (in[ 24 + inpos] - in [24 + inpos - 1] )
- | ( ( in[ 25 + inpos] - in [25 + inpos - 1] ) << 20 )
- ;
- out[ 16 + outpos] = ( in[ 25 + inpos] - in [25 + inpos - 1] ) >>> ( 20 - 8 )
- | ( ( in[ 26 + inpos] - in [26 + inpos - 1] ) << 8 )
- | ( ( in[ 27 + inpos] - in [27 + inpos - 1] ) << 28 )
- ;
- out[ 17 + outpos] = ( in[ 27 + inpos] - in [27 + inpos - 1] ) >>> ( 20 - 16 )
- | ( ( in[ 28 + inpos] - in [28 + inpos - 1] ) << 16 )
- ;
- out[ 18 + outpos] = ( in[ 28 + inpos] - in [28 + inpos - 1] ) >>> ( 20 - 4 )
- | ( ( in[ 29 + inpos] - in [29 + inpos - 1] ) << 4 )
- | ( ( in[ 30 + inpos] - in [30 + inpos - 1] ) << 24 )
- ;
- out[ 19 + outpos] = ( in[ 30 + inpos] - in [30 + inpos - 1] ) >>> ( 20 - 12 )
- | ( ( in[ 31 + inpos] - in [31 + inpos - 1] ) << 12 )
- ;
-}
-
-
-
-
-public static void integratedpack21(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = (in[ 0 + inpos] - initoffset )
- | ( ( in[ 1 + inpos] - in [1 + inpos - 1] ) << 21 )
- ;
- out[ 1 + outpos] = ( in[ 1 + inpos] - in [1 + inpos - 1] ) >>> ( 21 - 10 )
- | ( ( in[ 2 + inpos] - in [2 + inpos - 1] ) << 10 )
- | ( ( in[ 3 + inpos] - in [3 + inpos - 1] ) << 31 )
- ;
- out[ 2 + outpos] = ( in[ 3 + inpos] - in [3 + inpos - 1] ) >>> ( 21 - 20 )
- | ( ( in[ 4 + inpos] - in [4 + inpos - 1] ) << 20 )
- ;
- out[ 3 + outpos] = ( in[ 4 + inpos] - in [4 + inpos - 1] ) >>> ( 21 - 9 )
- | ( ( in[ 5 + inpos] - in [5 + inpos - 1] ) << 9 )
- | ( ( in[ 6 + inpos] - in [6 + inpos - 1] ) << 30 )
- ;
- out[ 4 + outpos] = ( in[ 6 + inpos] - in [6 + inpos - 1] ) >>> ( 21 - 19 )
- | ( ( in[ 7 + inpos] - in [7 + inpos - 1] ) << 19 )
- ;
- out[ 5 + outpos] = ( in[ 7 + inpos] - in [7 + inpos - 1] ) >>> ( 21 - 8 )
- | ( ( in[ 8 + inpos] - in [8 + inpos - 1] ) << 8 )
- | ( ( in[ 9 + inpos] - in [9 + inpos - 1] ) << 29 )
- ;
- out[ 6 + outpos] = ( in[ 9 + inpos] - in [9 + inpos - 1] ) >>> ( 21 - 18 )
- | ( ( in[ 10 + inpos] - in [10 + inpos - 1] ) << 18 )
- ;
- out[ 7 + outpos] = ( in[ 10 + inpos] - in [10 + inpos - 1] ) >>> ( 21 - 7 )
- | ( ( in[ 11 + inpos] - in [11 + inpos - 1] ) << 7 )
- | ( ( in[ 12 + inpos] - in [12 + inpos - 1] ) << 28 )
- ;
- out[ 8 + outpos] = ( in[ 12 + inpos] - in [12 + inpos - 1] ) >>> ( 21 - 17 )
- | ( ( in[ 13 + inpos] - in [13 + inpos - 1] ) << 17 )
- ;
- out[ 9 + outpos] = ( in[ 13 + inpos] - in [13 + inpos - 1] ) >>> ( 21 - 6 )
- | ( ( in[ 14 + inpos] - in [14 + inpos - 1] ) << 6 )
- | ( ( in[ 15 + inpos] - in [15 + inpos - 1] ) << 27 )
- ;
- out[ 10 + outpos] = ( in[ 15 + inpos] - in [15 + inpos - 1] ) >>> ( 21 - 16 )
- | ( ( in[ 16 + inpos] - in [16 + inpos - 1] ) << 16 )
- ;
- out[ 11 + outpos] = ( in[ 16 + inpos] - in [16 + inpos - 1] ) >>> ( 21 - 5 )
- | ( ( in[ 17 + inpos] - in [17 + inpos - 1] ) << 5 )
- | ( ( in[ 18 + inpos] - in [18 + inpos - 1] ) << 26 )
- ;
- out[ 12 + outpos] = ( in[ 18 + inpos] - in [18 + inpos - 1] ) >>> ( 21 - 15 )
- | ( ( in[ 19 + inpos] - in [19 + inpos - 1] ) << 15 )
- ;
- out[ 13 + outpos] = ( in[ 19 + inpos] - in [19 + inpos - 1] ) >>> ( 21 - 4 )
- | ( ( in[ 20 + inpos] - in [20 + inpos - 1] ) << 4 )
- | ( ( in[ 21 + inpos] - in [21 + inpos - 1] ) << 25 )
- ;
- out[ 14 + outpos] = ( in[ 21 + inpos] - in [21 + inpos - 1] ) >>> ( 21 - 14 )
- | ( ( in[ 22 + inpos] - in [22 + inpos - 1] ) << 14 )
- ;
- out[ 15 + outpos] = ( in[ 22 + inpos] - in [22 + inpos - 1] ) >>> ( 21 - 3 )
- | ( ( in[ 23 + inpos] - in [23 + inpos - 1] ) << 3 )
- | ( ( in[ 24 + inpos] - in [24 + inpos - 1] ) << 24 )
- ;
- out[ 16 + outpos] = ( in[ 24 + inpos] - in [24 + inpos - 1] ) >>> ( 21 - 13 )
- | ( ( in[ 25 + inpos] - in [25 + inpos - 1] ) << 13 )
- ;
- out[ 17 + outpos] = ( in[ 25 + inpos] - in [25 + inpos - 1] ) >>> ( 21 - 2 )
- | ( ( in[ 26 + inpos] - in [26 + inpos - 1] ) << 2 )
- | ( ( in[ 27 + inpos] - in [27 + inpos - 1] ) << 23 )
- ;
- out[ 18 + outpos] = ( in[ 27 + inpos] - in [27 + inpos - 1] ) >>> ( 21 - 12 )
- | ( ( in[ 28 + inpos] - in [28 + inpos - 1] ) << 12 )
- ;
- out[ 19 + outpos] = ( in[ 28 + inpos] - in [28 + inpos - 1] ) >>> ( 21 - 1 )
- | ( ( in[ 29 + inpos] - in [29 + inpos - 1] ) << 1 )
- | ( ( in[ 30 + inpos] - in [30 + inpos - 1] ) << 22 )
- ;
- out[ 20 + outpos] = ( in[ 30 + inpos] - in [30 + inpos - 1] ) >>> ( 21 - 11 )
- | ( ( in[ 31 + inpos] - in [31 + inpos - 1] ) << 11 )
- ;
-}
-
-
-
-
-public static void integratedpack22(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = (in[ 0 + inpos] - initoffset )
- | ( ( in[ 1 + inpos] - in [1 + inpos - 1] ) << 22 )
- ;
- out[ 1 + outpos] = ( in[ 1 + inpos] - in [1 + inpos - 1] ) >>> ( 22 - 12 )
- | ( ( in[ 2 + inpos] - in [2 + inpos - 1] ) << 12 )
- ;
- out[ 2 + outpos] = ( in[ 2 + inpos] - in [2 + inpos - 1] ) >>> ( 22 - 2 )
- | ( ( in[ 3 + inpos] - in [3 + inpos - 1] ) << 2 )
- | ( ( in[ 4 + inpos] - in [4 + inpos - 1] ) << 24 )
- ;
- out[ 3 + outpos] = ( in[ 4 + inpos] - in [4 + inpos - 1] ) >>> ( 22 - 14 )
- | ( ( in[ 5 + inpos] - in [5 + inpos - 1] ) << 14 )
- ;
- out[ 4 + outpos] = ( in[ 5 + inpos] - in [5 + inpos - 1] ) >>> ( 22 - 4 )
- | ( ( in[ 6 + inpos] - in [6 + inpos - 1] ) << 4 )
- | ( ( in[ 7 + inpos] - in [7 + inpos - 1] ) << 26 )
- ;
- out[ 5 + outpos] = ( in[ 7 + inpos] - in [7 + inpos - 1] ) >>> ( 22 - 16 )
- | ( ( in[ 8 + inpos] - in [8 + inpos - 1] ) << 16 )
- ;
- out[ 6 + outpos] = ( in[ 8 + inpos] - in [8 + inpos - 1] ) >>> ( 22 - 6 )
- | ( ( in[ 9 + inpos] - in [9 + inpos - 1] ) << 6 )
- | ( ( in[ 10 + inpos] - in [10 + inpos - 1] ) << 28 )
- ;
- out[ 7 + outpos] = ( in[ 10 + inpos] - in [10 + inpos - 1] ) >>> ( 22 - 18 )
- | ( ( in[ 11 + inpos] - in [11 + inpos - 1] ) << 18 )
- ;
- out[ 8 + outpos] = ( in[ 11 + inpos] - in [11 + inpos - 1] ) >>> ( 22 - 8 )
- | ( ( in[ 12 + inpos] - in [12 + inpos - 1] ) << 8 )
- | ( ( in[ 13 + inpos] - in [13 + inpos - 1] ) << 30 )
- ;
- out[ 9 + outpos] = ( in[ 13 + inpos] - in [13 + inpos - 1] ) >>> ( 22 - 20 )
- | ( ( in[ 14 + inpos] - in [14 + inpos - 1] ) << 20 )
- ;
- out[ 10 + outpos] = ( in[ 14 + inpos] - in [14 + inpos - 1] ) >>> ( 22 - 10 )
- | ( ( in[ 15 + inpos] - in [15 + inpos - 1] ) << 10 )
- ;
- out[ 11 + outpos] = (in[ 16 + inpos] - in [16 + inpos - 1] )
- | ( ( in[ 17 + inpos] - in [17 + inpos - 1] ) << 22 )
- ;
- out[ 12 + outpos] = ( in[ 17 + inpos] - in [17 + inpos - 1] ) >>> ( 22 - 12 )
- | ( ( in[ 18 + inpos] - in [18 + inpos - 1] ) << 12 )
- ;
- out[ 13 + outpos] = ( in[ 18 + inpos] - in [18 + inpos - 1] ) >>> ( 22 - 2 )
- | ( ( in[ 19 + inpos] - in [19 + inpos - 1] ) << 2 )
- | ( ( in[ 20 + inpos] - in [20 + inpos - 1] ) << 24 )
- ;
- out[ 14 + outpos] = ( in[ 20 + inpos] - in [20 + inpos - 1] ) >>> ( 22 - 14 )
- | ( ( in[ 21 + inpos] - in [21 + inpos - 1] ) << 14 )
- ;
- out[ 15 + outpos] = ( in[ 21 + inpos] - in [21 + inpos - 1] ) >>> ( 22 - 4 )
- | ( ( in[ 22 + inpos] - in [22 + inpos - 1] ) << 4 )
- | ( ( in[ 23 + inpos] - in [23 + inpos - 1] ) << 26 )
- ;
- out[ 16 + outpos] = ( in[ 23 + inpos] - in [23 + inpos - 1] ) >>> ( 22 - 16 )
- | ( ( in[ 24 + inpos] - in [24 + inpos - 1] ) << 16 )
- ;
- out[ 17 + outpos] = ( in[ 24 + inpos] - in [24 + inpos - 1] ) >>> ( 22 - 6 )
- | ( ( in[ 25 + inpos] - in [25 + inpos - 1] ) << 6 )
- | ( ( in[ 26 + inpos] - in [26 + inpos - 1] ) << 28 )
- ;
- out[ 18 + outpos] = ( in[ 26 + inpos] - in [26 + inpos - 1] ) >>> ( 22 - 18 )
- | ( ( in[ 27 + inpos] - in [27 + inpos - 1] ) << 18 )
- ;
- out[ 19 + outpos] = ( in[ 27 + inpos] - in [27 + inpos - 1] ) >>> ( 22 - 8 )
- | ( ( in[ 28 + inpos] - in [28 + inpos - 1] ) << 8 )
- | ( ( in[ 29 + inpos] - in [29 + inpos - 1] ) << 30 )
- ;
- out[ 20 + outpos] = ( in[ 29 + inpos] - in [29 + inpos - 1] ) >>> ( 22 - 20 )
- | ( ( in[ 30 + inpos] - in [30 + inpos - 1] ) << 20 )
- ;
- out[ 21 + outpos] = ( in[ 30 + inpos] - in [30 + inpos - 1] ) >>> ( 22 - 10 )
- | ( ( in[ 31 + inpos] - in [31 + inpos - 1] ) << 10 )
- ;
-}
-
-
-
-
-public static void integratedpack23(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = (in[ 0 + inpos] - initoffset )
- | ( ( in[ 1 + inpos] - in [1 + inpos - 1] ) << 23 )
- ;
- out[ 1 + outpos] = ( in[ 1 + inpos] - in [1 + inpos - 1] ) >>> ( 23 - 14 )
- | ( ( in[ 2 + inpos] - in [2 + inpos - 1] ) << 14 )
- ;
- out[ 2 + outpos] = ( in[ 2 + inpos] - in [2 + inpos - 1] ) >>> ( 23 - 5 )
- | ( ( in[ 3 + inpos] - in [3 + inpos - 1] ) << 5 )
- | ( ( in[ 4 + inpos] - in [4 + inpos - 1] ) << 28 )
- ;
- out[ 3 + outpos] = ( in[ 4 + inpos] - in [4 + inpos - 1] ) >>> ( 23 - 19 )
- | ( ( in[ 5 + inpos] - in [5 + inpos - 1] ) << 19 )
- ;
- out[ 4 + outpos] = ( in[ 5 + inpos] - in [5 + inpos - 1] ) >>> ( 23 - 10 )
- | ( ( in[ 6 + inpos] - in [6 + inpos - 1] ) << 10 )
- ;
- out[ 5 + outpos] = ( in[ 6 + inpos] - in [6 + inpos - 1] ) >>> ( 23 - 1 )
- | ( ( in[ 7 + inpos] - in [7 + inpos - 1] ) << 1 )
- | ( ( in[ 8 + inpos] - in [8 + inpos - 1] ) << 24 )
- ;
- out[ 6 + outpos] = ( in[ 8 + inpos] - in [8 + inpos - 1] ) >>> ( 23 - 15 )
- | ( ( in[ 9 + inpos] - in [9 + inpos - 1] ) << 15 )
- ;
- out[ 7 + outpos] = ( in[ 9 + inpos] - in [9 + inpos - 1] ) >>> ( 23 - 6 )
- | ( ( in[ 10 + inpos] - in [10 + inpos - 1] ) << 6 )
- | ( ( in[ 11 + inpos] - in [11 + inpos - 1] ) << 29 )
- ;
- out[ 8 + outpos] = ( in[ 11 + inpos] - in [11 + inpos - 1] ) >>> ( 23 - 20 )
- | ( ( in[ 12 + inpos] - in [12 + inpos - 1] ) << 20 )
- ;
- out[ 9 + outpos] = ( in[ 12 + inpos] - in [12 + inpos - 1] ) >>> ( 23 - 11 )
- | ( ( in[ 13 + inpos] - in [13 + inpos - 1] ) << 11 )
- ;
- out[ 10 + outpos] = ( in[ 13 + inpos] - in [13 + inpos - 1] ) >>> ( 23 - 2 )
- | ( ( in[ 14 + inpos] - in [14 + inpos - 1] ) << 2 )
- | ( ( in[ 15 + inpos] - in [15 + inpos - 1] ) << 25 )
- ;
- out[ 11 + outpos] = ( in[ 15 + inpos] - in [15 + inpos - 1] ) >>> ( 23 - 16 )
- | ( ( in[ 16 + inpos] - in [16 + inpos - 1] ) << 16 )
- ;
- out[ 12 + outpos] = ( in[ 16 + inpos] - in [16 + inpos - 1] ) >>> ( 23 - 7 )
- | ( ( in[ 17 + inpos] - in [17 + inpos - 1] ) << 7 )
- | ( ( in[ 18 + inpos] - in [18 + inpos - 1] ) << 30 )
- ;
- out[ 13 + outpos] = ( in[ 18 + inpos] - in [18 + inpos - 1] ) >>> ( 23 - 21 )
- | ( ( in[ 19 + inpos] - in [19 + inpos - 1] ) << 21 )
- ;
- out[ 14 + outpos] = ( in[ 19 + inpos] - in [19 + inpos - 1] ) >>> ( 23 - 12 )
- | ( ( in[ 20 + inpos] - in [20 + inpos - 1] ) << 12 )
- ;
- out[ 15 + outpos] = ( in[ 20 + inpos] - in [20 + inpos - 1] ) >>> ( 23 - 3 )
- | ( ( in[ 21 + inpos] - in [21 + inpos - 1] ) << 3 )
- | ( ( in[ 22 + inpos] - in [22 + inpos - 1] ) << 26 )
- ;
- out[ 16 + outpos] = ( in[ 22 + inpos] - in [22 + inpos - 1] ) >>> ( 23 - 17 )
- | ( ( in[ 23 + inpos] - in [23 + inpos - 1] ) << 17 )
- ;
- out[ 17 + outpos] = ( in[ 23 + inpos] - in [23 + inpos - 1] ) >>> ( 23 - 8 )
- | ( ( in[ 24 + inpos] - in [24 + inpos - 1] ) << 8 )
- | ( ( in[ 25 + inpos] - in [25 + inpos - 1] ) << 31 )
- ;
- out[ 18 + outpos] = ( in[ 25 + inpos] - in [25 + inpos - 1] ) >>> ( 23 - 22 )
- | ( ( in[ 26 + inpos] - in [26 + inpos - 1] ) << 22 )
- ;
- out[ 19 + outpos] = ( in[ 26 + inpos] - in [26 + inpos - 1] ) >>> ( 23 - 13 )
- | ( ( in[ 27 + inpos] - in [27 + inpos - 1] ) << 13 )
- ;
- out[ 20 + outpos] = ( in[ 27 + inpos] - in [27 + inpos - 1] ) >>> ( 23 - 4 )
- | ( ( in[ 28 + inpos] - in [28 + inpos - 1] ) << 4 )
- | ( ( in[ 29 + inpos] - in [29 + inpos - 1] ) << 27 )
- ;
- out[ 21 + outpos] = ( in[ 29 + inpos] - in [29 + inpos - 1] ) >>> ( 23 - 18 )
- | ( ( in[ 30 + inpos] - in [30 + inpos - 1] ) << 18 )
- ;
- out[ 22 + outpos] = ( in[ 30 + inpos] - in [30 + inpos - 1] ) >>> ( 23 - 9 )
- | ( ( in[ 31 + inpos] - in [31 + inpos - 1] ) << 9 )
- ;
-}
-
-
-
-
-public static void integratedpack24(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = (in[ 0 + inpos] - initoffset )
- | ( ( in[ 1 + inpos] - in [1 + inpos - 1] ) << 24 )
- ;
- out[ 1 + outpos] = ( in[ 1 + inpos] - in [1 + inpos - 1] ) >>> ( 24 - 16 )
- | ( ( in[ 2 + inpos] - in [2 + inpos - 1] ) << 16 )
- ;
- out[ 2 + outpos] = ( in[ 2 + inpos] - in [2 + inpos - 1] ) >>> ( 24 - 8 )
- | ( ( in[ 3 + inpos] - in [3 + inpos - 1] ) << 8 )
- ;
- out[ 3 + outpos] = (in[ 4 + inpos] - in [4 + inpos - 1] )
- | ( ( in[ 5 + inpos] - in [5 + inpos - 1] ) << 24 )
- ;
- out[ 4 + outpos] = ( in[ 5 + inpos] - in [5 + inpos - 1] ) >>> ( 24 - 16 )
- | ( ( in[ 6 + inpos] - in [6 + inpos - 1] ) << 16 )
- ;
- out[ 5 + outpos] = ( in[ 6 + inpos] - in [6 + inpos - 1] ) >>> ( 24 - 8 )
- | ( ( in[ 7 + inpos] - in [7 + inpos - 1] ) << 8 )
- ;
- out[ 6 + outpos] = (in[ 8 + inpos] - in [8 + inpos - 1] )
- | ( ( in[ 9 + inpos] - in [9 + inpos - 1] ) << 24 )
- ;
- out[ 7 + outpos] = ( in[ 9 + inpos] - in [9 + inpos - 1] ) >>> ( 24 - 16 )
- | ( ( in[ 10 + inpos] - in [10 + inpos - 1] ) << 16 )
- ;
- out[ 8 + outpos] = ( in[ 10 + inpos] - in [10 + inpos - 1] ) >>> ( 24 - 8 )
- | ( ( in[ 11 + inpos] - in [11 + inpos - 1] ) << 8 )
- ;
- out[ 9 + outpos] = (in[ 12 + inpos] - in [12 + inpos - 1] )
- | ( ( in[ 13 + inpos] - in [13 + inpos - 1] ) << 24 )
- ;
- out[ 10 + outpos] = ( in[ 13 + inpos] - in [13 + inpos - 1] ) >>> ( 24 - 16 )
- | ( ( in[ 14 + inpos] - in [14 + inpos - 1] ) << 16 )
- ;
- out[ 11 + outpos] = ( in[ 14 + inpos] - in [14 + inpos - 1] ) >>> ( 24 - 8 )
- | ( ( in[ 15 + inpos] - in [15 + inpos - 1] ) << 8 )
- ;
- out[ 12 + outpos] = (in[ 16 + inpos] - in [16 + inpos - 1] )
- | ( ( in[ 17 + inpos] - in [17 + inpos - 1] ) << 24 )
- ;
- out[ 13 + outpos] = ( in[ 17 + inpos] - in [17 + inpos - 1] ) >>> ( 24 - 16 )
- | ( ( in[ 18 + inpos] - in [18 + inpos - 1] ) << 16 )
- ;
- out[ 14 + outpos] = ( in[ 18 + inpos] - in [18 + inpos - 1] ) >>> ( 24 - 8 )
- | ( ( in[ 19 + inpos] - in [19 + inpos - 1] ) << 8 )
- ;
- out[ 15 + outpos] = (in[ 20 + inpos] - in [20 + inpos - 1] )
- | ( ( in[ 21 + inpos] - in [21 + inpos - 1] ) << 24 )
- ;
- out[ 16 + outpos] = ( in[ 21 + inpos] - in [21 + inpos - 1] ) >>> ( 24 - 16 )
- | ( ( in[ 22 + inpos] - in [22 + inpos - 1] ) << 16 )
- ;
- out[ 17 + outpos] = ( in[ 22 + inpos] - in [22 + inpos - 1] ) >>> ( 24 - 8 )
- | ( ( in[ 23 + inpos] - in [23 + inpos - 1] ) << 8 )
- ;
- out[ 18 + outpos] = (in[ 24 + inpos] - in [24 + inpos - 1] )
- | ( ( in[ 25 + inpos] - in [25 + inpos - 1] ) << 24 )
- ;
- out[ 19 + outpos] = ( in[ 25 + inpos] - in [25 + inpos - 1] ) >>> ( 24 - 16 )
- | ( ( in[ 26 + inpos] - in [26 + inpos - 1] ) << 16 )
- ;
- out[ 20 + outpos] = ( in[ 26 + inpos] - in [26 + inpos - 1] ) >>> ( 24 - 8 )
- | ( ( in[ 27 + inpos] - in [27 + inpos - 1] ) << 8 )
- ;
- out[ 21 + outpos] = (in[ 28 + inpos] - in [28 + inpos - 1] )
- | ( ( in[ 29 + inpos] - in [29 + inpos - 1] ) << 24 )
- ;
- out[ 22 + outpos] = ( in[ 29 + inpos] - in [29 + inpos - 1] ) >>> ( 24 - 16 )
- | ( ( in[ 30 + inpos] - in [30 + inpos - 1] ) << 16 )
- ;
- out[ 23 + outpos] = ( in[ 30 + inpos] - in [30 + inpos - 1] ) >>> ( 24 - 8 )
- | ( ( in[ 31 + inpos] - in [31 + inpos - 1] ) << 8 )
- ;
-}
-
-
-
-
-public static void integratedpack25(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = (in[ 0 + inpos] - initoffset )
- | ( ( in[ 1 + inpos] - in [1 + inpos - 1] ) << 25 )
- ;
- out[ 1 + outpos] = ( in[ 1 + inpos] - in [1 + inpos - 1] ) >>> ( 25 - 18 )
- | ( ( in[ 2 + inpos] - in [2 + inpos - 1] ) << 18 )
- ;
- out[ 2 + outpos] = ( in[ 2 + inpos] - in [2 + inpos - 1] ) >>> ( 25 - 11 )
- | ( ( in[ 3 + inpos] - in [3 + inpos - 1] ) << 11 )
- ;
- out[ 3 + outpos] = ( in[ 3 + inpos] - in [3 + inpos - 1] ) >>> ( 25 - 4 )
- | ( ( in[ 4 + inpos] - in [4 + inpos - 1] ) << 4 )
- | ( ( in[ 5 + inpos] - in [5 + inpos - 1] ) << 29 )
- ;
- out[ 4 + outpos] = ( in[ 5 + inpos] - in [5 + inpos - 1] ) >>> ( 25 - 22 )
- | ( ( in[ 6 + inpos] - in [6 + inpos - 1] ) << 22 )
- ;
- out[ 5 + outpos] = ( in[ 6 + inpos] - in [6 + inpos - 1] ) >>> ( 25 - 15 )
- | ( ( in[ 7 + inpos] - in [7 + inpos - 1] ) << 15 )
- ;
- out[ 6 + outpos] = ( in[ 7 + inpos] - in [7 + inpos - 1] ) >>> ( 25 - 8 )
- | ( ( in[ 8 + inpos] - in [8 + inpos - 1] ) << 8 )
- ;
- out[ 7 + outpos] = ( in[ 8 + inpos] - in [8 + inpos - 1] ) >>> ( 25 - 1 )
- | ( ( in[ 9 + inpos] - in [9 + inpos - 1] ) << 1 )
- | ( ( in[ 10 + inpos] - in [10 + inpos - 1] ) << 26 )
- ;
- out[ 8 + outpos] = ( in[ 10 + inpos] - in [10 + inpos - 1] ) >>> ( 25 - 19 )
- | ( ( in[ 11 + inpos] - in [11 + inpos - 1] ) << 19 )
- ;
- out[ 9 + outpos] = ( in[ 11 + inpos] - in [11 + inpos - 1] ) >>> ( 25 - 12 )
- | ( ( in[ 12 + inpos] - in [12 + inpos - 1] ) << 12 )
- ;
- out[ 10 + outpos] = ( in[ 12 + inpos] - in [12 + inpos - 1] ) >>> ( 25 - 5 )
- | ( ( in[ 13 + inpos] - in [13 + inpos - 1] ) << 5 )
- | ( ( in[ 14 + inpos] - in [14 + inpos - 1] ) << 30 )
- ;
- out[ 11 + outpos] = ( in[ 14 + inpos] - in [14 + inpos - 1] ) >>> ( 25 - 23 )
- | ( ( in[ 15 + inpos] - in [15 + inpos - 1] ) << 23 )
- ;
- out[ 12 + outpos] = ( in[ 15 + inpos] - in [15 + inpos - 1] ) >>> ( 25 - 16 )
- | ( ( in[ 16 + inpos] - in [16 + inpos - 1] ) << 16 )
- ;
- out[ 13 + outpos] = ( in[ 16 + inpos] - in [16 + inpos - 1] ) >>> ( 25 - 9 )
- | ( ( in[ 17 + inpos] - in [17 + inpos - 1] ) << 9 )
- ;
- out[ 14 + outpos] = ( in[ 17 + inpos] - in [17 + inpos - 1] ) >>> ( 25 - 2 )
- | ( ( in[ 18 + inpos] - in [18 + inpos - 1] ) << 2 )
- | ( ( in[ 19 + inpos] - in [19 + inpos - 1] ) << 27 )
- ;
- out[ 15 + outpos] = ( in[ 19 + inpos] - in [19 + inpos - 1] ) >>> ( 25 - 20 )
- | ( ( in[ 20 + inpos] - in [20 + inpos - 1] ) << 20 )
- ;
- out[ 16 + outpos] = ( in[ 20 + inpos] - in [20 + inpos - 1] ) >>> ( 25 - 13 )
- | ( ( in[ 21 + inpos] - in [21 + inpos - 1] ) << 13 )
- ;
- out[ 17 + outpos] = ( in[ 21 + inpos] - in [21 + inpos - 1] ) >>> ( 25 - 6 )
- | ( ( in[ 22 + inpos] - in [22 + inpos - 1] ) << 6 )
- | ( ( in[ 23 + inpos] - in [23 + inpos - 1] ) << 31 )
- ;
- out[ 18 + outpos] = ( in[ 23 + inpos] - in [23 + inpos - 1] ) >>> ( 25 - 24 )
- | ( ( in[ 24 + inpos] - in [24 + inpos - 1] ) << 24 )
- ;
- out[ 19 + outpos] = ( in[ 24 + inpos] - in [24 + inpos - 1] ) >>> ( 25 - 17 )
- | ( ( in[ 25 + inpos] - in [25 + inpos - 1] ) << 17 )
- ;
- out[ 20 + outpos] = ( in[ 25 + inpos] - in [25 + inpos - 1] ) >>> ( 25 - 10 )
- | ( ( in[ 26 + inpos] - in [26 + inpos - 1] ) << 10 )
- ;
- out[ 21 + outpos] = ( in[ 26 + inpos] - in [26 + inpos - 1] ) >>> ( 25 - 3 )
- | ( ( in[ 27 + inpos] - in [27 + inpos - 1] ) << 3 )
- | ( ( in[ 28 + inpos] - in [28 + inpos - 1] ) << 28 )
- ;
- out[ 22 + outpos] = ( in[ 28 + inpos] - in [28 + inpos - 1] ) >>> ( 25 - 21 )
- | ( ( in[ 29 + inpos] - in [29 + inpos - 1] ) << 21 )
- ;
- out[ 23 + outpos] = ( in[ 29 + inpos] - in [29 + inpos - 1] ) >>> ( 25 - 14 )
- | ( ( in[ 30 + inpos] - in [30 + inpos - 1] ) << 14 )
- ;
- out[ 24 + outpos] = ( in[ 30 + inpos] - in [30 + inpos - 1] ) >>> ( 25 - 7 )
- | ( ( in[ 31 + inpos] - in [31 + inpos - 1] ) << 7 )
- ;
-}
-
-
-
-
-public static void integratedpack26(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = (in[ 0 + inpos] - initoffset )
- | ( ( in[ 1 + inpos] - in [1 + inpos - 1] ) << 26 )
- ;
- out[ 1 + outpos] = ( in[ 1 + inpos] - in [1 + inpos - 1] ) >>> ( 26 - 20 )
- | ( ( in[ 2 + inpos] - in [2 + inpos - 1] ) << 20 )
- ;
- out[ 2 + outpos] = ( in[ 2 + inpos] - in [2 + inpos - 1] ) >>> ( 26 - 14 )
- | ( ( in[ 3 + inpos] - in [3 + inpos - 1] ) << 14 )
- ;
- out[ 3 + outpos] = ( in[ 3 + inpos] - in [3 + inpos - 1] ) >>> ( 26 - 8 )
- | ( ( in[ 4 + inpos] - in [4 + inpos - 1] ) << 8 )
- ;
- out[ 4 + outpos] = ( in[ 4 + inpos] - in [4 + inpos - 1] ) >>> ( 26 - 2 )
- | ( ( in[ 5 + inpos] - in [5 + inpos - 1] ) << 2 )
- | ( ( in[ 6 + inpos] - in [6 + inpos - 1] ) << 28 )
- ;
- out[ 5 + outpos] = ( in[ 6 + inpos] - in [6 + inpos - 1] ) >>> ( 26 - 22 )
- | ( ( in[ 7 + inpos] - in [7 + inpos - 1] ) << 22 )
- ;
- out[ 6 + outpos] = ( in[ 7 + inpos] - in [7 + inpos - 1] ) >>> ( 26 - 16 )
- | ( ( in[ 8 + inpos] - in [8 + inpos - 1] ) << 16 )
- ;
- out[ 7 + outpos] = ( in[ 8 + inpos] - in [8 + inpos - 1] ) >>> ( 26 - 10 )
- | ( ( in[ 9 + inpos] - in [9 + inpos - 1] ) << 10 )
- ;
- out[ 8 + outpos] = ( in[ 9 + inpos] - in [9 + inpos - 1] ) >>> ( 26 - 4 )
- | ( ( in[ 10 + inpos] - in [10 + inpos - 1] ) << 4 )
- | ( ( in[ 11 + inpos] - in [11 + inpos - 1] ) << 30 )
- ;
- out[ 9 + outpos] = ( in[ 11 + inpos] - in [11 + inpos - 1] ) >>> ( 26 - 24 )
- | ( ( in[ 12 + inpos] - in [12 + inpos - 1] ) << 24 )
- ;
- out[ 10 + outpos] = ( in[ 12 + inpos] - in [12 + inpos - 1] ) >>> ( 26 - 18 )
- | ( ( in[ 13 + inpos] - in [13 + inpos - 1] ) << 18 )
- ;
- out[ 11 + outpos] = ( in[ 13 + inpos] - in [13 + inpos - 1] ) >>> ( 26 - 12 )
- | ( ( in[ 14 + inpos] - in [14 + inpos - 1] ) << 12 )
- ;
- out[ 12 + outpos] = ( in[ 14 + inpos] - in [14 + inpos - 1] ) >>> ( 26 - 6 )
- | ( ( in[ 15 + inpos] - in [15 + inpos - 1] ) << 6 )
- ;
- out[ 13 + outpos] = (in[ 16 + inpos] - in [16 + inpos - 1] )
- | ( ( in[ 17 + inpos] - in [17 + inpos - 1] ) << 26 )
- ;
- out[ 14 + outpos] = ( in[ 17 + inpos] - in [17 + inpos - 1] ) >>> ( 26 - 20 )
- | ( ( in[ 18 + inpos] - in [18 + inpos - 1] ) << 20 )
- ;
- out[ 15 + outpos] = ( in[ 18 + inpos] - in [18 + inpos - 1] ) >>> ( 26 - 14 )
- | ( ( in[ 19 + inpos] - in [19 + inpos - 1] ) << 14 )
- ;
- out[ 16 + outpos] = ( in[ 19 + inpos] - in [19 + inpos - 1] ) >>> ( 26 - 8 )
- | ( ( in[ 20 + inpos] - in [20 + inpos - 1] ) << 8 )
- ;
- out[ 17 + outpos] = ( in[ 20 + inpos] - in [20 + inpos - 1] ) >>> ( 26 - 2 )
- | ( ( in[ 21 + inpos] - in [21 + inpos - 1] ) << 2 )
- | ( ( in[ 22 + inpos] - in [22 + inpos - 1] ) << 28 )
- ;
- out[ 18 + outpos] = ( in[ 22 + inpos] - in [22 + inpos - 1] ) >>> ( 26 - 22 )
- | ( ( in[ 23 + inpos] - in [23 + inpos - 1] ) << 22 )
- ;
- out[ 19 + outpos] = ( in[ 23 + inpos] - in [23 + inpos - 1] ) >>> ( 26 - 16 )
- | ( ( in[ 24 + inpos] - in [24 + inpos - 1] ) << 16 )
- ;
- out[ 20 + outpos] = ( in[ 24 + inpos] - in [24 + inpos - 1] ) >>> ( 26 - 10 )
- | ( ( in[ 25 + inpos] - in [25 + inpos - 1] ) << 10 )
- ;
- out[ 21 + outpos] = ( in[ 25 + inpos] - in [25 + inpos - 1] ) >>> ( 26 - 4 )
- | ( ( in[ 26 + inpos] - in [26 + inpos - 1] ) << 4 )
- | ( ( in[ 27 + inpos] - in [27 + inpos - 1] ) << 30 )
- ;
- out[ 22 + outpos] = ( in[ 27 + inpos] - in [27 + inpos - 1] ) >>> ( 26 - 24 )
- | ( ( in[ 28 + inpos] - in [28 + inpos - 1] ) << 24 )
- ;
- out[ 23 + outpos] = ( in[ 28 + inpos] - in [28 + inpos - 1] ) >>> ( 26 - 18 )
- | ( ( in[ 29 + inpos] - in [29 + inpos - 1] ) << 18 )
- ;
- out[ 24 + outpos] = ( in[ 29 + inpos] - in [29 + inpos - 1] ) >>> ( 26 - 12 )
- | ( ( in[ 30 + inpos] - in [30 + inpos - 1] ) << 12 )
- ;
- out[ 25 + outpos] = ( in[ 30 + inpos] - in [30 + inpos - 1] ) >>> ( 26 - 6 )
- | ( ( in[ 31 + inpos] - in [31 + inpos - 1] ) << 6 )
- ;
-}
-
-
-
-
-public static void integratedpack27(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = (in[ 0 + inpos] - initoffset )
- | ( ( in[ 1 + inpos] - in [1 + inpos - 1] ) << 27 )
- ;
- out[ 1 + outpos] = ( in[ 1 + inpos] - in [1 + inpos - 1] ) >>> ( 27 - 22 )
- | ( ( in[ 2 + inpos] - in [2 + inpos - 1] ) << 22 )
- ;
- out[ 2 + outpos] = ( in[ 2 + inpos] - in [2 + inpos - 1] ) >>> ( 27 - 17 )
- | ( ( in[ 3 + inpos] - in [3 + inpos - 1] ) << 17 )
- ;
- out[ 3 + outpos] = ( in[ 3 + inpos] - in [3 + inpos - 1] ) >>> ( 27 - 12 )
- | ( ( in[ 4 + inpos] - in [4 + inpos - 1] ) << 12 )
- ;
- out[ 4 + outpos] = ( in[ 4 + inpos] - in [4 + inpos - 1] ) >>> ( 27 - 7 )
- | ( ( in[ 5 + inpos] - in [5 + inpos - 1] ) << 7 )
- ;
- out[ 5 + outpos] = ( in[ 5 + inpos] - in [5 + inpos - 1] ) >>> ( 27 - 2 )
- | ( ( in[ 6 + inpos] - in [6 + inpos - 1] ) << 2 )
- | ( ( in[ 7 + inpos] - in [7 + inpos - 1] ) << 29 )
- ;
- out[ 6 + outpos] = ( in[ 7 + inpos] - in [7 + inpos - 1] ) >>> ( 27 - 24 )
- | ( ( in[ 8 + inpos] - in [8 + inpos - 1] ) << 24 )
- ;
- out[ 7 + outpos] = ( in[ 8 + inpos] - in [8 + inpos - 1] ) >>> ( 27 - 19 )
- | ( ( in[ 9 + inpos] - in [9 + inpos - 1] ) << 19 )
- ;
- out[ 8 + outpos] = ( in[ 9 + inpos] - in [9 + inpos - 1] ) >>> ( 27 - 14 )
- | ( ( in[ 10 + inpos] - in [10 + inpos - 1] ) << 14 )
- ;
- out[ 9 + outpos] = ( in[ 10 + inpos] - in [10 + inpos - 1] ) >>> ( 27 - 9 )
- | ( ( in[ 11 + inpos] - in [11 + inpos - 1] ) << 9 )
- ;
- out[ 10 + outpos] = ( in[ 11 + inpos] - in [11 + inpos - 1] ) >>> ( 27 - 4 )
- | ( ( in[ 12 + inpos] - in [12 + inpos - 1] ) << 4 )
- | ( ( in[ 13 + inpos] - in [13 + inpos - 1] ) << 31 )
- ;
- out[ 11 + outpos] = ( in[ 13 + inpos] - in [13 + inpos - 1] ) >>> ( 27 - 26 )
- | ( ( in[ 14 + inpos] - in [14 + inpos - 1] ) << 26 )
- ;
- out[ 12 + outpos] = ( in[ 14 + inpos] - in [14 + inpos - 1] ) >>> ( 27 - 21 )
- | ( ( in[ 15 + inpos] - in [15 + inpos - 1] ) << 21 )
- ;
- out[ 13 + outpos] = ( in[ 15 + inpos] - in [15 + inpos - 1] ) >>> ( 27 - 16 )
- | ( ( in[ 16 + inpos] - in [16 + inpos - 1] ) << 16 )
- ;
- out[ 14 + outpos] = ( in[ 16 + inpos] - in [16 + inpos - 1] ) >>> ( 27 - 11 )
- | ( ( in[ 17 + inpos] - in [17 + inpos - 1] ) << 11 )
- ;
- out[ 15 + outpos] = ( in[ 17 + inpos] - in [17 + inpos - 1] ) >>> ( 27 - 6 )
- | ( ( in[ 18 + inpos] - in [18 + inpos - 1] ) << 6 )
- ;
- out[ 16 + outpos] = ( in[ 18 + inpos] - in [18 + inpos - 1] ) >>> ( 27 - 1 )
- | ( ( in[ 19 + inpos] - in [19 + inpos - 1] ) << 1 )
- | ( ( in[ 20 + inpos] - in [20 + inpos - 1] ) << 28 )
- ;
- out[ 17 + outpos] = ( in[ 20 + inpos] - in [20 + inpos - 1] ) >>> ( 27 - 23 )
- | ( ( in[ 21 + inpos] - in [21 + inpos - 1] ) << 23 )
- ;
- out[ 18 + outpos] = ( in[ 21 + inpos] - in [21 + inpos - 1] ) >>> ( 27 - 18 )
- | ( ( in[ 22 + inpos] - in [22 + inpos - 1] ) << 18 )
- ;
- out[ 19 + outpos] = ( in[ 22 + inpos] - in [22 + inpos - 1] ) >>> ( 27 - 13 )
- | ( ( in[ 23 + inpos] - in [23 + inpos - 1] ) << 13 )
- ;
- out[ 20 + outpos] = ( in[ 23 + inpos] - in [23 + inpos - 1] ) >>> ( 27 - 8 )
- | ( ( in[ 24 + inpos] - in [24 + inpos - 1] ) << 8 )
- ;
- out[ 21 + outpos] = ( in[ 24 + inpos] - in [24 + inpos - 1] ) >>> ( 27 - 3 )
- | ( ( in[ 25 + inpos] - in [25 + inpos - 1] ) << 3 )
- | ( ( in[ 26 + inpos] - in [26 + inpos - 1] ) << 30 )
- ;
- out[ 22 + outpos] = ( in[ 26 + inpos] - in [26 + inpos - 1] ) >>> ( 27 - 25 )
- | ( ( in[ 27 + inpos] - in [27 + inpos - 1] ) << 25 )
- ;
- out[ 23 + outpos] = ( in[ 27 + inpos] - in [27 + inpos - 1] ) >>> ( 27 - 20 )
- | ( ( in[ 28 + inpos] - in [28 + inpos - 1] ) << 20 )
- ;
- out[ 24 + outpos] = ( in[ 28 + inpos] - in [28 + inpos - 1] ) >>> ( 27 - 15 )
- | ( ( in[ 29 + inpos] - in [29 + inpos - 1] ) << 15 )
- ;
- out[ 25 + outpos] = ( in[ 29 + inpos] - in [29 + inpos - 1] ) >>> ( 27 - 10 )
- | ( ( in[ 30 + inpos] - in [30 + inpos - 1] ) << 10 )
- ;
- out[ 26 + outpos] = ( in[ 30 + inpos] - in [30 + inpos - 1] ) >>> ( 27 - 5 )
- | ( ( in[ 31 + inpos] - in [31 + inpos - 1] ) << 5 )
- ;
-}
-
-
-
-
-public static void integratedpack28(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = (in[ 0 + inpos] - initoffset )
- | ( ( in[ 1 + inpos] - in [1 + inpos - 1] ) << 28 )
- ;
- out[ 1 + outpos] = ( in[ 1 + inpos] - in [1 + inpos - 1] ) >>> ( 28 - 24 )
- | ( ( in[ 2 + inpos] - in [2 + inpos - 1] ) << 24 )
- ;
- out[ 2 + outpos] = ( in[ 2 + inpos] - in [2 + inpos - 1] ) >>> ( 28 - 20 )
- | ( ( in[ 3 + inpos] - in [3 + inpos - 1] ) << 20 )
- ;
- out[ 3 + outpos] = ( in[ 3 + inpos] - in [3 + inpos - 1] ) >>> ( 28 - 16 )
- | ( ( in[ 4 + inpos] - in [4 + inpos - 1] ) << 16 )
- ;
- out[ 4 + outpos] = ( in[ 4 + inpos] - in [4 + inpos - 1] ) >>> ( 28 - 12 )
- | ( ( in[ 5 + inpos] - in [5 + inpos - 1] ) << 12 )
- ;
- out[ 5 + outpos] = ( in[ 5 + inpos] - in [5 + inpos - 1] ) >>> ( 28 - 8 )
- | ( ( in[ 6 + inpos] - in [6 + inpos - 1] ) << 8 )
- ;
- out[ 6 + outpos] = ( in[ 6 + inpos] - in [6 + inpos - 1] ) >>> ( 28 - 4 )
- | ( ( in[ 7 + inpos] - in [7 + inpos - 1] ) << 4 )
- ;
- out[ 7 + outpos] = (in[ 8 + inpos] - in [8 + inpos - 1] )
- | ( ( in[ 9 + inpos] - in [9 + inpos - 1] ) << 28 )
- ;
- out[ 8 + outpos] = ( in[ 9 + inpos] - in [9 + inpos - 1] ) >>> ( 28 - 24 )
- | ( ( in[ 10 + inpos] - in [10 + inpos - 1] ) << 24 )
- ;
- out[ 9 + outpos] = ( in[ 10 + inpos] - in [10 + inpos - 1] ) >>> ( 28 - 20 )
- | ( ( in[ 11 + inpos] - in [11 + inpos - 1] ) << 20 )
- ;
- out[ 10 + outpos] = ( in[ 11 + inpos] - in [11 + inpos - 1] ) >>> ( 28 - 16 )
- | ( ( in[ 12 + inpos] - in [12 + inpos - 1] ) << 16 )
- ;
- out[ 11 + outpos] = ( in[ 12 + inpos] - in [12 + inpos - 1] ) >>> ( 28 - 12 )
- | ( ( in[ 13 + inpos] - in [13 + inpos - 1] ) << 12 )
- ;
- out[ 12 + outpos] = ( in[ 13 + inpos] - in [13 + inpos - 1] ) >>> ( 28 - 8 )
- | ( ( in[ 14 + inpos] - in [14 + inpos - 1] ) << 8 )
- ;
- out[ 13 + outpos] = ( in[ 14 + inpos] - in [14 + inpos - 1] ) >>> ( 28 - 4 )
- | ( ( in[ 15 + inpos] - in [15 + inpos - 1] ) << 4 )
- ;
- out[ 14 + outpos] = (in[ 16 + inpos] - in [16 + inpos - 1] )
- | ( ( in[ 17 + inpos] - in [17 + inpos - 1] ) << 28 )
- ;
- out[ 15 + outpos] = ( in[ 17 + inpos] - in [17 + inpos - 1] ) >>> ( 28 - 24 )
- | ( ( in[ 18 + inpos] - in [18 + inpos - 1] ) << 24 )
- ;
- out[ 16 + outpos] = ( in[ 18 + inpos] - in [18 + inpos - 1] ) >>> ( 28 - 20 )
- | ( ( in[ 19 + inpos] - in [19 + inpos - 1] ) << 20 )
- ;
- out[ 17 + outpos] = ( in[ 19 + inpos] - in [19 + inpos - 1] ) >>> ( 28 - 16 )
- | ( ( in[ 20 + inpos] - in [20 + inpos - 1] ) << 16 )
- ;
- out[ 18 + outpos] = ( in[ 20 + inpos] - in [20 + inpos - 1] ) >>> ( 28 - 12 )
- | ( ( in[ 21 + inpos] - in [21 + inpos - 1] ) << 12 )
- ;
- out[ 19 + outpos] = ( in[ 21 + inpos] - in [21 + inpos - 1] ) >>> ( 28 - 8 )
- | ( ( in[ 22 + inpos] - in [22 + inpos - 1] ) << 8 )
- ;
- out[ 20 + outpos] = ( in[ 22 + inpos] - in [22 + inpos - 1] ) >>> ( 28 - 4 )
- | ( ( in[ 23 + inpos] - in [23 + inpos - 1] ) << 4 )
- ;
- out[ 21 + outpos] = (in[ 24 + inpos] - in [24 + inpos - 1] )
- | ( ( in[ 25 + inpos] - in [25 + inpos - 1] ) << 28 )
- ;
- out[ 22 + outpos] = ( in[ 25 + inpos] - in [25 + inpos - 1] ) >>> ( 28 - 24 )
- | ( ( in[ 26 + inpos] - in [26 + inpos - 1] ) << 24 )
- ;
- out[ 23 + outpos] = ( in[ 26 + inpos] - in [26 + inpos - 1] ) >>> ( 28 - 20 )
- | ( ( in[ 27 + inpos] - in [27 + inpos - 1] ) << 20 )
- ;
- out[ 24 + outpos] = ( in[ 27 + inpos] - in [27 + inpos - 1] ) >>> ( 28 - 16 )
- | ( ( in[ 28 + inpos] - in [28 + inpos - 1] ) << 16 )
- ;
- out[ 25 + outpos] = ( in[ 28 + inpos] - in [28 + inpos - 1] ) >>> ( 28 - 12 )
- | ( ( in[ 29 + inpos] - in [29 + inpos - 1] ) << 12 )
- ;
- out[ 26 + outpos] = ( in[ 29 + inpos] - in [29 + inpos - 1] ) >>> ( 28 - 8 )
- | ( ( in[ 30 + inpos] - in [30 + inpos - 1] ) << 8 )
- ;
- out[ 27 + outpos] = ( in[ 30 + inpos] - in [30 + inpos - 1] ) >>> ( 28 - 4 )
- | ( ( in[ 31 + inpos] - in [31 + inpos - 1] ) << 4 )
- ;
-}
-
-
-
-
-public static void integratedpack29(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = (in[ 0 + inpos] - initoffset )
- | ( ( in[ 1 + inpos] - in [1 + inpos - 1] ) << 29 )
- ;
- out[ 1 + outpos] = ( in[ 1 + inpos] - in [1 + inpos - 1] ) >>> ( 29 - 26 )
- | ( ( in[ 2 + inpos] - in [2 + inpos - 1] ) << 26 )
- ;
- out[ 2 + outpos] = ( in[ 2 + inpos] - in [2 + inpos - 1] ) >>> ( 29 - 23 )
- | ( ( in[ 3 + inpos] - in [3 + inpos - 1] ) << 23 )
- ;
- out[ 3 + outpos] = ( in[ 3 + inpos] - in [3 + inpos - 1] ) >>> ( 29 - 20 )
- | ( ( in[ 4 + inpos] - in [4 + inpos - 1] ) << 20 )
- ;
- out[ 4 + outpos] = ( in[ 4 + inpos] - in [4 + inpos - 1] ) >>> ( 29 - 17 )
- | ( ( in[ 5 + inpos] - in [5 + inpos - 1] ) << 17 )
- ;
- out[ 5 + outpos] = ( in[ 5 + inpos] - in [5 + inpos - 1] ) >>> ( 29 - 14 )
- | ( ( in[ 6 + inpos] - in [6 + inpos - 1] ) << 14 )
- ;
- out[ 6 + outpos] = ( in[ 6 + inpos] - in [6 + inpos - 1] ) >>> ( 29 - 11 )
- | ( ( in[ 7 + inpos] - in [7 + inpos - 1] ) << 11 )
- ;
- out[ 7 + outpos] = ( in[ 7 + inpos] - in [7 + inpos - 1] ) >>> ( 29 - 8 )
- | ( ( in[ 8 + inpos] - in [8 + inpos - 1] ) << 8 )
- ;
- out[ 8 + outpos] = ( in[ 8 + inpos] - in [8 + inpos - 1] ) >>> ( 29 - 5 )
- | ( ( in[ 9 + inpos] - in [9 + inpos - 1] ) << 5 )
- ;
- out[ 9 + outpos] = ( in[ 9 + inpos] - in [9 + inpos - 1] ) >>> ( 29 - 2 )
- | ( ( in[ 10 + inpos] - in [10 + inpos - 1] ) << 2 )
- | ( ( in[ 11 + inpos] - in [11 + inpos - 1] ) << 31 )
- ;
- out[ 10 + outpos] = ( in[ 11 + inpos] - in [11 + inpos - 1] ) >>> ( 29 - 28 )
- | ( ( in[ 12 + inpos] - in [12 + inpos - 1] ) << 28 )
- ;
- out[ 11 + outpos] = ( in[ 12 + inpos] - in [12 + inpos - 1] ) >>> ( 29 - 25 )
- | ( ( in[ 13 + inpos] - in [13 + inpos - 1] ) << 25 )
- ;
- out[ 12 + outpos] = ( in[ 13 + inpos] - in [13 + inpos - 1] ) >>> ( 29 - 22 )
- | ( ( in[ 14 + inpos] - in [14 + inpos - 1] ) << 22 )
- ;
- out[ 13 + outpos] = ( in[ 14 + inpos] - in [14 + inpos - 1] ) >>> ( 29 - 19 )
- | ( ( in[ 15 + inpos] - in [15 + inpos - 1] ) << 19 )
- ;
- out[ 14 + outpos] = ( in[ 15 + inpos] - in [15 + inpos - 1] ) >>> ( 29 - 16 )
- | ( ( in[ 16 + inpos] - in [16 + inpos - 1] ) << 16 )
- ;
- out[ 15 + outpos] = ( in[ 16 + inpos] - in [16 + inpos - 1] ) >>> ( 29 - 13 )
- | ( ( in[ 17 + inpos] - in [17 + inpos - 1] ) << 13 )
- ;
- out[ 16 + outpos] = ( in[ 17 + inpos] - in [17 + inpos - 1] ) >>> ( 29 - 10 )
- | ( ( in[ 18 + inpos] - in [18 + inpos - 1] ) << 10 )
- ;
- out[ 17 + outpos] = ( in[ 18 + inpos] - in [18 + inpos - 1] ) >>> ( 29 - 7 )
- | ( ( in[ 19 + inpos] - in [19 + inpos - 1] ) << 7 )
- ;
- out[ 18 + outpos] = ( in[ 19 + inpos] - in [19 + inpos - 1] ) >>> ( 29 - 4 )
- | ( ( in[ 20 + inpos] - in [20 + inpos - 1] ) << 4 )
- ;
- out[ 19 + outpos] = ( in[ 20 + inpos] - in [20 + inpos - 1] ) >>> ( 29 - 1 )
- | ( ( in[ 21 + inpos] - in [21 + inpos - 1] ) << 1 )
- | ( ( in[ 22 + inpos] - in [22 + inpos - 1] ) << 30 )
- ;
- out[ 20 + outpos] = ( in[ 22 + inpos] - in [22 + inpos - 1] ) >>> ( 29 - 27 )
- | ( ( in[ 23 + inpos] - in [23 + inpos - 1] ) << 27 )
- ;
- out[ 21 + outpos] = ( in[ 23 + inpos] - in [23 + inpos - 1] ) >>> ( 29 - 24 )
- | ( ( in[ 24 + inpos] - in [24 + inpos - 1] ) << 24 )
- ;
- out[ 22 + outpos] = ( in[ 24 + inpos] - in [24 + inpos - 1] ) >>> ( 29 - 21 )
- | ( ( in[ 25 + inpos] - in [25 + inpos - 1] ) << 21 )
- ;
- out[ 23 + outpos] = ( in[ 25 + inpos] - in [25 + inpos - 1] ) >>> ( 29 - 18 )
- | ( ( in[ 26 + inpos] - in [26 + inpos - 1] ) << 18 )
- ;
- out[ 24 + outpos] = ( in[ 26 + inpos] - in [26 + inpos - 1] ) >>> ( 29 - 15 )
- | ( ( in[ 27 + inpos] - in [27 + inpos - 1] ) << 15 )
- ;
- out[ 25 + outpos] = ( in[ 27 + inpos] - in [27 + inpos - 1] ) >>> ( 29 - 12 )
- | ( ( in[ 28 + inpos] - in [28 + inpos - 1] ) << 12 )
- ;
- out[ 26 + outpos] = ( in[ 28 + inpos] - in [28 + inpos - 1] ) >>> ( 29 - 9 )
- | ( ( in[ 29 + inpos] - in [29 + inpos - 1] ) << 9 )
- ;
- out[ 27 + outpos] = ( in[ 29 + inpos] - in [29 + inpos - 1] ) >>> ( 29 - 6 )
- | ( ( in[ 30 + inpos] - in [30 + inpos - 1] ) << 6 )
- ;
- out[ 28 + outpos] = ( in[ 30 + inpos] - in [30 + inpos - 1] ) >>> ( 29 - 3 )
- | ( ( in[ 31 + inpos] - in [31 + inpos - 1] ) << 3 )
- ;
-}
-
-
-
-
-public static void integratedpack30(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = (in[ 0 + inpos] - initoffset )
- | ( ( in[ 1 + inpos] - in [1 + inpos - 1] ) << 30 )
- ;
- out[ 1 + outpos] = ( in[ 1 + inpos] - in [1 + inpos - 1] ) >>> ( 30 - 28 )
- | ( ( in[ 2 + inpos] - in [2 + inpos - 1] ) << 28 )
- ;
- out[ 2 + outpos] = ( in[ 2 + inpos] - in [2 + inpos - 1] ) >>> ( 30 - 26 )
- | ( ( in[ 3 + inpos] - in [3 + inpos - 1] ) << 26 )
- ;
- out[ 3 + outpos] = ( in[ 3 + inpos] - in [3 + inpos - 1] ) >>> ( 30 - 24 )
- | ( ( in[ 4 + inpos] - in [4 + inpos - 1] ) << 24 )
- ;
- out[ 4 + outpos] = ( in[ 4 + inpos] - in [4 + inpos - 1] ) >>> ( 30 - 22 )
- | ( ( in[ 5 + inpos] - in [5 + inpos - 1] ) << 22 )
- ;
- out[ 5 + outpos] = ( in[ 5 + inpos] - in [5 + inpos - 1] ) >>> ( 30 - 20 )
- | ( ( in[ 6 + inpos] - in [6 + inpos - 1] ) << 20 )
- ;
- out[ 6 + outpos] = ( in[ 6 + inpos] - in [6 + inpos - 1] ) >>> ( 30 - 18 )
- | ( ( in[ 7 + inpos] - in [7 + inpos - 1] ) << 18 )
- ;
- out[ 7 + outpos] = ( in[ 7 + inpos] - in [7 + inpos - 1] ) >>> ( 30 - 16 )
- | ( ( in[ 8 + inpos] - in [8 + inpos - 1] ) << 16 )
- ;
- out[ 8 + outpos] = ( in[ 8 + inpos] - in [8 + inpos - 1] ) >>> ( 30 - 14 )
- | ( ( in[ 9 + inpos] - in [9 + inpos - 1] ) << 14 )
- ;
- out[ 9 + outpos] = ( in[ 9 + inpos] - in [9 + inpos - 1] ) >>> ( 30 - 12 )
- | ( ( in[ 10 + inpos] - in [10 + inpos - 1] ) << 12 )
- ;
- out[ 10 + outpos] = ( in[ 10 + inpos] - in [10 + inpos - 1] ) >>> ( 30 - 10 )
- | ( ( in[ 11 + inpos] - in [11 + inpos - 1] ) << 10 )
- ;
- out[ 11 + outpos] = ( in[ 11 + inpos] - in [11 + inpos - 1] ) >>> ( 30 - 8 )
- | ( ( in[ 12 + inpos] - in [12 + inpos - 1] ) << 8 )
- ;
- out[ 12 + outpos] = ( in[ 12 + inpos] - in [12 + inpos - 1] ) >>> ( 30 - 6 )
- | ( ( in[ 13 + inpos] - in [13 + inpos - 1] ) << 6 )
- ;
- out[ 13 + outpos] = ( in[ 13 + inpos] - in [13 + inpos - 1] ) >>> ( 30 - 4 )
- | ( ( in[ 14 + inpos] - in [14 + inpos - 1] ) << 4 )
- ;
- out[ 14 + outpos] = ( in[ 14 + inpos] - in [14 + inpos - 1] ) >>> ( 30 - 2 )
- | ( ( in[ 15 + inpos] - in [15 + inpos - 1] ) << 2 )
- ;
- out[ 15 + outpos] = (in[ 16 + inpos] - in [16 + inpos - 1] )
- | ( ( in[ 17 + inpos] - in [17 + inpos - 1] ) << 30 )
- ;
- out[ 16 + outpos] = ( in[ 17 + inpos] - in [17 + inpos - 1] ) >>> ( 30 - 28 )
- | ( ( in[ 18 + inpos] - in [18 + inpos - 1] ) << 28 )
- ;
- out[ 17 + outpos] = ( in[ 18 + inpos] - in [18 + inpos - 1] ) >>> ( 30 - 26 )
- | ( ( in[ 19 + inpos] - in [19 + inpos - 1] ) << 26 )
- ;
- out[ 18 + outpos] = ( in[ 19 + inpos] - in [19 + inpos - 1] ) >>> ( 30 - 24 )
- | ( ( in[ 20 + inpos] - in [20 + inpos - 1] ) << 24 )
- ;
- out[ 19 + outpos] = ( in[ 20 + inpos] - in [20 + inpos - 1] ) >>> ( 30 - 22 )
- | ( ( in[ 21 + inpos] - in [21 + inpos - 1] ) << 22 )
- ;
- out[ 20 + outpos] = ( in[ 21 + inpos] - in [21 + inpos - 1] ) >>> ( 30 - 20 )
- | ( ( in[ 22 + inpos] - in [22 + inpos - 1] ) << 20 )
- ;
- out[ 21 + outpos] = ( in[ 22 + inpos] - in [22 + inpos - 1] ) >>> ( 30 - 18 )
- | ( ( in[ 23 + inpos] - in [23 + inpos - 1] ) << 18 )
- ;
- out[ 22 + outpos] = ( in[ 23 + inpos] - in [23 + inpos - 1] ) >>> ( 30 - 16 )
- | ( ( in[ 24 + inpos] - in [24 + inpos - 1] ) << 16 )
- ;
- out[ 23 + outpos] = ( in[ 24 + inpos] - in [24 + inpos - 1] ) >>> ( 30 - 14 )
- | ( ( in[ 25 + inpos] - in [25 + inpos - 1] ) << 14 )
- ;
- out[ 24 + outpos] = ( in[ 25 + inpos] - in [25 + inpos - 1] ) >>> ( 30 - 12 )
- | ( ( in[ 26 + inpos] - in [26 + inpos - 1] ) << 12 )
- ;
- out[ 25 + outpos] = ( in[ 26 + inpos] - in [26 + inpos - 1] ) >>> ( 30 - 10 )
- | ( ( in[ 27 + inpos] - in [27 + inpos - 1] ) << 10 )
- ;
- out[ 26 + outpos] = ( in[ 27 + inpos] - in [27 + inpos - 1] ) >>> ( 30 - 8 )
- | ( ( in[ 28 + inpos] - in [28 + inpos - 1] ) << 8 )
- ;
- out[ 27 + outpos] = ( in[ 28 + inpos] - in [28 + inpos - 1] ) >>> ( 30 - 6 )
- | ( ( in[ 29 + inpos] - in [29 + inpos - 1] ) << 6 )
- ;
- out[ 28 + outpos] = ( in[ 29 + inpos] - in [29 + inpos - 1] ) >>> ( 30 - 4 )
- | ( ( in[ 30 + inpos] - in [30 + inpos - 1] ) << 4 )
- ;
- out[ 29 + outpos] = ( in[ 30 + inpos] - in [30 + inpos - 1] ) >>> ( 30 - 2 )
- | ( ( in[ 31 + inpos] - in [31 + inpos - 1] ) << 2 )
- ;
-}
-
-
-
-
-public static void integratedpack31(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = (in[ 0 + inpos] - initoffset )
- | ( ( in[ 1 + inpos] - in [1 + inpos - 1] ) << 31 )
- ;
- out[ 1 + outpos] = ( in[ 1 + inpos] - in [1 + inpos - 1] ) >>> ( 31 - 30 )
- | ( ( in[ 2 + inpos] - in [2 + inpos - 1] ) << 30 )
- ;
- out[ 2 + outpos] = ( in[ 2 + inpos] - in [2 + inpos - 1] ) >>> ( 31 - 29 )
- | ( ( in[ 3 + inpos] - in [3 + inpos - 1] ) << 29 )
- ;
- out[ 3 + outpos] = ( in[ 3 + inpos] - in [3 + inpos - 1] ) >>> ( 31 - 28 )
- | ( ( in[ 4 + inpos] - in [4 + inpos - 1] ) << 28 )
- ;
- out[ 4 + outpos] = ( in[ 4 + inpos] - in [4 + inpos - 1] ) >>> ( 31 - 27 )
- | ( ( in[ 5 + inpos] - in [5 + inpos - 1] ) << 27 )
- ;
- out[ 5 + outpos] = ( in[ 5 + inpos] - in [5 + inpos - 1] ) >>> ( 31 - 26 )
- | ( ( in[ 6 + inpos] - in [6 + inpos - 1] ) << 26 )
- ;
- out[ 6 + outpos] = ( in[ 6 + inpos] - in [6 + inpos - 1] ) >>> ( 31 - 25 )
- | ( ( in[ 7 + inpos] - in [7 + inpos - 1] ) << 25 )
- ;
- out[ 7 + outpos] = ( in[ 7 + inpos] - in [7 + inpos - 1] ) >>> ( 31 - 24 )
- | ( ( in[ 8 + inpos] - in [8 + inpos - 1] ) << 24 )
- ;
- out[ 8 + outpos] = ( in[ 8 + inpos] - in [8 + inpos - 1] ) >>> ( 31 - 23 )
- | ( ( in[ 9 + inpos] - in [9 + inpos - 1] ) << 23 )
- ;
- out[ 9 + outpos] = ( in[ 9 + inpos] - in [9 + inpos - 1] ) >>> ( 31 - 22 )
- | ( ( in[ 10 + inpos] - in [10 + inpos - 1] ) << 22 )
- ;
- out[ 10 + outpos] = ( in[ 10 + inpos] - in [10 + inpos - 1] ) >>> ( 31 - 21 )
- | ( ( in[ 11 + inpos] - in [11 + inpos - 1] ) << 21 )
- ;
- out[ 11 + outpos] = ( in[ 11 + inpos] - in [11 + inpos - 1] ) >>> ( 31 - 20 )
- | ( ( in[ 12 + inpos] - in [12 + inpos - 1] ) << 20 )
- ;
- out[ 12 + outpos] = ( in[ 12 + inpos] - in [12 + inpos - 1] ) >>> ( 31 - 19 )
- | ( ( in[ 13 + inpos] - in [13 + inpos - 1] ) << 19 )
- ;
- out[ 13 + outpos] = ( in[ 13 + inpos] - in [13 + inpos - 1] ) >>> ( 31 - 18 )
- | ( ( in[ 14 + inpos] - in [14 + inpos - 1] ) << 18 )
- ;
- out[ 14 + outpos] = ( in[ 14 + inpos] - in [14 + inpos - 1] ) >>> ( 31 - 17 )
- | ( ( in[ 15 + inpos] - in [15 + inpos - 1] ) << 17 )
- ;
- out[ 15 + outpos] = ( in[ 15 + inpos] - in [15 + inpos - 1] ) >>> ( 31 - 16 )
- | ( ( in[ 16 + inpos] - in [16 + inpos - 1] ) << 16 )
- ;
- out[ 16 + outpos] = ( in[ 16 + inpos] - in [16 + inpos - 1] ) >>> ( 31 - 15 )
- | ( ( in[ 17 + inpos] - in [17 + inpos - 1] ) << 15 )
- ;
- out[ 17 + outpos] = ( in[ 17 + inpos] - in [17 + inpos - 1] ) >>> ( 31 - 14 )
- | ( ( in[ 18 + inpos] - in [18 + inpos - 1] ) << 14 )
- ;
- out[ 18 + outpos] = ( in[ 18 + inpos] - in [18 + inpos - 1] ) >>> ( 31 - 13 )
- | ( ( in[ 19 + inpos] - in [19 + inpos - 1] ) << 13 )
- ;
- out[ 19 + outpos] = ( in[ 19 + inpos] - in [19 + inpos - 1] ) >>> ( 31 - 12 )
- | ( ( in[ 20 + inpos] - in [20 + inpos - 1] ) << 12 )
- ;
- out[ 20 + outpos] = ( in[ 20 + inpos] - in [20 + inpos - 1] ) >>> ( 31 - 11 )
- | ( ( in[ 21 + inpos] - in [21 + inpos - 1] ) << 11 )
- ;
- out[ 21 + outpos] = ( in[ 21 + inpos] - in [21 + inpos - 1] ) >>> ( 31 - 10 )
- | ( ( in[ 22 + inpos] - in [22 + inpos - 1] ) << 10 )
- ;
- out[ 22 + outpos] = ( in[ 22 + inpos] - in [22 + inpos - 1] ) >>> ( 31 - 9 )
- | ( ( in[ 23 + inpos] - in [23 + inpos - 1] ) << 9 )
- ;
- out[ 23 + outpos] = ( in[ 23 + inpos] - in [23 + inpos - 1] ) >>> ( 31 - 8 )
- | ( ( in[ 24 + inpos] - in [24 + inpos - 1] ) << 8 )
- ;
- out[ 24 + outpos] = ( in[ 24 + inpos] - in [24 + inpos - 1] ) >>> ( 31 - 7 )
- | ( ( in[ 25 + inpos] - in [25 + inpos - 1] ) << 7 )
- ;
- out[ 25 + outpos] = ( in[ 25 + inpos] - in [25 + inpos - 1] ) >>> ( 31 - 6 )
- | ( ( in[ 26 + inpos] - in [26 + inpos - 1] ) << 6 )
- ;
- out[ 26 + outpos] = ( in[ 26 + inpos] - in [26 + inpos - 1] ) >>> ( 31 - 5 )
- | ( ( in[ 27 + inpos] - in [27 + inpos - 1] ) << 5 )
- ;
- out[ 27 + outpos] = ( in[ 27 + inpos] - in [27 + inpos - 1] ) >>> ( 31 - 4 )
- | ( ( in[ 28 + inpos] - in [28 + inpos - 1] ) << 4 )
- ;
- out[ 28 + outpos] = ( in[ 28 + inpos] - in [28 + inpos - 1] ) >>> ( 31 - 3 )
- | ( ( in[ 29 + inpos] - in [29 + inpos - 1] ) << 3 )
- ;
- out[ 29 + outpos] = ( in[ 29 + inpos] - in [29 + inpos - 1] ) >>> ( 31 - 2 )
- | ( ( in[ 30 + inpos] - in [30 + inpos - 1] ) << 2 )
- ;
- out[ 30 + outpos] = ( in[ 30 + inpos] - in [30 + inpos - 1] ) >>> ( 31 - 1 )
- | ( ( in[ 31 + inpos] - in [31 + inpos - 1] ) << 1 )
- ;
-}
-
-
-
-
-public static void integratedunpack1(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = ( ( ( in[ 0 + inpos] >>> 0 ) & 1 )
- ) + initoffset ;
- out[ 1 + outpos] = ( ( ( in[ 0 + inpos] >>> 1 ) & 1 )
- ) + out[1 + outpos - 1] ;
- out[ 2 + outpos] = ( ( ( in[ 0 + inpos] >>> 2 ) & 1 )
- ) + out[2 + outpos - 1] ;
- out[ 3 + outpos] = ( ( ( in[ 0 + inpos] >>> 3 ) & 1 )
- ) + out[3 + outpos - 1] ;
- out[ 4 + outpos] = ( ( ( in[ 0 + inpos] >>> 4 ) & 1 )
- ) + out[4 + outpos - 1] ;
- out[ 5 + outpos] = ( ( ( in[ 0 + inpos] >>> 5 ) & 1 )
- ) + out[5 + outpos - 1] ;
- out[ 6 + outpos] = ( ( ( in[ 0 + inpos] >>> 6 ) & 1 )
- ) + out[6 + outpos - 1] ;
- out[ 7 + outpos] = ( ( ( in[ 0 + inpos] >>> 7 ) & 1 )
- ) + out[7 + outpos - 1] ;
- out[ 8 + outpos] = ( ( ( in[ 0 + inpos] >>> 8 ) & 1 )
- ) + out[8 + outpos - 1] ;
- out[ 9 + outpos] = ( ( ( in[ 0 + inpos] >>> 9 ) & 1 )
- ) + out[9 + outpos - 1] ;
- out[ 10 + outpos] = ( ( ( in[ 0 + inpos] >>> 10 ) & 1 )
- ) + out[10 + outpos - 1] ;
- out[ 11 + outpos] = ( ( ( in[ 0 + inpos] >>> 11 ) & 1 )
- ) + out[11 + outpos - 1] ;
- out[ 12 + outpos] = ( ( ( in[ 0 + inpos] >>> 12 ) & 1 )
- ) + out[12 + outpos - 1] ;
- out[ 13 + outpos] = ( ( ( in[ 0 + inpos] >>> 13 ) & 1 )
- ) + out[13 + outpos - 1] ;
- out[ 14 + outpos] = ( ( ( in[ 0 + inpos] >>> 14 ) & 1 )
- ) + out[14 + outpos - 1] ;
- out[ 15 + outpos] = ( ( ( in[ 0 + inpos] >>> 15 ) & 1 )
- ) + out[15 + outpos - 1] ;
- out[ 16 + outpos] = ( ( ( in[ 0 + inpos] >>> 16 ) & 1 )
- ) + out[16 + outpos - 1] ;
- out[ 17 + outpos] = ( ( ( in[ 0 + inpos] >>> 17 ) & 1 )
- ) + out[17 + outpos - 1] ;
- out[ 18 + outpos] = ( ( ( in[ 0 + inpos] >>> 18 ) & 1 )
- ) + out[18 + outpos - 1] ;
- out[ 19 + outpos] = ( ( ( in[ 0 + inpos] >>> 19 ) & 1 )
- ) + out[19 + outpos - 1] ;
- out[ 20 + outpos] = ( ( ( in[ 0 + inpos] >>> 20 ) & 1 )
- ) + out[20 + outpos - 1] ;
- out[ 21 + outpos] = ( ( ( in[ 0 + inpos] >>> 21 ) & 1 )
- ) + out[21 + outpos - 1] ;
- out[ 22 + outpos] = ( ( ( in[ 0 + inpos] >>> 22 ) & 1 )
- ) + out[22 + outpos - 1] ;
- out[ 23 + outpos] = ( ( ( in[ 0 + inpos] >>> 23 ) & 1 )
- ) + out[23 + outpos - 1] ;
- out[ 24 + outpos] = ( ( ( in[ 0 + inpos] >>> 24 ) & 1 )
- ) + out[24 + outpos - 1] ;
- out[ 25 + outpos] = ( ( ( in[ 0 + inpos] >>> 25 ) & 1 )
- ) + out[25 + outpos - 1] ;
- out[ 26 + outpos] = ( ( ( in[ 0 + inpos] >>> 26 ) & 1 )
- ) + out[26 + outpos - 1] ;
- out[ 27 + outpos] = ( ( ( in[ 0 + inpos] >>> 27 ) & 1 )
- ) + out[27 + outpos - 1] ;
- out[ 28 + outpos] = ( ( ( in[ 0 + inpos] >>> 28 ) & 1 )
- ) + out[28 + outpos - 1] ;
- out[ 29 + outpos] = ( ( ( in[ 0 + inpos] >>> 29 ) & 1 )
- ) + out[29 + outpos - 1] ;
- out[ 30 + outpos] = ( ( ( in[ 0 + inpos] >>> 30 ) & 1 )
- ) + out[30 + outpos - 1] ;
- out[ 31 + outpos] = ( ( in[ 0 + inpos] >>> 31 )
- ) + out[31 + outpos - 1] ;
-}
-
-
-
-
-public static void integratedunpack2(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = ( ( ( in[ 0 + inpos] >>> 0 ) & 3 )
- ) + initoffset ;
- out[ 1 + outpos] = ( ( ( in[ 0 + inpos] >>> 2 ) & 3 )
- ) + out[1 + outpos - 1] ;
- out[ 2 + outpos] = ( ( ( in[ 0 + inpos] >>> 4 ) & 3 )
- ) + out[2 + outpos - 1] ;
- out[ 3 + outpos] = ( ( ( in[ 0 + inpos] >>> 6 ) & 3 )
- ) + out[3 + outpos - 1] ;
- out[ 4 + outpos] = ( ( ( in[ 0 + inpos] >>> 8 ) & 3 )
- ) + out[4 + outpos - 1] ;
- out[ 5 + outpos] = ( ( ( in[ 0 + inpos] >>> 10 ) & 3 )
- ) + out[5 + outpos - 1] ;
- out[ 6 + outpos] = ( ( ( in[ 0 + inpos] >>> 12 ) & 3 )
- ) + out[6 + outpos - 1] ;
- out[ 7 + outpos] = ( ( ( in[ 0 + inpos] >>> 14 ) & 3 )
- ) + out[7 + outpos - 1] ;
- out[ 8 + outpos] = ( ( ( in[ 0 + inpos] >>> 16 ) & 3 )
- ) + out[8 + outpos - 1] ;
- out[ 9 + outpos] = ( ( ( in[ 0 + inpos] >>> 18 ) & 3 )
- ) + out[9 + outpos - 1] ;
- out[ 10 + outpos] = ( ( ( in[ 0 + inpos] >>> 20 ) & 3 )
- ) + out[10 + outpos - 1] ;
- out[ 11 + outpos] = ( ( ( in[ 0 + inpos] >>> 22 ) & 3 )
- ) + out[11 + outpos - 1] ;
- out[ 12 + outpos] = ( ( ( in[ 0 + inpos] >>> 24 ) & 3 )
- ) + out[12 + outpos - 1] ;
- out[ 13 + outpos] = ( ( ( in[ 0 + inpos] >>> 26 ) & 3 )
- ) + out[13 + outpos - 1] ;
- out[ 14 + outpos] = ( ( ( in[ 0 + inpos] >>> 28 ) & 3 )
- ) + out[14 + outpos - 1] ;
- out[ 15 + outpos] = ( ( in[ 0 + inpos] >>> 30 )
- ) + out[15 + outpos - 1] ;
- out[ 16 + outpos] = ( ( ( in[ 1 + inpos] >>> 0 ) & 3 )
- ) + out[16 + outpos - 1] ;
- out[ 17 + outpos] = ( ( ( in[ 1 + inpos] >>> 2 ) & 3 )
- ) + out[17 + outpos - 1] ;
- out[ 18 + outpos] = ( ( ( in[ 1 + inpos] >>> 4 ) & 3 )
- ) + out[18 + outpos - 1] ;
- out[ 19 + outpos] = ( ( ( in[ 1 + inpos] >>> 6 ) & 3 )
- ) + out[19 + outpos - 1] ;
- out[ 20 + outpos] = ( ( ( in[ 1 + inpos] >>> 8 ) & 3 )
- ) + out[20 + outpos - 1] ;
- out[ 21 + outpos] = ( ( ( in[ 1 + inpos] >>> 10 ) & 3 )
- ) + out[21 + outpos - 1] ;
- out[ 22 + outpos] = ( ( ( in[ 1 + inpos] >>> 12 ) & 3 )
- ) + out[22 + outpos - 1] ;
- out[ 23 + outpos] = ( ( ( in[ 1 + inpos] >>> 14 ) & 3 )
- ) + out[23 + outpos - 1] ;
- out[ 24 + outpos] = ( ( ( in[ 1 + inpos] >>> 16 ) & 3 )
- ) + out[24 + outpos - 1] ;
- out[ 25 + outpos] = ( ( ( in[ 1 + inpos] >>> 18 ) & 3 )
- ) + out[25 + outpos - 1] ;
- out[ 26 + outpos] = ( ( ( in[ 1 + inpos] >>> 20 ) & 3 )
- ) + out[26 + outpos - 1] ;
- out[ 27 + outpos] = ( ( ( in[ 1 + inpos] >>> 22 ) & 3 )
- ) + out[27 + outpos - 1] ;
- out[ 28 + outpos] = ( ( ( in[ 1 + inpos] >>> 24 ) & 3 )
- ) + out[28 + outpos - 1] ;
- out[ 29 + outpos] = ( ( ( in[ 1 + inpos] >>> 26 ) & 3 )
- ) + out[29 + outpos - 1] ;
- out[ 30 + outpos] = ( ( ( in[ 1 + inpos] >>> 28 ) & 3 )
- ) + out[30 + outpos - 1] ;
- out[ 31 + outpos] = ( ( in[ 1 + inpos] >>> 30 )
- ) + out[31 + outpos - 1] ;
-}
-
-
-
-
-public static void integratedunpack3(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = ( ( ( in[ 0 + inpos] >>> 0 ) & 7 )
- ) + initoffset ;
- out[ 1 + outpos] = ( ( ( in[ 0 + inpos] >>> 3 ) & 7 )
- ) + out[1 + outpos - 1] ;
- out[ 2 + outpos] = ( ( ( in[ 0 + inpos] >>> 6 ) & 7 )
- ) + out[2 + outpos - 1] ;
- out[ 3 + outpos] = ( ( ( in[ 0 + inpos] >>> 9 ) & 7 )
- ) + out[3 + outpos - 1] ;
- out[ 4 + outpos] = ( ( ( in[ 0 + inpos] >>> 12 ) & 7 )
- ) + out[4 + outpos - 1] ;
- out[ 5 + outpos] = ( ( ( in[ 0 + inpos] >>> 15 ) & 7 )
- ) + out[5 + outpos - 1] ;
- out[ 6 + outpos] = ( ( ( in[ 0 + inpos] >>> 18 ) & 7 )
- ) + out[6 + outpos - 1] ;
- out[ 7 + outpos] = ( ( ( in[ 0 + inpos] >>> 21 ) & 7 )
- ) + out[7 + outpos - 1] ;
- out[ 8 + outpos] = ( ( ( in[ 0 + inpos] >>> 24 ) & 7 )
- ) + out[8 + outpos - 1] ;
- out[ 9 + outpos] = ( ( ( in[ 0 + inpos] >>> 27 ) & 7 )
- ) + out[9 + outpos - 1] ;
- out[ 10 + outpos] = ( ( in[ 0 + inpos] >>> 30 )
- | ((in[ 1 + inpos] & 1 )<<( 3 - 1 ))
- ) + out[10 + outpos - 1] ;
- out[ 11 + outpos] = ( ( ( in[ 1 + inpos] >>> 1 ) & 7 )
- ) + out[11 + outpos - 1] ;
- out[ 12 + outpos] = ( ( ( in[ 1 + inpos] >>> 4 ) & 7 )
- ) + out[12 + outpos - 1] ;
- out[ 13 + outpos] = ( ( ( in[ 1 + inpos] >>> 7 ) & 7 )
- ) + out[13 + outpos - 1] ;
- out[ 14 + outpos] = ( ( ( in[ 1 + inpos] >>> 10 ) & 7 )
- ) + out[14 + outpos - 1] ;
- out[ 15 + outpos] = ( ( ( in[ 1 + inpos] >>> 13 ) & 7 )
- ) + out[15 + outpos - 1] ;
- out[ 16 + outpos] = ( ( ( in[ 1 + inpos] >>> 16 ) & 7 )
- ) + out[16 + outpos - 1] ;
- out[ 17 + outpos] = ( ( ( in[ 1 + inpos] >>> 19 ) & 7 )
- ) + out[17 + outpos - 1] ;
- out[ 18 + outpos] = ( ( ( in[ 1 + inpos] >>> 22 ) & 7 )
- ) + out[18 + outpos - 1] ;
- out[ 19 + outpos] = ( ( ( in[ 1 + inpos] >>> 25 ) & 7 )
- ) + out[19 + outpos - 1] ;
- out[ 20 + outpos] = ( ( ( in[ 1 + inpos] >>> 28 ) & 7 )
- ) + out[20 + outpos - 1] ;
- out[ 21 + outpos] = ( ( in[ 1 + inpos] >>> 31 )
- | ((in[ 2 + inpos] & 3 )<<( 3 - 2 ))
- ) + out[21 + outpos - 1] ;
- out[ 22 + outpos] = ( ( ( in[ 2 + inpos] >>> 2 ) & 7 )
- ) + out[22 + outpos - 1] ;
- out[ 23 + outpos] = ( ( ( in[ 2 + inpos] >>> 5 ) & 7 )
- ) + out[23 + outpos - 1] ;
- out[ 24 + outpos] = ( ( ( in[ 2 + inpos] >>> 8 ) & 7 )
- ) + out[24 + outpos - 1] ;
- out[ 25 + outpos] = ( ( ( in[ 2 + inpos] >>> 11 ) & 7 )
- ) + out[25 + outpos - 1] ;
- out[ 26 + outpos] = ( ( ( in[ 2 + inpos] >>> 14 ) & 7 )
- ) + out[26 + outpos - 1] ;
- out[ 27 + outpos] = ( ( ( in[ 2 + inpos] >>> 17 ) & 7 )
- ) + out[27 + outpos - 1] ;
- out[ 28 + outpos] = ( ( ( in[ 2 + inpos] >>> 20 ) & 7 )
- ) + out[28 + outpos - 1] ;
- out[ 29 + outpos] = ( ( ( in[ 2 + inpos] >>> 23 ) & 7 )
- ) + out[29 + outpos - 1] ;
- out[ 30 + outpos] = ( ( ( in[ 2 + inpos] >>> 26 ) & 7 )
- ) + out[30 + outpos - 1] ;
- out[ 31 + outpos] = ( ( in[ 2 + inpos] >>> 29 )
- ) + out[31 + outpos - 1] ;
-}
-
-
-
-
-public static void integratedunpack4(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = ( ( ( in[ 0 + inpos] >>> 0 ) & 15 )
- ) + initoffset ;
- out[ 1 + outpos] = ( ( ( in[ 0 + inpos] >>> 4 ) & 15 )
- ) + out[1 + outpos - 1] ;
- out[ 2 + outpos] = ( ( ( in[ 0 + inpos] >>> 8 ) & 15 )
- ) + out[2 + outpos - 1] ;
- out[ 3 + outpos] = ( ( ( in[ 0 + inpos] >>> 12 ) & 15 )
- ) + out[3 + outpos - 1] ;
- out[ 4 + outpos] = ( ( ( in[ 0 + inpos] >>> 16 ) & 15 )
- ) + out[4 + outpos - 1] ;
- out[ 5 + outpos] = ( ( ( in[ 0 + inpos] >>> 20 ) & 15 )
- ) + out[5 + outpos - 1] ;
- out[ 6 + outpos] = ( ( ( in[ 0 + inpos] >>> 24 ) & 15 )
- ) + out[6 + outpos - 1] ;
- out[ 7 + outpos] = ( ( in[ 0 + inpos] >>> 28 )
- ) + out[7 + outpos - 1] ;
- out[ 8 + outpos] = ( ( ( in[ 1 + inpos] >>> 0 ) & 15 )
- ) + out[8 + outpos - 1] ;
- out[ 9 + outpos] = ( ( ( in[ 1 + inpos] >>> 4 ) & 15 )
- ) + out[9 + outpos - 1] ;
- out[ 10 + outpos] = ( ( ( in[ 1 + inpos] >>> 8 ) & 15 )
- ) + out[10 + outpos - 1] ;
- out[ 11 + outpos] = ( ( ( in[ 1 + inpos] >>> 12 ) & 15 )
- ) + out[11 + outpos - 1] ;
- out[ 12 + outpos] = ( ( ( in[ 1 + inpos] >>> 16 ) & 15 )
- ) + out[12 + outpos - 1] ;
- out[ 13 + outpos] = ( ( ( in[ 1 + inpos] >>> 20 ) & 15 )
- ) + out[13 + outpos - 1] ;
- out[ 14 + outpos] = ( ( ( in[ 1 + inpos] >>> 24 ) & 15 )
- ) + out[14 + outpos - 1] ;
- out[ 15 + outpos] = ( ( in[ 1 + inpos] >>> 28 )
- ) + out[15 + outpos - 1] ;
- out[ 16 + outpos] = ( ( ( in[ 2 + inpos] >>> 0 ) & 15 )
- ) + out[16 + outpos - 1] ;
- out[ 17 + outpos] = ( ( ( in[ 2 + inpos] >>> 4 ) & 15 )
- ) + out[17 + outpos - 1] ;
- out[ 18 + outpos] = ( ( ( in[ 2 + inpos] >>> 8 ) & 15 )
- ) + out[18 + outpos - 1] ;
- out[ 19 + outpos] = ( ( ( in[ 2 + inpos] >>> 12 ) & 15 )
- ) + out[19 + outpos - 1] ;
- out[ 20 + outpos] = ( ( ( in[ 2 + inpos] >>> 16 ) & 15 )
- ) + out[20 + outpos - 1] ;
- out[ 21 + outpos] = ( ( ( in[ 2 + inpos] >>> 20 ) & 15 )
- ) + out[21 + outpos - 1] ;
- out[ 22 + outpos] = ( ( ( in[ 2 + inpos] >>> 24 ) & 15 )
- ) + out[22 + outpos - 1] ;
- out[ 23 + outpos] = ( ( in[ 2 + inpos] >>> 28 )
- ) + out[23 + outpos - 1] ;
- out[ 24 + outpos] = ( ( ( in[ 3 + inpos] >>> 0 ) & 15 )
- ) + out[24 + outpos - 1] ;
- out[ 25 + outpos] = ( ( ( in[ 3 + inpos] >>> 4 ) & 15 )
- ) + out[25 + outpos - 1] ;
- out[ 26 + outpos] = ( ( ( in[ 3 + inpos] >>> 8 ) & 15 )
- ) + out[26 + outpos - 1] ;
- out[ 27 + outpos] = ( ( ( in[ 3 + inpos] >>> 12 ) & 15 )
- ) + out[27 + outpos - 1] ;
- out[ 28 + outpos] = ( ( ( in[ 3 + inpos] >>> 16 ) & 15 )
- ) + out[28 + outpos - 1] ;
- out[ 29 + outpos] = ( ( ( in[ 3 + inpos] >>> 20 ) & 15 )
- ) + out[29 + outpos - 1] ;
- out[ 30 + outpos] = ( ( ( in[ 3 + inpos] >>> 24 ) & 15 )
- ) + out[30 + outpos - 1] ;
- out[ 31 + outpos] = ( ( in[ 3 + inpos] >>> 28 )
- ) + out[31 + outpos - 1] ;
-}
-
-
-
-
-public static void integratedunpack5(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = ( ( ( in[ 0 + inpos] >>> 0 ) & 31 )
- ) + initoffset ;
- out[ 1 + outpos] = ( ( ( in[ 0 + inpos] >>> 5 ) & 31 )
- ) + out[1 + outpos - 1] ;
- out[ 2 + outpos] = ( ( ( in[ 0 + inpos] >>> 10 ) & 31 )
- ) + out[2 + outpos - 1] ;
- out[ 3 + outpos] = ( ( ( in[ 0 + inpos] >>> 15 ) & 31 )
- ) + out[3 + outpos - 1] ;
- out[ 4 + outpos] = ( ( ( in[ 0 + inpos] >>> 20 ) & 31 )
- ) + out[4 + outpos - 1] ;
- out[ 5 + outpos] = ( ( ( in[ 0 + inpos] >>> 25 ) & 31 )
- ) + out[5 + outpos - 1] ;
- out[ 6 + outpos] = ( ( in[ 0 + inpos] >>> 30 )
- | ((in[ 1 + inpos] & 7 )<<( 5 - 3 ))
- ) + out[6 + outpos - 1] ;
- out[ 7 + outpos] = ( ( ( in[ 1 + inpos] >>> 3 ) & 31 )
- ) + out[7 + outpos - 1] ;
- out[ 8 + outpos] = ( ( ( in[ 1 + inpos] >>> 8 ) & 31 )
- ) + out[8 + outpos - 1] ;
- out[ 9 + outpos] = ( ( ( in[ 1 + inpos] >>> 13 ) & 31 )
- ) + out[9 + outpos - 1] ;
- out[ 10 + outpos] = ( ( ( in[ 1 + inpos] >>> 18 ) & 31 )
- ) + out[10 + outpos - 1] ;
- out[ 11 + outpos] = ( ( ( in[ 1 + inpos] >>> 23 ) & 31 )
- ) + out[11 + outpos - 1] ;
- out[ 12 + outpos] = ( ( in[ 1 + inpos] >>> 28 )
- | ((in[ 2 + inpos] & 1 )<<( 5 - 1 ))
- ) + out[12 + outpos - 1] ;
- out[ 13 + outpos] = ( ( ( in[ 2 + inpos] >>> 1 ) & 31 )
- ) + out[13 + outpos - 1] ;
- out[ 14 + outpos] = ( ( ( in[ 2 + inpos] >>> 6 ) & 31 )
- ) + out[14 + outpos - 1] ;
- out[ 15 + outpos] = ( ( ( in[ 2 + inpos] >>> 11 ) & 31 )
- ) + out[15 + outpos - 1] ;
- out[ 16 + outpos] = ( ( ( in[ 2 + inpos] >>> 16 ) & 31 )
- ) + out[16 + outpos - 1] ;
- out[ 17 + outpos] = ( ( ( in[ 2 + inpos] >>> 21 ) & 31 )
- ) + out[17 + outpos - 1] ;
- out[ 18 + outpos] = ( ( ( in[ 2 + inpos] >>> 26 ) & 31 )
- ) + out[18 + outpos - 1] ;
- out[ 19 + outpos] = ( ( in[ 2 + inpos] >>> 31 )
- | ((in[ 3 + inpos] & 15 )<<( 5 - 4 ))
- ) + out[19 + outpos - 1] ;
- out[ 20 + outpos] = ( ( ( in[ 3 + inpos] >>> 4 ) & 31 )
- ) + out[20 + outpos - 1] ;
- out[ 21 + outpos] = ( ( ( in[ 3 + inpos] >>> 9 ) & 31 )
- ) + out[21 + outpos - 1] ;
- out[ 22 + outpos] = ( ( ( in[ 3 + inpos] >>> 14 ) & 31 )
- ) + out[22 + outpos - 1] ;
- out[ 23 + outpos] = ( ( ( in[ 3 + inpos] >>> 19 ) & 31 )
- ) + out[23 + outpos - 1] ;
- out[ 24 + outpos] = ( ( ( in[ 3 + inpos] >>> 24 ) & 31 )
- ) + out[24 + outpos - 1] ;
- out[ 25 + outpos] = ( ( in[ 3 + inpos] >>> 29 )
- | ((in[ 4 + inpos] & 3 )<<( 5 - 2 ))
- ) + out[25 + outpos - 1] ;
- out[ 26 + outpos] = ( ( ( in[ 4 + inpos] >>> 2 ) & 31 )
- ) + out[26 + outpos - 1] ;
- out[ 27 + outpos] = ( ( ( in[ 4 + inpos] >>> 7 ) & 31 )
- ) + out[27 + outpos - 1] ;
- out[ 28 + outpos] = ( ( ( in[ 4 + inpos] >>> 12 ) & 31 )
- ) + out[28 + outpos - 1] ;
- out[ 29 + outpos] = ( ( ( in[ 4 + inpos] >>> 17 ) & 31 )
- ) + out[29 + outpos - 1] ;
- out[ 30 + outpos] = ( ( ( in[ 4 + inpos] >>> 22 ) & 31 )
- ) + out[30 + outpos - 1] ;
- out[ 31 + outpos] = ( ( in[ 4 + inpos] >>> 27 )
- ) + out[31 + outpos - 1] ;
-}
-
-
-
-
-public static void integratedunpack6(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = ( ( ( in[ 0 + inpos] >>> 0 ) & 63 )
- ) + initoffset ;
- out[ 1 + outpos] = ( ( ( in[ 0 + inpos] >>> 6 ) & 63 )
- ) + out[1 + outpos - 1] ;
- out[ 2 + outpos] = ( ( ( in[ 0 + inpos] >>> 12 ) & 63 )
- ) + out[2 + outpos - 1] ;
- out[ 3 + outpos] = ( ( ( in[ 0 + inpos] >>> 18 ) & 63 )
- ) + out[3 + outpos - 1] ;
- out[ 4 + outpos] = ( ( ( in[ 0 + inpos] >>> 24 ) & 63 )
- ) + out[4 + outpos - 1] ;
- out[ 5 + outpos] = ( ( in[ 0 + inpos] >>> 30 )
- | ((in[ 1 + inpos] & 15 )<<( 6 - 4 ))
- ) + out[5 + outpos - 1] ;
- out[ 6 + outpos] = ( ( ( in[ 1 + inpos] >>> 4 ) & 63 )
- ) + out[6 + outpos - 1] ;
- out[ 7 + outpos] = ( ( ( in[ 1 + inpos] >>> 10 ) & 63 )
- ) + out[7 + outpos - 1] ;
- out[ 8 + outpos] = ( ( ( in[ 1 + inpos] >>> 16 ) & 63 )
- ) + out[8 + outpos - 1] ;
- out[ 9 + outpos] = ( ( ( in[ 1 + inpos] >>> 22 ) & 63 )
- ) + out[9 + outpos - 1] ;
- out[ 10 + outpos] = ( ( in[ 1 + inpos] >>> 28 )
- | ((in[ 2 + inpos] & 3 )<<( 6 - 2 ))
- ) + out[10 + outpos - 1] ;
- out[ 11 + outpos] = ( ( ( in[ 2 + inpos] >>> 2 ) & 63 )
- ) + out[11 + outpos - 1] ;
- out[ 12 + outpos] = ( ( ( in[ 2 + inpos] >>> 8 ) & 63 )
- ) + out[12 + outpos - 1] ;
- out[ 13 + outpos] = ( ( ( in[ 2 + inpos] >>> 14 ) & 63 )
- ) + out[13 + outpos - 1] ;
- out[ 14 + outpos] = ( ( ( in[ 2 + inpos] >>> 20 ) & 63 )
- ) + out[14 + outpos - 1] ;
- out[ 15 + outpos] = ( ( in[ 2 + inpos] >>> 26 )
- ) + out[15 + outpos - 1] ;
- out[ 16 + outpos] = ( ( ( in[ 3 + inpos] >>> 0 ) & 63 )
- ) + out[16 + outpos - 1] ;
- out[ 17 + outpos] = ( ( ( in[ 3 + inpos] >>> 6 ) & 63 )
- ) + out[17 + outpos - 1] ;
- out[ 18 + outpos] = ( ( ( in[ 3 + inpos] >>> 12 ) & 63 )
- ) + out[18 + outpos - 1] ;
- out[ 19 + outpos] = ( ( ( in[ 3 + inpos] >>> 18 ) & 63 )
- ) + out[19 + outpos - 1] ;
- out[ 20 + outpos] = ( ( ( in[ 3 + inpos] >>> 24 ) & 63 )
- ) + out[20 + outpos - 1] ;
- out[ 21 + outpos] = ( ( in[ 3 + inpos] >>> 30 )
- | ((in[ 4 + inpos] & 15 )<<( 6 - 4 ))
- ) + out[21 + outpos - 1] ;
- out[ 22 + outpos] = ( ( ( in[ 4 + inpos] >>> 4 ) & 63 )
- ) + out[22 + outpos - 1] ;
- out[ 23 + outpos] = ( ( ( in[ 4 + inpos] >>> 10 ) & 63 )
- ) + out[23 + outpos - 1] ;
- out[ 24 + outpos] = ( ( ( in[ 4 + inpos] >>> 16 ) & 63 )
- ) + out[24 + outpos - 1] ;
- out[ 25 + outpos] = ( ( ( in[ 4 + inpos] >>> 22 ) & 63 )
- ) + out[25 + outpos - 1] ;
- out[ 26 + outpos] = ( ( in[ 4 + inpos] >>> 28 )
- | ((in[ 5 + inpos] & 3 )<<( 6 - 2 ))
- ) + out[26 + outpos - 1] ;
- out[ 27 + outpos] = ( ( ( in[ 5 + inpos] >>> 2 ) & 63 )
- ) + out[27 + outpos - 1] ;
- out[ 28 + outpos] = ( ( ( in[ 5 + inpos] >>> 8 ) & 63 )
- ) + out[28 + outpos - 1] ;
- out[ 29 + outpos] = ( ( ( in[ 5 + inpos] >>> 14 ) & 63 )
- ) + out[29 + outpos - 1] ;
- out[ 30 + outpos] = ( ( ( in[ 5 + inpos] >>> 20 ) & 63 )
- ) + out[30 + outpos - 1] ;
- out[ 31 + outpos] = ( ( in[ 5 + inpos] >>> 26 )
- ) + out[31 + outpos - 1] ;
-}
-
-
-
-
-public static void integratedunpack7(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = ( ( ( in[ 0 + inpos] >>> 0 ) & 127 )
- ) + initoffset ;
- out[ 1 + outpos] = ( ( ( in[ 0 + inpos] >>> 7 ) & 127 )
- ) + out[1 + outpos - 1] ;
- out[ 2 + outpos] = ( ( ( in[ 0 + inpos] >>> 14 ) & 127 )
- ) + out[2 + outpos - 1] ;
- out[ 3 + outpos] = ( ( ( in[ 0 + inpos] >>> 21 ) & 127 )
- ) + out[3 + outpos - 1] ;
- out[ 4 + outpos] = ( ( in[ 0 + inpos] >>> 28 )
- | ((in[ 1 + inpos] & 7 )<<( 7 - 3 ))
- ) + out[4 + outpos - 1] ;
- out[ 5 + outpos] = ( ( ( in[ 1 + inpos] >>> 3 ) & 127 )
- ) + out[5 + outpos - 1] ;
- out[ 6 + outpos] = ( ( ( in[ 1 + inpos] >>> 10 ) & 127 )
- ) + out[6 + outpos - 1] ;
- out[ 7 + outpos] = ( ( ( in[ 1 + inpos] >>> 17 ) & 127 )
- ) + out[7 + outpos - 1] ;
- out[ 8 + outpos] = ( ( ( in[ 1 + inpos] >>> 24 ) & 127 )
- ) + out[8 + outpos - 1] ;
- out[ 9 + outpos] = ( ( in[ 1 + inpos] >>> 31 )
- | ((in[ 2 + inpos] & 63 )<<( 7 - 6 ))
- ) + out[9 + outpos - 1] ;
- out[ 10 + outpos] = ( ( ( in[ 2 + inpos] >>> 6 ) & 127 )
- ) + out[10 + outpos - 1] ;
- out[ 11 + outpos] = ( ( ( in[ 2 + inpos] >>> 13 ) & 127 )
- ) + out[11 + outpos - 1] ;
- out[ 12 + outpos] = ( ( ( in[ 2 + inpos] >>> 20 ) & 127 )
- ) + out[12 + outpos - 1] ;
- out[ 13 + outpos] = ( ( in[ 2 + inpos] >>> 27 )
- | ((in[ 3 + inpos] & 3 )<<( 7 - 2 ))
- ) + out[13 + outpos - 1] ;
- out[ 14 + outpos] = ( ( ( in[ 3 + inpos] >>> 2 ) & 127 )
- ) + out[14 + outpos - 1] ;
- out[ 15 + outpos] = ( ( ( in[ 3 + inpos] >>> 9 ) & 127 )
- ) + out[15 + outpos - 1] ;
- out[ 16 + outpos] = ( ( ( in[ 3 + inpos] >>> 16 ) & 127 )
- ) + out[16 + outpos - 1] ;
- out[ 17 + outpos] = ( ( ( in[ 3 + inpos] >>> 23 ) & 127 )
- ) + out[17 + outpos - 1] ;
- out[ 18 + outpos] = ( ( in[ 3 + inpos] >>> 30 )
- | ((in[ 4 + inpos] & 31 )<<( 7 - 5 ))
- ) + out[18 + outpos - 1] ;
- out[ 19 + outpos] = ( ( ( in[ 4 + inpos] >>> 5 ) & 127 )
- ) + out[19 + outpos - 1] ;
- out[ 20 + outpos] = ( ( ( in[ 4 + inpos] >>> 12 ) & 127 )
- ) + out[20 + outpos - 1] ;
- out[ 21 + outpos] = ( ( ( in[ 4 + inpos] >>> 19 ) & 127 )
- ) + out[21 + outpos - 1] ;
- out[ 22 + outpos] = ( ( in[ 4 + inpos] >>> 26 )
- | ((in[ 5 + inpos] & 1 )<<( 7 - 1 ))
- ) + out[22 + outpos - 1] ;
- out[ 23 + outpos] = ( ( ( in[ 5 + inpos] >>> 1 ) & 127 )
- ) + out[23 + outpos - 1] ;
- out[ 24 + outpos] = ( ( ( in[ 5 + inpos] >>> 8 ) & 127 )
- ) + out[24 + outpos - 1] ;
- out[ 25 + outpos] = ( ( ( in[ 5 + inpos] >>> 15 ) & 127 )
- ) + out[25 + outpos - 1] ;
- out[ 26 + outpos] = ( ( ( in[ 5 + inpos] >>> 22 ) & 127 )
- ) + out[26 + outpos - 1] ;
- out[ 27 + outpos] = ( ( in[ 5 + inpos] >>> 29 )
- | ((in[ 6 + inpos] & 15 )<<( 7 - 4 ))
- ) + out[27 + outpos - 1] ;
- out[ 28 + outpos] = ( ( ( in[ 6 + inpos] >>> 4 ) & 127 )
- ) + out[28 + outpos - 1] ;
- out[ 29 + outpos] = ( ( ( in[ 6 + inpos] >>> 11 ) & 127 )
- ) + out[29 + outpos - 1] ;
- out[ 30 + outpos] = ( ( ( in[ 6 + inpos] >>> 18 ) & 127 )
- ) + out[30 + outpos - 1] ;
- out[ 31 + outpos] = ( ( in[ 6 + inpos] >>> 25 )
- ) + out[31 + outpos - 1] ;
-}
-
-
-
-
-public static void integratedunpack8(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = ( ( ( in[ 0 + inpos] >>> 0 ) & 255 )
- ) + initoffset ;
- out[ 1 + outpos] = ( ( ( in[ 0 + inpos] >>> 8 ) & 255 )
- ) + out[1 + outpos - 1] ;
- out[ 2 + outpos] = ( ( ( in[ 0 + inpos] >>> 16 ) & 255 )
- ) + out[2 + outpos - 1] ;
- out[ 3 + outpos] = ( ( in[ 0 + inpos] >>> 24 )
- ) + out[3 + outpos - 1] ;
- out[ 4 + outpos] = ( ( ( in[ 1 + inpos] >>> 0 ) & 255 )
- ) + out[4 + outpos - 1] ;
- out[ 5 + outpos] = ( ( ( in[ 1 + inpos] >>> 8 ) & 255 )
- ) + out[5 + outpos - 1] ;
- out[ 6 + outpos] = ( ( ( in[ 1 + inpos] >>> 16 ) & 255 )
- ) + out[6 + outpos - 1] ;
- out[ 7 + outpos] = ( ( in[ 1 + inpos] >>> 24 )
- ) + out[7 + outpos - 1] ;
- out[ 8 + outpos] = ( ( ( in[ 2 + inpos] >>> 0 ) & 255 )
- ) + out[8 + outpos - 1] ;
- out[ 9 + outpos] = ( ( ( in[ 2 + inpos] >>> 8 ) & 255 )
- ) + out[9 + outpos - 1] ;
- out[ 10 + outpos] = ( ( ( in[ 2 + inpos] >>> 16 ) & 255 )
- ) + out[10 + outpos - 1] ;
- out[ 11 + outpos] = ( ( in[ 2 + inpos] >>> 24 )
- ) + out[11 + outpos - 1] ;
- out[ 12 + outpos] = ( ( ( in[ 3 + inpos] >>> 0 ) & 255 )
- ) + out[12 + outpos - 1] ;
- out[ 13 + outpos] = ( ( ( in[ 3 + inpos] >>> 8 ) & 255 )
- ) + out[13 + outpos - 1] ;
- out[ 14 + outpos] = ( ( ( in[ 3 + inpos] >>> 16 ) & 255 )
- ) + out[14 + outpos - 1] ;
- out[ 15 + outpos] = ( ( in[ 3 + inpos] >>> 24 )
- ) + out[15 + outpos - 1] ;
- out[ 16 + outpos] = ( ( ( in[ 4 + inpos] >>> 0 ) & 255 )
- ) + out[16 + outpos - 1] ;
- out[ 17 + outpos] = ( ( ( in[ 4 + inpos] >>> 8 ) & 255 )
- ) + out[17 + outpos - 1] ;
- out[ 18 + outpos] = ( ( ( in[ 4 + inpos] >>> 16 ) & 255 )
- ) + out[18 + outpos - 1] ;
- out[ 19 + outpos] = ( ( in[ 4 + inpos] >>> 24 )
- ) + out[19 + outpos - 1] ;
- out[ 20 + outpos] = ( ( ( in[ 5 + inpos] >>> 0 ) & 255 )
- ) + out[20 + outpos - 1] ;
- out[ 21 + outpos] = ( ( ( in[ 5 + inpos] >>> 8 ) & 255 )
- ) + out[21 + outpos - 1] ;
- out[ 22 + outpos] = ( ( ( in[ 5 + inpos] >>> 16 ) & 255 )
- ) + out[22 + outpos - 1] ;
- out[ 23 + outpos] = ( ( in[ 5 + inpos] >>> 24 )
- ) + out[23 + outpos - 1] ;
- out[ 24 + outpos] = ( ( ( in[ 6 + inpos] >>> 0 ) & 255 )
- ) + out[24 + outpos - 1] ;
- out[ 25 + outpos] = ( ( ( in[ 6 + inpos] >>> 8 ) & 255 )
- ) + out[25 + outpos - 1] ;
- out[ 26 + outpos] = ( ( ( in[ 6 + inpos] >>> 16 ) & 255 )
- ) + out[26 + outpos - 1] ;
- out[ 27 + outpos] = ( ( in[ 6 + inpos] >>> 24 )
- ) + out[27 + outpos - 1] ;
- out[ 28 + outpos] = ( ( ( in[ 7 + inpos] >>> 0 ) & 255 )
- ) + out[28 + outpos - 1] ;
- out[ 29 + outpos] = ( ( ( in[ 7 + inpos] >>> 8 ) & 255 )
- ) + out[29 + outpos - 1] ;
- out[ 30 + outpos] = ( ( ( in[ 7 + inpos] >>> 16 ) & 255 )
- ) + out[30 + outpos - 1] ;
- out[ 31 + outpos] = ( ( in[ 7 + inpos] >>> 24 )
- ) + out[31 + outpos - 1] ;
-}
-
-
-
-
-public static void integratedunpack9(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = ( ( ( in[ 0 + inpos] >>> 0 ) & 511 )
- ) + initoffset ;
- out[ 1 + outpos] = ( ( ( in[ 0 + inpos] >>> 9 ) & 511 )
- ) + out[1 + outpos - 1] ;
- out[ 2 + outpos] = ( ( ( in[ 0 + inpos] >>> 18 ) & 511 )
- ) + out[2 + outpos - 1] ;
- out[ 3 + outpos] = ( ( in[ 0 + inpos] >>> 27 )
- | ((in[ 1 + inpos] & 15 )<<( 9 - 4 ))
- ) + out[3 + outpos - 1] ;
- out[ 4 + outpos] = ( ( ( in[ 1 + inpos] >>> 4 ) & 511 )
- ) + out[4 + outpos - 1] ;
- out[ 5 + outpos] = ( ( ( in[ 1 + inpos] >>> 13 ) & 511 )
- ) + out[5 + outpos - 1] ;
- out[ 6 + outpos] = ( ( ( in[ 1 + inpos] >>> 22 ) & 511 )
- ) + out[6 + outpos - 1] ;
- out[ 7 + outpos] = ( ( in[ 1 + inpos] >>> 31 )
- | ((in[ 2 + inpos] & 255 )<<( 9 - 8 ))
- ) + out[7 + outpos - 1] ;
- out[ 8 + outpos] = ( ( ( in[ 2 + inpos] >>> 8 ) & 511 )
- ) + out[8 + outpos - 1] ;
- out[ 9 + outpos] = ( ( ( in[ 2 + inpos] >>> 17 ) & 511 )
- ) + out[9 + outpos - 1] ;
- out[ 10 + outpos] = ( ( in[ 2 + inpos] >>> 26 )
- | ((in[ 3 + inpos] & 7 )<<( 9 - 3 ))
- ) + out[10 + outpos - 1] ;
- out[ 11 + outpos] = ( ( ( in[ 3 + inpos] >>> 3 ) & 511 )
- ) + out[11 + outpos - 1] ;
- out[ 12 + outpos] = ( ( ( in[ 3 + inpos] >>> 12 ) & 511 )
- ) + out[12 + outpos - 1] ;
- out[ 13 + outpos] = ( ( ( in[ 3 + inpos] >>> 21 ) & 511 )
- ) + out[13 + outpos - 1] ;
- out[ 14 + outpos] = ( ( in[ 3 + inpos] >>> 30 )
- | ((in[ 4 + inpos] & 127 )<<( 9 - 7 ))
- ) + out[14 + outpos - 1] ;
- out[ 15 + outpos] = ( ( ( in[ 4 + inpos] >>> 7 ) & 511 )
- ) + out[15 + outpos - 1] ;
- out[ 16 + outpos] = ( ( ( in[ 4 + inpos] >>> 16 ) & 511 )
- ) + out[16 + outpos - 1] ;
- out[ 17 + outpos] = ( ( in[ 4 + inpos] >>> 25 )
- | ((in[ 5 + inpos] & 3 )<<( 9 - 2 ))
- ) + out[17 + outpos - 1] ;
- out[ 18 + outpos] = ( ( ( in[ 5 + inpos] >>> 2 ) & 511 )
- ) + out[18 + outpos - 1] ;
- out[ 19 + outpos] = ( ( ( in[ 5 + inpos] >>> 11 ) & 511 )
- ) + out[19 + outpos - 1] ;
- out[ 20 + outpos] = ( ( ( in[ 5 + inpos] >>> 20 ) & 511 )
- ) + out[20 + outpos - 1] ;
- out[ 21 + outpos] = ( ( in[ 5 + inpos] >>> 29 )
- | ((in[ 6 + inpos] & 63 )<<( 9 - 6 ))
- ) + out[21 + outpos - 1] ;
- out[ 22 + outpos] = ( ( ( in[ 6 + inpos] >>> 6 ) & 511 )
- ) + out[22 + outpos - 1] ;
- out[ 23 + outpos] = ( ( ( in[ 6 + inpos] >>> 15 ) & 511 )
- ) + out[23 + outpos - 1] ;
- out[ 24 + outpos] = ( ( in[ 6 + inpos] >>> 24 )
- | ((in[ 7 + inpos] & 1 )<<( 9 - 1 ))
- ) + out[24 + outpos - 1] ;
- out[ 25 + outpos] = ( ( ( in[ 7 + inpos] >>> 1 ) & 511 )
- ) + out[25 + outpos - 1] ;
- out[ 26 + outpos] = ( ( ( in[ 7 + inpos] >>> 10 ) & 511 )
- ) + out[26 + outpos - 1] ;
- out[ 27 + outpos] = ( ( ( in[ 7 + inpos] >>> 19 ) & 511 )
- ) + out[27 + outpos - 1] ;
- out[ 28 + outpos] = ( ( in[ 7 + inpos] >>> 28 )
- | ((in[ 8 + inpos] & 31 )<<( 9 - 5 ))
- ) + out[28 + outpos - 1] ;
- out[ 29 + outpos] = ( ( ( in[ 8 + inpos] >>> 5 ) & 511 )
- ) + out[29 + outpos - 1] ;
- out[ 30 + outpos] = ( ( ( in[ 8 + inpos] >>> 14 ) & 511 )
- ) + out[30 + outpos - 1] ;
- out[ 31 + outpos] = ( ( in[ 8 + inpos] >>> 23 )
- ) + out[31 + outpos - 1] ;
-}
-
-
-
-
-public static void integratedunpack10(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = ( ( ( in[ 0 + inpos] >>> 0 ) & 1023 )
- ) + initoffset ;
- out[ 1 + outpos] = ( ( ( in[ 0 + inpos] >>> 10 ) & 1023 )
- ) + out[1 + outpos - 1] ;
- out[ 2 + outpos] = ( ( ( in[ 0 + inpos] >>> 20 ) & 1023 )
- ) + out[2 + outpos - 1] ;
- out[ 3 + outpos] = ( ( in[ 0 + inpos] >>> 30 )
- | ((in[ 1 + inpos] & 255 )<<( 10 - 8 ))
- ) + out[3 + outpos - 1] ;
- out[ 4 + outpos] = ( ( ( in[ 1 + inpos] >>> 8 ) & 1023 )
- ) + out[4 + outpos - 1] ;
- out[ 5 + outpos] = ( ( ( in[ 1 + inpos] >>> 18 ) & 1023 )
- ) + out[5 + outpos - 1] ;
- out[ 6 + outpos] = ( ( in[ 1 + inpos] >>> 28 )
- | ((in[ 2 + inpos] & 63 )<<( 10 - 6 ))
- ) + out[6 + outpos - 1] ;
- out[ 7 + outpos] = ( ( ( in[ 2 + inpos] >>> 6 ) & 1023 )
- ) + out[7 + outpos - 1] ;
- out[ 8 + outpos] = ( ( ( in[ 2 + inpos] >>> 16 ) & 1023 )
- ) + out[8 + outpos - 1] ;
- out[ 9 + outpos] = ( ( in[ 2 + inpos] >>> 26 )
- | ((in[ 3 + inpos] & 15 )<<( 10 - 4 ))
- ) + out[9 + outpos - 1] ;
- out[ 10 + outpos] = ( ( ( in[ 3 + inpos] >>> 4 ) & 1023 )
- ) + out[10 + outpos - 1] ;
- out[ 11 + outpos] = ( ( ( in[ 3 + inpos] >>> 14 ) & 1023 )
- ) + out[11 + outpos - 1] ;
- out[ 12 + outpos] = ( ( in[ 3 + inpos] >>> 24 )
- | ((in[ 4 + inpos] & 3 )<<( 10 - 2 ))
- ) + out[12 + outpos - 1] ;
- out[ 13 + outpos] = ( ( ( in[ 4 + inpos] >>> 2 ) & 1023 )
- ) + out[13 + outpos - 1] ;
- out[ 14 + outpos] = ( ( ( in[ 4 + inpos] >>> 12 ) & 1023 )
- ) + out[14 + outpos - 1] ;
- out[ 15 + outpos] = ( ( in[ 4 + inpos] >>> 22 )
- ) + out[15 + outpos - 1] ;
- out[ 16 + outpos] = ( ( ( in[ 5 + inpos] >>> 0 ) & 1023 )
- ) + out[16 + outpos - 1] ;
- out[ 17 + outpos] = ( ( ( in[ 5 + inpos] >>> 10 ) & 1023 )
- ) + out[17 + outpos - 1] ;
- out[ 18 + outpos] = ( ( ( in[ 5 + inpos] >>> 20 ) & 1023 )
- ) + out[18 + outpos - 1] ;
- out[ 19 + outpos] = ( ( in[ 5 + inpos] >>> 30 )
- | ((in[ 6 + inpos] & 255 )<<( 10 - 8 ))
- ) + out[19 + outpos - 1] ;
- out[ 20 + outpos] = ( ( ( in[ 6 + inpos] >>> 8 ) & 1023 )
- ) + out[20 + outpos - 1] ;
- out[ 21 + outpos] = ( ( ( in[ 6 + inpos] >>> 18 ) & 1023 )
- ) + out[21 + outpos - 1] ;
- out[ 22 + outpos] = ( ( in[ 6 + inpos] >>> 28 )
- | ((in[ 7 + inpos] & 63 )<<( 10 - 6 ))
- ) + out[22 + outpos - 1] ;
- out[ 23 + outpos] = ( ( ( in[ 7 + inpos] >>> 6 ) & 1023 )
- ) + out[23 + outpos - 1] ;
- out[ 24 + outpos] = ( ( ( in[ 7 + inpos] >>> 16 ) & 1023 )
- ) + out[24 + outpos - 1] ;
- out[ 25 + outpos] = ( ( in[ 7 + inpos] >>> 26 )
- | ((in[ 8 + inpos] & 15 )<<( 10 - 4 ))
- ) + out[25 + outpos - 1] ;
- out[ 26 + outpos] = ( ( ( in[ 8 + inpos] >>> 4 ) & 1023 )
- ) + out[26 + outpos - 1] ;
- out[ 27 + outpos] = ( ( ( in[ 8 + inpos] >>> 14 ) & 1023 )
- ) + out[27 + outpos - 1] ;
- out[ 28 + outpos] = ( ( in[ 8 + inpos] >>> 24 )
- | ((in[ 9 + inpos] & 3 )<<( 10 - 2 ))
- ) + out[28 + outpos - 1] ;
- out[ 29 + outpos] = ( ( ( in[ 9 + inpos] >>> 2 ) & 1023 )
- ) + out[29 + outpos - 1] ;
- out[ 30 + outpos] = ( ( ( in[ 9 + inpos] >>> 12 ) & 1023 )
- ) + out[30 + outpos - 1] ;
- out[ 31 + outpos] = ( ( in[ 9 + inpos] >>> 22 )
- ) + out[31 + outpos - 1] ;
-}
-
-
-
-
-public static void integratedunpack11(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = ( ( ( in[ 0 + inpos] >>> 0 ) & 2047 )
- ) + initoffset ;
- out[ 1 + outpos] = ( ( ( in[ 0 + inpos] >>> 11 ) & 2047 )
- ) + out[1 + outpos - 1] ;
- out[ 2 + outpos] = ( ( in[ 0 + inpos] >>> 22 )
- | ((in[ 1 + inpos] & 1 )<<( 11 - 1 ))
- ) + out[2 + outpos - 1] ;
- out[ 3 + outpos] = ( ( ( in[ 1 + inpos] >>> 1 ) & 2047 )
- ) + out[3 + outpos - 1] ;
- out[ 4 + outpos] = ( ( ( in[ 1 + inpos] >>> 12 ) & 2047 )
- ) + out[4 + outpos - 1] ;
- out[ 5 + outpos] = ( ( in[ 1 + inpos] >>> 23 )
- | ((in[ 2 + inpos] & 3 )<<( 11 - 2 ))
- ) + out[5 + outpos - 1] ;
- out[ 6 + outpos] = ( ( ( in[ 2 + inpos] >>> 2 ) & 2047 )
- ) + out[6 + outpos - 1] ;
- out[ 7 + outpos] = ( ( ( in[ 2 + inpos] >>> 13 ) & 2047 )
- ) + out[7 + outpos - 1] ;
- out[ 8 + outpos] = ( ( in[ 2 + inpos] >>> 24 )
- | ((in[ 3 + inpos] & 7 )<<( 11 - 3 ))
- ) + out[8 + outpos - 1] ;
- out[ 9 + outpos] = ( ( ( in[ 3 + inpos] >>> 3 ) & 2047 )
- ) + out[9 + outpos - 1] ;
- out[ 10 + outpos] = ( ( ( in[ 3 + inpos] >>> 14 ) & 2047 )
- ) + out[10 + outpos - 1] ;
- out[ 11 + outpos] = ( ( in[ 3 + inpos] >>> 25 )
- | ((in[ 4 + inpos] & 15 )<<( 11 - 4 ))
- ) + out[11 + outpos - 1] ;
- out[ 12 + outpos] = ( ( ( in[ 4 + inpos] >>> 4 ) & 2047 )
- ) + out[12 + outpos - 1] ;
- out[ 13 + outpos] = ( ( ( in[ 4 + inpos] >>> 15 ) & 2047 )
- ) + out[13 + outpos - 1] ;
- out[ 14 + outpos] = ( ( in[ 4 + inpos] >>> 26 )
- | ((in[ 5 + inpos] & 31 )<<( 11 - 5 ))
- ) + out[14 + outpos - 1] ;
- out[ 15 + outpos] = ( ( ( in[ 5 + inpos] >>> 5 ) & 2047 )
- ) + out[15 + outpos - 1] ;
- out[ 16 + outpos] = ( ( ( in[ 5 + inpos] >>> 16 ) & 2047 )
- ) + out[16 + outpos - 1] ;
- out[ 17 + outpos] = ( ( in[ 5 + inpos] >>> 27 )
- | ((in[ 6 + inpos] & 63 )<<( 11 - 6 ))
- ) + out[17 + outpos - 1] ;
- out[ 18 + outpos] = ( ( ( in[ 6 + inpos] >>> 6 ) & 2047 )
- ) + out[18 + outpos - 1] ;
- out[ 19 + outpos] = ( ( ( in[ 6 + inpos] >>> 17 ) & 2047 )
- ) + out[19 + outpos - 1] ;
- out[ 20 + outpos] = ( ( in[ 6 + inpos] >>> 28 )
- | ((in[ 7 + inpos] & 127 )<<( 11 - 7 ))
- ) + out[20 + outpos - 1] ;
- out[ 21 + outpos] = ( ( ( in[ 7 + inpos] >>> 7 ) & 2047 )
- ) + out[21 + outpos - 1] ;
- out[ 22 + outpos] = ( ( ( in[ 7 + inpos] >>> 18 ) & 2047 )
- ) + out[22 + outpos - 1] ;
- out[ 23 + outpos] = ( ( in[ 7 + inpos] >>> 29 )
- | ((in[ 8 + inpos] & 255 )<<( 11 - 8 ))
- ) + out[23 + outpos - 1] ;
- out[ 24 + outpos] = ( ( ( in[ 8 + inpos] >>> 8 ) & 2047 )
- ) + out[24 + outpos - 1] ;
- out[ 25 + outpos] = ( ( ( in[ 8 + inpos] >>> 19 ) & 2047 )
- ) + out[25 + outpos - 1] ;
- out[ 26 + outpos] = ( ( in[ 8 + inpos] >>> 30 )
- | ((in[ 9 + inpos] & 511 )<<( 11 - 9 ))
- ) + out[26 + outpos - 1] ;
- out[ 27 + outpos] = ( ( ( in[ 9 + inpos] >>> 9 ) & 2047 )
- ) + out[27 + outpos - 1] ;
- out[ 28 + outpos] = ( ( ( in[ 9 + inpos] >>> 20 ) & 2047 )
- ) + out[28 + outpos - 1] ;
- out[ 29 + outpos] = ( ( in[ 9 + inpos] >>> 31 )
- | ((in[ 10 + inpos] & 1023 )<<( 11 - 10 ))
- ) + out[29 + outpos - 1] ;
- out[ 30 + outpos] = ( ( ( in[ 10 + inpos] >>> 10 ) & 2047 )
- ) + out[30 + outpos - 1] ;
- out[ 31 + outpos] = ( ( in[ 10 + inpos] >>> 21 )
- ) + out[31 + outpos - 1] ;
-}
-
-
-
-
-public static void integratedunpack12(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = ( ( ( in[ 0 + inpos] >>> 0 ) & 4095 )
- ) + initoffset ;
- out[ 1 + outpos] = ( ( ( in[ 0 + inpos] >>> 12 ) & 4095 )
- ) + out[1 + outpos - 1] ;
- out[ 2 + outpos] = ( ( in[ 0 + inpos] >>> 24 )
- | ((in[ 1 + inpos] & 15 )<<( 12 - 4 ))
- ) + out[2 + outpos - 1] ;
- out[ 3 + outpos] = ( ( ( in[ 1 + inpos] >>> 4 ) & 4095 )
- ) + out[3 + outpos - 1] ;
- out[ 4 + outpos] = ( ( ( in[ 1 + inpos] >>> 16 ) & 4095 )
- ) + out[4 + outpos - 1] ;
- out[ 5 + outpos] = ( ( in[ 1 + inpos] >>> 28 )
- | ((in[ 2 + inpos] & 255 )<<( 12 - 8 ))
- ) + out[5 + outpos - 1] ;
- out[ 6 + outpos] = ( ( ( in[ 2 + inpos] >>> 8 ) & 4095 )
- ) + out[6 + outpos - 1] ;
- out[ 7 + outpos] = ( ( in[ 2 + inpos] >>> 20 )
- ) + out[7 + outpos - 1] ;
- out[ 8 + outpos] = ( ( ( in[ 3 + inpos] >>> 0 ) & 4095 )
- ) + out[8 + outpos - 1] ;
- out[ 9 + outpos] = ( ( ( in[ 3 + inpos] >>> 12 ) & 4095 )
- ) + out[9 + outpos - 1] ;
- out[ 10 + outpos] = ( ( in[ 3 + inpos] >>> 24 )
- | ((in[ 4 + inpos] & 15 )<<( 12 - 4 ))
- ) + out[10 + outpos - 1] ;
- out[ 11 + outpos] = ( ( ( in[ 4 + inpos] >>> 4 ) & 4095 )
- ) + out[11 + outpos - 1] ;
- out[ 12 + outpos] = ( ( ( in[ 4 + inpos] >>> 16 ) & 4095 )
- ) + out[12 + outpos - 1] ;
- out[ 13 + outpos] = ( ( in[ 4 + inpos] >>> 28 )
- | ((in[ 5 + inpos] & 255 )<<( 12 - 8 ))
- ) + out[13 + outpos - 1] ;
- out[ 14 + outpos] = ( ( ( in[ 5 + inpos] >>> 8 ) & 4095 )
- ) + out[14 + outpos - 1] ;
- out[ 15 + outpos] = ( ( in[ 5 + inpos] >>> 20 )
- ) + out[15 + outpos - 1] ;
- out[ 16 + outpos] = ( ( ( in[ 6 + inpos] >>> 0 ) & 4095 )
- ) + out[16 + outpos - 1] ;
- out[ 17 + outpos] = ( ( ( in[ 6 + inpos] >>> 12 ) & 4095 )
- ) + out[17 + outpos - 1] ;
- out[ 18 + outpos] = ( ( in[ 6 + inpos] >>> 24 )
- | ((in[ 7 + inpos] & 15 )<<( 12 - 4 ))
- ) + out[18 + outpos - 1] ;
- out[ 19 + outpos] = ( ( ( in[ 7 + inpos] >>> 4 ) & 4095 )
- ) + out[19 + outpos - 1] ;
- out[ 20 + outpos] = ( ( ( in[ 7 + inpos] >>> 16 ) & 4095 )
- ) + out[20 + outpos - 1] ;
- out[ 21 + outpos] = ( ( in[ 7 + inpos] >>> 28 )
- | ((in[ 8 + inpos] & 255 )<<( 12 - 8 ))
- ) + out[21 + outpos - 1] ;
- out[ 22 + outpos] = ( ( ( in[ 8 + inpos] >>> 8 ) & 4095 )
- ) + out[22 + outpos - 1] ;
- out[ 23 + outpos] = ( ( in[ 8 + inpos] >>> 20 )
- ) + out[23 + outpos - 1] ;
- out[ 24 + outpos] = ( ( ( in[ 9 + inpos] >>> 0 ) & 4095 )
- ) + out[24 + outpos - 1] ;
- out[ 25 + outpos] = ( ( ( in[ 9 + inpos] >>> 12 ) & 4095 )
- ) + out[25 + outpos - 1] ;
- out[ 26 + outpos] = ( ( in[ 9 + inpos] >>> 24 )
- | ((in[ 10 + inpos] & 15 )<<( 12 - 4 ))
- ) + out[26 + outpos - 1] ;
- out[ 27 + outpos] = ( ( ( in[ 10 + inpos] >>> 4 ) & 4095 )
- ) + out[27 + outpos - 1] ;
- out[ 28 + outpos] = ( ( ( in[ 10 + inpos] >>> 16 ) & 4095 )
- ) + out[28 + outpos - 1] ;
- out[ 29 + outpos] = ( ( in[ 10 + inpos] >>> 28 )
- | ((in[ 11 + inpos] & 255 )<<( 12 - 8 ))
- ) + out[29 + outpos - 1] ;
- out[ 30 + outpos] = ( ( ( in[ 11 + inpos] >>> 8 ) & 4095 )
- ) + out[30 + outpos - 1] ;
- out[ 31 + outpos] = ( ( in[ 11 + inpos] >>> 20 )
- ) + out[31 + outpos - 1] ;
-}
-
-
-
-
-public static void integratedunpack13(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = ( ( ( in[ 0 + inpos] >>> 0 ) & 8191 )
- ) + initoffset ;
- out[ 1 + outpos] = ( ( ( in[ 0 + inpos] >>> 13 ) & 8191 )
- ) + out[1 + outpos - 1] ;
- out[ 2 + outpos] = ( ( in[ 0 + inpos] >>> 26 )
- | ((in[ 1 + inpos] & 127 )<<( 13 - 7 ))
- ) + out[2 + outpos - 1] ;
- out[ 3 + outpos] = ( ( ( in[ 1 + inpos] >>> 7 ) & 8191 )
- ) + out[3 + outpos - 1] ;
- out[ 4 + outpos] = ( ( in[ 1 + inpos] >>> 20 )
- | ((in[ 2 + inpos] & 1 )<<( 13 - 1 ))
- ) + out[4 + outpos - 1] ;
- out[ 5 + outpos] = ( ( ( in[ 2 + inpos] >>> 1 ) & 8191 )
- ) + out[5 + outpos - 1] ;
- out[ 6 + outpos] = ( ( ( in[ 2 + inpos] >>> 14 ) & 8191 )
- ) + out[6 + outpos - 1] ;
- out[ 7 + outpos] = ( ( in[ 2 + inpos] >>> 27 )
- | ((in[ 3 + inpos] & 255 )<<( 13 - 8 ))
- ) + out[7 + outpos - 1] ;
- out[ 8 + outpos] = ( ( ( in[ 3 + inpos] >>> 8 ) & 8191 )
- ) + out[8 + outpos - 1] ;
- out[ 9 + outpos] = ( ( in[ 3 + inpos] >>> 21 )
- | ((in[ 4 + inpos] & 3 )<<( 13 - 2 ))
- ) + out[9 + outpos - 1] ;
- out[ 10 + outpos] = ( ( ( in[ 4 + inpos] >>> 2 ) & 8191 )
- ) + out[10 + outpos - 1] ;
- out[ 11 + outpos] = ( ( ( in[ 4 + inpos] >>> 15 ) & 8191 )
- ) + out[11 + outpos - 1] ;
- out[ 12 + outpos] = ( ( in[ 4 + inpos] >>> 28 )
- | ((in[ 5 + inpos] & 511 )<<( 13 - 9 ))
- ) + out[12 + outpos - 1] ;
- out[ 13 + outpos] = ( ( ( in[ 5 + inpos] >>> 9 ) & 8191 )
- ) + out[13 + outpos - 1] ;
- out[ 14 + outpos] = ( ( in[ 5 + inpos] >>> 22 )
- | ((in[ 6 + inpos] & 7 )<<( 13 - 3 ))
- ) + out[14 + outpos - 1] ;
- out[ 15 + outpos] = ( ( ( in[ 6 + inpos] >>> 3 ) & 8191 )
- ) + out[15 + outpos - 1] ;
- out[ 16 + outpos] = ( ( ( in[ 6 + inpos] >>> 16 ) & 8191 )
- ) + out[16 + outpos - 1] ;
- out[ 17 + outpos] = ( ( in[ 6 + inpos] >>> 29 )
- | ((in[ 7 + inpos] & 1023 )<<( 13 - 10 ))
- ) + out[17 + outpos - 1] ;
- out[ 18 + outpos] = ( ( ( in[ 7 + inpos] >>> 10 ) & 8191 )
- ) + out[18 + outpos - 1] ;
- out[ 19 + outpos] = ( ( in[ 7 + inpos] >>> 23 )
- | ((in[ 8 + inpos] & 15 )<<( 13 - 4 ))
- ) + out[19 + outpos - 1] ;
- out[ 20 + outpos] = ( ( ( in[ 8 + inpos] >>> 4 ) & 8191 )
- ) + out[20 + outpos - 1] ;
- out[ 21 + outpos] = ( ( ( in[ 8 + inpos] >>> 17 ) & 8191 )
- ) + out[21 + outpos - 1] ;
- out[ 22 + outpos] = ( ( in[ 8 + inpos] >>> 30 )
- | ((in[ 9 + inpos] & 2047 )<<( 13 - 11 ))
- ) + out[22 + outpos - 1] ;
- out[ 23 + outpos] = ( ( ( in[ 9 + inpos] >>> 11 ) & 8191 )
- ) + out[23 + outpos - 1] ;
- out[ 24 + outpos] = ( ( in[ 9 + inpos] >>> 24 )
- | ((in[ 10 + inpos] & 31 )<<( 13 - 5 ))
- ) + out[24 + outpos - 1] ;
- out[ 25 + outpos] = ( ( ( in[ 10 + inpos] >>> 5 ) & 8191 )
- ) + out[25 + outpos - 1] ;
- out[ 26 + outpos] = ( ( ( in[ 10 + inpos] >>> 18 ) & 8191 )
- ) + out[26 + outpos - 1] ;
- out[ 27 + outpos] = ( ( in[ 10 + inpos] >>> 31 )
- | ((in[ 11 + inpos] & 4095 )<<( 13 - 12 ))
- ) + out[27 + outpos - 1] ;
- out[ 28 + outpos] = ( ( ( in[ 11 + inpos] >>> 12 ) & 8191 )
- ) + out[28 + outpos - 1] ;
- out[ 29 + outpos] = ( ( in[ 11 + inpos] >>> 25 )
- | ((in[ 12 + inpos] & 63 )<<( 13 - 6 ))
- ) + out[29 + outpos - 1] ;
- out[ 30 + outpos] = ( ( ( in[ 12 + inpos] >>> 6 ) & 8191 )
- ) + out[30 + outpos - 1] ;
- out[ 31 + outpos] = ( ( in[ 12 + inpos] >>> 19 )
- ) + out[31 + outpos - 1] ;
-}
-
-
-
-
-public static void integratedunpack14(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = ( ( ( in[ 0 + inpos] >>> 0 ) & 16383 )
- ) + initoffset ;
- out[ 1 + outpos] = ( ( ( in[ 0 + inpos] >>> 14 ) & 16383 )
- ) + out[1 + outpos - 1] ;
- out[ 2 + outpos] = ( ( in[ 0 + inpos] >>> 28 )
- | ((in[ 1 + inpos] & 1023 )<<( 14 - 10 ))
- ) + out[2 + outpos - 1] ;
- out[ 3 + outpos] = ( ( ( in[ 1 + inpos] >>> 10 ) & 16383 )
- ) + out[3 + outpos - 1] ;
- out[ 4 + outpos] = ( ( in[ 1 + inpos] >>> 24 )
- | ((in[ 2 + inpos] & 63 )<<( 14 - 6 ))
- ) + out[4 + outpos - 1] ;
- out[ 5 + outpos] = ( ( ( in[ 2 + inpos] >>> 6 ) & 16383 )
- ) + out[5 + outpos - 1] ;
- out[ 6 + outpos] = ( ( in[ 2 + inpos] >>> 20 )
- | ((in[ 3 + inpos] & 3 )<<( 14 - 2 ))
- ) + out[6 + outpos - 1] ;
- out[ 7 + outpos] = ( ( ( in[ 3 + inpos] >>> 2 ) & 16383 )
- ) + out[7 + outpos - 1] ;
- out[ 8 + outpos] = ( ( ( in[ 3 + inpos] >>> 16 ) & 16383 )
- ) + out[8 + outpos - 1] ;
- out[ 9 + outpos] = ( ( in[ 3 + inpos] >>> 30 )
- | ((in[ 4 + inpos] & 4095 )<<( 14 - 12 ))
- ) + out[9 + outpos - 1] ;
- out[ 10 + outpos] = ( ( ( in[ 4 + inpos] >>> 12 ) & 16383 )
- ) + out[10 + outpos - 1] ;
- out[ 11 + outpos] = ( ( in[ 4 + inpos] >>> 26 )
- | ((in[ 5 + inpos] & 255 )<<( 14 - 8 ))
- ) + out[11 + outpos - 1] ;
- out[ 12 + outpos] = ( ( ( in[ 5 + inpos] >>> 8 ) & 16383 )
- ) + out[12 + outpos - 1] ;
- out[ 13 + outpos] = ( ( in[ 5 + inpos] >>> 22 )
- | ((in[ 6 + inpos] & 15 )<<( 14 - 4 ))
- ) + out[13 + outpos - 1] ;
- out[ 14 + outpos] = ( ( ( in[ 6 + inpos] >>> 4 ) & 16383 )
- ) + out[14 + outpos - 1] ;
- out[ 15 + outpos] = ( ( in[ 6 + inpos] >>> 18 )
- ) + out[15 + outpos - 1] ;
- out[ 16 + outpos] = ( ( ( in[ 7 + inpos] >>> 0 ) & 16383 )
- ) + out[16 + outpos - 1] ;
- out[ 17 + outpos] = ( ( ( in[ 7 + inpos] >>> 14 ) & 16383 )
- ) + out[17 + outpos - 1] ;
- out[ 18 + outpos] = ( ( in[ 7 + inpos] >>> 28 )
- | ((in[ 8 + inpos] & 1023 )<<( 14 - 10 ))
- ) + out[18 + outpos - 1] ;
- out[ 19 + outpos] = ( ( ( in[ 8 + inpos] >>> 10 ) & 16383 )
- ) + out[19 + outpos - 1] ;
- out[ 20 + outpos] = ( ( in[ 8 + inpos] >>> 24 )
- | ((in[ 9 + inpos] & 63 )<<( 14 - 6 ))
- ) + out[20 + outpos - 1] ;
- out[ 21 + outpos] = ( ( ( in[ 9 + inpos] >>> 6 ) & 16383 )
- ) + out[21 + outpos - 1] ;
- out[ 22 + outpos] = ( ( in[ 9 + inpos] >>> 20 )
- | ((in[ 10 + inpos] & 3 )<<( 14 - 2 ))
- ) + out[22 + outpos - 1] ;
- out[ 23 + outpos] = ( ( ( in[ 10 + inpos] >>> 2 ) & 16383 )
- ) + out[23 + outpos - 1] ;
- out[ 24 + outpos] = ( ( ( in[ 10 + inpos] >>> 16 ) & 16383 )
- ) + out[24 + outpos - 1] ;
- out[ 25 + outpos] = ( ( in[ 10 + inpos] >>> 30 )
- | ((in[ 11 + inpos] & 4095 )<<( 14 - 12 ))
- ) + out[25 + outpos - 1] ;
- out[ 26 + outpos] = ( ( ( in[ 11 + inpos] >>> 12 ) & 16383 )
- ) + out[26 + outpos - 1] ;
- out[ 27 + outpos] = ( ( in[ 11 + inpos] >>> 26 )
- | ((in[ 12 + inpos] & 255 )<<( 14 - 8 ))
- ) + out[27 + outpos - 1] ;
- out[ 28 + outpos] = ( ( ( in[ 12 + inpos] >>> 8 ) & 16383 )
- ) + out[28 + outpos - 1] ;
- out[ 29 + outpos] = ( ( in[ 12 + inpos] >>> 22 )
- | ((in[ 13 + inpos] & 15 )<<( 14 - 4 ))
- ) + out[29 + outpos - 1] ;
- out[ 30 + outpos] = ( ( ( in[ 13 + inpos] >>> 4 ) & 16383 )
- ) + out[30 + outpos - 1] ;
- out[ 31 + outpos] = ( ( in[ 13 + inpos] >>> 18 )
- ) + out[31 + outpos - 1] ;
-}
-
-
-
-
-public static void integratedunpack15(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = ( ( ( in[ 0 + inpos] >>> 0 ) & 32767 )
- ) + initoffset ;
- out[ 1 + outpos] = ( ( ( in[ 0 + inpos] >>> 15 ) & 32767 )
- ) + out[1 + outpos - 1] ;
- out[ 2 + outpos] = ( ( in[ 0 + inpos] >>> 30 )
- | ((in[ 1 + inpos] & 8191 )<<( 15 - 13 ))
- ) + out[2 + outpos - 1] ;
- out[ 3 + outpos] = ( ( ( in[ 1 + inpos] >>> 13 ) & 32767 )
- ) + out[3 + outpos - 1] ;
- out[ 4 + outpos] = ( ( in[ 1 + inpos] >>> 28 )
- | ((in[ 2 + inpos] & 2047 )<<( 15 - 11 ))
- ) + out[4 + outpos - 1] ;
- out[ 5 + outpos] = ( ( ( in[ 2 + inpos] >>> 11 ) & 32767 )
- ) + out[5 + outpos - 1] ;
- out[ 6 + outpos] = ( ( in[ 2 + inpos] >>> 26 )
- | ((in[ 3 + inpos] & 511 )<<( 15 - 9 ))
- ) + out[6 + outpos - 1] ;
- out[ 7 + outpos] = ( ( ( in[ 3 + inpos] >>> 9 ) & 32767 )
- ) + out[7 + outpos - 1] ;
- out[ 8 + outpos] = ( ( in[ 3 + inpos] >>> 24 )
- | ((in[ 4 + inpos] & 127 )<<( 15 - 7 ))
- ) + out[8 + outpos - 1] ;
- out[ 9 + outpos] = ( ( ( in[ 4 + inpos] >>> 7 ) & 32767 )
- ) + out[9 + outpos - 1] ;
- out[ 10 + outpos] = ( ( in[ 4 + inpos] >>> 22 )
- | ((in[ 5 + inpos] & 31 )<<( 15 - 5 ))
- ) + out[10 + outpos - 1] ;
- out[ 11 + outpos] = ( ( ( in[ 5 + inpos] >>> 5 ) & 32767 )
- ) + out[11 + outpos - 1] ;
- out[ 12 + outpos] = ( ( in[ 5 + inpos] >>> 20 )
- | ((in[ 6 + inpos] & 7 )<<( 15 - 3 ))
- ) + out[12 + outpos - 1] ;
- out[ 13 + outpos] = ( ( ( in[ 6 + inpos] >>> 3 ) & 32767 )
- ) + out[13 + outpos - 1] ;
- out[ 14 + outpos] = ( ( in[ 6 + inpos] >>> 18 )
- | ((in[ 7 + inpos] & 1 )<<( 15 - 1 ))
- ) + out[14 + outpos - 1] ;
- out[ 15 + outpos] = ( ( ( in[ 7 + inpos] >>> 1 ) & 32767 )
- ) + out[15 + outpos - 1] ;
- out[ 16 + outpos] = ( ( ( in[ 7 + inpos] >>> 16 ) & 32767 )
- ) + out[16 + outpos - 1] ;
- out[ 17 + outpos] = ( ( in[ 7 + inpos] >>> 31 )
- | ((in[ 8 + inpos] & 16383 )<<( 15 - 14 ))
- ) + out[17 + outpos - 1] ;
- out[ 18 + outpos] = ( ( ( in[ 8 + inpos] >>> 14 ) & 32767 )
- ) + out[18 + outpos - 1] ;
- out[ 19 + outpos] = ( ( in[ 8 + inpos] >>> 29 )
- | ((in[ 9 + inpos] & 4095 )<<( 15 - 12 ))
- ) + out[19 + outpos - 1] ;
- out[ 20 + outpos] = ( ( ( in[ 9 + inpos] >>> 12 ) & 32767 )
- ) + out[20 + outpos - 1] ;
- out[ 21 + outpos] = ( ( in[ 9 + inpos] >>> 27 )
- | ((in[ 10 + inpos] & 1023 )<<( 15 - 10 ))
- ) + out[21 + outpos - 1] ;
- out[ 22 + outpos] = ( ( ( in[ 10 + inpos] >>> 10 ) & 32767 )
- ) + out[22 + outpos - 1] ;
- out[ 23 + outpos] = ( ( in[ 10 + inpos] >>> 25 )
- | ((in[ 11 + inpos] & 255 )<<( 15 - 8 ))
- ) + out[23 + outpos - 1] ;
- out[ 24 + outpos] = ( ( ( in[ 11 + inpos] >>> 8 ) & 32767 )
- ) + out[24 + outpos - 1] ;
- out[ 25 + outpos] = ( ( in[ 11 + inpos] >>> 23 )
- | ((in[ 12 + inpos] & 63 )<<( 15 - 6 ))
- ) + out[25 + outpos - 1] ;
- out[ 26 + outpos] = ( ( ( in[ 12 + inpos] >>> 6 ) & 32767 )
- ) + out[26 + outpos - 1] ;
- out[ 27 + outpos] = ( ( in[ 12 + inpos] >>> 21 )
- | ((in[ 13 + inpos] & 15 )<<( 15 - 4 ))
- ) + out[27 + outpos - 1] ;
- out[ 28 + outpos] = ( ( ( in[ 13 + inpos] >>> 4 ) & 32767 )
- ) + out[28 + outpos - 1] ;
- out[ 29 + outpos] = ( ( in[ 13 + inpos] >>> 19 )
- | ((in[ 14 + inpos] & 3 )<<( 15 - 2 ))
- ) + out[29 + outpos - 1] ;
- out[ 30 + outpos] = ( ( ( in[ 14 + inpos] >>> 2 ) & 32767 )
- ) + out[30 + outpos - 1] ;
- out[ 31 + outpos] = ( ( in[ 14 + inpos] >>> 17 )
- ) + out[31 + outpos - 1] ;
-}
-
-
-
-
-public static void integratedunpack16(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = ( ( ( in[ 0 + inpos] >>> 0 ) & 65535 )
- ) + initoffset ;
- out[ 1 + outpos] = ( ( in[ 0 + inpos] >>> 16 )
- ) + out[1 + outpos - 1] ;
- out[ 2 + outpos] = ( ( ( in[ 1 + inpos] >>> 0 ) & 65535 )
- ) + out[2 + outpos - 1] ;
- out[ 3 + outpos] = ( ( in[ 1 + inpos] >>> 16 )
- ) + out[3 + outpos - 1] ;
- out[ 4 + outpos] = ( ( ( in[ 2 + inpos] >>> 0 ) & 65535 )
- ) + out[4 + outpos - 1] ;
- out[ 5 + outpos] = ( ( in[ 2 + inpos] >>> 16 )
- ) + out[5 + outpos - 1] ;
- out[ 6 + outpos] = ( ( ( in[ 3 + inpos] >>> 0 ) & 65535 )
- ) + out[6 + outpos - 1] ;
- out[ 7 + outpos] = ( ( in[ 3 + inpos] >>> 16 )
- ) + out[7 + outpos - 1] ;
- out[ 8 + outpos] = ( ( ( in[ 4 + inpos] >>> 0 ) & 65535 )
- ) + out[8 + outpos - 1] ;
- out[ 9 + outpos] = ( ( in[ 4 + inpos] >>> 16 )
- ) + out[9 + outpos - 1] ;
- out[ 10 + outpos] = ( ( ( in[ 5 + inpos] >>> 0 ) & 65535 )
- ) + out[10 + outpos - 1] ;
- out[ 11 + outpos] = ( ( in[ 5 + inpos] >>> 16 )
- ) + out[11 + outpos - 1] ;
- out[ 12 + outpos] = ( ( ( in[ 6 + inpos] >>> 0 ) & 65535 )
- ) + out[12 + outpos - 1] ;
- out[ 13 + outpos] = ( ( in[ 6 + inpos] >>> 16 )
- ) + out[13 + outpos - 1] ;
- out[ 14 + outpos] = ( ( ( in[ 7 + inpos] >>> 0 ) & 65535 )
- ) + out[14 + outpos - 1] ;
- out[ 15 + outpos] = ( ( in[ 7 + inpos] >>> 16 )
- ) + out[15 + outpos - 1] ;
- out[ 16 + outpos] = ( ( ( in[ 8 + inpos] >>> 0 ) & 65535 )
- ) + out[16 + outpos - 1] ;
- out[ 17 + outpos] = ( ( in[ 8 + inpos] >>> 16 )
- ) + out[17 + outpos - 1] ;
- out[ 18 + outpos] = ( ( ( in[ 9 + inpos] >>> 0 ) & 65535 )
- ) + out[18 + outpos - 1] ;
- out[ 19 + outpos] = ( ( in[ 9 + inpos] >>> 16 )
- ) + out[19 + outpos - 1] ;
- out[ 20 + outpos] = ( ( ( in[ 10 + inpos] >>> 0 ) & 65535 )
- ) + out[20 + outpos - 1] ;
- out[ 21 + outpos] = ( ( in[ 10 + inpos] >>> 16 )
- ) + out[21 + outpos - 1] ;
- out[ 22 + outpos] = ( ( ( in[ 11 + inpos] >>> 0 ) & 65535 )
- ) + out[22 + outpos - 1] ;
- out[ 23 + outpos] = ( ( in[ 11 + inpos] >>> 16 )
- ) + out[23 + outpos - 1] ;
- out[ 24 + outpos] = ( ( ( in[ 12 + inpos] >>> 0 ) & 65535 )
- ) + out[24 + outpos - 1] ;
- out[ 25 + outpos] = ( ( in[ 12 + inpos] >>> 16 )
- ) + out[25 + outpos - 1] ;
- out[ 26 + outpos] = ( ( ( in[ 13 + inpos] >>> 0 ) & 65535 )
- ) + out[26 + outpos - 1] ;
- out[ 27 + outpos] = ( ( in[ 13 + inpos] >>> 16 )
- ) + out[27 + outpos - 1] ;
- out[ 28 + outpos] = ( ( ( in[ 14 + inpos] >>> 0 ) & 65535 )
- ) + out[28 + outpos - 1] ;
- out[ 29 + outpos] = ( ( in[ 14 + inpos] >>> 16 )
- ) + out[29 + outpos - 1] ;
- out[ 30 + outpos] = ( ( ( in[ 15 + inpos] >>> 0 ) & 65535 )
- ) + out[30 + outpos - 1] ;
- out[ 31 + outpos] = ( ( in[ 15 + inpos] >>> 16 )
- ) + out[31 + outpos - 1] ;
-}
-
-
-
-
-public static void integratedunpack17(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = ( ( ( in[ 0 + inpos] >>> 0 ) & 131071 )
- ) + initoffset ;
- out[ 1 + outpos] = ( ( in[ 0 + inpos] >>> 17 )
- | ((in[ 1 + inpos] & 3 )<<( 17 - 2 ))
- ) + out[1 + outpos - 1] ;
- out[ 2 + outpos] = ( ( ( in[ 1 + inpos] >>> 2 ) & 131071 )
- ) + out[2 + outpos - 1] ;
- out[ 3 + outpos] = ( ( in[ 1 + inpos] >>> 19 )
- | ((in[ 2 + inpos] & 15 )<<( 17 - 4 ))
- ) + out[3 + outpos - 1] ;
- out[ 4 + outpos] = ( ( ( in[ 2 + inpos] >>> 4 ) & 131071 )
- ) + out[4 + outpos - 1] ;
- out[ 5 + outpos] = ( ( in[ 2 + inpos] >>> 21 )
- | ((in[ 3 + inpos] & 63 )<<( 17 - 6 ))
- ) + out[5 + outpos - 1] ;
- out[ 6 + outpos] = ( ( ( in[ 3 + inpos] >>> 6 ) & 131071 )
- ) + out[6 + outpos - 1] ;
- out[ 7 + outpos] = ( ( in[ 3 + inpos] >>> 23 )
- | ((in[ 4 + inpos] & 255 )<<( 17 - 8 ))
- ) + out[7 + outpos - 1] ;
- out[ 8 + outpos] = ( ( ( in[ 4 + inpos] >>> 8 ) & 131071 )
- ) + out[8 + outpos - 1] ;
- out[ 9 + outpos] = ( ( in[ 4 + inpos] >>> 25 )
- | ((in[ 5 + inpos] & 1023 )<<( 17 - 10 ))
- ) + out[9 + outpos - 1] ;
- out[ 10 + outpos] = ( ( ( in[ 5 + inpos] >>> 10 ) & 131071 )
- ) + out[10 + outpos - 1] ;
- out[ 11 + outpos] = ( ( in[ 5 + inpos] >>> 27 )
- | ((in[ 6 + inpos] & 4095 )<<( 17 - 12 ))
- ) + out[11 + outpos - 1] ;
- out[ 12 + outpos] = ( ( ( in[ 6 + inpos] >>> 12 ) & 131071 )
- ) + out[12 + outpos - 1] ;
- out[ 13 + outpos] = ( ( in[ 6 + inpos] >>> 29 )
- | ((in[ 7 + inpos] & 16383 )<<( 17 - 14 ))
- ) + out[13 + outpos - 1] ;
- out[ 14 + outpos] = ( ( ( in[ 7 + inpos] >>> 14 ) & 131071 )
- ) + out[14 + outpos - 1] ;
- out[ 15 + outpos] = ( ( in[ 7 + inpos] >>> 31 )
- | ((in[ 8 + inpos] & 65535 )<<( 17 - 16 ))
- ) + out[15 + outpos - 1] ;
- out[ 16 + outpos] = ( ( in[ 8 + inpos] >>> 16 )
- | ((in[ 9 + inpos] & 1 )<<( 17 - 1 ))
- ) + out[16 + outpos - 1] ;
- out[ 17 + outpos] = ( ( ( in[ 9 + inpos] >>> 1 ) & 131071 )
- ) + out[17 + outpos - 1] ;
- out[ 18 + outpos] = ( ( in[ 9 + inpos] >>> 18 )
- | ((in[ 10 + inpos] & 7 )<<( 17 - 3 ))
- ) + out[18 + outpos - 1] ;
- out[ 19 + outpos] = ( ( ( in[ 10 + inpos] >>> 3 ) & 131071 )
- ) + out[19 + outpos - 1] ;
- out[ 20 + outpos] = ( ( in[ 10 + inpos] >>> 20 )
- | ((in[ 11 + inpos] & 31 )<<( 17 - 5 ))
- ) + out[20 + outpos - 1] ;
- out[ 21 + outpos] = ( ( ( in[ 11 + inpos] >>> 5 ) & 131071 )
- ) + out[21 + outpos - 1] ;
- out[ 22 + outpos] = ( ( in[ 11 + inpos] >>> 22 )
- | ((in[ 12 + inpos] & 127 )<<( 17 - 7 ))
- ) + out[22 + outpos - 1] ;
- out[ 23 + outpos] = ( ( ( in[ 12 + inpos] >>> 7 ) & 131071 )
- ) + out[23 + outpos - 1] ;
- out[ 24 + outpos] = ( ( in[ 12 + inpos] >>> 24 )
- | ((in[ 13 + inpos] & 511 )<<( 17 - 9 ))
- ) + out[24 + outpos - 1] ;
- out[ 25 + outpos] = ( ( ( in[ 13 + inpos] >>> 9 ) & 131071 )
- ) + out[25 + outpos - 1] ;
- out[ 26 + outpos] = ( ( in[ 13 + inpos] >>> 26 )
- | ((in[ 14 + inpos] & 2047 )<<( 17 - 11 ))
- ) + out[26 + outpos - 1] ;
- out[ 27 + outpos] = ( ( ( in[ 14 + inpos] >>> 11 ) & 131071 )
- ) + out[27 + outpos - 1] ;
- out[ 28 + outpos] = ( ( in[ 14 + inpos] >>> 28 )
- | ((in[ 15 + inpos] & 8191 )<<( 17 - 13 ))
- ) + out[28 + outpos - 1] ;
- out[ 29 + outpos] = ( ( ( in[ 15 + inpos] >>> 13 ) & 131071 )
- ) + out[29 + outpos - 1] ;
- out[ 30 + outpos] = ( ( in[ 15 + inpos] >>> 30 )
- | ((in[ 16 + inpos] & 32767 )<<( 17 - 15 ))
- ) + out[30 + outpos - 1] ;
- out[ 31 + outpos] = ( ( in[ 16 + inpos] >>> 15 )
- ) + out[31 + outpos - 1] ;
-}
-
-
-
-
-public static void integratedunpack18(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = ( ( ( in[ 0 + inpos] >>> 0 ) & 262143 )
- ) + initoffset ;
- out[ 1 + outpos] = ( ( in[ 0 + inpos] >>> 18 )
- | ((in[ 1 + inpos] & 15 )<<( 18 - 4 ))
- ) + out[1 + outpos - 1] ;
- out[ 2 + outpos] = ( ( ( in[ 1 + inpos] >>> 4 ) & 262143 )
- ) + out[2 + outpos - 1] ;
- out[ 3 + outpos] = ( ( in[ 1 + inpos] >>> 22 )
- | ((in[ 2 + inpos] & 255 )<<( 18 - 8 ))
- ) + out[3 + outpos - 1] ;
- out[ 4 + outpos] = ( ( ( in[ 2 + inpos] >>> 8 ) & 262143 )
- ) + out[4 + outpos - 1] ;
- out[ 5 + outpos] = ( ( in[ 2 + inpos] >>> 26 )
- | ((in[ 3 + inpos] & 4095 )<<( 18 - 12 ))
- ) + out[5 + outpos - 1] ;
- out[ 6 + outpos] = ( ( ( in[ 3 + inpos] >>> 12 ) & 262143 )
- ) + out[6 + outpos - 1] ;
- out[ 7 + outpos] = ( ( in[ 3 + inpos] >>> 30 )
- | ((in[ 4 + inpos] & 65535 )<<( 18 - 16 ))
- ) + out[7 + outpos - 1] ;
- out[ 8 + outpos] = ( ( in[ 4 + inpos] >>> 16 )
- | ((in[ 5 + inpos] & 3 )<<( 18 - 2 ))
- ) + out[8 + outpos - 1] ;
- out[ 9 + outpos] = ( ( ( in[ 5 + inpos] >>> 2 ) & 262143 )
- ) + out[9 + outpos - 1] ;
- out[ 10 + outpos] = ( ( in[ 5 + inpos] >>> 20 )
- | ((in[ 6 + inpos] & 63 )<<( 18 - 6 ))
- ) + out[10 + outpos - 1] ;
- out[ 11 + outpos] = ( ( ( in[ 6 + inpos] >>> 6 ) & 262143 )
- ) + out[11 + outpos - 1] ;
- out[ 12 + outpos] = ( ( in[ 6 + inpos] >>> 24 )
- | ((in[ 7 + inpos] & 1023 )<<( 18 - 10 ))
- ) + out[12 + outpos - 1] ;
- out[ 13 + outpos] = ( ( ( in[ 7 + inpos] >>> 10 ) & 262143 )
- ) + out[13 + outpos - 1] ;
- out[ 14 + outpos] = ( ( in[ 7 + inpos] >>> 28 )
- | ((in[ 8 + inpos] & 16383 )<<( 18 - 14 ))
- ) + out[14 + outpos - 1] ;
- out[ 15 + outpos] = ( ( in[ 8 + inpos] >>> 14 )
- ) + out[15 + outpos - 1] ;
- out[ 16 + outpos] = ( ( ( in[ 9 + inpos] >>> 0 ) & 262143 )
- ) + out[16 + outpos - 1] ;
- out[ 17 + outpos] = ( ( in[ 9 + inpos] >>> 18 )
- | ((in[ 10 + inpos] & 15 )<<( 18 - 4 ))
- ) + out[17 + outpos - 1] ;
- out[ 18 + outpos] = ( ( ( in[ 10 + inpos] >>> 4 ) & 262143 )
- ) + out[18 + outpos - 1] ;
- out[ 19 + outpos] = ( ( in[ 10 + inpos] >>> 22 )
- | ((in[ 11 + inpos] & 255 )<<( 18 - 8 ))
- ) + out[19 + outpos - 1] ;
- out[ 20 + outpos] = ( ( ( in[ 11 + inpos] >>> 8 ) & 262143 )
- ) + out[20 + outpos - 1] ;
- out[ 21 + outpos] = ( ( in[ 11 + inpos] >>> 26 )
- | ((in[ 12 + inpos] & 4095 )<<( 18 - 12 ))
- ) + out[21 + outpos - 1] ;
- out[ 22 + outpos] = ( ( ( in[ 12 + inpos] >>> 12 ) & 262143 )
- ) + out[22 + outpos - 1] ;
- out[ 23 + outpos] = ( ( in[ 12 + inpos] >>> 30 )
- | ((in[ 13 + inpos] & 65535 )<<( 18 - 16 ))
- ) + out[23 + outpos - 1] ;
- out[ 24 + outpos] = ( ( in[ 13 + inpos] >>> 16 )
- | ((in[ 14 + inpos] & 3 )<<( 18 - 2 ))
- ) + out[24 + outpos - 1] ;
- out[ 25 + outpos] = ( ( ( in[ 14 + inpos] >>> 2 ) & 262143 )
- ) + out[25 + outpos - 1] ;
- out[ 26 + outpos] = ( ( in[ 14 + inpos] >>> 20 )
- | ((in[ 15 + inpos] & 63 )<<( 18 - 6 ))
- ) + out[26 + outpos - 1] ;
- out[ 27 + outpos] = ( ( ( in[ 15 + inpos] >>> 6 ) & 262143 )
- ) + out[27 + outpos - 1] ;
- out[ 28 + outpos] = ( ( in[ 15 + inpos] >>> 24 )
- | ((in[ 16 + inpos] & 1023 )<<( 18 - 10 ))
- ) + out[28 + outpos - 1] ;
- out[ 29 + outpos] = ( ( ( in[ 16 + inpos] >>> 10 ) & 262143 )
- ) + out[29 + outpos - 1] ;
- out[ 30 + outpos] = ( ( in[ 16 + inpos] >>> 28 )
- | ((in[ 17 + inpos] & 16383 )<<( 18 - 14 ))
- ) + out[30 + outpos - 1] ;
- out[ 31 + outpos] = ( ( in[ 17 + inpos] >>> 14 )
- ) + out[31 + outpos - 1] ;
-}
-
-
-
-
-public static void integratedunpack19(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = ( ( ( in[ 0 + inpos] >>> 0 ) & 524287 )
- ) + initoffset ;
- out[ 1 + outpos] = ( ( in[ 0 + inpos] >>> 19 )
- | ((in[ 1 + inpos] & 63 )<<( 19 - 6 ))
- ) + out[1 + outpos - 1] ;
- out[ 2 + outpos] = ( ( ( in[ 1 + inpos] >>> 6 ) & 524287 )
- ) + out[2 + outpos - 1] ;
- out[ 3 + outpos] = ( ( in[ 1 + inpos] >>> 25 )
- | ((in[ 2 + inpos] & 4095 )<<( 19 - 12 ))
- ) + out[3 + outpos - 1] ;
- out[ 4 + outpos] = ( ( ( in[ 2 + inpos] >>> 12 ) & 524287 )
- ) + out[4 + outpos - 1] ;
- out[ 5 + outpos] = ( ( in[ 2 + inpos] >>> 31 )
- | ((in[ 3 + inpos] & 262143 )<<( 19 - 18 ))
- ) + out[5 + outpos - 1] ;
- out[ 6 + outpos] = ( ( in[ 3 + inpos] >>> 18 )
- | ((in[ 4 + inpos] & 31 )<<( 19 - 5 ))
- ) + out[6 + outpos - 1] ;
- out[ 7 + outpos] = ( ( ( in[ 4 + inpos] >>> 5 ) & 524287 )
- ) + out[7 + outpos - 1] ;
- out[ 8 + outpos] = ( ( in[ 4 + inpos] >>> 24 )
- | ((in[ 5 + inpos] & 2047 )<<( 19 - 11 ))
- ) + out[8 + outpos - 1] ;
- out[ 9 + outpos] = ( ( ( in[ 5 + inpos] >>> 11 ) & 524287 )
- ) + out[9 + outpos - 1] ;
- out[ 10 + outpos] = ( ( in[ 5 + inpos] >>> 30 )
- | ((in[ 6 + inpos] & 131071 )<<( 19 - 17 ))
- ) + out[10 + outpos - 1] ;
- out[ 11 + outpos] = ( ( in[ 6 + inpos] >>> 17 )
- | ((in[ 7 + inpos] & 15 )<<( 19 - 4 ))
- ) + out[11 + outpos - 1] ;
- out[ 12 + outpos] = ( ( ( in[ 7 + inpos] >>> 4 ) & 524287 )
- ) + out[12 + outpos - 1] ;
- out[ 13 + outpos] = ( ( in[ 7 + inpos] >>> 23 )
- | ((in[ 8 + inpos] & 1023 )<<( 19 - 10 ))
- ) + out[13 + outpos - 1] ;
- out[ 14 + outpos] = ( ( ( in[ 8 + inpos] >>> 10 ) & 524287 )
- ) + out[14 + outpos - 1] ;
- out[ 15 + outpos] = ( ( in[ 8 + inpos] >>> 29 )
- | ((in[ 9 + inpos] & 65535 )<<( 19 - 16 ))
- ) + out[15 + outpos - 1] ;
- out[ 16 + outpos] = ( ( in[ 9 + inpos] >>> 16 )
- | ((in[ 10 + inpos] & 7 )<<( 19 - 3 ))
- ) + out[16 + outpos - 1] ;
- out[ 17 + outpos] = ( ( ( in[ 10 + inpos] >>> 3 ) & 524287 )
- ) + out[17 + outpos - 1] ;
- out[ 18 + outpos] = ( ( in[ 10 + inpos] >>> 22 )
- | ((in[ 11 + inpos] & 511 )<<( 19 - 9 ))
- ) + out[18 + outpos - 1] ;
- out[ 19 + outpos] = ( ( ( in[ 11 + inpos] >>> 9 ) & 524287 )
- ) + out[19 + outpos - 1] ;
- out[ 20 + outpos] = ( ( in[ 11 + inpos] >>> 28 )
- | ((in[ 12 + inpos] & 32767 )<<( 19 - 15 ))
- ) + out[20 + outpos - 1] ;
- out[ 21 + outpos] = ( ( in[ 12 + inpos] >>> 15 )
- | ((in[ 13 + inpos] & 3 )<<( 19 - 2 ))
- ) + out[21 + outpos - 1] ;
- out[ 22 + outpos] = ( ( ( in[ 13 + inpos] >>> 2 ) & 524287 )
- ) + out[22 + outpos - 1] ;
- out[ 23 + outpos] = ( ( in[ 13 + inpos] >>> 21 )
- | ((in[ 14 + inpos] & 255 )<<( 19 - 8 ))
- ) + out[23 + outpos - 1] ;
- out[ 24 + outpos] = ( ( ( in[ 14 + inpos] >>> 8 ) & 524287 )
- ) + out[24 + outpos - 1] ;
- out[ 25 + outpos] = ( ( in[ 14 + inpos] >>> 27 )
- | ((in[ 15 + inpos] & 16383 )<<( 19 - 14 ))
- ) + out[25 + outpos - 1] ;
- out[ 26 + outpos] = ( ( in[ 15 + inpos] >>> 14 )
- | ((in[ 16 + inpos] & 1 )<<( 19 - 1 ))
- ) + out[26 + outpos - 1] ;
- out[ 27 + outpos] = ( ( ( in[ 16 + inpos] >>> 1 ) & 524287 )
- ) + out[27 + outpos - 1] ;
- out[ 28 + outpos] = ( ( in[ 16 + inpos] >>> 20 )
- | ((in[ 17 + inpos] & 127 )<<( 19 - 7 ))
- ) + out[28 + outpos - 1] ;
- out[ 29 + outpos] = ( ( ( in[ 17 + inpos] >>> 7 ) & 524287 )
- ) + out[29 + outpos - 1] ;
- out[ 30 + outpos] = ( ( in[ 17 + inpos] >>> 26 )
- | ((in[ 18 + inpos] & 8191 )<<( 19 - 13 ))
- ) + out[30 + outpos - 1] ;
- out[ 31 + outpos] = ( ( in[ 18 + inpos] >>> 13 )
- ) + out[31 + outpos - 1] ;
-}
-
-
-
-
-public static void integratedunpack20(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = ( ( ( in[ 0 + inpos] >>> 0 ) & 1048575 )
- ) + initoffset ;
- out[ 1 + outpos] = ( ( in[ 0 + inpos] >>> 20 )
- | ((in[ 1 + inpos] & 255 )<<( 20 - 8 ))
- ) + out[1 + outpos - 1] ;
- out[ 2 + outpos] = ( ( ( in[ 1 + inpos] >>> 8 ) & 1048575 )
- ) + out[2 + outpos - 1] ;
- out[ 3 + outpos] = ( ( in[ 1 + inpos] >>> 28 )
- | ((in[ 2 + inpos] & 65535 )<<( 20 - 16 ))
- ) + out[3 + outpos - 1] ;
- out[ 4 + outpos] = ( ( in[ 2 + inpos] >>> 16 )
- | ((in[ 3 + inpos] & 15 )<<( 20 - 4 ))
- ) + out[4 + outpos - 1] ;
- out[ 5 + outpos] = ( ( ( in[ 3 + inpos] >>> 4 ) & 1048575 )
- ) + out[5 + outpos - 1] ;
- out[ 6 + outpos] = ( ( in[ 3 + inpos] >>> 24 )
- | ((in[ 4 + inpos] & 4095 )<<( 20 - 12 ))
- ) + out[6 + outpos - 1] ;
- out[ 7 + outpos] = ( ( in[ 4 + inpos] >>> 12 )
- ) + out[7 + outpos - 1] ;
- out[ 8 + outpos] = ( ( ( in[ 5 + inpos] >>> 0 ) & 1048575 )
- ) + out[8 + outpos - 1] ;
- out[ 9 + outpos] = ( ( in[ 5 + inpos] >>> 20 )
- | ((in[ 6 + inpos] & 255 )<<( 20 - 8 ))
- ) + out[9 + outpos - 1] ;
- out[ 10 + outpos] = ( ( ( in[ 6 + inpos] >>> 8 ) & 1048575 )
- ) + out[10 + outpos - 1] ;
- out[ 11 + outpos] = ( ( in[ 6 + inpos] >>> 28 )
- | ((in[ 7 + inpos] & 65535 )<<( 20 - 16 ))
- ) + out[11 + outpos - 1] ;
- out[ 12 + outpos] = ( ( in[ 7 + inpos] >>> 16 )
- | ((in[ 8 + inpos] & 15 )<<( 20 - 4 ))
- ) + out[12 + outpos - 1] ;
- out[ 13 + outpos] = ( ( ( in[ 8 + inpos] >>> 4 ) & 1048575 )
- ) + out[13 + outpos - 1] ;
- out[ 14 + outpos] = ( ( in[ 8 + inpos] >>> 24 )
- | ((in[ 9 + inpos] & 4095 )<<( 20 - 12 ))
- ) + out[14 + outpos - 1] ;
- out[ 15 + outpos] = ( ( in[ 9 + inpos] >>> 12 )
- ) + out[15 + outpos - 1] ;
- out[ 16 + outpos] = ( ( ( in[ 10 + inpos] >>> 0 ) & 1048575 )
- ) + out[16 + outpos - 1] ;
- out[ 17 + outpos] = ( ( in[ 10 + inpos] >>> 20 )
- | ((in[ 11 + inpos] & 255 )<<( 20 - 8 ))
- ) + out[17 + outpos - 1] ;
- out[ 18 + outpos] = ( ( ( in[ 11 + inpos] >>> 8 ) & 1048575 )
- ) + out[18 + outpos - 1] ;
- out[ 19 + outpos] = ( ( in[ 11 + inpos] >>> 28 )
- | ((in[ 12 + inpos] & 65535 )<<( 20 - 16 ))
- ) + out[19 + outpos - 1] ;
- out[ 20 + outpos] = ( ( in[ 12 + inpos] >>> 16 )
- | ((in[ 13 + inpos] & 15 )<<( 20 - 4 ))
- ) + out[20 + outpos - 1] ;
- out[ 21 + outpos] = ( ( ( in[ 13 + inpos] >>> 4 ) & 1048575 )
- ) + out[21 + outpos - 1] ;
- out[ 22 + outpos] = ( ( in[ 13 + inpos] >>> 24 )
- | ((in[ 14 + inpos] & 4095 )<<( 20 - 12 ))
- ) + out[22 + outpos - 1] ;
- out[ 23 + outpos] = ( ( in[ 14 + inpos] >>> 12 )
- ) + out[23 + outpos - 1] ;
- out[ 24 + outpos] = ( ( ( in[ 15 + inpos] >>> 0 ) & 1048575 )
- ) + out[24 + outpos - 1] ;
- out[ 25 + outpos] = ( ( in[ 15 + inpos] >>> 20 )
- | ((in[ 16 + inpos] & 255 )<<( 20 - 8 ))
- ) + out[25 + outpos - 1] ;
- out[ 26 + outpos] = ( ( ( in[ 16 + inpos] >>> 8 ) & 1048575 )
- ) + out[26 + outpos - 1] ;
- out[ 27 + outpos] = ( ( in[ 16 + inpos] >>> 28 )
- | ((in[ 17 + inpos] & 65535 )<<( 20 - 16 ))
- ) + out[27 + outpos - 1] ;
- out[ 28 + outpos] = ( ( in[ 17 + inpos] >>> 16 )
- | ((in[ 18 + inpos] & 15 )<<( 20 - 4 ))
- ) + out[28 + outpos - 1] ;
- out[ 29 + outpos] = ( ( ( in[ 18 + inpos] >>> 4 ) & 1048575 )
- ) + out[29 + outpos - 1] ;
- out[ 30 + outpos] = ( ( in[ 18 + inpos] >>> 24 )
- | ((in[ 19 + inpos] & 4095 )<<( 20 - 12 ))
- ) + out[30 + outpos - 1] ;
- out[ 31 + outpos] = ( ( in[ 19 + inpos] >>> 12 )
- ) + out[31 + outpos - 1] ;
-}
-
-
-
-
-public static void integratedunpack21(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = ( ( ( in[ 0 + inpos] >>> 0 ) & 2097151 )
- ) + initoffset ;
- out[ 1 + outpos] = ( ( in[ 0 + inpos] >>> 21 )
- | ((in[ 1 + inpos] & 1023 )<<( 21 - 10 ))
- ) + out[1 + outpos - 1] ;
- out[ 2 + outpos] = ( ( ( in[ 1 + inpos] >>> 10 ) & 2097151 )
- ) + out[2 + outpos - 1] ;
- out[ 3 + outpos] = ( ( in[ 1 + inpos] >>> 31 )
- | ((in[ 2 + inpos] & 1048575 )<<( 21 - 20 ))
- ) + out[3 + outpos - 1] ;
- out[ 4 + outpos] = ( ( in[ 2 + inpos] >>> 20 )
- | ((in[ 3 + inpos] & 511 )<<( 21 - 9 ))
- ) + out[4 + outpos - 1] ;
- out[ 5 + outpos] = ( ( ( in[ 3 + inpos] >>> 9 ) & 2097151 )
- ) + out[5 + outpos - 1] ;
- out[ 6 + outpos] = ( ( in[ 3 + inpos] >>> 30 )
- | ((in[ 4 + inpos] & 524287 )<<( 21 - 19 ))
- ) + out[6 + outpos - 1] ;
- out[ 7 + outpos] = ( ( in[ 4 + inpos] >>> 19 )
- | ((in[ 5 + inpos] & 255 )<<( 21 - 8 ))
- ) + out[7 + outpos - 1] ;
- out[ 8 + outpos] = ( ( ( in[ 5 + inpos] >>> 8 ) & 2097151 )
- ) + out[8 + outpos - 1] ;
- out[ 9 + outpos] = ( ( in[ 5 + inpos] >>> 29 )
- | ((in[ 6 + inpos] & 262143 )<<( 21 - 18 ))
- ) + out[9 + outpos - 1] ;
- out[ 10 + outpos] = ( ( in[ 6 + inpos] >>> 18 )
- | ((in[ 7 + inpos] & 127 )<<( 21 - 7 ))
- ) + out[10 + outpos - 1] ;
- out[ 11 + outpos] = ( ( ( in[ 7 + inpos] >>> 7 ) & 2097151 )
- ) + out[11 + outpos - 1] ;
- out[ 12 + outpos] = ( ( in[ 7 + inpos] >>> 28 )
- | ((in[ 8 + inpos] & 131071 )<<( 21 - 17 ))
- ) + out[12 + outpos - 1] ;
- out[ 13 + outpos] = ( ( in[ 8 + inpos] >>> 17 )
- | ((in[ 9 + inpos] & 63 )<<( 21 - 6 ))
- ) + out[13 + outpos - 1] ;
- out[ 14 + outpos] = ( ( ( in[ 9 + inpos] >>> 6 ) & 2097151 )
- ) + out[14 + outpos - 1] ;
- out[ 15 + outpos] = ( ( in[ 9 + inpos] >>> 27 )
- | ((in[ 10 + inpos] & 65535 )<<( 21 - 16 ))
- ) + out[15 + outpos - 1] ;
- out[ 16 + outpos] = ( ( in[ 10 + inpos] >>> 16 )
- | ((in[ 11 + inpos] & 31 )<<( 21 - 5 ))
- ) + out[16 + outpos - 1] ;
- out[ 17 + outpos] = ( ( ( in[ 11 + inpos] >>> 5 ) & 2097151 )
- ) + out[17 + outpos - 1] ;
- out[ 18 + outpos] = ( ( in[ 11 + inpos] >>> 26 )
- | ((in[ 12 + inpos] & 32767 )<<( 21 - 15 ))
- ) + out[18 + outpos - 1] ;
- out[ 19 + outpos] = ( ( in[ 12 + inpos] >>> 15 )
- | ((in[ 13 + inpos] & 15 )<<( 21 - 4 ))
- ) + out[19 + outpos - 1] ;
- out[ 20 + outpos] = ( ( ( in[ 13 + inpos] >>> 4 ) & 2097151 )
- ) + out[20 + outpos - 1] ;
- out[ 21 + outpos] = ( ( in[ 13 + inpos] >>> 25 )
- | ((in[ 14 + inpos] & 16383 )<<( 21 - 14 ))
- ) + out[21 + outpos - 1] ;
- out[ 22 + outpos] = ( ( in[ 14 + inpos] >>> 14 )
- | ((in[ 15 + inpos] & 7 )<<( 21 - 3 ))
- ) + out[22 + outpos - 1] ;
- out[ 23 + outpos] = ( ( ( in[ 15 + inpos] >>> 3 ) & 2097151 )
- ) + out[23 + outpos - 1] ;
- out[ 24 + outpos] = ( ( in[ 15 + inpos] >>> 24 )
- | ((in[ 16 + inpos] & 8191 )<<( 21 - 13 ))
- ) + out[24 + outpos - 1] ;
- out[ 25 + outpos] = ( ( in[ 16 + inpos] >>> 13 )
- | ((in[ 17 + inpos] & 3 )<<( 21 - 2 ))
- ) + out[25 + outpos - 1] ;
- out[ 26 + outpos] = ( ( ( in[ 17 + inpos] >>> 2 ) & 2097151 )
- ) + out[26 + outpos - 1] ;
- out[ 27 + outpos] = ( ( in[ 17 + inpos] >>> 23 )
- | ((in[ 18 + inpos] & 4095 )<<( 21 - 12 ))
- ) + out[27 + outpos - 1] ;
- out[ 28 + outpos] = ( ( in[ 18 + inpos] >>> 12 )
- | ((in[ 19 + inpos] & 1 )<<( 21 - 1 ))
- ) + out[28 + outpos - 1] ;
- out[ 29 + outpos] = ( ( ( in[ 19 + inpos] >>> 1 ) & 2097151 )
- ) + out[29 + outpos - 1] ;
- out[ 30 + outpos] = ( ( in[ 19 + inpos] >>> 22 )
- | ((in[ 20 + inpos] & 2047 )<<( 21 - 11 ))
- ) + out[30 + outpos - 1] ;
- out[ 31 + outpos] = ( ( in[ 20 + inpos] >>> 11 )
- ) + out[31 + outpos - 1] ;
-}
-
-
-
-
-public static void integratedunpack22(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = ( ( ( in[ 0 + inpos] >>> 0 ) & 4194303 )
- ) + initoffset ;
- out[ 1 + outpos] = ( ( in[ 0 + inpos] >>> 22 )
- | ((in[ 1 + inpos] & 4095 )<<( 22 - 12 ))
- ) + out[1 + outpos - 1] ;
- out[ 2 + outpos] = ( ( in[ 1 + inpos] >>> 12 )
- | ((in[ 2 + inpos] & 3 )<<( 22 - 2 ))
- ) + out[2 + outpos - 1] ;
- out[ 3 + outpos] = ( ( ( in[ 2 + inpos] >>> 2 ) & 4194303 )
- ) + out[3 + outpos - 1] ;
- out[ 4 + outpos] = ( ( in[ 2 + inpos] >>> 24 )
- | ((in[ 3 + inpos] & 16383 )<<( 22 - 14 ))
- ) + out[4 + outpos - 1] ;
- out[ 5 + outpos] = ( ( in[ 3 + inpos] >>> 14 )
- | ((in[ 4 + inpos] & 15 )<<( 22 - 4 ))
- ) + out[5 + outpos - 1] ;
- out[ 6 + outpos] = ( ( ( in[ 4 + inpos] >>> 4 ) & 4194303 )
- ) + out[6 + outpos - 1] ;
- out[ 7 + outpos] = ( ( in[ 4 + inpos] >>> 26 )
- | ((in[ 5 + inpos] & 65535 )<<( 22 - 16 ))
- ) + out[7 + outpos - 1] ;
- out[ 8 + outpos] = ( ( in[ 5 + inpos] >>> 16 )
- | ((in[ 6 + inpos] & 63 )<<( 22 - 6 ))
- ) + out[8 + outpos - 1] ;
- out[ 9 + outpos] = ( ( ( in[ 6 + inpos] >>> 6 ) & 4194303 )
- ) + out[9 + outpos - 1] ;
- out[ 10 + outpos] = ( ( in[ 6 + inpos] >>> 28 )
- | ((in[ 7 + inpos] & 262143 )<<( 22 - 18 ))
- ) + out[10 + outpos - 1] ;
- out[ 11 + outpos] = ( ( in[ 7 + inpos] >>> 18 )
- | ((in[ 8 + inpos] & 255 )<<( 22 - 8 ))
- ) + out[11 + outpos - 1] ;
- out[ 12 + outpos] = ( ( ( in[ 8 + inpos] >>> 8 ) & 4194303 )
- ) + out[12 + outpos - 1] ;
- out[ 13 + outpos] = ( ( in[ 8 + inpos] >>> 30 )
- | ((in[ 9 + inpos] & 1048575 )<<( 22 - 20 ))
- ) + out[13 + outpos - 1] ;
- out[ 14 + outpos] = ( ( in[ 9 + inpos] >>> 20 )
- | ((in[ 10 + inpos] & 1023 )<<( 22 - 10 ))
- ) + out[14 + outpos - 1] ;
- out[ 15 + outpos] = ( ( in[ 10 + inpos] >>> 10 )
- ) + out[15 + outpos - 1] ;
- out[ 16 + outpos] = ( ( ( in[ 11 + inpos] >>> 0 ) & 4194303 )
- ) + out[16 + outpos - 1] ;
- out[ 17 + outpos] = ( ( in[ 11 + inpos] >>> 22 )
- | ((in[ 12 + inpos] & 4095 )<<( 22 - 12 ))
- ) + out[17 + outpos - 1] ;
- out[ 18 + outpos] = ( ( in[ 12 + inpos] >>> 12 )
- | ((in[ 13 + inpos] & 3 )<<( 22 - 2 ))
- ) + out[18 + outpos - 1] ;
- out[ 19 + outpos] = ( ( ( in[ 13 + inpos] >>> 2 ) & 4194303 )
- ) + out[19 + outpos - 1] ;
- out[ 20 + outpos] = ( ( in[ 13 + inpos] >>> 24 )
- | ((in[ 14 + inpos] & 16383 )<<( 22 - 14 ))
- ) + out[20 + outpos - 1] ;
- out[ 21 + outpos] = ( ( in[ 14 + inpos] >>> 14 )
- | ((in[ 15 + inpos] & 15 )<<( 22 - 4 ))
- ) + out[21 + outpos - 1] ;
- out[ 22 + outpos] = ( ( ( in[ 15 + inpos] >>> 4 ) & 4194303 )
- ) + out[22 + outpos - 1] ;
- out[ 23 + outpos] = ( ( in[ 15 + inpos] >>> 26 )
- | ((in[ 16 + inpos] & 65535 )<<( 22 - 16 ))
- ) + out[23 + outpos - 1] ;
- out[ 24 + outpos] = ( ( in[ 16 + inpos] >>> 16 )
- | ((in[ 17 + inpos] & 63 )<<( 22 - 6 ))
- ) + out[24 + outpos - 1] ;
- out[ 25 + outpos] = ( ( ( in[ 17 + inpos] >>> 6 ) & 4194303 )
- ) + out[25 + outpos - 1] ;
- out[ 26 + outpos] = ( ( in[ 17 + inpos] >>> 28 )
- | ((in[ 18 + inpos] & 262143 )<<( 22 - 18 ))
- ) + out[26 + outpos - 1] ;
- out[ 27 + outpos] = ( ( in[ 18 + inpos] >>> 18 )
- | ((in[ 19 + inpos] & 255 )<<( 22 - 8 ))
- ) + out[27 + outpos - 1] ;
- out[ 28 + outpos] = ( ( ( in[ 19 + inpos] >>> 8 ) & 4194303 )
- ) + out[28 + outpos - 1] ;
- out[ 29 + outpos] = ( ( in[ 19 + inpos] >>> 30 )
- | ((in[ 20 + inpos] & 1048575 )<<( 22 - 20 ))
- ) + out[29 + outpos - 1] ;
- out[ 30 + outpos] = ( ( in[ 20 + inpos] >>> 20 )
- | ((in[ 21 + inpos] & 1023 )<<( 22 - 10 ))
- ) + out[30 + outpos - 1] ;
- out[ 31 + outpos] = ( ( in[ 21 + inpos] >>> 10 )
- ) + out[31 + outpos - 1] ;
-}
-
-
-
-
-public static void integratedunpack23(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = ( ( ( in[ 0 + inpos] >>> 0 ) & 8388607 )
- ) + initoffset ;
- out[ 1 + outpos] = ( ( in[ 0 + inpos] >>> 23 )
- | ((in[ 1 + inpos] & 16383 )<<( 23 - 14 ))
- ) + out[1 + outpos - 1] ;
- out[ 2 + outpos] = ( ( in[ 1 + inpos] >>> 14 )
- | ((in[ 2 + inpos] & 31 )<<( 23 - 5 ))
- ) + out[2 + outpos - 1] ;
- out[ 3 + outpos] = ( ( ( in[ 2 + inpos] >>> 5 ) & 8388607 )
- ) + out[3 + outpos - 1] ;
- out[ 4 + outpos] = ( ( in[ 2 + inpos] >>> 28 )
- | ((in[ 3 + inpos] & 524287 )<<( 23 - 19 ))
- ) + out[4 + outpos - 1] ;
- out[ 5 + outpos] = ( ( in[ 3 + inpos] >>> 19 )
- | ((in[ 4 + inpos] & 1023 )<<( 23 - 10 ))
- ) + out[5 + outpos - 1] ;
- out[ 6 + outpos] = ( ( in[ 4 + inpos] >>> 10 )
- | ((in[ 5 + inpos] & 1 )<<( 23 - 1 ))
- ) + out[6 + outpos - 1] ;
- out[ 7 + outpos] = ( ( ( in[ 5 + inpos] >>> 1 ) & 8388607 )
- ) + out[7 + outpos - 1] ;
- out[ 8 + outpos] = ( ( in[ 5 + inpos] >>> 24 )
- | ((in[ 6 + inpos] & 32767 )<<( 23 - 15 ))
- ) + out[8 + outpos - 1] ;
- out[ 9 + outpos] = ( ( in[ 6 + inpos] >>> 15 )
- | ((in[ 7 + inpos] & 63 )<<( 23 - 6 ))
- ) + out[9 + outpos - 1] ;
- out[ 10 + outpos] = ( ( ( in[ 7 + inpos] >>> 6 ) & 8388607 )
- ) + out[10 + outpos - 1] ;
- out[ 11 + outpos] = ( ( in[ 7 + inpos] >>> 29 )
- | ((in[ 8 + inpos] & 1048575 )<<( 23 - 20 ))
- ) + out[11 + outpos - 1] ;
- out[ 12 + outpos] = ( ( in[ 8 + inpos] >>> 20 )
- | ((in[ 9 + inpos] & 2047 )<<( 23 - 11 ))
- ) + out[12 + outpos - 1] ;
- out[ 13 + outpos] = ( ( in[ 9 + inpos] >>> 11 )
- | ((in[ 10 + inpos] & 3 )<<( 23 - 2 ))
- ) + out[13 + outpos - 1] ;
- out[ 14 + outpos] = ( ( ( in[ 10 + inpos] >>> 2 ) & 8388607 )
- ) + out[14 + outpos - 1] ;
- out[ 15 + outpos] = ( ( in[ 10 + inpos] >>> 25 )
- | ((in[ 11 + inpos] & 65535 )<<( 23 - 16 ))
- ) + out[15 + outpos - 1] ;
- out[ 16 + outpos] = ( ( in[ 11 + inpos] >>> 16 )
- | ((in[ 12 + inpos] & 127 )<<( 23 - 7 ))
- ) + out[16 + outpos - 1] ;
- out[ 17 + outpos] = ( ( ( in[ 12 + inpos] >>> 7 ) & 8388607 )
- ) + out[17 + outpos - 1] ;
- out[ 18 + outpos] = ( ( in[ 12 + inpos] >>> 30 )
- | ((in[ 13 + inpos] & 2097151 )<<( 23 - 21 ))
- ) + out[18 + outpos - 1] ;
- out[ 19 + outpos] = ( ( in[ 13 + inpos] >>> 21 )
- | ((in[ 14 + inpos] & 4095 )<<( 23 - 12 ))
- ) + out[19 + outpos - 1] ;
- out[ 20 + outpos] = ( ( in[ 14 + inpos] >>> 12 )
- | ((in[ 15 + inpos] & 7 )<<( 23 - 3 ))
- ) + out[20 + outpos - 1] ;
- out[ 21 + outpos] = ( ( ( in[ 15 + inpos] >>> 3 ) & 8388607 )
- ) + out[21 + outpos - 1] ;
- out[ 22 + outpos] = ( ( in[ 15 + inpos] >>> 26 )
- | ((in[ 16 + inpos] & 131071 )<<( 23 - 17 ))
- ) + out[22 + outpos - 1] ;
- out[ 23 + outpos] = ( ( in[ 16 + inpos] >>> 17 )
- | ((in[ 17 + inpos] & 255 )<<( 23 - 8 ))
- ) + out[23 + outpos - 1] ;
- out[ 24 + outpos] = ( ( ( in[ 17 + inpos] >>> 8 ) & 8388607 )
- ) + out[24 + outpos - 1] ;
- out[ 25 + outpos] = ( ( in[ 17 + inpos] >>> 31 )
- | ((in[ 18 + inpos] & 4194303 )<<( 23 - 22 ))
- ) + out[25 + outpos - 1] ;
- out[ 26 + outpos] = ( ( in[ 18 + inpos] >>> 22 )
- | ((in[ 19 + inpos] & 8191 )<<( 23 - 13 ))
- ) + out[26 + outpos - 1] ;
- out[ 27 + outpos] = ( ( in[ 19 + inpos] >>> 13 )
- | ((in[ 20 + inpos] & 15 )<<( 23 - 4 ))
- ) + out[27 + outpos - 1] ;
- out[ 28 + outpos] = ( ( ( in[ 20 + inpos] >>> 4 ) & 8388607 )
- ) + out[28 + outpos - 1] ;
- out[ 29 + outpos] = ( ( in[ 20 + inpos] >>> 27 )
- | ((in[ 21 + inpos] & 262143 )<<( 23 - 18 ))
- ) + out[29 + outpos - 1] ;
- out[ 30 + outpos] = ( ( in[ 21 + inpos] >>> 18 )
- | ((in[ 22 + inpos] & 511 )<<( 23 - 9 ))
- ) + out[30 + outpos - 1] ;
- out[ 31 + outpos] = ( ( in[ 22 + inpos] >>> 9 )
- ) + out[31 + outpos - 1] ;
-}
-
-
-
-
-public static void integratedunpack24(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = ( ( ( in[ 0 + inpos] >>> 0 ) & 16777215 )
- ) + initoffset ;
- out[ 1 + outpos] = ( ( in[ 0 + inpos] >>> 24 )
- | ((in[ 1 + inpos] & 65535 )<<( 24 - 16 ))
- ) + out[1 + outpos - 1] ;
- out[ 2 + outpos] = ( ( in[ 1 + inpos] >>> 16 )
- | ((in[ 2 + inpos] & 255 )<<( 24 - 8 ))
- ) + out[2 + outpos - 1] ;
- out[ 3 + outpos] = ( ( in[ 2 + inpos] >>> 8 )
- ) + out[3 + outpos - 1] ;
- out[ 4 + outpos] = ( ( ( in[ 3 + inpos] >>> 0 ) & 16777215 )
- ) + out[4 + outpos - 1] ;
- out[ 5 + outpos] = ( ( in[ 3 + inpos] >>> 24 )
- | ((in[ 4 + inpos] & 65535 )<<( 24 - 16 ))
- ) + out[5 + outpos - 1] ;
- out[ 6 + outpos] = ( ( in[ 4 + inpos] >>> 16 )
- | ((in[ 5 + inpos] & 255 )<<( 24 - 8 ))
- ) + out[6 + outpos - 1] ;
- out[ 7 + outpos] = ( ( in[ 5 + inpos] >>> 8 )
- ) + out[7 + outpos - 1] ;
- out[ 8 + outpos] = ( ( ( in[ 6 + inpos] >>> 0 ) & 16777215 )
- ) + out[8 + outpos - 1] ;
- out[ 9 + outpos] = ( ( in[ 6 + inpos] >>> 24 )
- | ((in[ 7 + inpos] & 65535 )<<( 24 - 16 ))
- ) + out[9 + outpos - 1] ;
- out[ 10 + outpos] = ( ( in[ 7 + inpos] >>> 16 )
- | ((in[ 8 + inpos] & 255 )<<( 24 - 8 ))
- ) + out[10 + outpos - 1] ;
- out[ 11 + outpos] = ( ( in[ 8 + inpos] >>> 8 )
- ) + out[11 + outpos - 1] ;
- out[ 12 + outpos] = ( ( ( in[ 9 + inpos] >>> 0 ) & 16777215 )
- ) + out[12 + outpos - 1] ;
- out[ 13 + outpos] = ( ( in[ 9 + inpos] >>> 24 )
- | ((in[ 10 + inpos] & 65535 )<<( 24 - 16 ))
- ) + out[13 + outpos - 1] ;
- out[ 14 + outpos] = ( ( in[ 10 + inpos] >>> 16 )
- | ((in[ 11 + inpos] & 255 )<<( 24 - 8 ))
- ) + out[14 + outpos - 1] ;
- out[ 15 + outpos] = ( ( in[ 11 + inpos] >>> 8 )
- ) + out[15 + outpos - 1] ;
- out[ 16 + outpos] = ( ( ( in[ 12 + inpos] >>> 0 ) & 16777215 )
- ) + out[16 + outpos - 1] ;
- out[ 17 + outpos] = ( ( in[ 12 + inpos] >>> 24 )
- | ((in[ 13 + inpos] & 65535 )<<( 24 - 16 ))
- ) + out[17 + outpos - 1] ;
- out[ 18 + outpos] = ( ( in[ 13 + inpos] >>> 16 )
- | ((in[ 14 + inpos] & 255 )<<( 24 - 8 ))
- ) + out[18 + outpos - 1] ;
- out[ 19 + outpos] = ( ( in[ 14 + inpos] >>> 8 )
- ) + out[19 + outpos - 1] ;
- out[ 20 + outpos] = ( ( ( in[ 15 + inpos] >>> 0 ) & 16777215 )
- ) + out[20 + outpos - 1] ;
- out[ 21 + outpos] = ( ( in[ 15 + inpos] >>> 24 )
- | ((in[ 16 + inpos] & 65535 )<<( 24 - 16 ))
- ) + out[21 + outpos - 1] ;
- out[ 22 + outpos] = ( ( in[ 16 + inpos] >>> 16 )
- | ((in[ 17 + inpos] & 255 )<<( 24 - 8 ))
- ) + out[22 + outpos - 1] ;
- out[ 23 + outpos] = ( ( in[ 17 + inpos] >>> 8 )
- ) + out[23 + outpos - 1] ;
- out[ 24 + outpos] = ( ( ( in[ 18 + inpos] >>> 0 ) & 16777215 )
- ) + out[24 + outpos - 1] ;
- out[ 25 + outpos] = ( ( in[ 18 + inpos] >>> 24 )
- | ((in[ 19 + inpos] & 65535 )<<( 24 - 16 ))
- ) + out[25 + outpos - 1] ;
- out[ 26 + outpos] = ( ( in[ 19 + inpos] >>> 16 )
- | ((in[ 20 + inpos] & 255 )<<( 24 - 8 ))
- ) + out[26 + outpos - 1] ;
- out[ 27 + outpos] = ( ( in[ 20 + inpos] >>> 8 )
- ) + out[27 + outpos - 1] ;
- out[ 28 + outpos] = ( ( ( in[ 21 + inpos] >>> 0 ) & 16777215 )
- ) + out[28 + outpos - 1] ;
- out[ 29 + outpos] = ( ( in[ 21 + inpos] >>> 24 )
- | ((in[ 22 + inpos] & 65535 )<<( 24 - 16 ))
- ) + out[29 + outpos - 1] ;
- out[ 30 + outpos] = ( ( in[ 22 + inpos] >>> 16 )
- | ((in[ 23 + inpos] & 255 )<<( 24 - 8 ))
- ) + out[30 + outpos - 1] ;
- out[ 31 + outpos] = ( ( in[ 23 + inpos] >>> 8 )
- ) + out[31 + outpos - 1] ;
-}
-
-
-
-
-public static void integratedunpack25(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = ( ( ( in[ 0 + inpos] >>> 0 ) & 33554431 )
- ) + initoffset ;
- out[ 1 + outpos] = ( ( in[ 0 + inpos] >>> 25 )
- | ((in[ 1 + inpos] & 262143 )<<( 25 - 18 ))
- ) + out[1 + outpos - 1] ;
- out[ 2 + outpos] = ( ( in[ 1 + inpos] >>> 18 )
- | ((in[ 2 + inpos] & 2047 )<<( 25 - 11 ))
- ) + out[2 + outpos - 1] ;
- out[ 3 + outpos] = ( ( in[ 2 + inpos] >>> 11 )
- | ((in[ 3 + inpos] & 15 )<<( 25 - 4 ))
- ) + out[3 + outpos - 1] ;
- out[ 4 + outpos] = ( ( ( in[ 3 + inpos] >>> 4 ) & 33554431 )
- ) + out[4 + outpos - 1] ;
- out[ 5 + outpos] = ( ( in[ 3 + inpos] >>> 29 )
- | ((in[ 4 + inpos] & 4194303 )<<( 25 - 22 ))
- ) + out[5 + outpos - 1] ;
- out[ 6 + outpos] = ( ( in[ 4 + inpos] >>> 22 )
- | ((in[ 5 + inpos] & 32767 )<<( 25 - 15 ))
- ) + out[6 + outpos - 1] ;
- out[ 7 + outpos] = ( ( in[ 5 + inpos] >>> 15 )
- | ((in[ 6 + inpos] & 255 )<<( 25 - 8 ))
- ) + out[7 + outpos - 1] ;
- out[ 8 + outpos] = ( ( in[ 6 + inpos] >>> 8 )
- | ((in[ 7 + inpos] & 1 )<<( 25 - 1 ))
- ) + out[8 + outpos - 1] ;
- out[ 9 + outpos] = ( ( ( in[ 7 + inpos] >>> 1 ) & 33554431 )
- ) + out[9 + outpos - 1] ;
- out[ 10 + outpos] = ( ( in[ 7 + inpos] >>> 26 )
- | ((in[ 8 + inpos] & 524287 )<<( 25 - 19 ))
- ) + out[10 + outpos - 1] ;
- out[ 11 + outpos] = ( ( in[ 8 + inpos] >>> 19 )
- | ((in[ 9 + inpos] & 4095 )<<( 25 - 12 ))
- ) + out[11 + outpos - 1] ;
- out[ 12 + outpos] = ( ( in[ 9 + inpos] >>> 12 )
- | ((in[ 10 + inpos] & 31 )<<( 25 - 5 ))
- ) + out[12 + outpos - 1] ;
- out[ 13 + outpos] = ( ( ( in[ 10 + inpos] >>> 5 ) & 33554431 )
- ) + out[13 + outpos - 1] ;
- out[ 14 + outpos] = ( ( in[ 10 + inpos] >>> 30 )
- | ((in[ 11 + inpos] & 8388607 )<<( 25 - 23 ))
- ) + out[14 + outpos - 1] ;
- out[ 15 + outpos] = ( ( in[ 11 + inpos] >>> 23 )
- | ((in[ 12 + inpos] & 65535 )<<( 25 - 16 ))
- ) + out[15 + outpos - 1] ;
- out[ 16 + outpos] = ( ( in[ 12 + inpos] >>> 16 )
- | ((in[ 13 + inpos] & 511 )<<( 25 - 9 ))
- ) + out[16 + outpos - 1] ;
- out[ 17 + outpos] = ( ( in[ 13 + inpos] >>> 9 )
- | ((in[ 14 + inpos] & 3 )<<( 25 - 2 ))
- ) + out[17 + outpos - 1] ;
- out[ 18 + outpos] = ( ( ( in[ 14 + inpos] >>> 2 ) & 33554431 )
- ) + out[18 + outpos - 1] ;
- out[ 19 + outpos] = ( ( in[ 14 + inpos] >>> 27 )
- | ((in[ 15 + inpos] & 1048575 )<<( 25 - 20 ))
- ) + out[19 + outpos - 1] ;
- out[ 20 + outpos] = ( ( in[ 15 + inpos] >>> 20 )
- | ((in[ 16 + inpos] & 8191 )<<( 25 - 13 ))
- ) + out[20 + outpos - 1] ;
- out[ 21 + outpos] = ( ( in[ 16 + inpos] >>> 13 )
- | ((in[ 17 + inpos] & 63 )<<( 25 - 6 ))
- ) + out[21 + outpos - 1] ;
- out[ 22 + outpos] = ( ( ( in[ 17 + inpos] >>> 6 ) & 33554431 )
- ) + out[22 + outpos - 1] ;
- out[ 23 + outpos] = ( ( in[ 17 + inpos] >>> 31 )
- | ((in[ 18 + inpos] & 16777215 )<<( 25 - 24 ))
- ) + out[23 + outpos - 1] ;
- out[ 24 + outpos] = ( ( in[ 18 + inpos] >>> 24 )
- | ((in[ 19 + inpos] & 131071 )<<( 25 - 17 ))
- ) + out[24 + outpos - 1] ;
- out[ 25 + outpos] = ( ( in[ 19 + inpos] >>> 17 )
- | ((in[ 20 + inpos] & 1023 )<<( 25 - 10 ))
- ) + out[25 + outpos - 1] ;
- out[ 26 + outpos] = ( ( in[ 20 + inpos] >>> 10 )
- | ((in[ 21 + inpos] & 7 )<<( 25 - 3 ))
- ) + out[26 + outpos - 1] ;
- out[ 27 + outpos] = ( ( ( in[ 21 + inpos] >>> 3 ) & 33554431 )
- ) + out[27 + outpos - 1] ;
- out[ 28 + outpos] = ( ( in[ 21 + inpos] >>> 28 )
- | ((in[ 22 + inpos] & 2097151 )<<( 25 - 21 ))
- ) + out[28 + outpos - 1] ;
- out[ 29 + outpos] = ( ( in[ 22 + inpos] >>> 21 )
- | ((in[ 23 + inpos] & 16383 )<<( 25 - 14 ))
- ) + out[29 + outpos - 1] ;
- out[ 30 + outpos] = ( ( in[ 23 + inpos] >>> 14 )
- | ((in[ 24 + inpos] & 127 )<<( 25 - 7 ))
- ) + out[30 + outpos - 1] ;
- out[ 31 + outpos] = ( ( in[ 24 + inpos] >>> 7 )
- ) + out[31 + outpos - 1] ;
-}
-
-
-
-
-public static void integratedunpack26(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = ( ( ( in[ 0 + inpos] >>> 0 ) & 67108863 )
- ) + initoffset ;
- out[ 1 + outpos] = ( ( in[ 0 + inpos] >>> 26 )
- | ((in[ 1 + inpos] & 1048575 )<<( 26 - 20 ))
- ) + out[1 + outpos - 1] ;
- out[ 2 + outpos] = ( ( in[ 1 + inpos] >>> 20 )
- | ((in[ 2 + inpos] & 16383 )<<( 26 - 14 ))
- ) + out[2 + outpos - 1] ;
- out[ 3 + outpos] = ( ( in[ 2 + inpos] >>> 14 )
- | ((in[ 3 + inpos] & 255 )<<( 26 - 8 ))
- ) + out[3 + outpos - 1] ;
- out[ 4 + outpos] = ( ( in[ 3 + inpos] >>> 8 )
- | ((in[ 4 + inpos] & 3 )<<( 26 - 2 ))
- ) + out[4 + outpos - 1] ;
- out[ 5 + outpos] = ( ( ( in[ 4 + inpos] >>> 2 ) & 67108863 )
- ) + out[5 + outpos - 1] ;
- out[ 6 + outpos] = ( ( in[ 4 + inpos] >>> 28 )
- | ((in[ 5 + inpos] & 4194303 )<<( 26 - 22 ))
- ) + out[6 + outpos - 1] ;
- out[ 7 + outpos] = ( ( in[ 5 + inpos] >>> 22 )
- | ((in[ 6 + inpos] & 65535 )<<( 26 - 16 ))
- ) + out[7 + outpos - 1] ;
- out[ 8 + outpos] = ( ( in[ 6 + inpos] >>> 16 )
- | ((in[ 7 + inpos] & 1023 )<<( 26 - 10 ))
- ) + out[8 + outpos - 1] ;
- out[ 9 + outpos] = ( ( in[ 7 + inpos] >>> 10 )
- | ((in[ 8 + inpos] & 15 )<<( 26 - 4 ))
- ) + out[9 + outpos - 1] ;
- out[ 10 + outpos] = ( ( ( in[ 8 + inpos] >>> 4 ) & 67108863 )
- ) + out[10 + outpos - 1] ;
- out[ 11 + outpos] = ( ( in[ 8 + inpos] >>> 30 )
- | ((in[ 9 + inpos] & 16777215 )<<( 26 - 24 ))
- ) + out[11 + outpos - 1] ;
- out[ 12 + outpos] = ( ( in[ 9 + inpos] >>> 24 )
- | ((in[ 10 + inpos] & 262143 )<<( 26 - 18 ))
- ) + out[12 + outpos - 1] ;
- out[ 13 + outpos] = ( ( in[ 10 + inpos] >>> 18 )
- | ((in[ 11 + inpos] & 4095 )<<( 26 - 12 ))
- ) + out[13 + outpos - 1] ;
- out[ 14 + outpos] = ( ( in[ 11 + inpos] >>> 12 )
- | ((in[ 12 + inpos] & 63 )<<( 26 - 6 ))
- ) + out[14 + outpos - 1] ;
- out[ 15 + outpos] = ( ( in[ 12 + inpos] >>> 6 )
- ) + out[15 + outpos - 1] ;
- out[ 16 + outpos] = ( ( ( in[ 13 + inpos] >>> 0 ) & 67108863 )
- ) + out[16 + outpos - 1] ;
- out[ 17 + outpos] = ( ( in[ 13 + inpos] >>> 26 )
- | ((in[ 14 + inpos] & 1048575 )<<( 26 - 20 ))
- ) + out[17 + outpos - 1] ;
- out[ 18 + outpos] = ( ( in[ 14 + inpos] >>> 20 )
- | ((in[ 15 + inpos] & 16383 )<<( 26 - 14 ))
- ) + out[18 + outpos - 1] ;
- out[ 19 + outpos] = ( ( in[ 15 + inpos] >>> 14 )
- | ((in[ 16 + inpos] & 255 )<<( 26 - 8 ))
- ) + out[19 + outpos - 1] ;
- out[ 20 + outpos] = ( ( in[ 16 + inpos] >>> 8 )
- | ((in[ 17 + inpos] & 3 )<<( 26 - 2 ))
- ) + out[20 + outpos - 1] ;
- out[ 21 + outpos] = ( ( ( in[ 17 + inpos] >>> 2 ) & 67108863 )
- ) + out[21 + outpos - 1] ;
- out[ 22 + outpos] = ( ( in[ 17 + inpos] >>> 28 )
- | ((in[ 18 + inpos] & 4194303 )<<( 26 - 22 ))
- ) + out[22 + outpos - 1] ;
- out[ 23 + outpos] = ( ( in[ 18 + inpos] >>> 22 )
- | ((in[ 19 + inpos] & 65535 )<<( 26 - 16 ))
- ) + out[23 + outpos - 1] ;
- out[ 24 + outpos] = ( ( in[ 19 + inpos] >>> 16 )
- | ((in[ 20 + inpos] & 1023 )<<( 26 - 10 ))
- ) + out[24 + outpos - 1] ;
- out[ 25 + outpos] = ( ( in[ 20 + inpos] >>> 10 )
- | ((in[ 21 + inpos] & 15 )<<( 26 - 4 ))
- ) + out[25 + outpos - 1] ;
- out[ 26 + outpos] = ( ( ( in[ 21 + inpos] >>> 4 ) & 67108863 )
- ) + out[26 + outpos - 1] ;
- out[ 27 + outpos] = ( ( in[ 21 + inpos] >>> 30 )
- | ((in[ 22 + inpos] & 16777215 )<<( 26 - 24 ))
- ) + out[27 + outpos - 1] ;
- out[ 28 + outpos] = ( ( in[ 22 + inpos] >>> 24 )
- | ((in[ 23 + inpos] & 262143 )<<( 26 - 18 ))
- ) + out[28 + outpos - 1] ;
- out[ 29 + outpos] = ( ( in[ 23 + inpos] >>> 18 )
- | ((in[ 24 + inpos] & 4095 )<<( 26 - 12 ))
- ) + out[29 + outpos - 1] ;
- out[ 30 + outpos] = ( ( in[ 24 + inpos] >>> 12 )
- | ((in[ 25 + inpos] & 63 )<<( 26 - 6 ))
- ) + out[30 + outpos - 1] ;
- out[ 31 + outpos] = ( ( in[ 25 + inpos] >>> 6 )
- ) + out[31 + outpos - 1] ;
-}
-
-
-
-
-public static void integratedunpack27(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = ( ( ( in[ 0 + inpos] >>> 0 ) & 134217727 )
- ) + initoffset ;
- out[ 1 + outpos] = ( ( in[ 0 + inpos] >>> 27 )
- | ((in[ 1 + inpos] & 4194303 )<<( 27 - 22 ))
- ) + out[1 + outpos - 1] ;
- out[ 2 + outpos] = ( ( in[ 1 + inpos] >>> 22 )
- | ((in[ 2 + inpos] & 131071 )<<( 27 - 17 ))
- ) + out[2 + outpos - 1] ;
- out[ 3 + outpos] = ( ( in[ 2 + inpos] >>> 17 )
- | ((in[ 3 + inpos] & 4095 )<<( 27 - 12 ))
- ) + out[3 + outpos - 1] ;
- out[ 4 + outpos] = ( ( in[ 3 + inpos] >>> 12 )
- | ((in[ 4 + inpos] & 127 )<<( 27 - 7 ))
- ) + out[4 + outpos - 1] ;
- out[ 5 + outpos] = ( ( in[ 4 + inpos] >>> 7 )
- | ((in[ 5 + inpos] & 3 )<<( 27 - 2 ))
- ) + out[5 + outpos - 1] ;
- out[ 6 + outpos] = ( ( ( in[ 5 + inpos] >>> 2 ) & 134217727 )
- ) + out[6 + outpos - 1] ;
- out[ 7 + outpos] = ( ( in[ 5 + inpos] >>> 29 )
- | ((in[ 6 + inpos] & 16777215 )<<( 27 - 24 ))
- ) + out[7 + outpos - 1] ;
- out[ 8 + outpos] = ( ( in[ 6 + inpos] >>> 24 )
- | ((in[ 7 + inpos] & 524287 )<<( 27 - 19 ))
- ) + out[8 + outpos - 1] ;
- out[ 9 + outpos] = ( ( in[ 7 + inpos] >>> 19 )
- | ((in[ 8 + inpos] & 16383 )<<( 27 - 14 ))
- ) + out[9 + outpos - 1] ;
- out[ 10 + outpos] = ( ( in[ 8 + inpos] >>> 14 )
- | ((in[ 9 + inpos] & 511 )<<( 27 - 9 ))
- ) + out[10 + outpos - 1] ;
- out[ 11 + outpos] = ( ( in[ 9 + inpos] >>> 9 )
- | ((in[ 10 + inpos] & 15 )<<( 27 - 4 ))
- ) + out[11 + outpos - 1] ;
- out[ 12 + outpos] = ( ( ( in[ 10 + inpos] >>> 4 ) & 134217727 )
- ) + out[12 + outpos - 1] ;
- out[ 13 + outpos] = ( ( in[ 10 + inpos] >>> 31 )
- | ((in[ 11 + inpos] & 67108863 )<<( 27 - 26 ))
- ) + out[13 + outpos - 1] ;
- out[ 14 + outpos] = ( ( in[ 11 + inpos] >>> 26 )
- | ((in[ 12 + inpos] & 2097151 )<<( 27 - 21 ))
- ) + out[14 + outpos - 1] ;
- out[ 15 + outpos] = ( ( in[ 12 + inpos] >>> 21 )
- | ((in[ 13 + inpos] & 65535 )<<( 27 - 16 ))
- ) + out[15 + outpos - 1] ;
- out[ 16 + outpos] = ( ( in[ 13 + inpos] >>> 16 )
- | ((in[ 14 + inpos] & 2047 )<<( 27 - 11 ))
- ) + out[16 + outpos - 1] ;
- out[ 17 + outpos] = ( ( in[ 14 + inpos] >>> 11 )
- | ((in[ 15 + inpos] & 63 )<<( 27 - 6 ))
- ) + out[17 + outpos - 1] ;
- out[ 18 + outpos] = ( ( in[ 15 + inpos] >>> 6 )
- | ((in[ 16 + inpos] & 1 )<<( 27 - 1 ))
- ) + out[18 + outpos - 1] ;
- out[ 19 + outpos] = ( ( ( in[ 16 + inpos] >>> 1 ) & 134217727 )
- ) + out[19 + outpos - 1] ;
- out[ 20 + outpos] = ( ( in[ 16 + inpos] >>> 28 )
- | ((in[ 17 + inpos] & 8388607 )<<( 27 - 23 ))
- ) + out[20 + outpos - 1] ;
- out[ 21 + outpos] = ( ( in[ 17 + inpos] >>> 23 )
- | ((in[ 18 + inpos] & 262143 )<<( 27 - 18 ))
- ) + out[21 + outpos - 1] ;
- out[ 22 + outpos] = ( ( in[ 18 + inpos] >>> 18 )
- | ((in[ 19 + inpos] & 8191 )<<( 27 - 13 ))
- ) + out[22 + outpos - 1] ;
- out[ 23 + outpos] = ( ( in[ 19 + inpos] >>> 13 )
- | ((in[ 20 + inpos] & 255 )<<( 27 - 8 ))
- ) + out[23 + outpos - 1] ;
- out[ 24 + outpos] = ( ( in[ 20 + inpos] >>> 8 )
- | ((in[ 21 + inpos] & 7 )<<( 27 - 3 ))
- ) + out[24 + outpos - 1] ;
- out[ 25 + outpos] = ( ( ( in[ 21 + inpos] >>> 3 ) & 134217727 )
- ) + out[25 + outpos - 1] ;
- out[ 26 + outpos] = ( ( in[ 21 + inpos] >>> 30 )
- | ((in[ 22 + inpos] & 33554431 )<<( 27 - 25 ))
- ) + out[26 + outpos - 1] ;
- out[ 27 + outpos] = ( ( in[ 22 + inpos] >>> 25 )
- | ((in[ 23 + inpos] & 1048575 )<<( 27 - 20 ))
- ) + out[27 + outpos - 1] ;
- out[ 28 + outpos] = ( ( in[ 23 + inpos] >>> 20 )
- | ((in[ 24 + inpos] & 32767 )<<( 27 - 15 ))
- ) + out[28 + outpos - 1] ;
- out[ 29 + outpos] = ( ( in[ 24 + inpos] >>> 15 )
- | ((in[ 25 + inpos] & 1023 )<<( 27 - 10 ))
- ) + out[29 + outpos - 1] ;
- out[ 30 + outpos] = ( ( in[ 25 + inpos] >>> 10 )
- | ((in[ 26 + inpos] & 31 )<<( 27 - 5 ))
- ) + out[30 + outpos - 1] ;
- out[ 31 + outpos] = ( ( in[ 26 + inpos] >>> 5 )
- ) + out[31 + outpos - 1] ;
-}
-
-
-
-
-public static void integratedunpack28(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = ( ( ( in[ 0 + inpos] >>> 0 ) & 268435455 )
- ) + initoffset ;
- out[ 1 + outpos] = ( ( in[ 0 + inpos] >>> 28 )
- | ((in[ 1 + inpos] & 16777215 )<<( 28 - 24 ))
- ) + out[1 + outpos - 1] ;
- out[ 2 + outpos] = ( ( in[ 1 + inpos] >>> 24 )
- | ((in[ 2 + inpos] & 1048575 )<<( 28 - 20 ))
- ) + out[2 + outpos - 1] ;
- out[ 3 + outpos] = ( ( in[ 2 + inpos] >>> 20 )
- | ((in[ 3 + inpos] & 65535 )<<( 28 - 16 ))
- ) + out[3 + outpos - 1] ;
- out[ 4 + outpos] = ( ( in[ 3 + inpos] >>> 16 )
- | ((in[ 4 + inpos] & 4095 )<<( 28 - 12 ))
- ) + out[4 + outpos - 1] ;
- out[ 5 + outpos] = ( ( in[ 4 + inpos] >>> 12 )
- | ((in[ 5 + inpos] & 255 )<<( 28 - 8 ))
- ) + out[5 + outpos - 1] ;
- out[ 6 + outpos] = ( ( in[ 5 + inpos] >>> 8 )
- | ((in[ 6 + inpos] & 15 )<<( 28 - 4 ))
- ) + out[6 + outpos - 1] ;
- out[ 7 + outpos] = ( ( in[ 6 + inpos] >>> 4 )
- ) + out[7 + outpos - 1] ;
- out[ 8 + outpos] = ( ( ( in[ 7 + inpos] >>> 0 ) & 268435455 )
- ) + out[8 + outpos - 1] ;
- out[ 9 + outpos] = ( ( in[ 7 + inpos] >>> 28 )
- | ((in[ 8 + inpos] & 16777215 )<<( 28 - 24 ))
- ) + out[9 + outpos - 1] ;
- out[ 10 + outpos] = ( ( in[ 8 + inpos] >>> 24 )
- | ((in[ 9 + inpos] & 1048575 )<<( 28 - 20 ))
- ) + out[10 + outpos - 1] ;
- out[ 11 + outpos] = ( ( in[ 9 + inpos] >>> 20 )
- | ((in[ 10 + inpos] & 65535 )<<( 28 - 16 ))
- ) + out[11 + outpos - 1] ;
- out[ 12 + outpos] = ( ( in[ 10 + inpos] >>> 16 )
- | ((in[ 11 + inpos] & 4095 )<<( 28 - 12 ))
- ) + out[12 + outpos - 1] ;
- out[ 13 + outpos] = ( ( in[ 11 + inpos] >>> 12 )
- | ((in[ 12 + inpos] & 255 )<<( 28 - 8 ))
- ) + out[13 + outpos - 1] ;
- out[ 14 + outpos] = ( ( in[ 12 + inpos] >>> 8 )
- | ((in[ 13 + inpos] & 15 )<<( 28 - 4 ))
- ) + out[14 + outpos - 1] ;
- out[ 15 + outpos] = ( ( in[ 13 + inpos] >>> 4 )
- ) + out[15 + outpos - 1] ;
- out[ 16 + outpos] = ( ( ( in[ 14 + inpos] >>> 0 ) & 268435455 )
- ) + out[16 + outpos - 1] ;
- out[ 17 + outpos] = ( ( in[ 14 + inpos] >>> 28 )
- | ((in[ 15 + inpos] & 16777215 )<<( 28 - 24 ))
- ) + out[17 + outpos - 1] ;
- out[ 18 + outpos] = ( ( in[ 15 + inpos] >>> 24 )
- | ((in[ 16 + inpos] & 1048575 )<<( 28 - 20 ))
- ) + out[18 + outpos - 1] ;
- out[ 19 + outpos] = ( ( in[ 16 + inpos] >>> 20 )
- | ((in[ 17 + inpos] & 65535 )<<( 28 - 16 ))
- ) + out[19 + outpos - 1] ;
- out[ 20 + outpos] = ( ( in[ 17 + inpos] >>> 16 )
- | ((in[ 18 + inpos] & 4095 )<<( 28 - 12 ))
- ) + out[20 + outpos - 1] ;
- out[ 21 + outpos] = ( ( in[ 18 + inpos] >>> 12 )
- | ((in[ 19 + inpos] & 255 )<<( 28 - 8 ))
- ) + out[21 + outpos - 1] ;
- out[ 22 + outpos] = ( ( in[ 19 + inpos] >>> 8 )
- | ((in[ 20 + inpos] & 15 )<<( 28 - 4 ))
- ) + out[22 + outpos - 1] ;
- out[ 23 + outpos] = ( ( in[ 20 + inpos] >>> 4 )
- ) + out[23 + outpos - 1] ;
- out[ 24 + outpos] = ( ( ( in[ 21 + inpos] >>> 0 ) & 268435455 )
- ) + out[24 + outpos - 1] ;
- out[ 25 + outpos] = ( ( in[ 21 + inpos] >>> 28 )
- | ((in[ 22 + inpos] & 16777215 )<<( 28 - 24 ))
- ) + out[25 + outpos - 1] ;
- out[ 26 + outpos] = ( ( in[ 22 + inpos] >>> 24 )
- | ((in[ 23 + inpos] & 1048575 )<<( 28 - 20 ))
- ) + out[26 + outpos - 1] ;
- out[ 27 + outpos] = ( ( in[ 23 + inpos] >>> 20 )
- | ((in[ 24 + inpos] & 65535 )<<( 28 - 16 ))
- ) + out[27 + outpos - 1] ;
- out[ 28 + outpos] = ( ( in[ 24 + inpos] >>> 16 )
- | ((in[ 25 + inpos] & 4095 )<<( 28 - 12 ))
- ) + out[28 + outpos - 1] ;
- out[ 29 + outpos] = ( ( in[ 25 + inpos] >>> 12 )
- | ((in[ 26 + inpos] & 255 )<<( 28 - 8 ))
- ) + out[29 + outpos - 1] ;
- out[ 30 + outpos] = ( ( in[ 26 + inpos] >>> 8 )
- | ((in[ 27 + inpos] & 15 )<<( 28 - 4 ))
- ) + out[30 + outpos - 1] ;
- out[ 31 + outpos] = ( ( in[ 27 + inpos] >>> 4 )
- ) + out[31 + outpos - 1] ;
-}
-
-
-
-
-public static void integratedunpack29(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = ( ( ( in[ 0 + inpos] >>> 0 ) & 536870911 )
- ) + initoffset ;
- out[ 1 + outpos] = ( ( in[ 0 + inpos] >>> 29 )
- | ((in[ 1 + inpos] & 67108863 )<<( 29 - 26 ))
- ) + out[1 + outpos - 1] ;
- out[ 2 + outpos] = ( ( in[ 1 + inpos] >>> 26 )
- | ((in[ 2 + inpos] & 8388607 )<<( 29 - 23 ))
- ) + out[2 + outpos - 1] ;
- out[ 3 + outpos] = ( ( in[ 2 + inpos] >>> 23 )
- | ((in[ 3 + inpos] & 1048575 )<<( 29 - 20 ))
- ) + out[3 + outpos - 1] ;
- out[ 4 + outpos] = ( ( in[ 3 + inpos] >>> 20 )
- | ((in[ 4 + inpos] & 131071 )<<( 29 - 17 ))
- ) + out[4 + outpos - 1] ;
- out[ 5 + outpos] = ( ( in[ 4 + inpos] >>> 17 )
- | ((in[ 5 + inpos] & 16383 )<<( 29 - 14 ))
- ) + out[5 + outpos - 1] ;
- out[ 6 + outpos] = ( ( in[ 5 + inpos] >>> 14 )
- | ((in[ 6 + inpos] & 2047 )<<( 29 - 11 ))
- ) + out[6 + outpos - 1] ;
- out[ 7 + outpos] = ( ( in[ 6 + inpos] >>> 11 )
- | ((in[ 7 + inpos] & 255 )<<( 29 - 8 ))
- ) + out[7 + outpos - 1] ;
- out[ 8 + outpos] = ( ( in[ 7 + inpos] >>> 8 )
- | ((in[ 8 + inpos] & 31 )<<( 29 - 5 ))
- ) + out[8 + outpos - 1] ;
- out[ 9 + outpos] = ( ( in[ 8 + inpos] >>> 5 )
- | ((in[ 9 + inpos] & 3 )<<( 29 - 2 ))
- ) + out[9 + outpos - 1] ;
- out[ 10 + outpos] = ( ( ( in[ 9 + inpos] >>> 2 ) & 536870911 )
- ) + out[10 + outpos - 1] ;
- out[ 11 + outpos] = ( ( in[ 9 + inpos] >>> 31 )
- | ((in[ 10 + inpos] & 268435455 )<<( 29 - 28 ))
- ) + out[11 + outpos - 1] ;
- out[ 12 + outpos] = ( ( in[ 10 + inpos] >>> 28 )
- | ((in[ 11 + inpos] & 33554431 )<<( 29 - 25 ))
- ) + out[12 + outpos - 1] ;
- out[ 13 + outpos] = ( ( in[ 11 + inpos] >>> 25 )
- | ((in[ 12 + inpos] & 4194303 )<<( 29 - 22 ))
- ) + out[13 + outpos - 1] ;
- out[ 14 + outpos] = ( ( in[ 12 + inpos] >>> 22 )
- | ((in[ 13 + inpos] & 524287 )<<( 29 - 19 ))
- ) + out[14 + outpos - 1] ;
- out[ 15 + outpos] = ( ( in[ 13 + inpos] >>> 19 )
- | ((in[ 14 + inpos] & 65535 )<<( 29 - 16 ))
- ) + out[15 + outpos - 1] ;
- out[ 16 + outpos] = ( ( in[ 14 + inpos] >>> 16 )
- | ((in[ 15 + inpos] & 8191 )<<( 29 - 13 ))
- ) + out[16 + outpos - 1] ;
- out[ 17 + outpos] = ( ( in[ 15 + inpos] >>> 13 )
- | ((in[ 16 + inpos] & 1023 )<<( 29 - 10 ))
- ) + out[17 + outpos - 1] ;
- out[ 18 + outpos] = ( ( in[ 16 + inpos] >>> 10 )
- | ((in[ 17 + inpos] & 127 )<<( 29 - 7 ))
- ) + out[18 + outpos - 1] ;
- out[ 19 + outpos] = ( ( in[ 17 + inpos] >>> 7 )
- | ((in[ 18 + inpos] & 15 )<<( 29 - 4 ))
- ) + out[19 + outpos - 1] ;
- out[ 20 + outpos] = ( ( in[ 18 + inpos] >>> 4 )
- | ((in[ 19 + inpos] & 1 )<<( 29 - 1 ))
- ) + out[20 + outpos - 1] ;
- out[ 21 + outpos] = ( ( ( in[ 19 + inpos] >>> 1 ) & 536870911 )
- ) + out[21 + outpos - 1] ;
- out[ 22 + outpos] = ( ( in[ 19 + inpos] >>> 30 )
- | ((in[ 20 + inpos] & 134217727 )<<( 29 - 27 ))
- ) + out[22 + outpos - 1] ;
- out[ 23 + outpos] = ( ( in[ 20 + inpos] >>> 27 )
- | ((in[ 21 + inpos] & 16777215 )<<( 29 - 24 ))
- ) + out[23 + outpos - 1] ;
- out[ 24 + outpos] = ( ( in[ 21 + inpos] >>> 24 )
- | ((in[ 22 + inpos] & 2097151 )<<( 29 - 21 ))
- ) + out[24 + outpos - 1] ;
- out[ 25 + outpos] = ( ( in[ 22 + inpos] >>> 21 )
- | ((in[ 23 + inpos] & 262143 )<<( 29 - 18 ))
- ) + out[25 + outpos - 1] ;
- out[ 26 + outpos] = ( ( in[ 23 + inpos] >>> 18 )
- | ((in[ 24 + inpos] & 32767 )<<( 29 - 15 ))
- ) + out[26 + outpos - 1] ;
- out[ 27 + outpos] = ( ( in[ 24 + inpos] >>> 15 )
- | ((in[ 25 + inpos] & 4095 )<<( 29 - 12 ))
- ) + out[27 + outpos - 1] ;
- out[ 28 + outpos] = ( ( in[ 25 + inpos] >>> 12 )
- | ((in[ 26 + inpos] & 511 )<<( 29 - 9 ))
- ) + out[28 + outpos - 1] ;
- out[ 29 + outpos] = ( ( in[ 26 + inpos] >>> 9 )
- | ((in[ 27 + inpos] & 63 )<<( 29 - 6 ))
- ) + out[29 + outpos - 1] ;
- out[ 30 + outpos] = ( ( in[ 27 + inpos] >>> 6 )
- | ((in[ 28 + inpos] & 7 )<<( 29 - 3 ))
- ) + out[30 + outpos - 1] ;
- out[ 31 + outpos] = ( ( in[ 28 + inpos] >>> 3 )
- ) + out[31 + outpos - 1] ;
-}
-
-
-
-
-public static void integratedunpack30(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = ( ( ( in[ 0 + inpos] >>> 0 ) & 1073741823 )
- ) + initoffset ;
- out[ 1 + outpos] = ( ( in[ 0 + inpos] >>> 30 )
- | ((in[ 1 + inpos] & 268435455 )<<( 30 - 28 ))
- ) + out[1 + outpos - 1] ;
- out[ 2 + outpos] = ( ( in[ 1 + inpos] >>> 28 )
- | ((in[ 2 + inpos] & 67108863 )<<( 30 - 26 ))
- ) + out[2 + outpos - 1] ;
- out[ 3 + outpos] = ( ( in[ 2 + inpos] >>> 26 )
- | ((in[ 3 + inpos] & 16777215 )<<( 30 - 24 ))
- ) + out[3 + outpos - 1] ;
- out[ 4 + outpos] = ( ( in[ 3 + inpos] >>> 24 )
- | ((in[ 4 + inpos] & 4194303 )<<( 30 - 22 ))
- ) + out[4 + outpos - 1] ;
- out[ 5 + outpos] = ( ( in[ 4 + inpos] >>> 22 )
- | ((in[ 5 + inpos] & 1048575 )<<( 30 - 20 ))
- ) + out[5 + outpos - 1] ;
- out[ 6 + outpos] = ( ( in[ 5 + inpos] >>> 20 )
- | ((in[ 6 + inpos] & 262143 )<<( 30 - 18 ))
- ) + out[6 + outpos - 1] ;
- out[ 7 + outpos] = ( ( in[ 6 + inpos] >>> 18 )
- | ((in[ 7 + inpos] & 65535 )<<( 30 - 16 ))
- ) + out[7 + outpos - 1] ;
- out[ 8 + outpos] = ( ( in[ 7 + inpos] >>> 16 )
- | ((in[ 8 + inpos] & 16383 )<<( 30 - 14 ))
- ) + out[8 + outpos - 1] ;
- out[ 9 + outpos] = ( ( in[ 8 + inpos] >>> 14 )
- | ((in[ 9 + inpos] & 4095 )<<( 30 - 12 ))
- ) + out[9 + outpos - 1] ;
- out[ 10 + outpos] = ( ( in[ 9 + inpos] >>> 12 )
- | ((in[ 10 + inpos] & 1023 )<<( 30 - 10 ))
- ) + out[10 + outpos - 1] ;
- out[ 11 + outpos] = ( ( in[ 10 + inpos] >>> 10 )
- | ((in[ 11 + inpos] & 255 )<<( 30 - 8 ))
- ) + out[11 + outpos - 1] ;
- out[ 12 + outpos] = ( ( in[ 11 + inpos] >>> 8 )
- | ((in[ 12 + inpos] & 63 )<<( 30 - 6 ))
- ) + out[12 + outpos - 1] ;
- out[ 13 + outpos] = ( ( in[ 12 + inpos] >>> 6 )
- | ((in[ 13 + inpos] & 15 )<<( 30 - 4 ))
- ) + out[13 + outpos - 1] ;
- out[ 14 + outpos] = ( ( in[ 13 + inpos] >>> 4 )
- | ((in[ 14 + inpos] & 3 )<<( 30 - 2 ))
- ) + out[14 + outpos - 1] ;
- out[ 15 + outpos] = ( ( in[ 14 + inpos] >>> 2 )
- ) + out[15 + outpos - 1] ;
- out[ 16 + outpos] = ( ( ( in[ 15 + inpos] >>> 0 ) & 1073741823 )
- ) + out[16 + outpos - 1] ;
- out[ 17 + outpos] = ( ( in[ 15 + inpos] >>> 30 )
- | ((in[ 16 + inpos] & 268435455 )<<( 30 - 28 ))
- ) + out[17 + outpos - 1] ;
- out[ 18 + outpos] = ( ( in[ 16 + inpos] >>> 28 )
- | ((in[ 17 + inpos] & 67108863 )<<( 30 - 26 ))
- ) + out[18 + outpos - 1] ;
- out[ 19 + outpos] = ( ( in[ 17 + inpos] >>> 26 )
- | ((in[ 18 + inpos] & 16777215 )<<( 30 - 24 ))
- ) + out[19 + outpos - 1] ;
- out[ 20 + outpos] = ( ( in[ 18 + inpos] >>> 24 )
- | ((in[ 19 + inpos] & 4194303 )<<( 30 - 22 ))
- ) + out[20 + outpos - 1] ;
- out[ 21 + outpos] = ( ( in[ 19 + inpos] >>> 22 )
- | ((in[ 20 + inpos] & 1048575 )<<( 30 - 20 ))
- ) + out[21 + outpos - 1] ;
- out[ 22 + outpos] = ( ( in[ 20 + inpos] >>> 20 )
- | ((in[ 21 + inpos] & 262143 )<<( 30 - 18 ))
- ) + out[22 + outpos - 1] ;
- out[ 23 + outpos] = ( ( in[ 21 + inpos] >>> 18 )
- | ((in[ 22 + inpos] & 65535 )<<( 30 - 16 ))
- ) + out[23 + outpos - 1] ;
- out[ 24 + outpos] = ( ( in[ 22 + inpos] >>> 16 )
- | ((in[ 23 + inpos] & 16383 )<<( 30 - 14 ))
- ) + out[24 + outpos - 1] ;
- out[ 25 + outpos] = ( ( in[ 23 + inpos] >>> 14 )
- | ((in[ 24 + inpos] & 4095 )<<( 30 - 12 ))
- ) + out[25 + outpos - 1] ;
- out[ 26 + outpos] = ( ( in[ 24 + inpos] >>> 12 )
- | ((in[ 25 + inpos] & 1023 )<<( 30 - 10 ))
- ) + out[26 + outpos - 1] ;
- out[ 27 + outpos] = ( ( in[ 25 + inpos] >>> 10 )
- | ((in[ 26 + inpos] & 255 )<<( 30 - 8 ))
- ) + out[27 + outpos - 1] ;
- out[ 28 + outpos] = ( ( in[ 26 + inpos] >>> 8 )
- | ((in[ 27 + inpos] & 63 )<<( 30 - 6 ))
- ) + out[28 + outpos - 1] ;
- out[ 29 + outpos] = ( ( in[ 27 + inpos] >>> 6 )
- | ((in[ 28 + inpos] & 15 )<<( 30 - 4 ))
- ) + out[29 + outpos - 1] ;
- out[ 30 + outpos] = ( ( in[ 28 + inpos] >>> 4 )
- | ((in[ 29 + inpos] & 3 )<<( 30 - 2 ))
- ) + out[30 + outpos - 1] ;
- out[ 31 + outpos] = ( ( in[ 29 + inpos] >>> 2 )
- ) + out[31 + outpos - 1] ;
-}
-
-
-
-
-public static void integratedunpack31(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- out[ 0 + outpos] = ( ( ( in[ 0 + inpos] >>> 0 ) & 2147483647 )
- ) + initoffset ;
- out[ 1 + outpos] = ( ( in[ 0 + inpos] >>> 31 )
- | ((in[ 1 + inpos] & 1073741823 )<<( 31 - 30 ))
- ) + out[1 + outpos - 1] ;
- out[ 2 + outpos] = ( ( in[ 1 + inpos] >>> 30 )
- | ((in[ 2 + inpos] & 536870911 )<<( 31 - 29 ))
- ) + out[2 + outpos - 1] ;
- out[ 3 + outpos] = ( ( in[ 2 + inpos] >>> 29 )
- | ((in[ 3 + inpos] & 268435455 )<<( 31 - 28 ))
- ) + out[3 + outpos - 1] ;
- out[ 4 + outpos] = ( ( in[ 3 + inpos] >>> 28 )
- | ((in[ 4 + inpos] & 134217727 )<<( 31 - 27 ))
- ) + out[4 + outpos - 1] ;
- out[ 5 + outpos] = ( ( in[ 4 + inpos] >>> 27 )
- | ((in[ 5 + inpos] & 67108863 )<<( 31 - 26 ))
- ) + out[5 + outpos - 1] ;
- out[ 6 + outpos] = ( ( in[ 5 + inpos] >>> 26 )
- | ((in[ 6 + inpos] & 33554431 )<<( 31 - 25 ))
- ) + out[6 + outpos - 1] ;
- out[ 7 + outpos] = ( ( in[ 6 + inpos] >>> 25 )
- | ((in[ 7 + inpos] & 16777215 )<<( 31 - 24 ))
- ) + out[7 + outpos - 1] ;
- out[ 8 + outpos] = ( ( in[ 7 + inpos] >>> 24 )
- | ((in[ 8 + inpos] & 8388607 )<<( 31 - 23 ))
- ) + out[8 + outpos - 1] ;
- out[ 9 + outpos] = ( ( in[ 8 + inpos] >>> 23 )
- | ((in[ 9 + inpos] & 4194303 )<<( 31 - 22 ))
- ) + out[9 + outpos - 1] ;
- out[ 10 + outpos] = ( ( in[ 9 + inpos] >>> 22 )
- | ((in[ 10 + inpos] & 2097151 )<<( 31 - 21 ))
- ) + out[10 + outpos - 1] ;
- out[ 11 + outpos] = ( ( in[ 10 + inpos] >>> 21 )
- | ((in[ 11 + inpos] & 1048575 )<<( 31 - 20 ))
- ) + out[11 + outpos - 1] ;
- out[ 12 + outpos] = ( ( in[ 11 + inpos] >>> 20 )
- | ((in[ 12 + inpos] & 524287 )<<( 31 - 19 ))
- ) + out[12 + outpos - 1] ;
- out[ 13 + outpos] = ( ( in[ 12 + inpos] >>> 19 )
- | ((in[ 13 + inpos] & 262143 )<<( 31 - 18 ))
- ) + out[13 + outpos - 1] ;
- out[ 14 + outpos] = ( ( in[ 13 + inpos] >>> 18 )
- | ((in[ 14 + inpos] & 131071 )<<( 31 - 17 ))
- ) + out[14 + outpos - 1] ;
- out[ 15 + outpos] = ( ( in[ 14 + inpos] >>> 17 )
- | ((in[ 15 + inpos] & 65535 )<<( 31 - 16 ))
- ) + out[15 + outpos - 1] ;
- out[ 16 + outpos] = ( ( in[ 15 + inpos] >>> 16 )
- | ((in[ 16 + inpos] & 32767 )<<( 31 - 15 ))
- ) + out[16 + outpos - 1] ;
- out[ 17 + outpos] = ( ( in[ 16 + inpos] >>> 15 )
- | ((in[ 17 + inpos] & 16383 )<<( 31 - 14 ))
- ) + out[17 + outpos - 1] ;
- out[ 18 + outpos] = ( ( in[ 17 + inpos] >>> 14 )
- | ((in[ 18 + inpos] & 8191 )<<( 31 - 13 ))
- ) + out[18 + outpos - 1] ;
- out[ 19 + outpos] = ( ( in[ 18 + inpos] >>> 13 )
- | ((in[ 19 + inpos] & 4095 )<<( 31 - 12 ))
- ) + out[19 + outpos - 1] ;
- out[ 20 + outpos] = ( ( in[ 19 + inpos] >>> 12 )
- | ((in[ 20 + inpos] & 2047 )<<( 31 - 11 ))
- ) + out[20 + outpos - 1] ;
- out[ 21 + outpos] = ( ( in[ 20 + inpos] >>> 11 )
- | ((in[ 21 + inpos] & 1023 )<<( 31 - 10 ))
- ) + out[21 + outpos - 1] ;
- out[ 22 + outpos] = ( ( in[ 21 + inpos] >>> 10 )
- | ((in[ 22 + inpos] & 511 )<<( 31 - 9 ))
- ) + out[22 + outpos - 1] ;
- out[ 23 + outpos] = ( ( in[ 22 + inpos] >>> 9 )
- | ((in[ 23 + inpos] & 255 )<<( 31 - 8 ))
- ) + out[23 + outpos - 1] ;
- out[ 24 + outpos] = ( ( in[ 23 + inpos] >>> 8 )
- | ((in[ 24 + inpos] & 127 )<<( 31 - 7 ))
- ) + out[24 + outpos - 1] ;
- out[ 25 + outpos] = ( ( in[ 24 + inpos] >>> 7 )
- | ((in[ 25 + inpos] & 63 )<<( 31 - 6 ))
- ) + out[25 + outpos - 1] ;
- out[ 26 + outpos] = ( ( in[ 25 + inpos] >>> 6 )
- | ((in[ 26 + inpos] & 31 )<<( 31 - 5 ))
- ) + out[26 + outpos - 1] ;
- out[ 27 + outpos] = ( ( in[ 26 + inpos] >>> 5 )
- | ((in[ 27 + inpos] & 15 )<<( 31 - 4 ))
- ) + out[27 + outpos - 1] ;
- out[ 28 + outpos] = ( ( in[ 27 + inpos] >>> 4 )
- | ((in[ 28 + inpos] & 7 )<<( 31 - 3 ))
- ) + out[28 + outpos - 1] ;
- out[ 29 + outpos] = ( ( in[ 28 + inpos] >>> 3 )
- | ((in[ 29 + inpos] & 3 )<<( 31 - 2 ))
- ) + out[29 + outpos - 1] ;
- out[ 30 + outpos] = ( ( in[ 29 + inpos] >>> 2 )
- | ((in[ 30 + inpos] & 1 )<<( 31 - 1 ))
- ) + out[30 + outpos - 1] ;
- out[ 31 + outpos] = ( ( in[ 30 + inpos] >>> 1 )
- ) + out[31 + outpos - 1] ;
-}
-
-
-
-
-public static void integratedunpack32(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- System.arraycopy(in, inpos, out, outpos, 32); // no sense in doing delta coding
-}
-
-
-public static void integratedpack32(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- System.arraycopy(in, inpos, out, outpos, 32); // no sense in doing delta coding
-}
-
-
-public static void integratedunpack0(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- Arrays.fill(out,outpos,outpos+32,initoffset);
-}
-
-
-public static void integratedpack0(final int initoffset, final int [] in, int inpos, final int [] out, int outpos) {
- // nothing
-}
-
-
-
-public static void integratedunpack(final int initoffset, final int [] in, int inpos, final int [] out, int outpos, final int bit) {
- switch(bit) {
- case 0:
- integratedunpack0(initoffset,in,inpos,out,outpos);
- break;
- case 1:
- integratedunpack1(initoffset,in,inpos,out,outpos);
- break;
- case 2:
- integratedunpack2(initoffset,in,inpos,out,outpos);
- break;
- case 3:
- integratedunpack3(initoffset,in,inpos,out,outpos);
- break;
- case 4:
- integratedunpack4(initoffset,in,inpos,out,outpos);
- break;
- case 5:
- integratedunpack5(initoffset,in,inpos,out,outpos);
- break;
- case 6:
- integratedunpack6(initoffset,in,inpos,out,outpos);
- break;
- case 7:
- integratedunpack7(initoffset,in,inpos,out,outpos);
- break;
- case 8:
- integratedunpack8(initoffset,in,inpos,out,outpos);
- break;
- case 9:
- integratedunpack9(initoffset,in,inpos,out,outpos);
- break;
- case 10:
- integratedunpack10(initoffset,in,inpos,out,outpos);
- break;
- case 11:
- integratedunpack11(initoffset,in,inpos,out,outpos);
- break;
- case 12:
- integratedunpack12(initoffset,in,inpos,out,outpos);
- break;
- case 13:
- integratedunpack13(initoffset,in,inpos,out,outpos);
- break;
- case 14:
- integratedunpack14(initoffset,in,inpos,out,outpos);
- break;
- case 15:
- integratedunpack15(initoffset,in,inpos,out,outpos);
- break;
- case 16:
- integratedunpack16(initoffset,in,inpos,out,outpos);
- break;
- case 17:
- integratedunpack17(initoffset,in,inpos,out,outpos);
- break;
- case 18:
- integratedunpack18(initoffset,in,inpos,out,outpos);
- break;
- case 19:
- integratedunpack19(initoffset,in,inpos,out,outpos);
- break;
- case 20:
- integratedunpack20(initoffset,in,inpos,out,outpos);
- break;
- case 21:
- integratedunpack21(initoffset,in,inpos,out,outpos);
- break;
- case 22:
- integratedunpack22(initoffset,in,inpos,out,outpos);
- break;
- case 23:
- integratedunpack23(initoffset,in,inpos,out,outpos);
- break;
- case 24:
- integratedunpack24(initoffset,in,inpos,out,outpos);
- break;
- case 25:
- integratedunpack25(initoffset,in,inpos,out,outpos);
- break;
- case 26:
- integratedunpack26(initoffset,in,inpos,out,outpos);
- break;
- case 27:
- integratedunpack27(initoffset,in,inpos,out,outpos);
- break;
- case 28:
- integratedunpack28(initoffset,in,inpos,out,outpos);
- break;
- case 29:
- integratedunpack29(initoffset,in,inpos,out,outpos);
- break;
- case 30:
- integratedunpack30(initoffset,in,inpos,out,outpos);
- break;
- case 31:
- integratedunpack31(initoffset,in,inpos,out,outpos);
- break;
- case 32:
- integratedunpack32(initoffset,in,inpos,out,outpos);
- break;
- default:
- throw new IllegalArgumentException("Unsupported bit width.");
- }
-}
-
-
-public static void integratedpack(final int initoffset, final int [] in, int inpos, final int [] out, int outpos, final int bit) {
- switch(bit) {
- case 0:
- integratedpack0(initoffset,in,inpos,out,outpos);
- break;
- case 1:
- integratedpack1(initoffset,in,inpos,out,outpos);
- break;
- case 2:
- integratedpack2(initoffset,in,inpos,out,outpos);
- break;
- case 3:
- integratedpack3(initoffset,in,inpos,out,outpos);
- break;
- case 4:
- integratedpack4(initoffset,in,inpos,out,outpos);
- break;
- case 5:
- integratedpack5(initoffset,in,inpos,out,outpos);
- break;
- case 6:
- integratedpack6(initoffset,in,inpos,out,outpos);
- break;
- case 7:
- integratedpack7(initoffset,in,inpos,out,outpos);
- break;
- case 8:
- integratedpack8(initoffset,in,inpos,out,outpos);
- break;
- case 9:
- integratedpack9(initoffset,in,inpos,out,outpos);
- break;
- case 10:
- integratedpack10(initoffset,in,inpos,out,outpos);
- break;
- case 11:
- integratedpack11(initoffset,in,inpos,out,outpos);
- break;
- case 12:
- integratedpack12(initoffset,in,inpos,out,outpos);
- break;
- case 13:
- integratedpack13(initoffset,in,inpos,out,outpos);
- break;
- case 14:
- integratedpack14(initoffset,in,inpos,out,outpos);
- break;
- case 15:
- integratedpack15(initoffset,in,inpos,out,outpos);
- break;
- case 16:
- integratedpack16(initoffset,in,inpos,out,outpos);
- break;
- case 17:
- integratedpack17(initoffset,in,inpos,out,outpos);
- break;
- case 18:
- integratedpack18(initoffset,in,inpos,out,outpos);
- break;
- case 19:
- integratedpack19(initoffset,in,inpos,out,outpos);
- break;
- case 20:
- integratedpack20(initoffset,in,inpos,out,outpos);
- break;
- case 21:
- integratedpack21(initoffset,in,inpos,out,outpos);
- break;
- case 22:
- integratedpack22(initoffset,in,inpos,out,outpos);
- break;
- case 23:
- integratedpack23(initoffset,in,inpos,out,outpos);
- break;
- case 24:
- integratedpack24(initoffset,in,inpos,out,outpos);
- break;
- case 25:
- integratedpack25(initoffset,in,inpos,out,outpos);
- break;
- case 26:
- integratedpack26(initoffset,in,inpos,out,outpos);
- break;
- case 27:
- integratedpack27(initoffset,in,inpos,out,outpos);
- break;
- case 28:
- integratedpack28(initoffset,in,inpos,out,outpos);
- break;
- case 29:
- integratedpack29(initoffset,in,inpos,out,outpos);
- break;
- case 30:
- integratedpack30(initoffset,in,inpos,out,outpos);
- break;
- case 31:
- integratedpack31(initoffset,in,inpos,out,outpos);
- break;
- case 32:
- integratedpack32(initoffset,in,inpos,out,outpos);
- break;
- default:
- throw new IllegalArgumentException("Unsupported bit width.");
- }
-}
-
-}
diff --git a/src/main/java/me/lemire/integercompression/IntegratedComposition.java b/src/main/java/me/lemire/integercompression/IntegratedComposition.java
deleted file mode 100644
index 72ba2ed..0000000
--- a/src/main/java/me/lemire/integercompression/IntegratedComposition.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * This code is released under the
- * Apache License Version 2.0 http://www.apache.org/licenses/.
- *
- * (c) Daniel Lemire, http://lemire.me/en/
- */
-package me.lemire.integercompression;
-
-/**
- * Helper class to compose schemes.
- *
- * @author Daniel Lemire
- */
-public class IntegratedComposition implements IntegratedIntegerCODEC {
- IntegratedIntegerCODEC F1, F2;
-
- public IntegratedComposition(IntegratedIntegerCODEC f1, IntegratedIntegerCODEC f2) {
- F1 = f1;
- F2 = f2;
- }
-
- @Override
- public void compress(int[] in, IntWrapper inpos, int inlength, int[] out,
- IntWrapper outpos) {
- int init = inpos.get();
- F1.compress(in, inpos, inlength, out, outpos);
- inlength -= inpos.get() - init;
- F2.compress(in, inpos, inlength, out, outpos);
- }
-
- @Override
- public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out,
- IntWrapper outpos) {
- int init = inpos.get();
- F1.uncompress(in, inpos, inlength, out, outpos);
- inlength -= inpos.get() - init;
- F2.uncompress(in, inpos, inlength, out, outpos);
- }
-
- @Override
- public String toString() {
- return F1.getClass().getName() + "+" + F2.getClass().getName();
- }
-
-}
diff --git a/src/main/java/me/lemire/integercompression/IntegratedVariableByte.java b/src/main/java/me/lemire/integercompression/IntegratedVariableByte.java
deleted file mode 100644
index 836e329..0000000
--- a/src/main/java/me/lemire/integercompression/IntegratedVariableByte.java
+++ /dev/null
@@ -1,71 +0,0 @@
-
-/**
- * This code is released under the
- * Apache License Version 2.0 http://www.apache.org/licenses/.
- *
- * (c) Daniel Lemire, http://lemire.me/en/
- */
-package me.lemire.integercompression;
-
-import java.nio.ByteBuffer;
-import java.nio.IntBuffer;
-
-public class IntegratedVariableByte implements IntegratedIntegerCODEC {
- @Override
- public void compress(int[] in, IntWrapper inpos, int inlength, int[] out,
- IntWrapper outpos) {
- int initoffset = 0;
- ByteBuffer buf = ByteBuffer.allocateDirect(inlength * 8);
- for (int k = inpos.get(); k < inpos.get() + inlength; ++k) {
- int val = in[k] - initoffset;
- initoffset=in[k];
- do {
- int b = (val & 127);
- val >>>= 7;
- if (val != 0) {
- b |= 128;
- }
- buf.put((byte) b);
- } while (val != 0);
- }
- while (buf.position() % 4 != 0)
- buf.put((byte) 128);
- final int length = buf.position();
- buf.flip();
- IntBuffer ibuf = buf.asIntBuffer();
- ibuf.get(out, outpos.get(), length / 4);
- outpos.add(length / 4);
- inpos.add(inlength);
- }
-
- @Override
- public void uncompress(int[] in, IntWrapper inpos, int inlength,
- int[] out, IntWrapper outpos) {
- int s = 0;
- int p = inpos.get();
- int finalp = inpos.get() + inlength;
- int tmpoutpos = outpos.get();
- int initoffset = 0;
- for (int v = 0, shift = 0; p>> (24-s));
- s+=8; if(s == 32) {s = 0; p++;}
- v += ((c & 127) << shift);
- if ((c & 128) == 0) {
- out[tmpoutpos] = v + initoffset;
- initoffset = out[tmpoutpos];
- tmpoutpos++;
- v = 0;
- shift = 0;
- } else
- shift += 7;
- }
- outpos.set(tmpoutpos);
- inpos.add(inlength);
- }
-
- @Override
- public String toString() {
- return this.getClass().getName();
- }
-
-}
diff --git a/src/main/java/me/lemire/integercompression/JustCopy.java b/src/main/java/me/lemire/integercompression/JustCopy.java
index 321b93f..f57282c 100644
--- a/src/main/java/me/lemire/integercompression/JustCopy.java
+++ b/src/main/java/me/lemire/integercompression/JustCopy.java
@@ -8,30 +8,50 @@
package me.lemire.integercompression;
-public final class JustCopy implements IntegerCODEC {
-
- @Override
-public void compress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) {
- // Util.assertTrue(inpos.get()+inlength <= in.length);
- System.arraycopy(in, inpos.get(), out, outpos.get(), inlength);
- inpos.add(inlength);
- outpos.add(inlength);
- }
-
- @Override
-public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) {
- // Util.assertTrue(inpos.get()+inlength <= in.length);
- System.arraycopy(in, inpos.get(), out, outpos.get(), inlength);
- inpos.add(inlength);
- outpos.add(inlength);
- }
-
-
-
- @Override
-public String toString() {
- return this.getClass().getName();
- }
+/**
+ * @author Daniel Lemire
+ *
+ */
+public final class JustCopy implements IntegerCODEC, SkippableIntegerCODEC {
+
+ @Override
+ public void headlessCompress(int[] in, IntWrapper inpos, int inlength,
+ int[] out, IntWrapper outpos) {
+ System.arraycopy(in, inpos.get(), out, outpos.get(), inlength);
+ inpos.add(inlength);
+ outpos.add(inlength);
+ }
+
+ @Override
+ public void uncompress(int[] in, IntWrapper inpos, int inlength,
+ int[] out, IntWrapper outpos) {
+ headlessUncompress(in,inpos,inlength,out,outpos,inlength);
+ }
+
+ @Override
+ public String toString() {
+ return this.getClass().getSimpleName();
+ }
+
+ @Override
+ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength,
+ int[] out, IntWrapper outpos, int num) {
+ System.arraycopy(in, inpos.get(), out, outpos.get(), num);
+ inpos.add(num);
+ outpos.add(num);
+
+ }
+
+ @Override
+ public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) {
+ compressedPositions.add(inlength);
+ return inlength;
+ }
+ @Override
+ public void compress(int[] in, IntWrapper inpos, int inlength,
+ int[] out, IntWrapper outpos) {
+ headlessCompress(in,inpos,inlength,out,outpos);
+ }
}
diff --git a/src/main/java/me/lemire/integercompression/Kamikaze.java b/src/main/java/me/lemire/integercompression/Kamikaze.java
new file mode 100644
index 0000000..4cab30b
--- /dev/null
+++ b/src/main/java/me/lemire/integercompression/Kamikaze.java
@@ -0,0 +1,72 @@
+package me.lemire.integercompression;
+
+import com.kamikaze.pfordelta.PForDelta;
+
+/**
+ * IntegerCODEC wrapper for Kamikaze's PForDelta.
+ *
+ * Note: this class is only included for speed benchmarks.
+ * It is not recommended. Use at your own risks.
+ *
+ * @author Matteo Catena
+ *
+ */
+public class Kamikaze implements SkippableIntegerCODEC, IntegerCODEC {
+
+ private int BLOCK_SIZE = 128;
+
+ @Override
+ public void headlessCompress(int[] in, IntWrapper inpos, int inlength, int[] out,
+ IntWrapper outpos) {
+ inlength = Util.greatestMultiple(inlength, BLOCK_SIZE);
+ if (inlength > 0) {
+ int[] out2 = PForDelta.compressOneBlockOpt(in, inlength);
+ inpos.add(inlength);
+ System.arraycopy(out2, 0, out, outpos.get(), out2.length);
+ outpos.add(out2.length);
+ }
+ }
+
+ @Override
+ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] out,
+ IntWrapper outpos, int num) {
+ num = Util.greatestMultiple(num, BLOCK_SIZE);
+ if (num > 0) {
+ int d = PForDelta.decompressOneBlock(out, in, num);
+ inpos.add(d / 32);
+ outpos.add(num);
+ }
+ }
+
+ @Override
+ public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) {
+ throw new UnsupportedOperationException("Calculating the max compressed length is not supported yet.");
+ }
+
+ @Override
+ public String toString() {
+ return "Kamikaze's PForDelta";
+ }
+
+ @Override
+ public void compress(int[] in, IntWrapper inpos, int inlength, int[] out,
+ IntWrapper outpos) {
+ inlength = Util.greatestMultiple(inlength, BLOCK_SIZE);
+ if (inlength == 0)
+ return;
+ out[outpos.get()] = inlength;
+ outpos.increment();
+ headlessCompress(in, inpos, inlength, out, outpos);
+ }
+
+ @Override
+ public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out,
+ IntWrapper outpos) {
+ if (inlength == 0)
+ return;
+ final int outlength = in[inpos.get()];
+ inpos.increment();
+ headlessUncompress(in, inpos, inlength, out, outpos, outlength);
+
+ }
+}
diff --git a/src/main/java/me/lemire/integercompression/NewPFD.java b/src/main/java/me/lemire/integercompression/NewPFD.java
index dd3b732..3da3002 100644
--- a/src/main/java/me/lemire/integercompression/NewPFD.java
+++ b/src/main/java/me/lemire/integercompression/NewPFD.java
@@ -7,156 +7,190 @@
package me.lemire.integercompression;
+
/**
- * NewPFD/NewPFOR implemented by Daniel Lemire
- *
+ * NewPFD/NewPFOR: fast patching scheme by Yan et al.
+ *
* Follows:
- *
+ *
* H. Yan, S. Ding, T. Suel, Inverted index compression and query processing
- * with optimized document ordering, in: WWW �09, 2009, pp. 401�410.
- *
+ * with optimized document ordering, in: WWW 09, 2009, pp. 401-410.
+ *
* using Simple16 as the secondary coder.
*
- * @author Daniel Lemire
+ * It encodes integers in blocks of 128 integers. For arrays containing
+ * an arbitrary number of integers, you should use it in conjunction
+ * with another CODEC:
*
+ * IntegerCODEC ic =
+ * new Composition(new NewPDF(), new VariableByte()).
+ *
+ * Note that this does not use differential coding: if you are working on sorted
+ * lists, you must compute the deltas separately. (Yes, this is true even though
+ * the "D" at the end of the name probably stands for delta.)
+ *
+ * For multi-threaded applications, each thread should use its own NewPFD
+ * object.
+ *
+ * @author Daniel Lemire
*/
-public final class NewPFD implements IntegerCODEC {
- final int PageSize;
- final static int BlockSize = 128;
-
- int[] exceptbuffer = new int[2 * BlockSize];
+public final class NewPFD implements IntegerCODEC,SkippableIntegerCODEC {
+ final static int BLOCK_SIZE = 128;
- public NewPFD() {
- PageSize = 65536;
- }
+ int[] exceptbuffer = new int[2 * BLOCK_SIZE];
- @Override
- public void compress(int[] in, IntWrapper inpos, int inlength, int[] out,
- IntWrapper outpos) {
- // Util.assertTrue(inpos.get()+inlength <= in.length);
- inlength = inlength / BlockSize * BlockSize;
+ /**
+ * Constructor for the NewPFD CODEC.
+ */
+ public NewPFD() {
+ }
- final int finalinpos = inpos.get() + inlength;
- out[outpos.get()] = inlength;
- outpos.increment();
- while (inpos.get() != finalinpos) {
- int thissize = finalinpos > PageSize + inpos.get() ? PageSize
- : (finalinpos - inpos.get());
- encodePage(in, inpos, thissize, out, outpos);
- }
+ @Override
+ public void headlessCompress(int[] in, IntWrapper inpos, int inlength,
+ int[] out, IntWrapper outpos) {
+ inlength = Util.greatestMultiple(inlength, BLOCK_SIZE);
+ if (inlength == 0)
+ return;
+ encodePage(in, inpos, inlength, out, outpos);
+ }
- }
+ protected static final int[] bits = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ 11, 12, 13, 16, 20, 32 };
+ protected static final int[] invbits = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16 };
- public static final int[] bits = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
- 12, 13, 16, 20, 32 };
- public static final int[] invbits = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
- 12, 13, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16 };
+ protected static void getBestBFromData(int[] in, int pos,
+ IntWrapper bestb, IntWrapper bestexcept) {
+ final int mb = Util.maxbits(in, pos, BLOCK_SIZE);
+ int mini = 0;
+ if (mini + 28 < bits[invbits[mb]])
+ mini = bits[invbits[mb]] - 28; // 28 is the max for
+ // exceptions
+ int besti = bits.length - 1;
+ int exceptcounter = 0;
+ for (int i = mini; i < bits.length - 1; ++i) {
+ int tmpcounter = 0;
+ for (int k = pos; k < BLOCK_SIZE + pos; ++k)
+ if ((in[k] >>> bits[i]) != 0)
+ ++tmpcounter;
+ if (tmpcounter * 10 <= BLOCK_SIZE) {
+ besti = i;
+ exceptcounter = tmpcounter;
+ break;
+ }
+ }
+ bestb.set(besti);
+ bestexcept.set(exceptcounter);
+ }
- public static void getBestBFromData(int[] in, int pos, IntWrapper bestb,
- IntWrapper bestexcept) {
- final int mb = Util.maxbits(in, pos, BlockSize);
- int mini = 0;
- if (mini + 28 < bits[invbits[mb]])
- mini = bits[invbits[mb]] - 28; // 28 is the max for exceptions
- int besti = bits.length - 1;
- int exceptcounter = 0;
- for (int i = mini; i < bits.length - 1; ++i) {
- int tmpcounter = 0;
- final int maxv = 1 << bits[i];
- for (int k = pos; k < BlockSize + pos; ++k)
- if (in[k] >= maxv)
- ++tmpcounter;
- if (tmpcounter * 10 <= BlockSize) {
- besti = i;
- exceptcounter = tmpcounter;
- break;
- }
- }
- bestb.set(besti);
- bestexcept.set(exceptcounter);
- }
+ private void encodePage(int[] in, IntWrapper inpos, int thissize,
+ int[] out, IntWrapper outpos) {
+ int tmpoutpos = outpos.get();
+ int tmpinpos = inpos.get();
+ IntWrapper bestb = new IntWrapper();
+ IntWrapper bestexcept = new IntWrapper();
+ for (final int finalinpos = tmpinpos + thissize; tmpinpos
+ + BLOCK_SIZE <= finalinpos; tmpinpos += BLOCK_SIZE) {
+ getBestBFromData(in, tmpinpos, bestb, bestexcept);
+ final int tmpbestb = bestb.get();
+ final int nbrexcept = bestexcept.get();
+ int exceptsize = 0;
+ final int remember = tmpoutpos;
+ tmpoutpos++;
+ if (nbrexcept > 0) {
+ for (int i = 0, c = 0; i < BLOCK_SIZE; ++i) {
+ if ((in[tmpinpos + i] >>> bits[tmpbestb]) != 0) {
+ exceptbuffer[c + nbrexcept] = i;
+ exceptbuffer[c] = in[tmpinpos
+ + i] >>> bits[tmpbestb];
+ ++c;
+ }
+ }
+ exceptsize = S16.compress(exceptbuffer, 0,
+ 2 * nbrexcept, out, tmpoutpos);
+ tmpoutpos += exceptsize;
+ }
+ out[remember] = tmpbestb | (nbrexcept << 8)
+ | (exceptsize << 16);
+ for (int k = 0; k < BLOCK_SIZE; k += 32) {
+ BitPacking.fastpack(in, tmpinpos + k, out,
+ tmpoutpos, bits[tmpbestb]);
+ tmpoutpos += bits[tmpbestb];
+ }
+ }
+ inpos.set(tmpinpos);
+ outpos.set(tmpoutpos);
+ }
- private void encodePage(int[] in, IntWrapper inpos, int thissize,
- int[] out, IntWrapper outpos) {
- int tmpoutpos = outpos.get();
- int tmpinpos = inpos.get();
- IntWrapper bestb = new IntWrapper();
- IntWrapper bestexcept = new IntWrapper();
- for (final int finalinpos = tmpinpos + thissize; tmpinpos + BlockSize <= finalinpos; tmpinpos += BlockSize) {
- getBestBFromData(in, tmpinpos, bestb, bestexcept);
- int tmpbestb = bestb.get();
- int nbrexcept = bestexcept.get();
- int exceptsize = 0;
- int remember = tmpoutpos;
- tmpoutpos++;
- if (nbrexcept > 0) {
- final int maxv = 1 << bits[tmpbestb];
- for (int i = 0, c = 0; i < BlockSize; ++i) {
- if (in[tmpinpos + i] >= maxv) {
- exceptbuffer[c + nbrexcept] = i;
- exceptbuffer[c] = in[tmpinpos + i] >>> bits[tmpbestb];
- ++c;
- }
- }
- exceptsize = S16.compress(exceptbuffer, 0, 2 * nbrexcept, out,
- tmpoutpos);
- tmpoutpos += exceptsize;
- }
- out[remember] = tmpbestb | (nbrexcept << 8) | (exceptsize << 16);
- for (int k = 0; k < BlockSize; k += 32) {
- BitPacking.fastpack(in, tmpinpos + k, out, tmpoutpos,
- bits[tmpbestb]);
- tmpoutpos += bits[tmpbestb];
- }
- }
- inpos.set(tmpinpos);
- outpos.set(tmpoutpos);
- }
+ @Override
+ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength,
+ int[] out, IntWrapper outpos, int mynvalue) {
+ if (inlength == 0)
+ return;
+ mynvalue = Util.greatestMultiple(mynvalue, BLOCK_SIZE);
+ decodePage(in, inpos, out, outpos, mynvalue);
+ }
- @Override
- public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out,
- IntWrapper outpos) {
- // Util.assertTrue(inpos.get()+inlength <= in.length);
- int mynvalue = in[inpos.get()];
- inpos.increment();
- int finalout = outpos.get() + mynvalue;
- while (outpos.get() != finalout) {
- int thissize = finalout > PageSize + outpos.get() ? PageSize
- : (finalout - outpos.get());
- decodePage(in, inpos, out, outpos, thissize);
- }
- }
+ @Override
+ public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) {
+ inlength = Util.greatestMultiple(inlength, BLOCK_SIZE);
+ int blockCount = inlength / BLOCK_SIZE;
+ // +1 for the header
+ // getBestBFromData limits the memory used for exceptions so that the total size of the block does not exceed BLOCK_SIZE integers.
+ int maxBlockSizeInInts = 1 + BLOCK_SIZE;
+ compressedPositions.add(inlength);
+ return maxBlockSizeInInts * blockCount;
+ }
- private void decodePage(int[] in, IntWrapper inpos, int[] out,
- IntWrapper outpos, int thissize) {
- int tmpoutpos = outpos.get();
- int tmpinpos = inpos.get();
+ private void decodePage(int[] in, IntWrapper inpos, int[] out,
+ IntWrapper outpos, int thissize) {
+ int tmpoutpos = outpos.get();
+ int tmpinpos = inpos.get();
- for (int run = 0; run < thissize / BlockSize; ++run, tmpoutpos += BlockSize) {
- final int b = in[tmpinpos] & 0xFF;
- final int cexcept = (in[tmpinpos] >>> 8) & 0xFF;
- final int exceptsize = (in[tmpinpos] >>> 16);
- ++tmpinpos;
- S16.uncompress(in, tmpinpos, exceptsize, exceptbuffer, 0,
- 2 * cexcept);
- tmpinpos += exceptsize;
- for (int k = 0; k < BlockSize; k += 32) {
- BitPacking
- .fastunpack(in, tmpinpos, out, tmpoutpos + k, bits[b]);
- tmpinpos += bits[b];
- }
- for (int k = 0; k < cexcept; ++k) {
- out[tmpoutpos + exceptbuffer[k + cexcept]] |= (exceptbuffer[k] << bits[b]);
- }
- }
- outpos.set(tmpoutpos);
- inpos.set(tmpinpos);
- }
+ for (int run = 0; run < thissize / BLOCK_SIZE; ++run, tmpoutpos += BLOCK_SIZE) {
+ final int b = in[tmpinpos] & 0xFF;
+ final int cexcept = (in[tmpinpos] >>> 8) & 0xFF;
+ final int exceptsize = (in[tmpinpos] >>> 16);
+ ++tmpinpos;
+ S16.uncompress(in, tmpinpos, exceptsize, exceptbuffer,
+ 0, 2 * cexcept);
+ tmpinpos += exceptsize;
+ for (int k = 0; k < BLOCK_SIZE; k += 32) {
+ BitPacking.fastunpack(in, tmpinpos, out,
+ tmpoutpos + k, bits[b]);
+ tmpinpos += bits[b];
+ }
+ for (int k = 0; k < cexcept; ++k) {
+ out[tmpoutpos + exceptbuffer[k + cexcept]] |= (exceptbuffer[k] << bits[b]);
+ }
+ }
+ outpos.set(tmpoutpos);
+ inpos.set(tmpinpos);
+ }
+ @Override
+ public void compress(int[] in, IntWrapper inpos, int inlength, int[] out,
+ IntWrapper outpos) {
+ inlength = Util.greatestMultiple(inlength, BLOCK_SIZE);
+ if (inlength == 0)
+ return;
+ out[outpos.get()] = inlength;
+ outpos.increment();
+ headlessCompress(in, inpos, inlength, out, outpos);
+ }
- @Override
- public String toString() {
- return this.getClass().getName();
- }
+ @Override
+ public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out,
+ IntWrapper outpos) {
+ if (inlength == 0)
+ return;
+ final int outlength = in[inpos.get()];
+ inpos.increment();
+ headlessUncompress(in, inpos, inlength, out, outpos, outlength);
+ }
+ @Override
+ public String toString() {
+ return this.getClass().getSimpleName();
+ }
}
diff --git a/src/main/java/me/lemire/integercompression/NewPFDS16.java b/src/main/java/me/lemire/integercompression/NewPFDS16.java
new file mode 100644
index 0000000..526b8fb
--- /dev/null
+++ b/src/main/java/me/lemire/integercompression/NewPFDS16.java
@@ -0,0 +1,195 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+
+package me.lemire.integercompression;
+
+
+/**
+ * NewPFD/NewPFOR based on Simple16 by Yan et al.
+ *
+ * Follows:
+ *
+ * H. Yan, S. Ding, T. Suel, Inverted index compression and query processing
+ * with optimized document ordering, in: WWW 09, 2009, pp. 401-410.
+ *
+ * using Simple16 as the secondary coder.
+ *
+ * It encodes integers in blocks of 128 integers. For arrays containing
+ * an arbitrary number of integers, you should use it in conjunction
+ * with another CODEC:
+ *
+ *
IntegerCODEC ic =
+ * new Composition(new PDFS16(), new VariableByte()).
+ *
+ * Note that this does not use differential coding: if you are working on sorted
+ * lists, you must compute the deltas separately.
+ *
+ * For multi-threaded applications, each thread should use its own NewPFDS16
+ * object.
+ *
+ * @author Daniel Lemire
+ */
+public final class NewPFDS16 implements IntegerCODEC,SkippableIntegerCODEC {
+ final static int BLOCK_SIZE= 128;
+
+ int[] exceptbuffer = new int[2 * BLOCK_SIZE];
+
+ /**
+ * Constructor for the NewPFDS16 CODEC.
+ */
+ public NewPFDS16() {
+ }
+
+ @Override
+ public void headlessCompress(int[] in, IntWrapper inpos, int inlength,
+ int[] out, IntWrapper outpos) {
+ inlength = Util.greatestMultiple(inlength, BLOCK_SIZE);
+ if (inlength == 0)
+ return;
+ encodePage(in, inpos, inlength, out, outpos);
+ }
+
+ private static final int[] bits = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ 11, 12, 13, 16, 20, 32 };
+ private static final int[] invbits = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16 };
+
+ private static void getBestBFromData(int[] in, int pos,
+ IntWrapper bestb, IntWrapper bestexcept) {
+ final int mb = Util.maxbits(in, pos, BLOCK_SIZE);
+ int mini = 0;
+ if (mini + 28 < bits[invbits[mb]])
+ mini = bits[invbits[mb]] - 28; // 28 is the max for
+ // exceptions
+ int besti = bits.length - 1;
+ int exceptcounter = 0;
+ for (int i = mini; i < bits.length - 1; ++i) {
+ int tmpcounter = 0;
+ for (int k = pos; k < BLOCK_SIZE + pos; ++k)
+ if ((in[k] >>> bits[i]) != 0)
+ ++tmpcounter;
+ if (tmpcounter * 10 <= BLOCK_SIZE) {
+ besti = i;
+ exceptcounter = tmpcounter;
+ break;
+ }
+ }
+ bestb.set(besti);
+ bestexcept.set(exceptcounter);
+ }
+
+ private void encodePage(int[] in, IntWrapper inpos, int thissize,
+ int[] out, IntWrapper outpos) {
+ int tmpoutpos = outpos.get();
+ int tmpinpos = inpos.get();
+ IntWrapper bestb = new IntWrapper();
+ IntWrapper bestexcept = new IntWrapper();
+ for (final int finalinpos = tmpinpos + thissize; tmpinpos
+ + BLOCK_SIZE <= finalinpos; tmpinpos += BLOCK_SIZE) {
+ getBestBFromData(in, tmpinpos, bestb, bestexcept);
+ final int tmpbestb = bestb.get();
+ final int nbrexcept = bestexcept.get();
+ int exceptsize = 0;
+ final int remember = tmpoutpos;
+ tmpoutpos++;
+ if (nbrexcept > 0) {
+ for (int i = 0, c = 0; i < BLOCK_SIZE; ++i) {
+ if ((in[tmpinpos + i] >>> bits[tmpbestb]) != 0) {
+ exceptbuffer[c + nbrexcept] = i;
+ exceptbuffer[c] = in[tmpinpos
+ + i] >>> bits[tmpbestb];
+ ++c;
+ }
+ }
+ exceptsize = S16.compress(exceptbuffer, 0,
+ 2 * nbrexcept, out, tmpoutpos);
+ tmpoutpos += exceptsize;
+ }
+ out[remember] = tmpbestb | (nbrexcept << 8)
+ | (exceptsize << 16);
+ for (int k = 0; k < BLOCK_SIZE; k += 32) {
+ BitPacking.fastpack(in, tmpinpos + k, out,
+ tmpoutpos, bits[tmpbestb]);
+ tmpoutpos += bits[tmpbestb];
+ }
+ }
+ inpos.set(tmpinpos);
+ outpos.set(tmpoutpos);
+ }
+
+ @Override
+ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength,
+ int[] out, IntWrapper outpos, int mynvalue) {
+ if (inlength == 0)
+ return;
+ mynvalue = Util.greatestMultiple(mynvalue, BLOCK_SIZE);
+ decodePage(in, inpos, out, outpos, mynvalue);
+ }
+
+ @Override
+ public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) {
+ inlength = Util.greatestMultiple(inlength, BLOCK_SIZE);
+ int blockCount = inlength / BLOCK_SIZE;
+ // +1 for the header
+ // getBestBFromData limits the memory used for exceptions so that the total size of the block does not exceed BLOCK_SIZE integers.
+ int maxBlockSizeInInts = 1 + BLOCK_SIZE;
+ compressedPositions.add(inlength);
+ return maxBlockSizeInInts * blockCount;
+ }
+
+ private void decodePage(int[] in, IntWrapper inpos, int[] out,
+ IntWrapper outpos, int thissize) {
+ int tmpoutpos = outpos.get();
+ int tmpinpos = inpos.get();
+
+ for (int run = 0; run < thissize / BLOCK_SIZE; ++run, tmpoutpos += BLOCK_SIZE) {
+ final int b = in[tmpinpos] & 0xFF;
+ final int cexcept = (in[tmpinpos] >>> 8) & 0xFF;
+ final int exceptsize = (in[tmpinpos] >>> 16);
+ ++tmpinpos;
+ S16.uncompress(in, tmpinpos, exceptsize, exceptbuffer,
+ 0, 2 * cexcept);
+ tmpinpos += exceptsize;
+ for (int k = 0; k < BLOCK_SIZE; k += 32) {
+ BitPacking.fastunpack(in, tmpinpos, out,
+ tmpoutpos + k, bits[b]);
+ tmpinpos += bits[b];
+ }
+ for (int k = 0; k < cexcept; ++k) {
+ out[tmpoutpos + exceptbuffer[k + cexcept]] |= (exceptbuffer[k] << bits[b]);
+ }
+ }
+ outpos.set(tmpoutpos);
+ inpos.set(tmpinpos);
+ }
+ @Override
+ public void compress(int[] in, IntWrapper inpos, int inlength, int[] out,
+ IntWrapper outpos) {
+ inlength = Util.greatestMultiple(inlength, BLOCK_SIZE);
+ if (inlength == 0)
+ return;
+ out[outpos.get()] = inlength;
+ outpos.increment();
+ headlessCompress(in, inpos, inlength, out, outpos);
+ }
+
+ @Override
+ public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out,
+ IntWrapper outpos) {
+ if (inlength == 0)
+ return;
+ final int outlength = in[inpos.get()];
+ inpos.increment();
+ headlessUncompress(in, inpos, inlength, out, outpos, outlength);
+ }
+ @Override
+ public String toString() {
+ return this.getClass().getSimpleName();
+ }
+
+}
diff --git a/src/main/java/me/lemire/integercompression/NewPFDS9.java b/src/main/java/me/lemire/integercompression/NewPFDS9.java
index dd32ca5..bd802b6 100644
--- a/src/main/java/me/lemire/integercompression/NewPFDS9.java
+++ b/src/main/java/me/lemire/integercompression/NewPFDS9.java
@@ -7,156 +7,188 @@
package me.lemire.integercompression;
+
/**
- * NewPFD/NewPFOR implemented by Daniel Lemire
- *
+ * NewPFD/NewPFOR based on Simple9 by Yan et al.
+ *
* Follows:
- *
+ *
* H. Yan, S. Ding, T. Suel, Inverted index compression and query processing
* with optimized document ordering, in: WWW 09, 2009, pp. 401-410.
- *
+ *
* using Simple9 as the secondary coder.
*
- * @author Daniel Lemire
+ * It encodes integers in blocks of 128 integers. For arrays containing
+ * an arbitrary number of integers, you should use it in conjunction
+ * with another CODEC:
*
+ * IntegerCODEC ic = new Composition(new PDFS9(), new VariableByte()).
+ *
+ * Note that this does not use differential coding: if you are working on sorted
+ * lists, you must compute the deltas separately.
+ *
+ * For multi-threaded applications, each thread should use its own NewPFDS9
+ * object.
+ *
+ * @author Daniel Lemire
*/
-public final class NewPFDS9 implements IntegerCODEC {
- final int PageSize;
- final static int BlockSize = 128;
-
- int[] exceptbuffer = new int[2 * BlockSize];
+public final class NewPFDS9 implements IntegerCODEC,SkippableIntegerCODEC {
+ final static int BLOCK_SIZE = 128;
- public NewPFDS9() {
- PageSize = 65536;
- }
+ int[] exceptbuffer = new int[2 * BLOCK_SIZE];
- @Override
- public void compress(int[] in, IntWrapper inpos, int inlength, int[] out,
- IntWrapper outpos) {
- // Util.assertTrue(inpos.get()+inlength <= in.length);
- inlength = inlength / BlockSize * BlockSize;
+ /**
+ * Constructor for the NewPFDS9 CODEC.
+ */
+ public NewPFDS9() {
+ }
- final int finalinpos = inpos.get() + inlength;
- out[outpos.get()] = inlength;
- outpos.increment();
- while (inpos.get() != finalinpos) {
- int thissize = finalinpos > PageSize + inpos.get() ? PageSize
- : (finalinpos - inpos.get());
- encodePage(in, inpos, thissize, out, outpos);
- }
+ @Override
+ public void headlessCompress(int[] in, IntWrapper inpos, int inlength,
+ int[] out, IntWrapper outpos) {
+ inlength = Util.greatestMultiple(inlength, BLOCK_SIZE);
+ if (inlength == 0)
+ return;
+ encodePage(in, inpos, inlength, out, outpos);
+ }
- }
+ private static final int[] bits = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ 11, 12, 13, 16, 20, 32 };
+ private static final int[] invbits = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16 };
- public static final int[] bits = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
- 12, 13, 16, 20, 32 };
- public static final int[] invbits = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
- 12, 13, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16 };
+ private static void getBestBFromData(int[] in, int pos,
+ IntWrapper bestb, IntWrapper bestexcept) {
+ final int mb = Util.maxbits(in, pos, BLOCK_SIZE);
+ int mini = 0;
+ if (mini + 28 < bits[invbits[mb]])
+ mini = bits[invbits[mb]] - 28; // 28 is the max for
+ // exceptions
+ int besti = bits.length - 1;
+ int exceptcounter = 0;
+ for (int i = mini; i < bits.length - 1; ++i) {
+ int tmpcounter = 0;
+ for (int k = pos; k < BLOCK_SIZE + pos; ++k)
+ if ((in[k] >>> bits[i]) != 0)
+ ++tmpcounter;
+ if (tmpcounter * 10 <= BLOCK_SIZE) {
+ besti = i;
+ exceptcounter = tmpcounter;
+ break;
+ }
+ }
+ bestb.set(besti);
+ bestexcept.set(exceptcounter);
+ }
- public static void getBestBFromData(int[] in, int pos, IntWrapper bestb,
- IntWrapper bestexcept) {
- final int mb = Util.maxbits(in, pos, BlockSize);
- int mini = 0;
- if (mini + 28 < bits[invbits[mb]])
- mini = bits[invbits[mb]] - 28; // 28 is the max for exceptions
- int besti = bits.length - 1;
- int exceptcounter = 0;
- for (int i = mini; i < bits.length - 1; ++i) {
- int tmpcounter = 0;
- final int maxv = 1 << bits[i];
- for (int k = pos; k < BlockSize + pos; ++k)
- if (in[k] >= maxv)
- ++tmpcounter;
- if (tmpcounter * 10 <= BlockSize) {
- besti = i;
- exceptcounter = tmpcounter;
- break;
- }
- }
- bestb.set(besti);
- bestexcept.set(exceptcounter);
- }
+ private void encodePage(int[] in, IntWrapper inpos, int thissize,
+ int[] out, IntWrapper outpos) {
+ int tmpoutpos = outpos.get();
+ int tmpinpos = inpos.get();
+ IntWrapper bestb = new IntWrapper();
+ IntWrapper bestexcept = new IntWrapper();
+ for (final int finalinpos = tmpinpos + thissize; tmpinpos
+ + BLOCK_SIZE <= finalinpos; tmpinpos += BLOCK_SIZE) {
+ getBestBFromData(in, tmpinpos, bestb, bestexcept);
+ final int tmpbestb = bestb.get();
+ final int nbrexcept = bestexcept.get();
+ int exceptsize = 0;
+ final int remember = tmpoutpos;
+ tmpoutpos++;
+ if (nbrexcept > 0) {
+ for (int i = 0, c = 0; i < BLOCK_SIZE; ++i) {
+ if ((in[tmpinpos + i] >>> bits[tmpbestb]) != 0) {
+ exceptbuffer[c + nbrexcept] = i;
+ exceptbuffer[c] = in[tmpinpos
+ + i] >>> bits[tmpbestb];
+ ++c;
+ }
+ }
+ exceptsize = S9.compress(exceptbuffer, 0,
+ 2 * nbrexcept, out, tmpoutpos);
+ tmpoutpos += exceptsize;
+ }
+ out[remember] = tmpbestb | (nbrexcept << 8)
+ | (exceptsize << 16);
+ for (int k = 0; k < BLOCK_SIZE; k += 32) {
+ BitPacking.fastpack(in, tmpinpos + k, out,
+ tmpoutpos, bits[tmpbestb]);
+ tmpoutpos += bits[tmpbestb];
+ }
+ }
+ inpos.set(tmpinpos);
+ outpos.set(tmpoutpos);
+ }
- private void encodePage(int[] in, IntWrapper inpos, int thissize,
- int[] out, IntWrapper outpos) {
- int tmpoutpos = outpos.get();
- int tmpinpos = inpos.get();
- IntWrapper bestb = new IntWrapper();
- IntWrapper bestexcept = new IntWrapper();
- for (final int finalinpos = tmpinpos + thissize; tmpinpos + BlockSize <= finalinpos; tmpinpos += BlockSize) {
- getBestBFromData(in, tmpinpos, bestb, bestexcept);
- int tmpbestb = bestb.get();
- int nbrexcept = bestexcept.get();
- int exceptsize = 0;
- int remember = tmpoutpos;
- tmpoutpos++;
- if (nbrexcept > 0) {
- final int maxv = 1 << bits[tmpbestb];
- for (int i = 0, c = 0; i < BlockSize; ++i) {
- if (in[tmpinpos + i] >= maxv) {
- exceptbuffer[c + nbrexcept] = i;
- exceptbuffer[c] = in[tmpinpos + i] >>> bits[tmpbestb];
- ++c;
- }
- }
- exceptsize = S9.compress(exceptbuffer, 0, 2 * nbrexcept, out,
- tmpoutpos);
- tmpoutpos += exceptsize;
- }
- out[remember] = tmpbestb | (nbrexcept << 8) | (exceptsize << 16);
- for (int k = 0; k < BlockSize; k += 32) {
- BitPacking.fastpack(in, tmpinpos + k, out, tmpoutpos,
- bits[tmpbestb]);
- tmpoutpos += bits[tmpbestb];
- }
- }
- inpos.set(tmpinpos);
- outpos.set(tmpoutpos);
- }
+ @Override
+ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength,
+ int[] out, IntWrapper outpos, int mynvalue) {
+ if (inlength == 0)
+ return;
+ mynvalue = Util.greatestMultiple(mynvalue, BLOCK_SIZE);
+ decodePage(in, inpos, out, outpos, mynvalue);
+ }
- @Override
- public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out,
- IntWrapper outpos) {
- // Util.assertTrue(inpos.get()+inlength <= in.length);
- int mynvalue = in[inpos.get()];
- inpos.increment();
- int finalout = outpos.get() + mynvalue;
- while (outpos.get() != finalout) {
- int thissize = finalout > PageSize + outpos.get() ? PageSize
- : (finalout - outpos.get());
- decodePage(in, inpos, out, outpos, thissize);
- }
- }
+ @Override
+ public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) {
+ inlength = Util.greatestMultiple(inlength, BLOCK_SIZE);
+ int blockCount = inlength / BLOCK_SIZE;
+ // +1 for the header
+ // getBestBFromData limits the memory used for exceptions so that the total size of the block does not exceed BLOCK_SIZE integers.
+ int maxBlockSizeInInts = 1 + BLOCK_SIZE;
+ compressedPositions.add(inlength);
+ return maxBlockSizeInInts * blockCount;
+ }
- private void decodePage(int[] in, IntWrapper inpos, int[] out,
- IntWrapper outpos, int thissize) {
- int tmpoutpos = outpos.get();
- int tmpinpos = inpos.get();
+ private void decodePage(int[] in, IntWrapper inpos, int[] out,
+ IntWrapper outpos, int thissize) {
+ int tmpoutpos = outpos.get();
+ int tmpinpos = inpos.get();
- for (int run = 0; run < thissize / BlockSize; ++run, tmpoutpos += BlockSize) {
- final int b = in[tmpinpos] & 0xFF;
- final int cexcept = (in[tmpinpos] >>> 8) & 0xFF;
- final int exceptsize = (in[tmpinpos] >>> 16);
- ++tmpinpos;
- S9.uncompress(in, tmpinpos, exceptsize, exceptbuffer, 0,
- 2 * cexcept);
- tmpinpos += exceptsize;
- for (int k = 0; k < BlockSize; k += 32) {
- BitPacking
- .fastunpack(in, tmpinpos, out, tmpoutpos + k, bits[b]);
- tmpinpos += bits[b];
- }
- for (int k = 0; k < cexcept; ++k) {
- out[tmpoutpos + exceptbuffer[k + cexcept]] |= (exceptbuffer[k] << bits[b]);
- }
- }
- outpos.set(tmpoutpos);
- inpos.set(tmpinpos);
- }
+ for (int run = 0; run < thissize / BLOCK_SIZE; ++run, tmpoutpos += BLOCK_SIZE) {
+ final int b = in[tmpinpos] & 0xFF;
+ final int cexcept = (in[tmpinpos] >>> 8) & 0xFF;
+ final int exceptsize = (in[tmpinpos] >>> 16);
+ ++tmpinpos;
+ S9.uncompress(in, tmpinpos, exceptsize, exceptbuffer,
+ 0, 2 * cexcept);
+ tmpinpos += exceptsize;
+ for (int k = 0; k < BLOCK_SIZE; k += 32) {
+ BitPacking.fastunpack(in, tmpinpos, out,
+ tmpoutpos + k, bits[b]);
+ tmpinpos += bits[b];
+ }
+ for (int k = 0; k < cexcept; ++k) {
+ out[tmpoutpos + exceptbuffer[k + cexcept]] |= (exceptbuffer[k] << bits[b]);
+ }
+ }
+ outpos.set(tmpoutpos);
+ inpos.set(tmpinpos);
+ }
+ @Override
+ public void compress(int[] in, IntWrapper inpos, int inlength, int[] out,
+ IntWrapper outpos) {
+ inlength = Util.greatestMultiple(inlength, BLOCK_SIZE);
+ if (inlength == 0)
+ return;
+ out[outpos.get()] = inlength;
+ outpos.increment();
+ headlessCompress(in, inpos, inlength, out, outpos);
+ }
- @Override
- public String toString() {
- return this.getClass().getName();
- }
+ @Override
+ public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out,
+ IntWrapper outpos) {
+ if (inlength == 0)
+ return;
+ final int outlength = in[inpos.get()];
+ inpos.increment();
+ headlessUncompress(in, inpos, inlength, out, outpos, outlength);
+ }
+ @Override
+ public String toString() {
+ return this.getClass().getSimpleName();
+ }
}
diff --git a/src/main/java/me/lemire/integercompression/OptPFD.java b/src/main/java/me/lemire/integercompression/OptPFD.java
index e4d0a0e..cfda92e 100644
--- a/src/main/java/me/lemire/integercompression/OptPFD.java
+++ b/src/main/java/me/lemire/integercompression/OptPFD.java
@@ -6,172 +6,206 @@
*/
package me.lemire.integercompression;
+
/**
- * OptPFD implemented by Daniel Lemire
- *
+ * OptPFD: fast patching scheme by Yan et al.
+ *
* Follows:
- *
+ *
* H. Yan, S. Ding, T. Suel, Inverted index compression and query processing
- * with optimized document ordering, in: WWW �09, 2009, pp. 401�410.
- *
+ * with optimized document ordering, in: WWW 09, 2009, pp. 401-410.
+ *
* using Simple16 as the secondary coder.
*
- * @author Daniel Lemire
+ * It encodes integers in blocks of 128 integers. For arrays containing
+ * an arbitrary number of integers, you should use it in conjunction
+ * with another CODEC:
+ *
+ * IntegerCODEC ic = new Composition(new OptPFD(), new VariableByte()).
*
+ * Note that this does not use differential coding: if you are working on sorted
+ * lists, you must compute the deltas separately. (Yes, this is true even though
+ * the "D" at the end of the name probably stands for delta.)
+ *
+ * For multi-threaded applications, each thread should use its own OptPFD
+ * object.
+ *
+ * @author Daniel Lemire
*/
-public final class OptPFD implements IntegerCODEC {
- final int PageSize;
- final static int BlockSize = 128;
-
- int[] exceptbuffer = new int[2 * BlockSize];
- int[] sillybuffer = new int[2 * BlockSize];
-
- public OptPFD() {
- PageSize = 65536;
- }
-
- @Override
- public void compress(int[] in, IntWrapper inpos, int inlength, int[] out,
- IntWrapper outpos) {
- // Util.assertTrue(inpos.get()+inlength <= in.length);
- inlength = inlength / BlockSize * BlockSize;
-
- final int finalinpos = inpos.get() + inlength;
- out[outpos.get()] = inlength;
- outpos.increment();
- while (inpos.get() != finalinpos) {
- int thissize = finalinpos > PageSize + inpos.get() ? PageSize
- : (finalinpos - inpos.get());
- encodePage(in, inpos, thissize, out, outpos);
- }
-
- }
-
- public static final int[] bits = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
- 12, 13, 16, 20, 32 };
- public static final int[] invbits = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
- 12, 13, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16 };
-
- void getBestBFromData(int[] in, int pos, IntWrapper bestb,
- IntWrapper bestexcept) {
- final int mb = Util.maxbits(in, pos, BlockSize);
- int mini = 0;
- if (mini + 28 < bits[invbits[mb]])
- mini = bits[invbits[mb]] - 28; // 28 is the max for exceptions
- int besti = bits.length - 1;
- int bestcost = bits[besti] * 4;
- int exceptcounter = 0;
- for (int i = mini; i < bits.length - 1; ++i) {
- int tmpcounter = 0;
- final int maxv = 1 << bits[i];
- for (int k = pos; k < BlockSize + pos; ++k)
- if (in[k] >= maxv) {
- ++tmpcounter;
- }
- if (tmpcounter == BlockSize)
- continue; // no need
- for (int k = pos, c = 0; k < pos + BlockSize; ++k)
- if (in[k] >= maxv) {
- exceptbuffer[tmpcounter + c] = k - pos;
- exceptbuffer[c] = in[k] >>> bits[i];
- ++c;
- }
-
- final int thiscost = bits[i] * 4
- + S16.estimatecompress(exceptbuffer, 0, 2 * tmpcounter);
- if (thiscost <= bestcost) {
- bestcost = thiscost;
- besti = i;
- exceptcounter = tmpcounter;
- }
- }
-
- bestb.set(besti);
- bestexcept.set(exceptcounter);
- }
-
- private void encodePage(int[] in, IntWrapper inpos, int thissize,
- int[] out, IntWrapper outpos) {
- int tmpoutpos = outpos.get();
- int tmpinpos = inpos.get();
- IntWrapper bestb = new IntWrapper();
- IntWrapper bestexcept = new IntWrapper();
- for (final int finalinpos = tmpinpos + thissize; tmpinpos + BlockSize <= finalinpos; tmpinpos += BlockSize) {
- getBestBFromData(in, tmpinpos, bestb, bestexcept);
- int tmpbestb = bestb.get();
- int nbrexcept = bestexcept.get();
- int exceptsize = 0;
- int remember = tmpoutpos;
- tmpoutpos++;
- if (nbrexcept > 0) {
- final int maxv = 1 << bits[tmpbestb];
- int c = 0;
- for (int i = 0; i < BlockSize; ++i) {
- if (in[tmpinpos + i] >= maxv) {
- exceptbuffer[c + nbrexcept] = i;
- exceptbuffer[c] = in[tmpinpos + i] >>> bits[tmpbestb];
- ++c;
- }
- }
- exceptsize = S16.compress(exceptbuffer, 0, 2 * nbrexcept, out,
- tmpoutpos);
- tmpoutpos += exceptsize;
- }
- out[remember] = tmpbestb | (nbrexcept << 8) | (exceptsize << 16);
- for (int k = 0; k < BlockSize; k += 32) {
- BitPacking.fastpack(in, tmpinpos + k, out, tmpoutpos,
- bits[tmpbestb]);
- tmpoutpos += bits[tmpbestb];
- }
- }
- inpos.set(tmpinpos);
- outpos.set(tmpoutpos);
- }
-
- @Override
- public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out,
- IntWrapper outpos) {
- // Util.assertTrue(inpos.get()+inlength <= in.length);
- int mynvalue = in[inpos.get()];
- inpos.increment();
- int finalout = outpos.get() + mynvalue;
- while (outpos.get() != finalout) {
- int thissize = finalout > PageSize + outpos.get() ? PageSize
- : (finalout - outpos.get());
- decodePage(in, inpos, out, outpos, thissize);
- }
- }
-
- private void decodePage(int[] in, IntWrapper inpos, int[] out,
- IntWrapper outpos, int thissize) {
- int tmpoutpos = outpos.get();
- int tmpinpos = inpos.get();
-
- for (int run = 0; run < thissize / BlockSize; ++run, tmpoutpos += BlockSize) {
- final int b = in[tmpinpos] & 0xFF;
- final int cexcept = (in[tmpinpos] >>> 8) & 0xFF;
- final int exceptsize = (in[tmpinpos] >>> 16);
- ++tmpinpos;
- S16.uncompress(in, tmpinpos, exceptsize, exceptbuffer, 0,
- 2 * cexcept);
- tmpinpos += exceptsize;
- for (int k = 0; k < BlockSize; k += 32) {
- BitPacking
- .fastunpack(in, tmpinpos, out, tmpoutpos + k, bits[b]);
- tmpinpos += bits[b];
- }
- for (int k = 0; k < cexcept; ++k) {
- out[tmpoutpos + exceptbuffer[k + cexcept]] |= (exceptbuffer[k] << bits[b]);
- }
- }
- outpos.set(tmpoutpos);
- inpos.set(tmpinpos);
- }
-
- @Override
- public String toString() {
- return this.getClass().getName();
- }
+public final class OptPFD implements IntegerCODEC,SkippableIntegerCODEC {
+ final static int BLOCK_SIZE = 128;
+
+ int[] exceptbuffer = new int[2 * BLOCK_SIZE];
+
+ /**
+ * Constructor for the OptPFD CODEC.
+ */
+ public OptPFD() {
+ }
+
+ @Override
+ public void headlessCompress(int[] in, IntWrapper inpos, int inlength,
+ int[] out, IntWrapper outpos) {
+ inlength = Util.greatestMultiple(inlength, BLOCK_SIZE);
+ if (inlength == 0)
+ return;
+ encodePage(in, inpos, inlength, out, outpos);
+ }
+
+ private static final int[] bits = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ 11, 12, 13, 16, 20, 32 };
+ private static final int[] invbits = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16 };
+
+ private void getBestBFromData(int[] in, int pos, IntWrapper bestb,
+ IntWrapper bestexcept) {
+ final int mb = Util.maxbits(in, pos, BLOCK_SIZE);
+ int mini = 0;
+ if (mini + 28 < bits[invbits[mb]])
+ mini = bits[invbits[mb]] - 28; // 28 is the max for
+ // exceptions
+ int besti = bits.length - 1;
+ int bestcost = bits[besti] * 4;
+ int exceptcounter = 0;
+ for (int i = mini; i < bits.length - 1; ++i) {
+ int tmpcounter = 0;
+ for (int k = pos; k < BLOCK_SIZE + pos; ++k)
+ if ((in[k] >>> bits[i]) != 0) {
+ ++tmpcounter;
+ }
+ if (tmpcounter == BLOCK_SIZE)
+ continue; // no need
+ for (int k = pos, c = 0; k < pos + BLOCK_SIZE; ++k)
+ if ((in[k] >>> bits[i]) != 0) {
+ exceptbuffer[tmpcounter + c] = k - pos;
+ exceptbuffer[c] = in[k] >>> bits[i];
+ ++c;
+ }
+
+ final int thiscost = bits[i]
+ * 4
+ + S16.estimatecompress(exceptbuffer, 0,
+ 2 * tmpcounter);
+ if (thiscost <= bestcost) {
+ bestcost = thiscost;
+ besti = i;
+ exceptcounter = tmpcounter;
+ }
+ }
+
+ bestb.set(besti);
+ bestexcept.set(exceptcounter);
+ }
+
+ private void encodePage(int[] in, IntWrapper inpos, int thissize,
+ int[] out, IntWrapper outpos) {
+ int tmpoutpos = outpos.get();
+ int tmpinpos = inpos.get();
+ IntWrapper bestb = new IntWrapper();
+ IntWrapper bestexcept = new IntWrapper();
+ for (final int finalinpos = tmpinpos + thissize; tmpinpos
+ + BLOCK_SIZE <= finalinpos; tmpinpos += BLOCK_SIZE) {
+ getBestBFromData(in, tmpinpos, bestb, bestexcept);
+ final int tmpbestb = bestb.get();
+ final int nbrexcept = bestexcept.get();
+ int exceptsize = 0;
+ final int remember = tmpoutpos;
+ tmpoutpos++;
+ if (nbrexcept > 0) {
+ int c = 0;
+ for (int i = 0; i < BLOCK_SIZE; ++i) {
+ if ((in[tmpinpos + i] >>> bits[tmpbestb]) != 0) {
+ exceptbuffer[c + nbrexcept] = i;
+ exceptbuffer[c] = in[tmpinpos
+ + i] >>> bits[tmpbestb];
+ ++c;
+ }
+ }
+ exceptsize = S16.compress(exceptbuffer, 0,
+ 2 * nbrexcept, out, tmpoutpos);
+ tmpoutpos += exceptsize;
+ }
+ out[remember] = tmpbestb | (nbrexcept << 8)
+ | (exceptsize << 16);
+ for (int k = 0; k < BLOCK_SIZE; k += 32) {
+ BitPacking.fastpack(in, tmpinpos + k, out,
+ tmpoutpos, bits[tmpbestb]);
+ tmpoutpos += bits[tmpbestb];
+ }
+ }
+ inpos.set(tmpinpos);
+ outpos.set(tmpoutpos);
+ }
+
+ @Override
+ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength,
+ int[] out, IntWrapper outpos, int mynvalue) {
+ if (inlength == 0)
+ return;
+ mynvalue = Util.greatestMultiple(mynvalue, BLOCK_SIZE);
+ decodePage(in, inpos, out, outpos, mynvalue);
+ }
+
+ @Override
+ public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) {
+ inlength = Util.greatestMultiple(inlength, BLOCK_SIZE);
+ int blockCount = inlength / BLOCK_SIZE;
+ // +1 for the header
+ // getBestBFromData limits the memory used for exceptions so that the total size of the block does not exceed BLOCK_SIZE integers.
+ int maxBlockSizeInInts = 1 + BLOCK_SIZE;
+ compressedPositions.add(inlength);
+ return maxBlockSizeInInts * blockCount;
+ }
+
+ private void decodePage(int[] in, IntWrapper inpos, int[] out,
+ IntWrapper outpos, int thissize) {
+ int tmpoutpos = outpos.get();
+ int tmpinpos = inpos.get();
+
+ for (int run = 0; run < thissize / BLOCK_SIZE; ++run, tmpoutpos += BLOCK_SIZE) {
+ final int b = in[tmpinpos] & 0xFF;
+ final int cexcept = (in[tmpinpos] >>> 8) & 0xFF;
+ final int exceptsize = (in[tmpinpos] >>> 16);
+ ++tmpinpos;
+ S16.uncompress(in, tmpinpos, exceptsize, exceptbuffer,
+ 0, 2 * cexcept);
+ tmpinpos += exceptsize;
+ for (int k = 0; k < BLOCK_SIZE; k += 32) {
+ BitPacking.fastunpack(in, tmpinpos, out,
+ tmpoutpos + k, bits[b]);
+ tmpinpos += bits[b];
+ }
+ for (int k = 0; k < cexcept; ++k) {
+ out[tmpoutpos + exceptbuffer[k + cexcept]] |= (exceptbuffer[k] << bits[b]);
+ }
+ }
+ outpos.set(tmpoutpos);
+ inpos.set(tmpinpos);
+ }
+ @Override
+ public void compress(int[] in, IntWrapper inpos, int inlength, int[] out,
+ IntWrapper outpos) {
+ inlength = inlength / BLOCK_SIZE * BLOCK_SIZE;
+ if (inlength == 0)
+ return;
+ out[outpos.get()] = inlength;
+ outpos.increment();
+ headlessCompress(in, inpos, inlength, out, outpos);
+ }
+
+ @Override
+ public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out,
+ IntWrapper outpos) {
+ if (inlength == 0)
+ return;
+ final int outlength = in[inpos.get()];
+ inpos.increment();
+ headlessUncompress(in, inpos, inlength, out, outpos, outlength);
+ }
+ @Override
+ public String toString() {
+ return this.getClass().getSimpleName();
+ }
}
diff --git a/src/main/java/me/lemire/integercompression/OptPFDS16.java b/src/main/java/me/lemire/integercompression/OptPFDS16.java
new file mode 100644
index 0000000..95c4f62
--- /dev/null
+++ b/src/main/java/me/lemire/integercompression/OptPFDS16.java
@@ -0,0 +1,211 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+
+package me.lemire.integercompression;
+
+
+/**
+ * OptPFD based on Simple16 by Yan et al.
+ *
+ * Follows:
+ *
+ * H. Yan, S. Ding, T. Suel, Inverted index compression and query processing
+ * with optimized document ordering, in: WWW 09, 2009, pp. 401-410.
+ *
+ * using Simple16 as the secondary coder.
+ *
+ * It encodes integers in blocks of 128 integers. For arrays containing
+ * an arbitrary number of integers, you should use it in conjunction
+ * with another CODEC:
+ *
+ * IntegerCODEC ic = new Composition(new OptPFDS16(), new VariableByte()).
+ *
+ * Note that this does not use differential coding: if you are working on sorted
+ * lists, you must compute the deltas separately.
+ *
+ * For multi-threaded applications, each thread should use its own OptPFDS16
+ * object.
+ *
+ * @author Daniel Lemire
+ */
+public final class OptPFDS16 implements IntegerCODEC,SkippableIntegerCODEC {
+ final static int BLOCK_SIZE = 128;
+ int[] exceptbuffer = new int[2 * BLOCK_SIZE];
+
+ /**
+ * Constructor for the OptPFDS16 CODEC.
+ */
+ public OptPFDS16() {
+ }
+
+ @Override
+ public void headlessCompress(int[] in, IntWrapper inpos, int inlength,
+ int[] out, IntWrapper outpos) {
+ inlength = Util.greatestMultiple(inlength, BLOCK_SIZE);
+ if (inlength == 0)
+ return;
+
+ encodePage(in, inpos, inlength, out, outpos);
+
+ }
+
+ private static final int[] bits = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ 11, 12, 13, 16, 20, 32 };
+ private static final int[] invbits = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16 };
+
+ private void getBestBFromData(int[] in, int pos, IntWrapper bestb,
+ IntWrapper bestexcept) {
+ final int mb = Util.maxbits(in, pos, BLOCK_SIZE);
+ int mini = 0;
+ if (mini + 28 < bits[invbits[mb]])
+ mini = bits[invbits[mb]] - 28; // 28 is the max for
+ // exceptions
+ int besti = bits.length - 1;
+ int bestcost = bits[besti] * 4;
+ int exceptcounter = 0;
+ for (int i = mini; i < bits.length - 1; ++i) {
+ int tmpcounter = 0;
+ for (int k = pos; k < BLOCK_SIZE + pos; ++k)
+ if ((in[k] >>> bits[i]) != 0) {
+ ++tmpcounter;
+ }
+ if (tmpcounter == BLOCK_SIZE)
+ continue; // no need
+ for (int k = pos, c = 0; k < pos + BLOCK_SIZE; ++k)
+ if ((in[k] >>> bits[i]) != 0) {
+ exceptbuffer[tmpcounter + c] = k - pos;
+ exceptbuffer[c] = in[k] >>> bits[i];
+ ++c;
+ }
+
+ final int thiscost = bits[i]
+ * 4
+ + S16.estimatecompress(exceptbuffer, 0,
+ 2 * tmpcounter);
+ if (thiscost <= bestcost) {
+ bestcost = thiscost;
+ besti = i;
+ exceptcounter = tmpcounter;
+ }
+ }
+ bestb.set(besti);
+ bestexcept.set(exceptcounter);
+ }
+
+ private void encodePage(int[] in, IntWrapper inpos, int thissize,
+ int[] out, IntWrapper outpos) {
+ int tmpoutpos = outpos.get();
+ int tmpinpos = inpos.get();
+ IntWrapper bestb = new IntWrapper();
+ IntWrapper bestexcept = new IntWrapper();
+ for (final int finalinpos = tmpinpos + thissize; tmpinpos
+ + BLOCK_SIZE <= finalinpos; tmpinpos += BLOCK_SIZE) {
+ getBestBFromData(in, tmpinpos, bestb, bestexcept);
+ final int tmpbestb = bestb.get();
+ final int nbrexcept = bestexcept.get();
+ int exceptsize = 0;
+ final int remember = tmpoutpos;
+ tmpoutpos++;
+ if (nbrexcept > 0) {
+ int c = 0;
+ for (int i = 0; i < BLOCK_SIZE; ++i) {
+ if ((in[tmpinpos + i] >>> bits[tmpbestb]) != 0) {
+ exceptbuffer[c + nbrexcept] = i;
+ exceptbuffer[c] = in[tmpinpos
+ + i] >>> bits[tmpbestb];
+ ++c;
+ }
+ }
+ exceptsize = S16.compress(exceptbuffer, 0,
+ 2 * nbrexcept, out, tmpoutpos);
+ tmpoutpos += exceptsize;
+ }
+ out[remember] = tmpbestb | (nbrexcept << 8)
+ | (exceptsize << 16);
+ for (int k = 0; k < BLOCK_SIZE; k += 32) {
+ BitPacking.fastpack(in, tmpinpos + k, out,
+ tmpoutpos, bits[tmpbestb]);
+ tmpoutpos += bits[tmpbestb];
+ }
+ }
+ inpos.set(tmpinpos);
+ outpos.set(tmpoutpos);
+ }
+
+ @Override
+ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength,
+ int[] out, IntWrapper outpos, int mynvalue) {
+ if (inlength == 0)
+ return;
+ mynvalue = Util.greatestMultiple(mynvalue, BLOCK_SIZE);
+ decodePage(in, inpos, out, outpos, mynvalue);
+ }
+
+ @Override
+ public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) {
+ inlength = Util.greatestMultiple(inlength, BLOCK_SIZE);
+ int blockCount = inlength / BLOCK_SIZE;
+ // +1 for the header
+ // getBestBFromData limits the memory used for exceptions so that the total size of the block does not exceed BLOCK_SIZE integers.
+ int maxBlockSizeInInts = 1 + BLOCK_SIZE;
+ compressedPositions.add(inlength);
+ return maxBlockSizeInInts * blockCount;
+ }
+
+ private void decodePage(int[] in, IntWrapper inpos, int[] out,
+ IntWrapper outpos, int thissize) {
+ int tmpoutpos = outpos.get();
+ int tmpinpos = inpos.get();
+
+ for (int run = 0; run < thissize / BLOCK_SIZE; ++run, tmpoutpos += BLOCK_SIZE) {
+ final int b = in[tmpinpos] & 0xFF;
+ final int cexcept = (in[tmpinpos] >>> 8) & 0xFF;
+ final int exceptsize = (in[tmpinpos] >>> 16);
+ ++tmpinpos;
+ S16.uncompress(in, tmpinpos, exceptsize, exceptbuffer,
+ 0, 2 * cexcept);
+ tmpinpos += exceptsize;
+ for (int k = 0; k < BLOCK_SIZE; k += 32) {
+ BitPacking.fastunpack(in, tmpinpos, out,
+ tmpoutpos + k, bits[b]);
+ tmpinpos += bits[b];
+ }
+ for (int k = 0; k < cexcept; ++k) {
+ out[tmpoutpos + exceptbuffer[k + cexcept]] |= (exceptbuffer[k] << bits[b]);
+ }
+ }
+ outpos.set(tmpoutpos);
+ inpos.set(tmpinpos);
+ }
+ @Override
+ public void compress(int[] in, IntWrapper inpos, int inlength, int[] out,
+ IntWrapper outpos) {
+ inlength = inlength / BLOCK_SIZE * BLOCK_SIZE;
+ if (inlength == 0)
+ return;
+ out[outpos.get()] = inlength;
+ outpos.increment();
+ headlessCompress(in, inpos, inlength, out, outpos);
+ }
+
+ @Override
+ public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out,
+ IntWrapper outpos) {
+ if (inlength == 0)
+ return;
+ final int outlength = in[inpos.get()];
+ inpos.increment();
+ headlessUncompress(in, inpos, inlength, out, outpos, outlength);
+ }
+ @Override
+ public String toString() {
+ return this.getClass().getSimpleName();
+ }
+
+}
diff --git a/src/main/java/me/lemire/integercompression/OptPFDS9.java b/src/main/java/me/lemire/integercompression/OptPFDS9.java
index 4090ec5..0e2563b 100644
--- a/src/main/java/me/lemire/integercompression/OptPFDS9.java
+++ b/src/main/java/me/lemire/integercompression/OptPFDS9.java
@@ -7,169 +7,205 @@
package me.lemire.integercompression;
+
/**
- * OptPFD implemented by Daniel Lemire
- *
+ * OptPFD based on Simple9 by Yan et al.
+ *
* Follows:
- *
+ *
* H. Yan, S. Ding, T. Suel, Inverted index compression and query processing
- * with optimized document ordering, in: WWW 09, 2009, pp. 401--410.
- *
+ * with optimized document ordering, in: WWW 09, 2009, pp. 401-410.
+ *
* using Simple9 as the secondary coder.
*
- * @author Daniel Lemire
+ * It encodes integers in blocks of 128 integers. For arrays containing
+ * an arbitrary number of integers, you should use it in conjunction
+ * with another CODEC:
+ *
+ * IntegerCODEC ic = new Composition(new OptPFDS9(), new VariableByte()).
*
+ * Note that this does not use differential coding: if you are working on sorted
+ * lists, you must compute the deltas separately.
+ *
+ * For multi-threaded applications, each thread should use its own OptPFDS9
+ * object.
+ *
+ * @author Daniel Lemire
*/
-public final class OptPFDS9 implements IntegerCODEC {
- final int PageSize;
- final static int BlockSize = 128;
- int[] exceptbuffer = new int[2 * BlockSize];
-
- public OptPFDS9() {
- PageSize = 65536;
- }
-
- @Override
- public void compress(int[] in, IntWrapper inpos, int inlength, int[] out,
- IntWrapper outpos) {
- // Util.assertTrue(inpos.get()+inlength <= in.length);
- inlength = inlength / BlockSize * BlockSize;
-
- final int finalinpos = inpos.get() + inlength;
- out[outpos.get()] = inlength;
- outpos.increment();
- while (inpos.get() != finalinpos) {
- int thissize = finalinpos > PageSize + inpos.get() ? PageSize
- : (finalinpos - inpos.get());
- encodePage(in, inpos, thissize, out, outpos);
- }
-
- }
-
- public static final int[] bits = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
- 12, 13, 16, 20, 32 };
- public static final int[] invbits = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
- 12, 13, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16 };
-
- void getBestBFromData(int[] in, int pos, IntWrapper bestb,
- IntWrapper bestexcept) {
- final int mb = Util.maxbits(in, pos, BlockSize);
- int mini = 0;
- if (mini + 28 < bits[invbits[mb]])
- mini = bits[invbits[mb]] - 28; // 28 is the max for exceptions
- int besti = bits.length - 1;
- int bestcost = bits[besti] * 4;
- int exceptcounter = 0;
- for (int i = mini; i < bits.length - 1; ++i) {
- int tmpcounter = 0;
- final int maxv = 1 << bits[i];
- for (int k = pos; k < BlockSize + pos; ++k)
- if (in[k] >= maxv) {
- ++tmpcounter;
- }
- if (tmpcounter == BlockSize)
- continue; // no need
- for (int k = pos, c = 0; k < pos + BlockSize; ++k)
- if (in[k] >= maxv) {
- exceptbuffer[tmpcounter + c] = k - pos;
- exceptbuffer[c] = in[k] >>> bits[i];
- ++c;
- }
-
- final int thiscost = bits[i] * 4
- + S9.estimatecompress(exceptbuffer, 0, 2 * tmpcounter);
- if (thiscost <= bestcost) {
- bestcost = thiscost;
- besti = i;
- exceptcounter = tmpcounter;
- }
- }
- bestb.set(besti);
- bestexcept.set(exceptcounter);
- }
-
- private void encodePage(int[] in, IntWrapper inpos, int thissize,
- int[] out, IntWrapper outpos) {
- int tmpoutpos = outpos.get();
- int tmpinpos = inpos.get();
- IntWrapper bestb = new IntWrapper();
- IntWrapper bestexcept = new IntWrapper();
- for (final int finalinpos = tmpinpos + thissize; tmpinpos + BlockSize <= finalinpos; tmpinpos += BlockSize) {
- getBestBFromData(in, tmpinpos, bestb, bestexcept);
- int tmpbestb = bestb.get();
- int nbrexcept = bestexcept.get();
- int exceptsize = 0;
- int remember = tmpoutpos;
- tmpoutpos++;
- if (nbrexcept > 0) {
- final int maxv = 1 << bits[tmpbestb];
- int c = 0;
- for (int i = 0; i < BlockSize; ++i) {
- if (in[tmpinpos + i] >= maxv) {
- exceptbuffer[c + nbrexcept] = i;
- exceptbuffer[c] = in[tmpinpos + i] >>> bits[tmpbestb];
- ++c;
- }
- }
- exceptsize = S9.compress(exceptbuffer, 0, 2 * nbrexcept, out,
- tmpoutpos);
- tmpoutpos += exceptsize;
- }
- out[remember] = tmpbestb | (nbrexcept << 8) | (exceptsize << 16);
- for (int k = 0; k < BlockSize; k += 32) {
- BitPacking.fastpack(in, tmpinpos + k, out, tmpoutpos,
- bits[tmpbestb]);
- tmpoutpos += bits[tmpbestb];
- }
- }
- inpos.set(tmpinpos);
- outpos.set(tmpoutpos);
- }
-
- @Override
- public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out,
- IntWrapper outpos) {
- // Util.assertTrue(inpos.get()+inlength <= in.length);
- int mynvalue = in[inpos.get()];
- inpos.increment();
- int finalout = outpos.get() + mynvalue;
- while (outpos.get() != finalout) {
- int thissize = finalout > PageSize + outpos.get() ? PageSize
- : (finalout - outpos.get());
- decodePage(in, inpos, out, outpos, thissize);
- }
- }
-
- private void decodePage(int[] in, IntWrapper inpos, int[] out,
- IntWrapper outpos, int thissize) {
- int tmpoutpos = outpos.get();
- int tmpinpos = inpos.get();
-
- for (int run = 0; run < thissize / BlockSize; ++run, tmpoutpos += BlockSize) {
- final int b = in[tmpinpos] & 0xFF;
- final int cexcept = (in[tmpinpos] >>> 8) & 0xFF;
- final int exceptsize = (in[tmpinpos] >>> 16);
- ++tmpinpos;
- S9.uncompress(in, tmpinpos, exceptsize, exceptbuffer, 0,
- 2 * cexcept);
- tmpinpos += exceptsize;
- for (int k = 0; k < BlockSize; k += 32) {
- BitPacking
- .fastunpack(in, tmpinpos, out, tmpoutpos + k, bits[b]);
- tmpinpos += bits[b];
- }
- for (int k = 0; k < cexcept; ++k) {
- out[tmpoutpos + exceptbuffer[k + cexcept]] |= (exceptbuffer[k] << bits[b]);
- }
- }
- outpos.set(tmpoutpos);
- inpos.set(tmpinpos);
- }
-
- @Override
- public String toString() {
- return this.getClass().getName();
- }
-
-}
\ No newline at end of file
+public final class OptPFDS9 implements IntegerCODEC, SkippableIntegerCODEC {
+ final static int BLOCK_SIZE = 128;
+ int[] exceptbuffer = new int[2 * BLOCK_SIZE];
+
+ /**
+ * Constructor for the OptPFDS9 CODEC.
+ */
+ public OptPFDS9() {
+ }
+
+ @Override
+ public void headlessCompress(int[] in, IntWrapper inpos, int inlength,
+ int[] out, IntWrapper outpos) {
+ inlength = Util.greatestMultiple(inlength, BLOCK_SIZE);
+ if (inlength == 0)
+ return;
+ encodePage(in, inpos, inlength, out, outpos);
+
+ }
+
+ private static final int[] bits = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ 11, 12, 13, 16, 20, 32 };
+ private static final int[] invbits = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16 };
+
+ private void getBestBFromData(int[] in, int pos, IntWrapper bestb,
+ IntWrapper bestexcept) {
+ final int mb = Util.maxbits(in, pos, BLOCK_SIZE);
+ int mini = 0;
+ if (mini + 28 < bits[invbits[mb]])
+ mini = bits[invbits[mb]] - 28; // 28 is the max for
+ // exceptions
+ int besti = bits.length - 1;
+ int bestcost = bits[besti] * 4;
+ int exceptcounter = 0;
+ for (int i = mini; i < bits.length - 1; ++i) {
+ int tmpcounter = 0;
+ for (int k = pos; k < BLOCK_SIZE + pos; ++k)
+ if ((in[k] >>> bits[i]) != 0) {
+ ++tmpcounter;
+ }
+ if (tmpcounter == BLOCK_SIZE)
+ continue; // no need
+ for (int k = pos, c = 0; k < pos + BLOCK_SIZE; ++k)
+ if ((in[k] >>> bits[i]) != 0) {
+ exceptbuffer[tmpcounter + c] = k - pos;
+ exceptbuffer[c] = in[k] >>> bits[i];
+ ++c;
+ }
+
+ final int thiscost = bits[i]
+ * 4
+ + S9.estimatecompress(exceptbuffer, 0,
+ 2 * tmpcounter);
+ if (thiscost <= bestcost) {
+ bestcost = thiscost;
+ besti = i;
+ exceptcounter = tmpcounter;
+ }
+ }
+ bestb.set(besti);
+ bestexcept.set(exceptcounter);
+ }
+
+ private void encodePage(int[] in, IntWrapper inpos, int thissize,
+ int[] out, IntWrapper outpos) {
+ int tmpoutpos = outpos.get();
+ int tmpinpos = inpos.get();
+ IntWrapper bestb = new IntWrapper();
+ IntWrapper bestexcept = new IntWrapper();
+ for (final int finalinpos = tmpinpos + thissize; tmpinpos
+ + BLOCK_SIZE <= finalinpos; tmpinpos += BLOCK_SIZE) {
+ getBestBFromData(in, tmpinpos, bestb, bestexcept);
+ final int tmpbestb = bestb.get();
+ final int nbrexcept = bestexcept.get();
+ int exceptsize = 0;
+ final int remember = tmpoutpos;
+ tmpoutpos++;
+ if (nbrexcept > 0) {
+ int c = 0;
+ for (int i = 0; i < BLOCK_SIZE; ++i) {
+ if ((in[tmpinpos + i] >>> bits[tmpbestb]) != 0) {
+ exceptbuffer[c + nbrexcept] = i;
+ exceptbuffer[c] = in[tmpinpos
+ + i] >>> bits[tmpbestb];
+ ++c;
+ }
+ }
+ exceptsize = S9.compress(exceptbuffer, 0,
+ 2 * nbrexcept, out, tmpoutpos);
+ tmpoutpos += exceptsize;
+ }
+ out[remember] = tmpbestb | (nbrexcept << 8)
+ | (exceptsize << 16);
+ for (int k = 0; k < BLOCK_SIZE; k += 32) {
+ BitPacking.fastpack(in, tmpinpos + k, out,
+ tmpoutpos, bits[tmpbestb]);
+ tmpoutpos += bits[tmpbestb];
+ }
+ }
+ inpos.set(tmpinpos);
+ outpos.set(tmpoutpos);
+ }
+
+ @Override
+ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength,
+ int[] out, IntWrapper outpos, int mynvalue) {
+ if (inlength == 0)
+ return;
+ mynvalue = Util.greatestMultiple(mynvalue, BLOCK_SIZE);
+ decodePage(in, inpos, out, outpos, mynvalue);
+ }
+
+ @Override
+ public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) {
+ inlength = Util.greatestMultiple(inlength, BLOCK_SIZE);
+ int blockCount = inlength / BLOCK_SIZE;
+ // +1 for the header
+ // getBestBFromData limits the memory used for exceptions so that the total size of the block does not exceed BLOCK_SIZE integers.
+ int maxBlockSizeInInts = 1 + BLOCK_SIZE;
+ compressedPositions.add(inlength);
+ return maxBlockSizeInInts * blockCount;
+ }
+
+ private void decodePage(int[] in, IntWrapper inpos, int[] out,
+ IntWrapper outpos, int thissize) {
+ int tmpoutpos = outpos.get();
+ int tmpinpos = inpos.get();
+
+ for (int run = 0; run < thissize / BLOCK_SIZE; ++run, tmpoutpos += BLOCK_SIZE) {
+ final int b = in[tmpinpos] & 0xFF;
+ final int cexcept = (in[tmpinpos] >>> 8) & 0xFF;
+ final int exceptsize = (in[tmpinpos] >>> 16);
+ ++tmpinpos;
+ S9.uncompress(in, tmpinpos, exceptsize, exceptbuffer,
+ 0, 2 * cexcept);
+ tmpinpos += exceptsize;
+ for (int k = 0; k < BLOCK_SIZE; k += 32) {
+ BitPacking.fastunpack(in, tmpinpos, out,
+ tmpoutpos + k, bits[b]);
+ tmpinpos += bits[b];
+ }
+ for (int k = 0; k < cexcept; ++k) {
+ out[tmpoutpos + exceptbuffer[k + cexcept]] |= (exceptbuffer[k] << bits[b]);
+ }
+ }
+ outpos.set(tmpoutpos);
+ inpos.set(tmpinpos);
+ }
+ @Override
+ public void compress(int[] in, IntWrapper inpos, int inlength, int[] out,
+ IntWrapper outpos) {
+ inlength = inlength / BLOCK_SIZE * BLOCK_SIZE;
+ if (inlength == 0)
+ return;
+ out[outpos.get()] = inlength;
+ outpos.increment();
+ headlessCompress(in, inpos, inlength, out, outpos);
+ }
+
+ @Override
+ public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out,
+ IntWrapper outpos) {
+ if (inlength == 0)
+ return;
+ final int outlength = in[inpos.get()];
+ inpos.increment();
+ headlessUncompress(in, inpos, inlength, out, outpos, outlength);
+ }
+
+ @Override
+ public String toString() {
+ return this.getClass().getSimpleName();
+ }
+
+}
diff --git a/src/main/java/me/lemire/integercompression/S16.java b/src/main/java/me/lemire/integercompression/S16.java
index fe5a9db..e40522d 100644
--- a/src/main/java/me/lemire/integercompression/S16.java
+++ b/src/main/java/me/lemire/integercompression/S16.java
@@ -9,163 +9,197 @@
/**
* Version of Simple16 for NewPFD and OptPFD.
- *
+ *
* Adapted by D. Lemire from the Apache Lucene project.
+ *
*/
public final class S16 {
- public static int compress(int[] in, int currentPos, int inlength,
- int out[], int tmpoutpos) {
- int outpos = tmpoutpos;
- final int finalin = currentPos + inlength;
- while (currentPos < finalin) {
- int inoffset = compressblock(out, outpos++, in, currentPos,
- inlength);
- if (inoffset == -1)
- throw new RuntimeException("Too big a number");
- currentPos += inoffset;
- inlength -= inoffset;
- }
- return outpos - tmpoutpos;
- }
-
- public static int estimatecompress(int[] in, int currentPos, int inlength) {
- final int finalin = currentPos + inlength;
- int counter = 0;
- while (currentPos < finalin) {
- int inoffset = fakecompressblock(in, currentPos, inlength);
- if (inoffset == -1)
- throw new RuntimeException("Too big a number");
- currentPos += inoffset;
- inlength -= inoffset;
- ++counter;
- }
- return counter;
- }
-
- /**
- * Compress an integer array using Simple16
- *
- * @param out
- * the compressed output
- * @param outOffset
- * the offset of the output in the number of integers
- * @param in
- * the integer input array
- * @param inOffset
- * the offset of the input in the number of integers
- * @param n
- * the number of elements to be compressed
- * @return the number of compressed integers
- */
- public static final int compressblock(int[] out, int outOffset, int[] in,
- int inOffset, int n) {
- int numIdx, j, num, bits;
- for (numIdx = 0; numIdx < S16_NUMSIZE; numIdx++) {
- out[outOffset] = numIdx << S16_BITSSIZE;
- num = (S16_NUM[numIdx] < n) ? S16_NUM[numIdx] : n;
-
- for (j = 0, bits = 0; (j < num)
- && (in[inOffset + j] < SHIFTED_S16_BITS[numIdx][j]);) {
- out[outOffset] |= (in[inOffset + j] << bits);
- bits += S16_BITS[numIdx][j];
- j++;
- }
-
- if (j == num) {
- return num;
- }
- }
-
- return -1;
- }
-
- public static final int fakecompressblock(int[] in, int inOffset, int n) {
- int numIdx, j, num;
- for (numIdx = 0; numIdx < S16_NUMSIZE; numIdx++) {
- num = (S16_NUM[numIdx] < n) ? S16_NUM[numIdx] : n;
-
- for (j = 0; (j < num)
- && (in[inOffset + j] < SHIFTED_S16_BITS[numIdx][j]);) {
- j++;
- }
-
- if (j == num) {
- return num;
- }
- }
-
- return -1;
- }
-
- /**
- * Decompress an integer array using Simple16
- *
- * @param out
- * the decompressed output
- * @param outOffset
- * the offset of the output in the number of integers
- * @param in
- * the compressed input array
- * @param inOffset
- * the offset of the input in the number of integers
- * @param n
- * the number of elements to be compressed
- * @return the number of processed integers
- */
- public static final int decompressblock(int[] out, int outOffset, int[] in,
- int inOffset, int n) {
- int numIdx, j = 0, bits = 0;
- numIdx = in[inOffset] >>> S16_BITSSIZE;
- int num = S16_NUM[numIdx] < n ? S16_NUM[numIdx] : n;
- for (j = 0, bits = 0; j < num; j++) {
- out[outOffset + j] = (in[inOffset] >>> bits)
- & (0xffffffff >>> (32 - S16_BITS[numIdx][j]));
- bits += S16_BITS[numIdx][j];
- }
- return num;
- }
-
- public static void uncompress(int[] in, int tmpinpos, int inlength,
- int[] out, int currentPos, int outlength) {
- final int finalpos = tmpinpos + inlength;
- while (tmpinpos < finalpos) {
- final int howmany = decompressblock(out, currentPos, in, tmpinpos,
- outlength);
- outlength -= howmany;
- currentPos += howmany;
- tmpinpos += 1;
- }
-
- }
-
- private static int[][] shiftme(int[][] x) {
- int[][] answer = new int[x.length][];
- for (int k = 0; k < x.length; ++k) {
- answer[k] = new int[x[k].length];
- for (int z = 0; z < answer[k].length; ++z)
- answer[k][z] = 1 << x[k][z];
- }
- return answer;
- }
-
- private static final int S16_NUMSIZE = 16;
- private static final int S16_BITSSIZE = 28;
- // the possible number of bits used to represent one integer
- private static final int[] S16_NUM = { 28, 21, 21, 21, 14, 9, 8, 7, 6, 6,
- 5, 5, 4, 3, 2, 1 };
- // the corresponding number of elements for each value of the number of bits
- private static final int[][] S16_BITS = {
- { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1 },
- { 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
- { 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1 },
- { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2 },
- { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 },
- { 4, 3, 3, 3, 3, 3, 3, 3, 3 }, { 3, 4, 4, 4, 4, 3, 3, 3 },
- { 4, 4, 4, 4, 4, 4, 4 }, { 5, 5, 5, 5, 4, 4 },
- { 4, 4, 5, 5, 5, 5 }, { 6, 6, 6, 5, 5 }, { 5, 5, 6, 6, 6 },
- { 7, 7, 7, 7 }, { 10, 9, 9, }, { 14, 14 }, { 28 } };
- private static final int[][] SHIFTED_S16_BITS = shiftme(S16_BITS);
+ /**
+ * Compress an integer array using Simple16
+ *
+ *
+ * @param in
+ * array to compress
+ * @param currentPos
+ * where to start reading
+ * @param inlength
+ * how many integers to read
+ * @param out
+ * output array
+ * @param tmpoutpos
+ * location in the output array
+ * @return the number of 32-bit words written (in compressed form)
+ */
+ public static int compress(final int[] in, int currentPos, int inlength, final int out[], final int tmpoutpos) {
+ int outpos = tmpoutpos;
+ final int finalin = currentPos + inlength;
+ while (currentPos < finalin) {
+ int inoffset = compressblock(out, outpos++, in, currentPos, inlength);
+ if (inoffset == -1)
+ throw new RuntimeException("Too big a number");
+ currentPos += inoffset;
+ inlength -= inoffset;
+ }
+ return outpos - tmpoutpos;
+ }
+
+ /**
+ * Estimate size of the compressed output.
+ *
+ * @param in
+ * array to compress
+ * @param currentPos
+ * where to start reading
+ * @param inlength
+ * how many integers to read
+ * @return estimated size of the output (in 32-bit integers)
+ */
+ public static int estimatecompress(final int[] in, int currentPos, int inlength) {
+ final int finalin = currentPos + inlength;
+ int counter = 0;
+ while (currentPos < finalin) {
+ int inoffset = fakecompressblock(in, currentPos, inlength);
+ if (inoffset == -1)
+ throw new RuntimeException("Too big a number");
+ currentPos += inoffset;
+ inlength -= inoffset;
+ ++counter;
+ }
+ return counter;
+ }
+
+ /**
+ * Compress an integer array using Simple16
+ *
+ * @param out
+ * the compressed output
+ * @param outOffset
+ * the offset of the output in the number of integers
+ * @param in
+ * the integer input array
+ * @param inOffset
+ * the offset of the input in the number of integers
+ * @param n
+ * the number of elements to be compressed
+ * @return the size of the outputs in 32-bit integers
+ *
+ */
+ public static final int compressblock(int[] out, int outOffset, int[] in, int inOffset, int n) {
+ int numIdx, j, num, bits;
+ for (numIdx = 0; numIdx < S16_NUMSIZE; numIdx++) {
+ out[outOffset] = numIdx << S16_BITSSIZE;
+ num = (S16_NUM[numIdx] < n) ? S16_NUM[numIdx] : n;
+
+ for (j = 0, bits = 0; (j < num) && (in[inOffset + j] < SHIFTED_S16_BITS[numIdx][j]);) {
+ out[outOffset] |= (in[inOffset + j] << bits);
+ bits += S16_BITS[numIdx][j];
+ j++;
+ }
+
+ if (j == num) {
+ return num;
+ }
+ }
+
+ return -1;
+ }
+
+ private static final int fakecompressblock(int[] in, int inOffset, int n) {
+ int numIdx, j, num;
+ for (numIdx = 0; numIdx < S16_NUMSIZE; numIdx++) {
+ num = (S16_NUM[numIdx] < n) ? S16_NUM[numIdx] : n;
+
+ for (j = 0; (j < num) && (in[inOffset + j] < SHIFTED_S16_BITS[numIdx][j]);) {
+ j++;
+ }
+
+ if (j == num) {
+ return num;
+ }
+ }
+
+ return -1;
+ }
+
+ /**
+ * Decompress an integer array using Simple16
+ *
+ * @param out
+ * the decompressed output
+ * @param outOffset
+ * the offset of the output in the number of integers
+ * @param in
+ * the compressed input array
+ * @param inOffset
+ * the offset of the input in the number of integers
+ * @param n
+ * the number of elements to be compressed
+ * @return the number of processed integers
+ */
+ public static final int decompressblock(int[] out, int outOffset, int[] in, int inOffset, int n) {
+ int numIdx, j = 0, bits = 0;
+ numIdx = in[inOffset] >>> S16_BITSSIZE;
+ int num = S16_NUM[numIdx] < n ? S16_NUM[numIdx] : n;
+ for (j = 0, bits = 0; j < num; j++) {
+ out[outOffset + j] = (in[inOffset] >>> bits) & (0xffffffff >>> (32 - S16_BITS[numIdx][j]));
+ bits += S16_BITS[numIdx][j];
+ }
+ return num;
+ }
+
+ /**
+ * Uncompressed data from an input array into an output array
+ *
+ * @param in
+ * input array (in compressed form)
+ * @param tmpinpos
+ * starting location in the compressed input array
+ * @param inlength
+ * how much data we wish the read (in 32-bit words)
+ * @param out
+ * output array (in decompressed form)
+ * @param currentPos
+ * current position in the output array
+ * @param outlength
+ * available data in the output array
+ */
+ public static void uncompress(final int[] in, int tmpinpos, final int inlength, final int[] out, int currentPos,
+ int outlength) {
+ final int finalpos = tmpinpos + inlength;
+ while (tmpinpos < finalpos) {
+ final int howmany = decompressblock(out, currentPos, in, tmpinpos, outlength);
+ outlength -= howmany;
+ currentPos += howmany;
+ tmpinpos += 1;
+ }
+
+ }
+
+ private static int[][] shiftme(int[][] x) {
+ int[][] answer = new int[x.length][];
+ for (int k = 0; k < x.length; ++k) {
+ answer[k] = new int[x[k].length];
+ for (int z = 0; z < answer[k].length; ++z)
+ answer[k][z] = 1 << x[k][z];
+ }
+ return answer;
+ }
+
+ private static final int S16_NUMSIZE = 16;
+ private static final int S16_BITSSIZE = 28;
+ // the possible number of bits used to represent one integer
+ private static final int[] S16_NUM = { 28, 21, 21, 21, 14, 9, 8, 7, 6, 6, 5, 5, 4, 3, 2, 1 };
+ // the corresponding number of elements for each value of the number of
+ // bits
+ private static final int[][] S16_BITS = {
+ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
+ { 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
+ { 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1 },
+ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2 },
+ { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 }, { 4, 3, 3, 3, 3, 3, 3, 3, 3 }, { 3, 4, 4, 4, 4, 3, 3, 3 },
+ { 4, 4, 4, 4, 4, 4, 4 }, { 5, 5, 5, 5, 4, 4 }, { 4, 4, 5, 5, 5, 5 }, { 6, 6, 6, 5, 5 }, { 5, 5, 6, 6, 6 },
+ { 7, 7, 7, 7 }, { 10, 9, 9, }, { 14, 14 }, { 28 } };
+ private static final int[][] SHIFTED_S16_BITS = shiftme(S16_BITS);
}
diff --git a/src/main/java/me/lemire/integercompression/S9.java b/src/main/java/me/lemire/integercompression/S9.java
index 1fb9a77..7e03e42 100644
--- a/src/main/java/me/lemire/integercompression/S9.java
+++ b/src/main/java/me/lemire/integercompression/S9.java
@@ -8,167 +8,196 @@
/**
* This is a version of Simple9 optimized for NewPFOR, OptPFOR
+ *
+ * Adapted by D. Lemire from the Apache Lucene project.
+ *
*
* @author Daniel Lemire
- *
*/
-
public final class S9 {
- public static int estimatecompress(int[] in, int currentPos, int inlength) {
- int tmpoutpos = 0;
- int finalpos = currentPos + inlength;
- outer: while (currentPos < finalpos) {
- mainloop: for (int selector = 0; selector < 8; selector++) {
- int compressedNum = codeNum[selector];
- if (finalpos <= currentPos + compressedNum - 1)
- compressedNum = finalpos - currentPos;
- int b = bitLength[selector];
- int max = 1 << b;
- int i = 0;
- for (; i < compressedNum; i++)
- if (max <= in[currentPos + i])
- continue mainloop;
- currentPos += compressedNum;
- ++tmpoutpos;
- continue outer;
- }
- final int selector = 8;
- // Util.assertTrue(codeNum[selector] == 1);
- if (in[currentPos] >= 1 << bitLength[selector])
- throw new RuntimeException("Too big a number");
- tmpoutpos++;
- currentPos++;
+ /**
+ * Estimate size of the compressed output.
+ *
+ * @param in
+ * array to compress
+ * @param currentPos
+ * where to start reading
+ * @param inlength
+ * how many integers to read
+ * @return estimated size of the output (in 32-bit integers)
+ */
+ public static int estimatecompress(int[] in, int currentPos, int inlength) {
+ int tmpoutpos = 0;
+ int finalpos = currentPos + inlength;
+ outer: while (currentPos < finalpos) {
+ mainloop: for (int selector = 0; selector < 8; selector++) {
+
+ int compressedNum = codeNum[selector];
+ if (finalpos <= currentPos + compressedNum - 1)
+ compressedNum = finalpos - currentPos;
+ int b = bitLength[selector];
+ int max = 1 << b;
+ int i = 0;
+ for (; i < compressedNum; i++)
+ if (Util.smallerorequalthan(max , in[currentPos + i]))
+ continue mainloop;
+ currentPos += compressedNum;
+ ++tmpoutpos;
+ continue outer;
+ }
+ final int selector = 8;
+ if (in[currentPos] >= 1 << bitLength[selector])
+ throw new RuntimeException("Too big a number");
+ tmpoutpos++;
+ currentPos++;
+
+ }
+ return tmpoutpos;
}
- return tmpoutpos;
- }
- public static int compress(int[] in, int currentPos, int inlength, int out[],
- int tmpoutpos) {
- int origtmpoutpos = tmpoutpos;
- int finalpos = currentPos + inlength;
- outer: while (currentPos < finalpos) {
- mainloop: for (int selector = 0; selector < 8; selector++) {
- int res = 0;
- int compressedNum = codeNum[selector];
- if (finalpos <= currentPos + compressedNum - 1)
- compressedNum = finalpos - currentPos;
- int b = bitLength[selector];
- int max = 1 << b;
- int i = 0;
- for (; i < compressedNum; i++) {
- if (max <= in[currentPos + i])
- continue mainloop;
- res = (res << b) + in[currentPos + i];
+ /**
+ * Compress an integer array using Simple9
+ *
+ *
+ * @param in
+ * array to compress
+ * @param currentPos
+ * where to start reading
+ * @param inlength
+ * how many integers to read
+ * @param out
+ * output array
+ * @param tmpoutpos
+ * location in the output array
+ * @return the number of 32-bit words written (in compressed form)
+ */
+ public static int compress(int[] in, int currentPos, int inlength, int out[], int tmpoutpos) {
+ int origtmpoutpos = tmpoutpos;
+ int finalpos = currentPos + inlength;
+ outer: while (currentPos < finalpos) {
+ mainloop: for (int selector = 0; selector < 8; selector++) {
+ int res = 0;
+ int compressedNum = codeNum[selector];
+ if (finalpos <= currentPos + compressedNum - 1)
+ compressedNum = finalpos - currentPos;
+ int b = bitLength[selector];
+ int max = 1 << b;
+ int i = 0;
+ for (; i < compressedNum; i++) {
+ if (Util.smallerorequalthan(max, in[currentPos + i]))
+ continue mainloop;
+ res = (res << b) + in[currentPos + i];
+ }
+ if (compressedNum != codeNum[selector])
+ res <<= (codeNum[selector] - compressedNum) * b;
+ res |= selector << 28;
+ out[tmpoutpos++] = res;
+ currentPos += compressedNum;
+ continue outer;
+ }
+ final int selector = 8;
+ if (in[currentPos] >= 1 << bitLength[selector])
+ throw new RuntimeException("Too big a number");
+ out[tmpoutpos++] = in[currentPos++] | (selector << 28);
}
- if (compressedNum != codeNum[selector])
- res <<= (codeNum[selector] - compressedNum) * b;
- res |= selector << 28;
- out[tmpoutpos++] = res;
- currentPos += compressedNum;
- continue outer;
- }
- final int selector = 8;
- // Util.assertTrue(codeNum[selector] == 1);
- if (in[currentPos] >= 1 << bitLength[selector])
- throw new RuntimeException("Too big a number");
- out[tmpoutpos++] = in[currentPos++] | (selector << 28);
+ return tmpoutpos - origtmpoutpos;
}
- // Util.assertTrue(currentPos == finalpos);
- return tmpoutpos - origtmpoutpos;
- }
- public static void uncompress(int[] in, int tmpinpos, int inlength,
- int[] out, int currentPos, int outlength) {
- int finallength = currentPos + outlength;
+ /**
+ * Uncompressed data from an input array into an output array
+ *
+ * @param in
+ * input array (in compressed form)
+ * @param tmpinpos
+ * starting location in the compressed input array
+ * @param inlength
+ * how much data we wish the read (in 32-bit words)
+ * @param out
+ * output array (in decompressed form)
+ * @param currentPos
+ * current position in the output array
+ * @param outlength
+ * available data in the output array
+ */
+ public static void uncompress(int[] in, int tmpinpos, int inlength, int[] out, int currentPos, int outlength) {
+ int finallength = currentPos + outlength;
- while (currentPos < finallength) {
- int val = in[tmpinpos++];
- int header = val >>> 28;
- switch (header) {
- case 0: { // number : 28, bitwidth : 1
- final int howmany = finallength - currentPos < 28 ? finallength
- - currentPos : 28;
- for (int k = 0; k < howmany; ++k) {
- out[currentPos++] = (val << (k + 4)) >>> 31;
- }
- break;
- }
- case 1: { // number : 14, bitwidth : 2
- final int howmany = finallength - currentPos < 14 ? finallength
- - currentPos : 14;
- for (int k = 0; k < howmany; ++k) {
- out[currentPos++] = (val << (2 * k + 4)) >>> 30;
- }
- break;
- }
- case 2: { // number : 9, bitwidth : 3
- final int howmany = finallength - currentPos < 9 ? finallength
- - currentPos : 9;
- for (int k = 0; k < howmany; ++k) {
- out[currentPos++] = (val << (3 * k + 5)) >>> 29;
+ while (currentPos < finallength) {
+ int val = in[tmpinpos++];
+ int header = val >>> 28;
+ switch (header) {
+ case 0: { // number : 28, bitwidth : 1
+ final int howmany = finallength - currentPos < 28 ? finallength - currentPos : 28;
+ for (int k = 0; k < howmany; ++k) {
+ out[currentPos++] = (val << (k + 4)) >>> 31;
+ }
+ break;
+ }
+ case 1: { // number : 14, bitwidth : 2
+ final int howmany = finallength - currentPos < 14 ? finallength - currentPos : 14;
+ for (int k = 0; k < howmany; ++k) {
+ out[currentPos++] = (val << (2 * k + 4)) >>> 30;
+ }
+ break;
+ }
+ case 2: { // number : 9, bitwidth : 3
+ final int howmany = finallength - currentPos < 9 ? finallength - currentPos : 9;
+ for (int k = 0; k < howmany; ++k) {
+ out[currentPos++] = (val << (3 * k + 5)) >>> 29;
+ }
+ break;
+ }
+ case 3: { // number : 7, bitwidth : 4
+ final int howmany = finallength - currentPos < 7 ? finallength - currentPos : 7;
+ for (int k = 0; k < howmany; ++k) {
+ out[currentPos++] = (val << (4 * k + 4)) >>> 28;
+ }
+ break;
+ }
+ case 4: { // number : 5, bitwidth : 5
+ final int howmany = finallength - currentPos < 5 ? finallength - currentPos : 5;
+ for (int k = 0; k < howmany; ++k) {
+ out[currentPos++] = (val << (5 * k + 7)) >>> 27;
+ }
+ break;
+ }
+ case 5: { // number : 4, bitwidth : 7
+ final int howmany = finallength - currentPos < 4 ? finallength - currentPos : 4;
+ for (int k = 0; k < howmany; ++k) {
+ out[currentPos++] = (val << (7 * k + 4)) >>> 25;
+ }
+ break;
+ }
+ case 6: { // number : 3, bitwidth : 9
+ final int howmany = finallength - currentPos < 3 ? finallength - currentPos : 3;
+ for (int k = 0; k < howmany; ++k) {
+ out[currentPos++] = (val << (9 * k + 5)) >>> 23;
+ }
+ break;
+ }
+ case 7: { // number : 2, bitwidth : 14
+ final int howmany = finallength - currentPos < 2 ? finallength - currentPos : 2;
+ for (int k = 0; k < howmany; ++k) {
+ out[currentPos++] = (val << (14 * k + 4)) >>> 18;
+ }
+ break;
+ }
+ case 8: { // number : 1, bitwidth : 28
+ out[currentPos++] = (val << 4) >>> 4;
+ break;
+ }
+ default: {
+ throw new RuntimeException("shouldn't happen");
+ }
+ }
}
- break;
- }
- case 3: { // number : 7, bitwidth : 4
- final int howmany = finallength - currentPos < 7 ? finallength
- - currentPos : 7;
- for (int k = 0; k < howmany; ++k) {
- out[currentPos++] = (val << (4 * k + 4)) >>> 28;
- }
- break;
- }
- case 4: { // number : 5, bitwidth : 5
- final int howmany = finallength - currentPos < 5 ? finallength
- - currentPos : 5;
- for (int k = 0; k < howmany; ++k) {
- out[currentPos++] = (val << (5 * k + 7)) >>> 27;
- }
- break;
- }
- case 5: { // number : 4, bitwidth : 7
- final int howmany = finallength - currentPos < 4 ? finallength
- - currentPos : 4;
- for (int k = 0; k < howmany; ++k) {
- out[currentPos++] = (val << (7 * k + 4)) >>> 25;
- }
- break;
- }
- case 6: { // number : 3, bitwidth : 9
- final int howmany = finallength - currentPos < 3 ? finallength
- - currentPos : 3;
- for (int k = 0; k < howmany; ++k) {
- out[currentPos++] = (val << (9 * k + 5)) >>> 23;
- }
- break;
- }
- case 7: { // number : 2, bitwidth : 14
- final int howmany = finallength - currentPos < 2 ? finallength
- - currentPos : 2;
- for (int k = 0; k < howmany; ++k) {
- out[currentPos++] = (val << (14 * k + 4)) >>> 18;
- }
- break;
- }
- case 8: { // number : 1, bitwidth : 28
- out[currentPos++] = (val << 4) >>> 4;
- break;
- }
- default: {
- throw new RuntimeException("shouldn't happen");
- }
- }
- }
- // Util.assertTrue(currentPos == finallength);
- // Util.assertTrue(tmpinpos <= finalin);
- }
-
- private final static int bitLength[] = { 1, 2, 3, 4, 5, 7, 9, 14, 28 };
+ }
- private final static int codeNum[] = { 28, 14, 9, 7, 5, 4, 3, 2, 1 };
+ private final static int bitLength[] = { 1, 2, 3, 4, 5, 7, 9, 14, 28 };
-
+ private final static int codeNum[] = { 28, 14, 9, 7, 5, 4, 3, 2, 1 };
}
diff --git a/src/main/java/me/lemire/integercompression/Simple16.java b/src/main/java/me/lemire/integercompression/Simple16.java
new file mode 100644
index 0000000..2b7f27f
--- /dev/null
+++ b/src/main/java/me/lemire/integercompression/Simple16.java
@@ -0,0 +1,191 @@
+package me.lemire.integercompression;
+
+/**
+ * This is an implementation of the popular Simple16 scheme. It is limited to
+ * 28-bit integers (between 0 and 2^28-1).
+ *
+ * Note that this does not use differential coding: if you are working on sorted
+ * lists, you must compute the deltas separately.
+ *
+ *
+ * Adapted by D. Lemire from the Apache Lucene project.
+ *
+ */
+public final class Simple16 implements IntegerCODEC, SkippableIntegerCODEC {
+
+ public void headlessCompress(int[] in, IntWrapper inpos, int inlength, int out[], IntWrapper outpos) {
+ int i_inpos = inpos.get();
+ int i_outpos = outpos.get();
+ final int finalin = i_inpos + inlength;
+ while (i_inpos < finalin) {
+ int inoffset = compressblock(out, i_outpos++, in, i_inpos, inlength);
+ if (inoffset == -1)
+ throw new RuntimeException("Too big a number");
+ i_inpos += inoffset;
+ inlength -= inoffset;
+ }
+ inpos.set(i_inpos);
+ outpos.set(i_outpos);
+ }
+
+ /**
+ * Compress an integer array using Simple16
+ *
+ * @param out
+ * the compressed output
+ * @param outOffset
+ * the offset of the output in the number of integers
+ * @param in
+ * the integer input array
+ * @param inOffset
+ * the offset of the input in the number of integers
+ * @param n
+ * the number of elements to be compressed
+ * @return the number of compressed integers
+ */
+ public static final int compressblock(int[] out, int outOffset, int[] in, int inOffset, int n) {
+ int numIdx, j, num, bits;
+ for (numIdx = 0; numIdx < S16_NUMSIZE; numIdx++) {
+ out[outOffset] = numIdx << S16_BITSSIZE;
+ num = (S16_NUM[numIdx] < n) ? S16_NUM[numIdx] : n;
+
+ for (j = 0, bits = 0; (j < num) && (in[inOffset + j] < SHIFTED_S16_BITS[numIdx][j]);) {
+ out[outOffset] |= (in[inOffset + j] << bits);
+ bits += S16_BITS[numIdx][j];
+ j++;
+ }
+
+ if (j == num) {
+ return num;
+ }
+ }
+
+ return -1;
+ }
+
+ /**
+ * Decompress an integer array using Simple16
+ *
+ * @param out
+ * the decompressed output
+ * @param outOffset
+ * the offset of the output in the number of integers
+ * @param in
+ * the compressed input array
+ * @param inOffset
+ * the offset of the input in the number of integers
+ * @param n
+ * the number of elements to be compressed
+ * @return the number of processed integers
+ */
+ public static final int decompressblock(int[] out, int outOffset, int[] in, int inOffset, int n) {
+ int numIdx, j = 0, bits = 0;
+ numIdx = in[inOffset] >>> S16_BITSSIZE;
+ int num = S16_NUM[numIdx] < n ? S16_NUM[numIdx] : n;
+ for (j = 0, bits = 0; j < num; j++) {
+ out[outOffset + j] = (in[inOffset] >>> bits) & (0xffffffff >>> (32 - S16_BITS[numIdx][j]));
+ bits += S16_BITS[numIdx][j];
+ }
+ return num;
+ }
+
+ @Override
+ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos, int num) {
+ int i_inpos = inpos.get();
+ int i_outpos = outpos.get();
+ while (num > 0) {
+ final int howmany = decompressblock(out, i_outpos, in, i_inpos, num);
+ num -= howmany;
+ i_outpos += howmany;
+ i_inpos++;
+ }
+ inpos.set(i_inpos);
+ outpos.set(i_outpos);
+ }
+
+ @Override
+ public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) {
+ compressedPositions.add(inlength);
+ return inlength;
+ }
+
+ /**
+ * Uncompress data from an array to another array.
+ *
+ * Both inpos and outpos parameters are modified to indicate new positions
+ * after read/write.
+ *
+ * @param in
+ * array containing data in compressed form
+ * @param tmpinpos
+ * where to start reading in the array
+ * @param inlength
+ * length of the compressed data (ignored by some schemes)
+ * @param out
+ * array where to write the compressed output
+ * @param currentPos
+ * where to write the compressed output in out
+ * @param outlength
+ * number of integers we want to decode
+ */
+ public static void uncompress(int[] in, int tmpinpos, int inlength, int[] out, int currentPos, int outlength) {
+ final int finalpos = tmpinpos + inlength;
+ while (tmpinpos < finalpos) {
+ final int howmany = decompressblock(out, currentPos, in, tmpinpos, outlength);
+ outlength -= howmany;
+ currentPos += howmany;
+ tmpinpos += 1;
+ }
+
+ }
+
+ private static int[][] shiftme(int[][] x) {
+ int[][] answer = new int[x.length][];
+ for (int k = 0; k < x.length; ++k) {
+ answer[k] = new int[x[k].length];
+ for (int z = 0; z < answer[k].length; ++z)
+ answer[k][z] = 1 << x[k][z];
+ }
+ return answer;
+ }
+
+ @Override
+ public void compress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) {
+ if (inlength == 0)
+ return;
+ out[outpos.get()] = inlength;
+ outpos.increment();
+ headlessCompress(in, inpos, inlength, out, outpos);
+ }
+
+ @Override
+ public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) {
+ if (inlength == 0)
+ return;
+ final int outlength = in[inpos.get()];
+ inpos.increment();
+ headlessUncompress(in, inpos, inlength, out, outpos, outlength);
+
+ }
+
+ @Override
+ public String toString() {
+ return this.getClass().getSimpleName();
+ }
+
+ private static final int S16_NUMSIZE = 16;
+ private static final int S16_BITSSIZE = 28;
+ // the possible number of bits used to represent one integer
+ private static final int[] S16_NUM = { 28, 21, 21, 21, 14, 9, 8, 7, 6, 6, 5, 5, 4, 3, 2, 1 };
+ // the corresponding number of elements for each value of the number of bits
+ private static final int[][] S16_BITS = {
+ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
+ { 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
+ { 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1 },
+ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2 },
+ { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 }, { 4, 3, 3, 3, 3, 3, 3, 3, 3 }, { 3, 4, 4, 4, 4, 3, 3, 3 },
+ { 4, 4, 4, 4, 4, 4, 4 }, { 5, 5, 5, 5, 4, 4 }, { 4, 4, 5, 5, 5, 5 }, { 6, 6, 6, 5, 5 }, { 5, 5, 6, 6, 6 },
+ { 7, 7, 7, 7 }, { 10, 9, 9, }, { 14, 14 }, { 28 } };
+ private static final int[][] SHIFTED_S16_BITS = shiftme(S16_BITS);
+
+}
diff --git a/src/main/java/me/lemire/integercompression/Simple9.java b/src/main/java/me/lemire/integercompression/Simple9.java
index 35d6fbc..fd5194d 100644
--- a/src/main/java/me/lemire/integercompression/Simple9.java
+++ b/src/main/java/me/lemire/integercompression/Simple9.java
@@ -7,282 +7,299 @@
package me.lemire.integercompression;
+/**
+ * This is an implementation of the popular Simple9 scheme. It is limited to
+ * 28-bit integers (between 0 and 2^28-1).
+ *
+ * Note that this does not use differential coding: if you are working on sorted
+ * lists, you must compute the deltas separately.
+ *
+ * @author Daniel Lemire
+ *
+ */
+public final class Simple9 implements IntegerCODEC, SkippableIntegerCODEC {
+
-public final class Simple9 implements IntegerCODEC {
- // @Override
- @Override
-public void compress(int[] in, IntWrapper inpos, int inlength, int out[],
- IntWrapper outpos) {
- // Util.assertTrue(inpos.get()+inlength <= in.length);
- int tmpoutpos = outpos.get();
- int currentPos = inpos.get();
- out[tmpoutpos++] = inlength;
- final int finalin = currentPos + inlength;
- // Util.assertTrue(finalin <= in.length);
- outer: while (currentPos < finalin - 28) {
- mainloop: for (int selector = 0; selector < 8; selector++) {
+ @Override
+ public void headlessCompress(int[] in, IntWrapper inpos, int inlength, int out[], IntWrapper outpos) {
+ int tmpoutpos = outpos.get();
+ int currentPos = inpos.get();
+ final int finalin = currentPos + inlength;
+ outer: while (currentPos < finalin - 28) {
+ mainloop: for (int selector = 0; selector < 8; selector++) {
+
+ int res = 0;
+ int compressedNum = codeNum[selector];
+ int b = bitLength[selector];
+ int max = 1 << b;
+ int i = 0;
+ for (; i < compressedNum; i++) {
+ if (max <= in[currentPos + i])
+ continue mainloop;
+ res = (res << b) + in[currentPos + i];
+ }
+ res |= selector << 28;
+ out[tmpoutpos++] = res;
+ currentPos += compressedNum;
+ continue outer;
+ }
+ final int selector = 8;
+ if (in[currentPos] >= 1 << bitLength[selector])
+ throw new RuntimeException("Too big a number");
+ out[tmpoutpos++] = in[currentPos++] | (selector << 28);
+ }
+ outer: while (currentPos < finalin) {
+ mainloop: for (int selector = 0; selector < 8; selector++) {
+ int res = 0;
+ int compressedNum = codeNum[selector];
+ if (finalin <= currentPos + compressedNum - 1)
+ compressedNum = finalin - currentPos;
+ int b = bitLength[selector];
+ int max = 1 << b;
+ int i = 0;
+ for (; i < compressedNum; i++) {
+ if (max <= in[currentPos + i])
+ continue mainloop;
+ res = (res << b) + in[currentPos + i];
+ }
- int res = 0;
- int compressedNum = codeNum[selector];
- int b = bitLength[selector];
- int max = 1 << b;
- int i = 0;
- for (; i < compressedNum; i++) {
- if (max <= in[currentPos + i])
- continue mainloop;
- res = (res << b) + in[currentPos + i];
+ if (compressedNum != codeNum[selector])
+ res <<= (codeNum[selector] - compressedNum) * b;
+ res |= selector << 28;
+ out[tmpoutpos++] = res;
+ currentPos += compressedNum;
+ continue outer;
+ }
+ final int selector = 8;
+ if (in[currentPos] >= 1 << bitLength[selector])
+ throw new RuntimeException("Too big a number");
+ out[tmpoutpos++] = in[currentPos++] | (selector << 28);
}
- res |= selector << 28;
- out[tmpoutpos++] = res;
- currentPos += compressedNum;
- continue outer;
- }
- final int selector = 8;
- if (in[currentPos] >= 1 << bitLength[selector])
- throw new RuntimeException("Too big a number");
- out[tmpoutpos++] = in[currentPos++] | (selector << 28);
+ inpos.set(currentPos);
+ outpos.set(tmpoutpos);
}
- outer: while (currentPos < finalin) {
- mainloop: for (int selector = 0; selector < 8; selector++) {
- int res = 0;
- int compressedNum = codeNum[selector];
- if (finalin <= currentPos + compressedNum - 1)
- compressedNum = finalin - currentPos;
- int b = bitLength[selector];
- int max = 1 << b;
- int i = 0;
- for (; i < compressedNum; i++) {
- if (max <= in[currentPos + i])
- continue mainloop;
- res = (res << b) + in[currentPos + i];
+
+ @Override
+ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos,
+ int outlength) {
+ int currentPos = outpos.get();
+ int tmpinpos = inpos.get();
+ final int finalout = currentPos + outlength;
+ while (currentPos < finalout - 28) {
+ int val = in[tmpinpos++];
+ int header = val >>> 28;
+ switch (header) {
+ case 0: { // number : 28, bitwidth : 1
+ out[currentPos++] = (val << 4) >>> 31;
+ out[currentPos++] = (val << 5) >>> 31;
+ out[currentPos++] = (val << 6) >>> 31;
+ out[currentPos++] = (val << 7) >>> 31;
+ out[currentPos++] = (val << 8) >>> 31;
+ out[currentPos++] = (val << 9) >>> 31;
+ out[currentPos++] = (val << 10) >>> 31;
+ out[currentPos++] = (val << 11) >>> 31;
+ out[currentPos++] = (val << 12) >>> 31;
+ out[currentPos++] = (val << 13) >>> 31; // 10
+ out[currentPos++] = (val << 14) >>> 31;
+ out[currentPos++] = (val << 15) >>> 31;
+ out[currentPos++] = (val << 16) >>> 31;
+ out[currentPos++] = (val << 17) >>> 31;
+ out[currentPos++] = (val << 18) >>> 31;
+ out[currentPos++] = (val << 19) >>> 31;
+ out[currentPos++] = (val << 20) >>> 31;
+ out[currentPos++] = (val << 21) >>> 31;
+ out[currentPos++] = (val << 22) >>> 31;
+ out[currentPos++] = (val << 23) >>> 31; // 20
+ out[currentPos++] = (val << 24) >>> 31;
+ out[currentPos++] = (val << 25) >>> 31;
+ out[currentPos++] = (val << 26) >>> 31;
+ out[currentPos++] = (val << 27) >>> 31;
+ out[currentPos++] = (val << 28) >>> 31;
+ out[currentPos++] = (val << 29) >>> 31;
+ out[currentPos++] = (val << 30) >>> 31;
+ out[currentPos++] = (val << 31) >>> 31;
+ break;
+ }
+ case 1: { // number : 14, bitwidth : 2
+ out[currentPos++] = (val << 4) >>> 30;
+ out[currentPos++] = (val << 6) >>> 30;
+ out[currentPos++] = (val << 8) >>> 30;
+ out[currentPos++] = (val << 10) >>> 30;
+ out[currentPos++] = (val << 12) >>> 30;
+ out[currentPos++] = (val << 14) >>> 30;
+ out[currentPos++] = (val << 16) >>> 30;
+ out[currentPos++] = (val << 18) >>> 30;
+ out[currentPos++] = (val << 20) >>> 30;
+ out[currentPos++] = (val << 22) >>> 30; // 10
+ out[currentPos++] = (val << 24) >>> 30;
+ out[currentPos++] = (val << 26) >>> 30;
+ out[currentPos++] = (val << 28) >>> 30;
+ out[currentPos++] = (val << 30) >>> 30;
+ break;
+ }
+ case 2: { // number : 9, bitwidth : 3
+ out[currentPos++] = (val << 5) >>> 29;
+ out[currentPos++] = (val << 8) >>> 29;
+ out[currentPos++] = (val << 11) >>> 29;
+ out[currentPos++] = (val << 14) >>> 29;
+ out[currentPos++] = (val << 17) >>> 29;
+ out[currentPos++] = (val << 20) >>> 29;
+ out[currentPos++] = (val << 23) >>> 29;
+ out[currentPos++] = (val << 26) >>> 29;
+ out[currentPos++] = (val << 29) >>> 29;
+ break;
+ }
+ case 3: { // number : 7, bitwidth : 4
+ out[currentPos++] = (val << 4) >>> 28;
+ out[currentPos++] = (val << 8) >>> 28;
+ out[currentPos++] = (val << 12) >>> 28;
+ out[currentPos++] = (val << 16) >>> 28;
+ out[currentPos++] = (val << 20) >>> 28;
+ out[currentPos++] = (val << 24) >>> 28;
+ out[currentPos++] = (val << 28) >>> 28;
+ break;
+ }
+ case 4: { // number : 5, bitwidth : 5
+ out[currentPos++] = (val << 7) >>> 27;
+ out[currentPos++] = (val << 12) >>> 27;
+ out[currentPos++] = (val << 17) >>> 27;
+ out[currentPos++] = (val << 22) >>> 27;
+ out[currentPos++] = (val << 27) >>> 27;
+ break;
+ }
+ case 5: { // number : 4, bitwidth : 7
+ out[currentPos++] = (val << 4) >>> 25;
+ out[currentPos++] = (val << 11) >>> 25;
+ out[currentPos++] = (val << 18) >>> 25;
+ out[currentPos++] = (val << 25) >>> 25;
+ break;
+ }
+ case 6: { // number : 3, bitwidth : 9
+ out[currentPos++] = (val << 5) >>> 23;
+ out[currentPos++] = (val << 14) >>> 23;
+ out[currentPos++] = (val << 23) >>> 23;
+ break;
+ }
+ case 7: { // number : 2, bitwidth : 14
+ out[currentPos++] = (val << 4) >>> 18;
+ out[currentPos++] = (val << 18) >>> 18;
+ break;
+ }
+ case 8: { // number : 1, bitwidth : 28
+ out[currentPos++] = (val << 4) >>> 4;
+ break;
+ }
+ default: {
+ throw new RuntimeException("shouldn't happen: limited to 28-bit integers");
+ }
+ }
+ }
+ while (currentPos < finalout) {
+ int val = in[tmpinpos++];
+ int header = val >>> 28;
+ switch (header) {
+ case 0: { // number : 28, bitwidth : 1
+ final int howmany = finalout - currentPos;
+ for (int k = 0; k < howmany; ++k) {
+ out[currentPos++] = (val << (k + 4)) >>> 31;
+ }
+ break;
+ }
+ case 1: { // number : 14, bitwidth : 2
+ final int howmany = finalout - currentPos < 14 ? finalout - currentPos : 14;
+ for (int k = 0; k < howmany; ++k) {
+ out[currentPos++] = (val << (2 * k + 4)) >>> 30;
+ }
+ break;
+ }
+ case 2: { // number : 9, bitwidth : 3
+ final int howmany = finalout - currentPos < 9 ? finalout - currentPos : 9;
+ for (int k = 0; k < howmany; ++k) {
+ out[currentPos++] = (val << (3 * k + 5)) >>> 29;
+ }
+ break;
+ }
+ case 3: { // number : 7, bitwidth : 4
+ final int howmany = finalout - currentPos < 7 ? finalout - currentPos : 7;
+ for (int k = 0; k < howmany; ++k) {
+ out[currentPos++] = (val << (4 * k + 4)) >>> 28;
+ }
+ break;
+ }
+ case 4: { // number : 5, bitwidth : 5
+ final int howmany = finalout - currentPos < 5 ? finalout - currentPos : 5;
+ for (int k = 0; k < howmany; ++k) {
+ out[currentPos++] = (val << (5 * k + 7)) >>> 27;
+ }
+ break;
+ }
+ case 5: { // number : 4, bitwidth : 7
+ final int howmany = finalout - currentPos < 4 ? finalout - currentPos : 4;
+ for (int k = 0; k < howmany; ++k) {
+ out[currentPos++] = (val << (7 * k + 4)) >>> 25;
+ }
+ break;
+ }
+ case 6: { // number : 3, bitwidth : 9
+ final int howmany = finalout - currentPos < 3 ? finalout - currentPos : 3;
+ for (int k = 0; k < howmany; ++k) {
+ out[currentPos++] = (val << (9 * k + 5)) >>> 23;
+ }
+ break;
+ }
+ case 7: { // number : 2, bitwidth : 14
+ final int howmany = finalout - currentPos < 2 ? finalout - currentPos : 2;
+ for (int k = 0; k < howmany; ++k) {
+ out[currentPos++] = (val << (14 * k + 4)) >>> 18;
+ }
+ break;
+ }
+ case 8: { // number : 1, bitwidth : 28
+ out[currentPos++] = (val << 4) >>> 4;
+ break;
+ }
+ default: {
+ throw new RuntimeException("shouldn't happen");
+ }
+ }
}
+ outpos.set(currentPos);
+ inpos.set(tmpinpos);
- if (compressedNum != codeNum[selector])
- res <<= (codeNum[selector] - compressedNum) * b;
- res |= selector << 28;
- out[tmpoutpos++] = res;
- currentPos += compressedNum;
- continue outer;
- }
- final int selector = 8;
- // Util.assertTrue(codeNum[selector] == 1);
- if (in[currentPos] >= 1 << bitLength[selector])
- throw new RuntimeException("Too big a number");
- out[tmpoutpos++] = in[currentPos++] | (selector << 28);
}
- // Util.assertTrue(currentPos == finalin);
- inpos.set(currentPos);
- outpos.set(tmpoutpos);
- }
- // @Override
- @Override
-public void uncompress(int[] in, IntWrapper inpos, int inlength,
- int[] out, IntWrapper outpos) {
- // Util.assertTrue(inpos.get()+inlength <= in.length);
- int currentPos = outpos.get();
- int tmpinpos = inpos.get();
- final int finalout = currentPos + in[tmpinpos++];
- // Util.assertTrue(finalout <= out.length);
- while (currentPos < finalout - 28) {
- int val = in[tmpinpos++];
- int header = val >>> 28;
- switch (header) {
- case 0: { // number : 28, bitwidth : 1
- out[currentPos++] = (val << 4) >>> 31;
- out[currentPos++] = (val << 5) >>> 31;
- out[currentPos++] = (val << 6) >>> 31;
- out[currentPos++] = (val << 7) >>> 31;
- out[currentPos++] = (val << 8) >>> 31;
- out[currentPos++] = (val << 9) >>> 31;
- out[currentPos++] = (val << 10) >>> 31;
- out[currentPos++] = (val << 11) >>> 31;
- out[currentPos++] = (val << 12) >>> 31;
- out[currentPos++] = (val << 13) >>> 31; // 10
- out[currentPos++] = (val << 14) >>> 31;
- out[currentPos++] = (val << 15) >>> 31;
- out[currentPos++] = (val << 16) >>> 31;
- out[currentPos++] = (val << 17) >>> 31;
- out[currentPos++] = (val << 18) >>> 31;
- out[currentPos++] = (val << 19) >>> 31;
- out[currentPos++] = (val << 20) >>> 31;
- out[currentPos++] = (val << 21) >>> 31;
- out[currentPos++] = (val << 22) >>> 31;
- out[currentPos++] = (val << 23) >>> 31; // 20
- out[currentPos++] = (val << 24) >>> 31;
- out[currentPos++] = (val << 25) >>> 31;
- out[currentPos++] = (val << 26) >>> 31;
- out[currentPos++] = (val << 27) >>> 31;
- out[currentPos++] = (val << 28) >>> 31;
- out[currentPos++] = (val << 29) >>> 31;
- out[currentPos++] = (val << 30) >>> 31;
- out[currentPos++] = (val << 31) >>> 31;
- break;
- }
- case 1: { // number : 14, bitwidth : 2
- out[currentPos++] = (val << 4) >>> 30;
- out[currentPos++] = (val << 6) >>> 30;
- out[currentPos++] = (val << 8) >>> 30;
- out[currentPos++] = (val << 10) >>> 30;
- out[currentPos++] = (val << 12) >>> 30;
- out[currentPos++] = (val << 14) >>> 30;
- out[currentPos++] = (val << 16) >>> 30;
- out[currentPos++] = (val << 18) >>> 30;
- out[currentPos++] = (val << 20) >>> 30;
- out[currentPos++] = (val << 22) >>> 30; // 10
- out[currentPos++] = (val << 24) >>> 30;
- out[currentPos++] = (val << 26) >>> 30;
- out[currentPos++] = (val << 28) >>> 30;
- out[currentPos++] = (val << 30) >>> 30;
- break;
- }
- case 2: { // number : 9, bitwidth : 3
- out[currentPos++] = (val << 5) >>> 29;
- out[currentPos++] = (val << 8) >>> 29;
- out[currentPos++] = (val << 11) >>> 29;
- out[currentPos++] = (val << 14) >>> 29;
- out[currentPos++] = (val << 17) >>> 29;
- out[currentPos++] = (val << 20) >>> 29;
- out[currentPos++] = (val << 23) >>> 29;
- out[currentPos++] = (val << 26) >>> 29;
- out[currentPos++] = (val << 29) >>> 29;
- break;
- }
- case 3: { // number : 7, bitwidth : 4
- out[currentPos++] = (val << 4) >>> 28;
- out[currentPos++] = (val << 8) >>> 28;
- out[currentPos++] = (val << 12) >>> 28;
- out[currentPos++] = (val << 16) >>> 28;
- out[currentPos++] = (val << 20) >>> 28;
- out[currentPos++] = (val << 24) >>> 28;
- out[currentPos++] = (val << 28) >>> 28;
- break;
- }
- case 4: { // number : 5, bitwidth : 5
- out[currentPos++] = (val << 7) >>> 27;
- out[currentPos++] = (val << 12) >>> 27;
- out[currentPos++] = (val << 17) >>> 27;
- out[currentPos++] = (val << 22) >>> 27;
- out[currentPos++] = (val << 27) >>> 27;
- break;
- }
- case 5: { // number : 4, bitwidth : 7
- out[currentPos++] = (val << 4) >>> 25;
- out[currentPos++] = (val << 11) >>> 25;
- out[currentPos++] = (val << 18) >>> 25;
- out[currentPos++] = (val << 25) >>> 25;
- break;
- }
- case 6: { // number : 3, bitwidth : 9
- out[currentPos++] = (val << 5) >>> 23;
- out[currentPos++] = (val << 14) >>> 23;
- out[currentPos++] = (val << 23) >>> 23;
- break;
- }
- case 7: { // number : 2, bitwidth : 14
- out[currentPos++] = (val << 4) >>> 18;
- out[currentPos++] = (val << 18) >>> 18;
- break;
- }
- case 8: { // number : 1, bitwidth : 28
- out[currentPos++] = (val << 4) >>> 4;
- break;
- }
- default: {
- throw new RuntimeException("shouldn't happen");
- }
- }
+ @Override
+ public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) {
+ compressedPositions.add(inlength);
+ return inlength;
}
- while (currentPos < finalout) {
- int val = in[tmpinpos++];
- int header = val >>> 28;
- switch (header) {
- case 0: { // number : 28, bitwidth : 1
- final int howmany = finalout - currentPos;
- for (int k = 0; k < howmany; ++k) {
- out[currentPos++] = (val << (k + 4)) >>> 31;
- }
- break;
- }
- case 1: { // number : 14, bitwidth : 2
- final int howmany = finalout - currentPos < 14 ? finalout - currentPos
- : 14;
- for (int k = 0; k < howmany; ++k) {
- out[currentPos++] = (val << (2 * k + 4)) >>> 30;
- }
- break;
- }
- case 2: { // number : 9, bitwidth : 3
- final int howmany = finalout - currentPos < 9 ? finalout - currentPos
- : 9;
- for (int k = 0; k < howmany; ++k) {
- out[currentPos++] = (val << (3 * k + 5)) >>> 29;
- }
- break;
- }
- case 3: { // number : 7, bitwidth : 4
- final int howmany = finalout - currentPos < 7 ? finalout - currentPos
- : 7;
- for (int k = 0; k < howmany; ++k) {
- out[currentPos++] = (val << (4 * k + 4)) >>> 28;
- }
- break;
- }
- case 4: { // number : 5, bitwidth : 5
- final int howmany = finalout - currentPos < 5 ? finalout - currentPos
- : 5;
- for (int k = 0; k < howmany; ++k) {
- out[currentPos++] = (val << (5 * k + 7)) >>> 27;
- }
- break;
- }
- case 5: { // number : 4, bitwidth : 7
- final int howmany = finalout - currentPos < 4 ? finalout - currentPos
- : 4;
- for (int k = 0; k < howmany; ++k) {
- out[currentPos++] = (val << (7 * k + 4)) >>> 25;
- }
- break;
- }
- case 6: { // number : 3, bitwidth : 9
- final int howmany = finalout - currentPos < 3 ? finalout - currentPos
- : 3;
- for (int k = 0; k < howmany; ++k) {
- out[currentPos++] = (val << (9 * k + 5)) >>> 23;
- }
- break;
- }
- case 7: { // number : 2, bitwidth : 14
- final int howmany = finalout - currentPos < 2 ? finalout - currentPos
- : 2;
- for (int k = 0; k < howmany; ++k) {
- out[currentPos++] = (val << (14 * k + 4)) >>> 18;
- }
- break;
- }
- case 8: { // number : 1, bitwidth : 28
- out[currentPos++] = (val << 4) >>> 4;
- break;
- }
- default: {
- throw new RuntimeException("shouldn't happen");
- }
- }
+
+ @Override
+ public void compress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) {
+ if (inlength == 0)
+ return;
+ out[outpos.get()] = inlength;
+ outpos.increment();
+ headlessCompress(in, inpos, inlength, out, outpos);
}
- // Util.assertTrue(currentPos == finalout);
- outpos.set(currentPos);
- inpos.set(tmpinpos);
- }
+ @Override
+ public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) {
+ if (inlength == 0)
+ return;
+ final int outlength = in[inpos.get()];
+ inpos.increment();
+ headlessUncompress(in, inpos, inlength, out, outpos, outlength);
- private final static int bitLength[] = { 1, 2, 3, 4, 5, 7, 9, 14, 28 };
+ }
- private final static int codeNum[] = { 28, 14, 9, 7, 5, 4, 3, 2, 1 };
+ private final static int bitLength[] = { 1, 2, 3, 4, 5, 7, 9, 14, 28 };
+ private final static int codeNum[] = { 28, 14, 9, 7, 5, 4, 3, 2, 1 };
- @Override
-public String toString() {
- return this.getClass().getName();
- }
+ @Override
+ public String toString() {
+ return this.getClass().getSimpleName();
+ }
}
diff --git a/src/main/java/me/lemire/integercompression/SkippableComposition.java b/src/main/java/me/lemire/integercompression/SkippableComposition.java
new file mode 100644
index 0000000..fc3c18e
--- /dev/null
+++ b/src/main/java/me/lemire/integercompression/SkippableComposition.java
@@ -0,0 +1,81 @@
+/**
+ * This is code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+package me.lemire.integercompression;
+
+
+/**
+ * Helper class to compose schemes.
+ *
+ * @author Daniel Lemire
+ */
+public class SkippableComposition implements SkippableIntegerCODEC {
+ SkippableIntegerCODEC F1, F2;
+
+ /**
+ * Compose a scheme from a first one (f1) and a second one (f2). The first
+ * one is called first and then the second one tries to compress whatever
+ * remains from the first run.
+ *
+ * By convention, the first scheme should be such that if, during decoding,
+ * a 32-bit zero is first encountered, then there is no output.
+ *
+ * @param f1
+ * first codec
+ * @param f2
+ * second codec
+ */
+ public SkippableComposition(SkippableIntegerCODEC f1,
+ SkippableIntegerCODEC f2) {
+ F1 = f1;
+ F2 = f2;
+ }
+
+ @Override
+ public void headlessCompress(int[] in, IntWrapper inpos, int inlength, int[] out,
+ IntWrapper outpos) {
+ int init = inpos.get();
+ int outposInit = outpos.get();
+ F1.headlessCompress(in, inpos, inlength, out, outpos);
+ if (outpos.get() == outposInit) {
+ out[outposInit] = 0;
+ outpos.increment();
+ }
+ inlength -= inpos.get() - init;
+ F2.headlessCompress(in, inpos, inlength, out, outpos);
+ }
+
+ @Override
+ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] out,
+ IntWrapper outpos, int num) {
+ int init = inpos.get();
+ int outposInit = outpos.get();
+
+ F1.headlessUncompress(in, inpos, inlength, out, outpos, num);
+ if (inpos.get() == init) {
+ inpos.increment();
+ }
+ inlength -= inpos.get() - init;
+ num -= outpos.get() - outposInit;
+ F2.headlessUncompress(in, inpos, inlength, out, outpos, num);
+ }
+
+ @Override
+ public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) {
+ int init = compressedPositions.get();
+ int maxLength = F1.maxHeadlessCompressedLength(compressedPositions, inlength);
+ maxLength += 1; // Add +1 for the potential F2 header. Question: is this header actually needed in the headless version?
+ inlength -= compressedPositions.get() - init;
+ maxLength += F2.maxHeadlessCompressedLength(compressedPositions, inlength);
+ return maxLength;
+ }
+
+ @Override
+ public String toString() {
+ return F1.toString() + "+" + F2.toString();
+ }
+
+}
diff --git a/src/main/java/me/lemire/integercompression/SkippableIntegerCODEC.java b/src/main/java/me/lemire/integercompression/SkippableIntegerCODEC.java
new file mode 100644
index 0000000..b9bdc04
--- /dev/null
+++ b/src/main/java/me/lemire/integercompression/SkippableIntegerCODEC.java
@@ -0,0 +1,89 @@
+/**
+ * This is code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+
+package me.lemire.integercompression;
+
+
+/**
+ * Interface describing a standard CODEC to compress integers. This is a
+ * variation on the IntegerCODEC interface meant to be used for random access
+ * (i.e., given a large array, you can segment it and decode just the subarray you need).
+ *
+ * The main difference is that you must specify the number of integers you wish to
+ * uncompress. This information should be stored elsewhere.
+ *
+ * This interface was designed by the Terrier team for their search engine.
+ *
+ * @author Daniel Lemire
+ *
+ */
+public interface SkippableIntegerCODEC {
+ /**
+ * Compress data from an array to another array.
+ *
+ * Both inpos and outpos are modified to represent how much data was read
+ * and written to. If 12 ints (inlength = 12) are compressed to 3 ints, then
+ * inpos will be incremented by 12 while outpos will be incremented by 3. We
+ * use IntWrapper to pass the values by reference.
+ *
+ * Implementation note: contrary to {@link IntegerCODEC#compress},
+ * this may skip writing information about the number of encoded integers.
+ *
+ * @param in
+ * input array
+ * @param inpos
+ * where to start reading in the array
+ * @param inlength
+ * how many integers to compress
+ * @param out
+ * output array
+ * @param outpos
+ * where to write in the output array
+ */
+ public void headlessCompress(int[] in, IntWrapper inpos, int inlength, int[] out,
+ IntWrapper outpos);
+
+ /**
+ * Uncompress data from an array to another array.
+ *
+ * Both inpos and outpos parameters are modified to indicate new positions
+ * after read/write.
+ *
+ * @param in
+ * array containing data in compressed form
+ * @param inpos
+ * where to start reading in the array
+ * @param inlength
+ * length of the compressed data (ignored by some schemes)
+ * @param out
+ * array where to write the uncompressed output
+ * @param outpos
+ * where to start writing the uncompressed output in out
+ * @param num
+ * number of integers we want to decode. May be less than the actual number of compressed integers
+ */
+ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] out,
+ IntWrapper outpos, int num);
+
+ /**
+ * Compute the maximum number of integers that might be required to store
+ * the compressed form of a given input array segment, without headers.
+ *
+ * This is useful to pre-allocate the output buffer before calling
+ * {@link #headlessCompress(int[], IntWrapper, int, int[], IntWrapper)}.
+ *
+ *
+ * @param compressedPositions
+ * since not all schemes compress every input integer, this parameter
+ * returns how many input integers will actually be compressed.
+ * This is useful when composing multiple schemes.
+ * @param inlength
+ * number of integers to be compressed
+ * @return the maximum number of integers needed in the output array
+ */
+ int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength);
+}
diff --git a/src/main/java/me/lemire/integercompression/Util.java b/src/main/java/me/lemire/integercompression/Util.java
index 89efc80..63fc918 100644
--- a/src/main/java/me/lemire/integercompression/Util.java
+++ b/src/main/java/me/lemire/integercompression/Util.java
@@ -6,32 +6,205 @@
*/
package me.lemire.integercompression;
-public class Util {
- public static int maxbits(int[] i, int pos, int length) {
- int mask = 0;
- for (int k = pos; k < pos + length; ++k)
- mask |= i[k];
- return bits(mask);
- }
- public static int maxdiffbits(int initoffset, int[] i, int pos, int length) {
- int mask = 0;
- mask |= (i[pos] - initoffset);
- for (int k = pos+1; k < pos + length; ++k) {
- mask |= i[k] - i[k-1];
- }
- return bits(mask);
- }
-
- public static int bits(int i) {
- return 32 - Integer.numberOfLeadingZeros(i);
- }
-
- public static void assertTrue(boolean b) {
- if(!b) throw new RuntimeException("bug!");
- }
-
- public static void assertTrue(boolean b, String message) {
- if(!b) throw new RuntimeException(message);
- }
+/**
+ * Routine utility functions.
+ *
+ * @author Daniel Lemire
+ *
+ */
+public final class Util {
+
+
+
+ // check whether x is small than y as unsigned ints (supported by Java 8 natively);
+ protected static final boolean smallerorequalthan(int x, int y) {
+ return (x + Integer.MIN_VALUE) <= (y + Integer.MIN_VALUE);
+ }
+
+ /**
+ * Compute the maximum of the integer logarithms (ceil(log(x+1)) of a range
+ * of value
+ *
+ * @param i
+ * source array
+ * @param pos
+ * starting position
+ * @param length
+ * number of integers to consider
+ * @return integer logarithm
+ */
+ public static int maxbits(int[] i, int pos, int length) {
+ int mask = 0;
+ for (int k = pos; k < pos + length; ++k)
+ mask |= i[k];
+ return bits(mask);
+ }
+
+ protected static int maxbits32(int[] i, int pos) {
+ int mask = i[pos];
+ mask |= i[pos + 1];
+ mask |= i[pos + 2];
+ mask |= i[pos + 3];
+ mask |= i[pos + 4];
+ mask |= i[pos + 5];
+ mask |= i[pos + 6];
+ mask |= i[pos + 7];
+ mask |= i[pos + 8];
+ mask |= i[pos + 9];
+ mask |= i[pos + 10];
+ mask |= i[pos + 11];
+ mask |= i[pos + 12];
+ mask |= i[pos + 13];
+ mask |= i[pos + 14];
+ mask |= i[pos + 15];
+ mask |= i[pos + 16];
+ mask |= i[pos + 17];
+ mask |= i[pos + 18];
+ mask |= i[pos + 19];
+ mask |= i[pos + 20];
+ mask |= i[pos + 21];
+ mask |= i[pos + 22];
+ mask |= i[pos + 23];
+ mask |= i[pos + 24];
+ mask |= i[pos + 25];
+ mask |= i[pos + 26];
+ mask |= i[pos + 27];
+ mask |= i[pos + 28];
+ mask |= i[pos + 29];
+ mask |= i[pos + 30];
+ mask |= i[pos + 31];
+ return bits(mask);
+ }
+
+ /**
+ * Compute the maximum of the integer logarithms (ceil(log(x+1)) of a the
+ * successive differences (deltas) of a range of value
+ *
+ * @param initoffset
+ * initial vallue for the computation of the deltas
+ * @param i
+ * source array
+ * @param pos
+ * starting position
+ * @param length
+ * number of integers to consider
+ * @return integer logarithm
+ */
+ public static int maxdiffbits(int initoffset, int[] i, int pos, int length) {
+ int mask = 0;
+ mask |= (i[pos] - initoffset);
+ for (int k = pos + 1; k < pos + length; ++k) {
+ mask |= i[k] - i[k - 1];
+ }
+ return bits(mask);
+ }
+
+ /**
+ * Compute the integer logarithms (ceil(log(x+1)) of a value
+ *
+ * @param i
+ * source value
+ * @return integer logarithm
+ */
+ public static int bits(int i) {
+ return 32 - Integer.numberOfLeadingZeros(i);
+ }
+
+ protected static int packsize(int num, int b) {
+ if (b > 16)
+ return num;
+ int howmanyfit = 32 / b;
+ return (num + howmanyfit - 1) / howmanyfit;
+ }
+
+ protected static int pack(int[] outputarray, int arraypos, int[] data, int datapos,
+ int num, int b) {
+ if (num == 0)
+ return arraypos;
+ if (b > 16) {
+ System.arraycopy(data, datapos, outputarray, arraypos, num);
+ return num + arraypos;
+ }
+ for (int k = 0; k < packsize(num, b); ++k)
+ outputarray[k + arraypos] = 0;
+ int inwordpointer = 0;
+ for (int k = 0; k < num; ++k) {
+ outputarray[arraypos] |= (data[k + datapos] << inwordpointer);
+ inwordpointer += b;
+ final int increment = ((inwordpointer + b - 1) >> 5);
+ arraypos += increment;
+ inwordpointer &= ~(-increment);
+ }
+ return arraypos + (inwordpointer > 0 ? 1 : 0);
+ }
+
+ protected static int unpack(int[] sourcearray, int arraypos, int[] data, int datapos,
+ int num, int b) {
+ if (b > 16) {
+ System.arraycopy(sourcearray, arraypos, data, 0, num);
+ return num + arraypos;
+ }
+ final int mask = (1 << b) - 1;
+ int inwordpointer = 0;
+ for (int k = 0; k < num; ++k) {
+ data[k + datapos] = ((sourcearray[arraypos] >>> inwordpointer) & mask);
+ inwordpointer += b;
+ final int increment = ((inwordpointer + b - 1) >> 5);
+ arraypos += increment;
+ inwordpointer &= ~(-increment);
+ }
+ return arraypos + (inwordpointer > 0 ? 1 : 0);
+ }
+
+ protected static int packsizew(int num, int b) {
+ int howmanyfit = 32 / b;
+ if (num <= howmanyfit)
+ return 1;
+ return num;
+ }
+
+ protected static int packw(int[] outputarray, int arraypos, int[] data,
+ int num, int b) {
+ int howmanyfit = 32 / b;
+ if (num > howmanyfit) {
+ System.arraycopy(data, 0, outputarray, arraypos, num);
+ return num + arraypos;
+ }
+ outputarray[arraypos] = 0;
+ int inwordpointer = 0;
+ for (int k = 0; k < num; ++k) {
+ outputarray[arraypos] |= (data[k] << inwordpointer);
+ inwordpointer += b;
+ }
+ return arraypos + 1;
+ }
+
+ protected static int unpackw(int[] sourcearray, int arraypos, int[] data,
+ int num, int b) {
+ int howmanyfit = 32 / b;
+ if (num > howmanyfit) {
+ System.arraycopy(sourcearray, arraypos, data, 0, num);
+ return num + arraypos;
+ }
+ final int mask = (1 << b) - 1;
+ int val = sourcearray[arraypos];
+ for (int k = 0; k < num; ++k) {
+ data[k] = (val & mask);
+ val >>>= b;
+ }
+ return arraypos + 1;
+ }
+ /**
+ * return floor(value / factor) * factor
+ *
+ * @param value
+ * numerator
+ * @param factor
+ * denominator
+ * @return greatest multiple of factor no larger than value
+ */
+ public static int greatestMultiple(int value, int factor) {
+ return value - value % factor;
+ }
}
diff --git a/src/main/java/me/lemire/integercompression/VariableByte.java b/src/main/java/me/lemire/integercompression/VariableByte.java
index 95491c1..c9b04d0 100644
--- a/src/main/java/me/lemire/integercompression/VariableByte.java
+++ b/src/main/java/me/lemire/integercompression/VariableByte.java
@@ -7,65 +7,228 @@
package me.lemire.integercompression;
import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
import java.nio.IntBuffer;
/**
- * Implementation of variable-byte. Possibly inefficient.
- *
+ * Implementation of variable-byte. For best performance, use it using the
+ * ByteIntegerCODEC interface.
+ *
+ * Note that this does not use differential coding: if you are working on sorted
+ * lists, you must compute the deltas separately.
+ *
* @author Daniel Lemire
- *
*/
-public class VariableByte implements IntegerCODEC {
- @Override
-public void compress(int[] in, IntWrapper inpos, int inlength, int[] out,
- IntWrapper outpos) {
- ByteBuffer buf = ByteBuffer.allocateDirect(inlength * 8);
- for (int k = inpos.get(); k < inpos.get() + inlength; ++k) {
- int val = in[k];
- do {
- int b = (val & 127);
- val >>>= 7;
- if (val != 0) {
- b |= 128;
- }
- buf.put((byte) b);
- } while (val != 0);
+public class VariableByte implements IntegerCODEC, ByteIntegerCODEC, SkippableIntegerCODEC {
+
+ private static final int MAX_BYTES_PER_INT = 5;
+
+ private static byte extract7bits(int i, long val) {
+ return (byte) ((val >> (7 * i)) & ((1 << 7) - 1));
+ }
+
+ private static byte extract7bitsmaskless(int i, long val) {
+ return (byte) ((val >> (7 * i)));
+ }
+ @Override
+ public void compress(int[] in, IntWrapper inpos, int inlength, int[] out,
+ IntWrapper outpos) {
+ headlessCompress(in, inpos, inlength, out, outpos);
}
- while (buf.position() % 4 != 0)
- buf.put((byte) 128);
- final int length = buf.position();
- buf.flip();
- IntBuffer ibuf = buf.asIntBuffer();
- ibuf.get(out, outpos.get(), length / 4);
- outpos.add(length / 4);
- inpos.add(inlength);
- }
- @Override
-public void uncompress(int[] in, IntWrapper inpos, int inlength,
- int[] out, IntWrapper outpos) {
- int s = 0;
- int p = inpos.get();
- int finalp = inpos.get() + inlength;
- int tmpoutpos = outpos.get();
- for (int v = 0, shift = 0; p>> (24-s));
- s+=8; if(s == 32) {s = 0; p++;}
- v += ((c & 127) << shift);
- if ((c & 128) == 0) {
- out[tmpoutpos++] = v;
- v = 0;
- shift = 0;
- } else
- shift += 7;
+ @Override
+ public void headlessCompress(int[] in, IntWrapper inpos, int inlength, int[] out,
+ IntWrapper outpos) {
+ if (inlength == 0)
+ return;
+ ByteBuffer buf = makeBuffer(inlength * 8);
+ buf.order(ByteOrder.LITTLE_ENDIAN);
+ for (int k = inpos.get(); k < inpos.get() + inlength; ++k) {
+ final long val = in[k] & 0xFFFFFFFFL; // To be consistent with
+ // unsigned integers in C/C++
+ if (val < (1 << 7)) {
+ buf.put((byte) (val | (1 << 7)));
+ } else if (val < (1 << 14)) {
+ buf.put((byte) extract7bits(0, val));
+ buf.put((byte) (extract7bitsmaskless(1, (val)) | (1 << 7)));
+ } else if (val < (1 << 21)) {
+ buf.put((byte) extract7bits(0, val));
+ buf.put((byte) extract7bits(1, val));
+ buf.put((byte) (extract7bitsmaskless(2, (val)) | (1 << 7)));
+ } else if (val < (1 << 28)) {
+ buf.put((byte) extract7bits(0, val));
+ buf.put((byte) extract7bits(1, val));
+ buf.put((byte) extract7bits(2, val));
+ buf.put((byte) (extract7bitsmaskless(3, (val)) | (1 << 7)));
+ } else {
+ buf.put((byte) extract7bits(0, val));
+ buf.put((byte) extract7bits(1, val));
+ buf.put((byte) extract7bits(2, val));
+ buf.put((byte) extract7bits(3, val));
+ buf.put((byte) (extract7bitsmaskless(4, (val)) | (1 << 7)));
+ }
+ }
+ while (buf.position() % 4 != 0)
+ buf.put((byte) 0);
+ final int length = buf.position();
+ buf.flip();
+ IntBuffer ibuf = buf.asIntBuffer();
+ ibuf.get(out, outpos.get(), length / 4);
+ outpos.add(length / 4);
+ inpos.add(inlength);
}
- outpos.set(tmpoutpos);
- inpos.add(inlength);
- }
- @Override
-public String toString() {
- return this.getClass().getName();
- }
+ @Override
+ public void compress(int[] in, IntWrapper inpos, int inlength, byte[] out,
+ IntWrapper outpos) {
+ if (inlength == 0)
+ return;
+ int outpostmp = outpos.get();
+ for (int k = inpos.get(); k < inpos.get() + inlength; ++k) {
+ final long val = in[k] & 0xFFFFFFFFL; // To be consistent with
+ // unsigned integers in C/C++
+ if (val < (1 << 7)) {
+ out[outpostmp++] = (byte) (val | (1 << 7));
+ } else if (val < (1 << 14)) {
+ out[outpostmp++] = (byte) extract7bits(0, val);
+ out[outpostmp++] = (byte) (extract7bitsmaskless(1, (val)) | (1 << 7));
+ } else if (val < (1 << 21)) {
+ out[outpostmp++] = (byte) extract7bits(0, val);
+ out[outpostmp++] = (byte) extract7bits(1, val);
+ out[outpostmp++] = (byte) (extract7bitsmaskless(2, (val)) | (1 << 7));
+ } else if (val < (1 << 28)) {
+ out[outpostmp++] = (byte) extract7bits(0, val);
+ out[outpostmp++] = (byte) extract7bits(1, val);
+ out[outpostmp++] = (byte) extract7bits(2, val);
+ out[outpostmp++] = (byte) (extract7bitsmaskless(3, (val)) | (1 << 7));
+ } else {
+ out[outpostmp++] = (byte) extract7bits(0, val);
+ out[outpostmp++] = (byte) extract7bits(1, val);
+ out[outpostmp++] = (byte) extract7bits(2, val);
+ out[outpostmp++] = (byte) extract7bits(3, val);
+ out[outpostmp++] = (byte) (extract7bitsmaskless(4, (val)) | (1 << 7));
+ }
+ }
+ outpos.set(outpostmp);
+ inpos.add(inlength);
+ }
+
+ @Override
+ public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out,
+ IntWrapper outpos) {
+ int s = 0;
+ int val = 0;
+ int p = inpos.get();
+ int finalp = inpos.get() + inlength;
+ int tmpoutpos = outpos.get();
+ for (int v = 0, shift = 0; p < finalp;) {
+ val = in[p];
+ int c = (byte) (val >>> s);
+ // Shift to next byte
+ s += 8;
+ // Shift to next integer if s==32
+ p += s>>5;
+ // cycle from 31 to 0
+ s = s & 31;
+ v += ((c & 127) << shift);
+ if ((c & 128) == 128) {
+ out[tmpoutpos++] = v;
+ v = 0;
+ shift = 0;
+ } else
+ shift += 7;
+ }
+ outpos.set(tmpoutpos);
+ inpos.add(inlength);
+ }
+ @Override
+ public void uncompress(byte[] in, IntWrapper inpos, int inlength,
+ int[] out, IntWrapper outpos) {
+ int p = inpos.get();
+ int finalp = inpos.get() + inlength;
+ int tmpoutpos = outpos.get();
+ for (int v = 0; p < finalp; out[tmpoutpos++] = v) {
+ v = in[p] & 0x7F;
+ if (in[p] < 0) {
+ p += 1;
+ continue;
+ }
+ v = ((in[p + 1] & 0x7F) << 7) | v;
+ if (in[p + 1] < 0) {
+ p += 2;
+ continue;
+ }
+ v = ((in[p + 2] & 0x7F) << 14) | v;
+ if (in[p + 2] < 0 ) {
+ p += 3;
+ continue;
+ }
+ v = ((in[p + 3] & 0x7F) << 21) | v;
+ if (in[p + 3] < 0) {
+ p += 4;
+ continue;
+ }
+ v = ((in[p + 4] & 0x7F) << 28) | v;
+ p += 5;
+ }
+ outpos.set(tmpoutpos);
+ inpos.add(p);
+ }
+
+ @Override
+ public String toString() {
+ return this.getClass().getSimpleName();
+ }
+
+ @Override
+ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] out,
+ IntWrapper outpos, int num) {
+ int s = 0;
+ int val = 0;
+ int p = inpos.get();
+ int tmpoutpos = outpos.get();
+ int finaloutpos = num + tmpoutpos;
+ for (int v = 0, shift = 0; tmpoutpos < finaloutpos;) {
+ val = in[p];
+ int c = val >>> s;
+ // Shift to next byte
+ s += 8;
+ // Shift to next integer if s==32
+ p += s>>5;
+ // cycle from 31 to 0
+ s = s & 31;
+ v += ((c & 127) << shift);
+ if ((c & 128) == 128) {
+ out[tmpoutpos++] = v;
+ v = 0;
+ shift = 0;
+ } else
+ shift += 7;
+ }
+ outpos.set(tmpoutpos);
+ inpos.set(p + (s!=0 ? 1 : 0));
+ }
+
+ @Override
+ public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) {
+ int maxLengthInBytes = inlength * MAX_BYTES_PER_INT;
+ int maxLengthInInts = (maxLengthInBytes + Integer.BYTES - 1) / Integer.BYTES;
+ compressedPositions.add(inlength);
+ return maxLengthInInts;
+ }
+
+ /**
+ * Creates a new buffer of the requested size.
+ *
+ * In case you need a different way to allocate buffers, you can override this method
+ * with a custom behavior. The default implementation allocates a new Java direct
+ * {@link ByteBuffer} on each invocation.
+ *
+ * @param sizeInBytes
+ * @return
+ */
+ protected ByteBuffer makeBuffer(int sizeInBytes) {
+ return ByteBuffer.allocateDirect(sizeInBytes);
+ }
}
diff --git a/src/main/java/me/lemire/integercompression/benchmarktools/Benchmark.java b/src/main/java/me/lemire/integercompression/benchmarktools/Benchmark.java
new file mode 100644
index 0000000..ef4a386
--- /dev/null
+++ b/src/main/java/me/lemire/integercompression/benchmarktools/Benchmark.java
@@ -0,0 +1,691 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+package me.lemire.integercompression.benchmarktools;
+
+import com.kamikaze.pfordelta.PForDelta;
+
+import me.lemire.integercompression.BinaryPacking;
+import me.lemire.integercompression.ByteIntegerCODEC;
+import me.lemire.integercompression.Composition;
+import me.lemire.integercompression.DeltaZigzagBinaryPacking;
+import me.lemire.integercompression.DeltaZigzagVariableByte;
+import me.lemire.integercompression.FastPFOR;
+import me.lemire.integercompression.FastPFOR128;
+import me.lemire.integercompression.GroupSimple9;
+import me.lemire.integercompression.IntWrapper;
+import me.lemire.integercompression.IntegerCODEC;
+import me.lemire.integercompression.JustCopy;
+import me.lemire.integercompression.NewPFD;
+import me.lemire.integercompression.NewPFDS16;
+import me.lemire.integercompression.NewPFDS9;
+import me.lemire.integercompression.OptPFD;
+import me.lemire.integercompression.OptPFDS16;
+import me.lemire.integercompression.OptPFDS9;
+import me.lemire.integercompression.Simple16;
+import me.lemire.integercompression.Simple9;
+import me.lemire.integercompression.VariableByte;
+import me.lemire.integercompression.differential.Delta;
+import me.lemire.integercompression.differential.IntegratedBinaryPacking;
+import me.lemire.integercompression.differential.IntegratedByteIntegerCODEC;
+import me.lemire.integercompression.differential.IntegratedComposition;
+import me.lemire.integercompression.differential.IntegratedIntegerCODEC;
+import me.lemire.integercompression.differential.IntegratedVariableByte;
+import me.lemire.integercompression.differential.XorBinaryPacking;
+import me.lemire.integercompression.synth.ClusteredDataGenerator;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.PrintWriter;
+import java.text.DecimalFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+
+/**
+ *
+ * Simple class meant to compare the speed of different schemes.
+ *
+ * @author Daniel Lemire
+ *
+ */
+public class Benchmark {
+
+ /**
+ * Standard benchmark
+ *
+ * @param csvLog
+ * Writer for CSV log.
+ * @param c
+ * the codec
+ * @param data
+ * arrays of input data
+ * @param repeat
+ * How many times to repeat the test
+ * @param verbose
+ * whether to output result on screen
+ */
+ private static void testCodec(PrintWriter csvLog, int sparsity,
+ IntegerCODEC c, int[][] data, int repeat, boolean verbose) {
+ if (verbose) {
+ System.out.println("# " + c.toString());
+ System.out
+ .println("# bits per int, compress speed (mis), decompression speed (mis) ");
+ }
+
+ int N = data.length;
+
+ int totalSize = 0;
+ int maxLength = 0;
+ for (int k = 0; k < N; ++k) {
+ totalSize += data[k].length;
+ if (data[k].length > maxLength) {
+ maxLength = data[k].length;
+ }
+ }
+
+ // 4x + 1024 to account for the possibility of some negative
+ // compression.
+ int[] compressBuffer = new int[4 * maxLength + 1024];
+ int[] decompressBuffer = new int[maxLength + 1024];
+
+ // These variables hold time in microseconds (10^-6).
+ long compressTime = 0;
+ long decompressTime = 0;
+
+ int size = 0;
+ IntWrapper inpos = new IntWrapper();
+ IntWrapper outpos = new IntWrapper();
+
+ for (int r = 0; r < repeat; ++r) {
+ size = 0;
+ for (int k = 0; k < N; ++k) {
+ int[] backupdata = Arrays.copyOf(data[k],
+ data[k].length);
+
+ // compress data.
+ long beforeCompress = System.nanoTime() / 1000;
+ inpos.set(1);
+ outpos.set(0);
+ if (!(c instanceof IntegratedIntegerCODEC)) {
+ Delta.delta(backupdata);
+ }
+ c.compress(backupdata, inpos, backupdata.length
+ - inpos.get(), compressBuffer, outpos);
+ long afterCompress = System.nanoTime() / 1000;
+
+ // measure time of compression.
+ compressTime += afterCompress - beforeCompress;
+ final int thiscompsize = outpos.get() + 1;
+ size += thiscompsize;
+
+ // extract (uncompress) data
+ long beforeDecompress = System.nanoTime() / 1000;
+ inpos.set(0);
+ outpos.set(1);
+ decompressBuffer[0] = backupdata[0];
+ c.uncompress(compressBuffer, inpos,
+ thiscompsize - 1, decompressBuffer,
+ outpos);
+ if (!(c instanceof IntegratedIntegerCODEC))
+ Delta.fastinverseDelta(decompressBuffer);
+ long afterDecompress = System.nanoTime() / 1000;
+
+ // measure time of extraction (uncompression).
+ decompressTime += afterDecompress
+ - beforeDecompress;
+ if (outpos.get() != data[k].length)
+ throw new RuntimeException(
+ "we have a bug (diff length) "
+ + c + " expected "
+ + data[k].length
+ + " got "
+ + outpos.get());
+
+ // verify: compare original array with
+ // compressed and
+ // uncompressed.
+
+ for (int m = 0; m < outpos.get(); ++m) {
+ if (decompressBuffer[m] != data[k][m]) {
+ throw new RuntimeException(
+ "we have a bug (actual difference), expected "
+ + data[k][m]
+ + " found "
+ + decompressBuffer[m]
+ + " at " + m + " out of " + outpos.get());
+ }
+ }
+ }
+ }
+
+ if (verbose) {
+ double bitsPerInt = size * 32.0 / totalSize;
+ long compressSpeed = totalSize * repeat
+ / (compressTime);
+ long decompressSpeed = totalSize * repeat
+ / (decompressTime);
+ System.out.println(String.format(
+ "\t%1$.2f\t%2$d\t%3$d", bitsPerInt,
+ compressSpeed, decompressSpeed));
+ csvLog.format("\"%1$s\",%2$d,%3$.2f,%4$d,%5$d\n",
+ c.toString(), sparsity, bitsPerInt,
+ compressSpeed, decompressSpeed);
+ csvLog.flush();
+ }
+ }
+
+ /**
+ * Standard benchmark byte byte-aligned schemes
+ *
+ * @param csvLog
+ * Writer for CSV log.
+ * @param c
+ * the codec
+ * @param data
+ * arrays of input data
+ * @param repeat
+ * How many times to repeat the test
+ * @param verbose
+ * whether to output result on screen
+ */
+ private static void testByteCodec(PrintWriter csvLog, int sparsity,
+ ByteIntegerCODEC c, int[][] data, int repeat, boolean verbose) {
+ if (verbose) {
+ System.out.println("# " + c.toString());
+ System.out
+ .println("# bits per int, compress speed (mis), decompression speed (mis) ");
+ }
+
+ int N = data.length;
+
+ int totalSize = 0;
+ int maxLength = 0;
+ for (int k = 0; k < N; ++k) {
+ totalSize += data[k].length;
+ if (data[k].length > maxLength) {
+ maxLength = data[k].length;
+ }
+ }
+
+ byte[] compressBuffer = new byte[8 * maxLength + 1024];
+ int[] decompressBuffer = new int[maxLength + 1024];
+
+ // These variables hold time in microseconds (10^-6).
+ long compressTime = 0;
+ long decompressTime = 0;
+
+ int size = 0;
+ IntWrapper inpos = new IntWrapper();
+ IntWrapper outpos = new IntWrapper();
+
+ for (int r = 0; r < repeat; ++r) {
+ size = 0;
+ for (int k = 0; k < N; ++k) {
+ int[] backupdata = Arrays.copyOf(data[k],
+ data[k].length);
+
+ // compress data.
+ long beforeCompress = System.nanoTime() / 1000;
+ inpos.set(1);
+ outpos.set(0);
+ if (!(c instanceof IntegratedByteIntegerCODEC)) {
+ Delta.delta(backupdata);
+ }
+ c.compress(backupdata, inpos, backupdata.length
+ - inpos.get(), compressBuffer, outpos);
+ long afterCompress = System.nanoTime() / 1000;
+
+ // measure time of compression.
+ compressTime += afterCompress - beforeCompress;
+ final int thiscompsize = outpos.get() + 1;
+ size += thiscompsize;
+
+ // extract (uncompress) data
+ long beforeDecompress = System.nanoTime() / 1000;
+ inpos.set(0);
+ outpos.set(1);
+ decompressBuffer[0] = backupdata[0];
+ c.uncompress(compressBuffer, inpos,
+ thiscompsize - 1, decompressBuffer,
+ outpos);
+ if (!(c instanceof IntegratedByteIntegerCODEC))
+ Delta.fastinverseDelta(decompressBuffer);
+ long afterDecompress = System.nanoTime() / 1000;
+
+ // measure time of extraction (uncompression).
+ decompressTime += afterDecompress
+ - beforeDecompress;
+ if (outpos.get() != data[k].length)
+ throw new RuntimeException(
+ "we have a bug (diff length) "
+ + c + " expected "
+ + data[k].length
+ + " got "
+ + outpos.get());
+
+ // verify: compare original array with
+ // compressed and
+ // uncompressed.
+ for (int m = 0; m < outpos.get(); ++m) {
+ if (decompressBuffer[m] != data[k][m]) {
+ throw new RuntimeException(
+ "we have a bug (actual difference), expected "
+ + data[k][m]
+ + " found "
+ + decompressBuffer[m]
+ + " at " + m);
+ }
+ }
+ }
+ }
+
+ if (verbose) {
+ double bitsPerInt = size * 8.0 / totalSize;
+ long compressSpeed = totalSize * repeat
+ / (compressTime);
+ long decompressSpeed = totalSize * repeat
+ / (decompressTime);
+ System.out.println(String.format(
+ "\t%1$.2f\t%2$d\t%3$d", bitsPerInt,
+ compressSpeed, decompressSpeed));
+ csvLog.format("\"%1$s\",%2$d,%3$.2f,%4$d,%5$d\n",
+ c.toString(), sparsity, bitsPerInt,
+ compressSpeed, decompressSpeed);
+ csvLog.flush();
+ }
+ }
+
+ /**
+ * Main method.
+ *
+ * @param args
+ * command-line arguments
+ * @throws FileNotFoundException when we fail to create a new file
+ */
+ public static void main(String args[]) throws FileNotFoundException {
+ System.out
+ .println("# benchmark based on the ClusterData model from:");
+ System.out.println("# Vo Ngoc Anh and Alistair Moffat. ");
+ System.out.println("# Index compression using 64-bit words.");
+ System.out
+ .println("# Softw. Pract. Exper.40, 2 (February 2010), 131-147. ");
+ System.out.println();
+
+ PrintWriter writer = null;
+ try {
+ File csvFile = new File(
+ String.format(
+ "benchmark-%1$tY%1$tm%1$tdT%1$tH%1$tM%1$tS.csv",
+ System.currentTimeMillis()));
+ writer = new PrintWriter(csvFile);
+ System.out
+ .println("# Results will be written into a CSV file: "
+ + csvFile.getName());
+ System.out.println();
+ test(writer, 20, 18, 10);
+ System.out.println();
+ System.out
+ .println("Results were written into a CSV file: "
+ + csvFile.getName());
+ } finally {
+ if (writer != null) {
+ writer.close();
+ }
+ }
+ }
+
+ /**
+ * Standard test for the Kamikaze library
+ *
+ * @param data
+ * input data
+ * @param repeat
+ * how many times to repeat
+ * @param verbose
+ * whether to output data on screen
+ */
+ public static void testKamikaze(int[][] data, int repeat,
+ boolean verbose) {
+ DecimalFormat df = new DecimalFormat("0.00");
+ DecimalFormat dfspeed = new DecimalFormat("0");
+ if (verbose)
+ System.out.println("# kamikaze PForDelta");
+ if (verbose)
+ System.out
+ .println("# bits per int, compress speed (mis), decompression speed (mis) ");
+ long bef, aft;
+ String line = "";
+ int N = data.length;
+ int totalsize = 0;
+ int maxlength = 0;
+ for (int k = 0; k < N; ++k) {
+ totalsize += data[k].length;
+ if (data[k].length > maxlength)
+ maxlength = data[k].length;
+ }
+ int[] buffer = new int[maxlength + 1024];
+ /*
+ * 4x + 1024 to account for the possibility of some negative
+ * compression
+ */
+ int size = 0;
+ int comptime = 0;
+ long decomptime = 0;
+ for (int r = 0; r < repeat; ++r) {
+ size = 0;
+ for (int k = 0; k < N; ++k) {
+ int outpos = 0;
+ int[] backupdata = Arrays.copyOf(data[k],
+ data[k].length);
+ //
+ bef = System.nanoTime() / 1000;
+ Delta.delta(backupdata);
+ ArrayList dataout = new ArrayList(
+ data[k].length / 128);
+ for (int K = 0; K < data[k].length; K += 128) {
+ final int[] compressedbuf = PForDelta
+ .compressOneBlockOpt(Arrays
+ .copyOfRange(
+ backupdata, K,
+ K + 128), 128);
+ dataout.add(compressedbuf);
+ outpos += compressedbuf.length;
+ }
+ aft = System.nanoTime() / 1000;
+ //
+ comptime += aft - bef;
+ final int thiscompsize = outpos;
+ size += thiscompsize;
+ //
+ bef = System.nanoTime() / 1000;
+ ArrayList datauncomp = new ArrayList(
+ dataout.size());
+ int deltaoffset = 0;
+
+ for (int[] compbuf : dataout) {
+ int[] tmpbuf = new int[128];
+ PForDelta.decompressOneBlock(tmpbuf,
+ compbuf, 128);
+ tmpbuf[0] += deltaoffset;
+ Delta.fastinverseDelta(tmpbuf);
+ deltaoffset = tmpbuf[127];
+ datauncomp.add(tmpbuf);
+ }
+ aft = System.nanoTime() / 1000;
+ //
+ decomptime += aft - bef;
+ if (datauncomp.size() * 128 != data[k].length)
+ throw new RuntimeException(
+ "we have a bug (diff length) "
+ + " expected "
+ + data[k].length
+ + " got "
+ + datauncomp.size()
+ * 128);
+ for (int m = 0; m < data[k].length; ++m)
+ if (datauncomp.get(m / 128)[m % 128] != data[k][m]) {
+ throw new RuntimeException(
+ "we have a bug (actual difference), expected "
+ + data[k][m]
+ + " found "
+ + buffer[m]
+ + " at " + m);
+ }
+
+ }
+ }
+
+ line += "\t" + df.format(size * 32.0 / totalsize);
+ line += "\t" + dfspeed.format(totalsize * repeat / (comptime));
+ line += "\t"
+ + dfspeed.format(totalsize * repeat / (decomptime));
+ if (verbose)
+ System.out.println(line);
+ }
+
+ /**
+ * Generate test data.
+ *
+ * @param N
+ * How many input arrays to generate
+ * @param nbr
+ * How big (in log2) should the arrays be
+ * @param sparsity
+ * How sparse test data generated
+ */
+ private static int[][] generateTestData(ClusteredDataGenerator dataGen,
+ int N, int nbr, int sparsity) {
+ final int[][] data = new int[N][];
+ final int dataSize = (1 << (nbr + sparsity));
+ for (int i = 0; i < N; ++i) {
+ data[i] = dataGen.generateClustered((1 << nbr),
+ dataSize);
+ }
+ return data;
+ }
+
+ /**
+ * Generates data and calls other tests.
+ *
+ * @param csvLog
+ * Writer for CSV log.
+ * @param N
+ * How many input arrays to generate
+ * @param nbr
+ * how big (in log2) should the arrays be
+ * @param repeat
+ * How many times should we repeat tests.
+ */
+ private static void test(PrintWriter csvLog, int N, int nbr, int repeat) {
+ csvLog.format("\"Algorithm\",\"Sparsity\",\"Bits per int\",\"Compress speed (MiS)\",\"Decompress speed (MiS)\"\n");
+ ClusteredDataGenerator cdg = new ClusteredDataGenerator();
+ final int max_sparsity = 31 - nbr;
+ for (int sparsity = 1; sparsity < max_sparsity; ++sparsity) {
+ System.out.println("# sparsity " + sparsity);
+ System.out.println("# generating random data...");
+ int[][] data = generateTestData(cdg, N, nbr, sparsity);
+ System.out.println("# generating random data... ok.");
+
+ testCodec(csvLog, sparsity, new Composition(
+ new FastPFOR128(), new VariableByte()), data,
+ repeat, false);
+ testCodec(csvLog, sparsity, new Composition(
+ new FastPFOR128(), new VariableByte()), data,
+ repeat, false);
+ testCodec(csvLog, sparsity, new Composition(
+ new FastPFOR128(), new VariableByte()), data,
+ repeat, true);
+ System.out.println();
+ testCodec(csvLog, sparsity, new Composition(
+ new FastPFOR(), new VariableByte()), data,
+ repeat, false);
+ testCodec(csvLog, sparsity, new Composition(
+ new FastPFOR(), new VariableByte()), data,
+ repeat, false);
+ testCodec(csvLog, sparsity, new Composition(
+ new FastPFOR(), new VariableByte()), data,
+ repeat, true);
+ System.out.println();
+
+
+ // TODO: support CSV log output.
+ testKamikaze(data, repeat, false);
+ testKamikaze(data, repeat, false);
+ testKamikaze(data, repeat, true);
+ System.out.println();
+
+ testCodec(csvLog, sparsity, new IntegratedComposition(
+ new IntegratedBinaryPacking(),
+ new IntegratedVariableByte()), data, repeat,
+ false);
+ testCodec(csvLog, sparsity, new IntegratedComposition(
+ new IntegratedBinaryPacking(),
+ new IntegratedVariableByte()), data, repeat,
+ false);
+ testCodec(csvLog, sparsity, new IntegratedComposition(
+ new IntegratedBinaryPacking(),
+ new IntegratedVariableByte()), data, repeat,
+ true);
+ System.out.println();
+
+ testCodec(csvLog, sparsity, new JustCopy(), data,
+ repeat, false);
+ testCodec(csvLog, sparsity, new JustCopy(), data,
+ repeat, false);
+ testCodec(csvLog, sparsity, new JustCopy(), data,
+ repeat, true);
+ System.out.println();
+
+ testByteCodec(csvLog, sparsity, new VariableByte(),
+ data, repeat, false);
+ testByteCodec(csvLog, sparsity, new VariableByte(),
+ data, repeat, false);
+ testByteCodec(csvLog, sparsity, new VariableByte(),
+ data, repeat, true);
+ System.out.println();
+
+ testByteCodec(csvLog, sparsity,
+ new IntegratedVariableByte(), data, repeat,
+ false);
+ testByteCodec(csvLog, sparsity,
+ new IntegratedVariableByte(), data, repeat,
+ false);
+ testByteCodec(csvLog, sparsity,
+ new IntegratedVariableByte(), data, repeat,
+ true);
+ System.out.println();
+
+ testCodec(csvLog, sparsity, new Composition(
+ new BinaryPacking(), new VariableByte()), data,
+ repeat, false);
+ testCodec(csvLog, sparsity, new Composition(
+ new BinaryPacking(), new VariableByte()), data,
+ repeat, false);
+ testCodec(csvLog, sparsity, new Composition(
+ new BinaryPacking(), new VariableByte()), data,
+ repeat, true);
+ System.out.println();
+
+ testCodec(csvLog, sparsity, new Composition(
+ new NewPFD(), new VariableByte()), data,
+ repeat, false);
+ testCodec(csvLog, sparsity, new Composition(
+ new NewPFD(), new VariableByte()), data,
+ repeat, false);
+ testCodec(csvLog, sparsity, new Composition(
+ new NewPFD(), new VariableByte()), data,
+ repeat, true);
+ System.out.println();
+
+ testCodec(csvLog, sparsity, new Composition(
+ new NewPFDS9(), new VariableByte()), data,
+ repeat, false);
+ testCodec(csvLog, sparsity, new Composition(
+ new NewPFDS9(), new VariableByte()), data,
+ repeat, false);
+ testCodec(csvLog, sparsity, new Composition(
+ new NewPFDS9(), new VariableByte()), data,
+ repeat, true);
+ System.out.println();
+
+ testCodec(csvLog, sparsity, new Composition(
+ new NewPFDS16(), new VariableByte()), data,
+ repeat, false);
+ testCodec(csvLog, sparsity, new Composition(
+ new NewPFDS16(), new VariableByte()), data,
+ repeat, false);
+ testCodec(csvLog, sparsity, new Composition(
+ new NewPFDS16(), new VariableByte()), data,
+ repeat, true);
+ System.out.println();
+
+ testCodec(csvLog, sparsity, new Composition(
+ new OptPFD(), new VariableByte()), data,
+ repeat, false);
+ testCodec(csvLog, sparsity, new Composition(
+ new OptPFD(), new VariableByte()), data,
+ repeat, false);
+ testCodec(csvLog, sparsity, new Composition(
+ new OptPFD(), new VariableByte()), data,
+ repeat, true);
+ System.out.println();
+
+ testCodec(csvLog, sparsity, new Composition(
+ new OptPFDS9(), new VariableByte()), data,
+ repeat, false);
+ testCodec(csvLog, sparsity, new Composition(
+ new OptPFDS9(), new VariableByte()), data,
+ repeat, false);
+ testCodec(csvLog, sparsity, new Composition(
+ new OptPFDS9(), new VariableByte()), data,
+ repeat, true);
+ System.out.println();
+
+ testCodec(csvLog, sparsity, new Composition(
+ new OptPFDS16(), new VariableByte()), data,
+ repeat, false);
+ testCodec(csvLog, sparsity, new Composition(
+ new OptPFDS16(), new VariableByte()), data,
+ repeat, false);
+ testCodec(csvLog, sparsity, new Composition(
+ new OptPFDS16(), new VariableByte()), data,
+ repeat, true);
+ System.out.println();
+
+
+ testCodec(csvLog, sparsity, new Simple16(), data,
+ repeat, false);
+ testCodec(csvLog, sparsity, new Simple16(), data,
+ repeat, false);
+ testCodec(csvLog, sparsity, new Simple16(), data,
+ repeat, true);
+ System.out.println();
+
+ testCodec(csvLog, sparsity, new Simple9(), data,
+ repeat, false);
+ testCodec(csvLog, sparsity, new Simple9(), data,
+ repeat, false);
+ testCodec(csvLog, sparsity, new Simple9(), data,
+ repeat, true);
+ System.out.println();
+
+ testCodec(csvLog, sparsity, new GroupSimple9(), data,
+ repeat, false);
+ testCodec(csvLog, sparsity, new GroupSimple9(), data,
+ repeat, false);
+ testCodec(csvLog, sparsity, new GroupSimple9(), data,
+ repeat, true);
+ System.out.println();
+
+ {
+ IntegerCODEC c = new Composition(
+ new XorBinaryPacking(),
+ new VariableByte());
+ testCodec(csvLog, sparsity, c, data, repeat,
+ false);
+ testCodec(csvLog, sparsity, c, data, repeat,
+ false);
+ testCodec(csvLog, sparsity, c, data, repeat,
+ true);
+ System.out.println();
+ }
+
+ {
+ IntegerCODEC c = new Composition(
+ new DeltaZigzagBinaryPacking(),
+ new DeltaZigzagVariableByte());
+ testCodec(csvLog, sparsity, c, data, repeat,
+ false);
+ testCodec(csvLog, sparsity, c, data, repeat,
+ false);
+ testCodec(csvLog, sparsity, c, data, repeat,
+ true);
+ System.out.println();
+ }
+
+ }
+ }
+}
diff --git a/src/main/java/me/lemire/integercompression/benchmarktools/BenchmarkBitPacking.java b/src/main/java/me/lemire/integercompression/benchmarktools/BenchmarkBitPacking.java
new file mode 100644
index 0000000..3380d36
--- /dev/null
+++ b/src/main/java/me/lemire/integercompression/benchmarktools/BenchmarkBitPacking.java
@@ -0,0 +1,154 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+package me.lemire.integercompression.benchmarktools;
+
+import java.text.DecimalFormat;
+import java.util.Arrays;
+import java.util.Random;
+
+import me.lemire.integercompression.BitPacking;
+import me.lemire.integercompression.differential.Delta;
+import me.lemire.integercompression.differential.IntegratedBitPacking;
+
+/**
+ * Class used to benchmark the speed of bit packing. (For expert use.)
+ *
+ * @author Daniel Lemire
+ *
+ */
+public class BenchmarkBitPacking {
+
+ private static void test(boolean verbose) {
+ DecimalFormat dfspeed = new DecimalFormat("0");
+ final int N = 32;
+ final int times = 100000;
+ Random r = new Random(0);
+ int[] data = new int[N];
+ int[] compressed = new int[N];
+ int[] uncompressed = new int[N];
+ for (int bit = 0; bit < 31; ++bit) {
+ long comp = 0;
+ long compwm = 0;
+ long decomp = 0;
+ for (int t = 0; t < times; ++t) {
+ for (int k = 0; k < N; ++k) {
+ data[k] = r.nextInt(1 << bit);
+ }
+ long time1 = System.nanoTime();
+ BitPacking
+ .fastpack(data, 0, compressed, 0, bit);
+ long time2 = System.nanoTime();
+ BitPacking.fastpackwithoutmask(data, 0,
+ compressed, 0, bit);
+ long time3 = System.nanoTime();
+ BitPacking.fastunpack(compressed, 0,
+ uncompressed, 0, bit);
+ long time4 = System.nanoTime();
+ comp += time2 - time1;
+ compwm += time3 - time2;
+ decomp += time4 - time3;
+ }
+ if (verbose)
+ System.out.println("bit = "
+ + bit
+ + " comp. speed = "
+ + dfspeed.format(N * times * 1000.0
+ / (comp))
+ + " comp. speed wm = "
+ + dfspeed.format(N * times * 1000.0
+ / (compwm))
+ + " decomp. speed = "
+ + dfspeed.format(N * times * 1000.0
+ / (decomp)));
+ }
+ }
+
+ private static void testWithDeltas(boolean verbose) {
+ DecimalFormat dfspeed = new DecimalFormat("0");
+ final int N = 32;
+ final int times = 100000;
+ Random r = new Random(0);
+ int[] data = new int[N];
+ int[] compressed = new int[N];
+ int[] icompressed = new int[N];
+ int[] uncompressed = new int[N];
+ for (int bit = 1; bit < 31; ++bit) {
+ long comp = 0;
+ long decomp = 0;
+ long icomp = 0;
+ long idecomp = 0;
+ for (int t = 0; t < times; ++t) {
+ data[0] = r.nextInt(1 << bit);
+ for (int k = 1; k < N; ++k) {
+ data[k] = r.nextInt(1 << bit)
+ + data[k - 1];
+ }
+ int[] tmpdata = Arrays
+ .copyOf(data, data.length);
+ long time1 = System.nanoTime();
+ Delta.delta(tmpdata);
+ BitPacking.fastpackwithoutmask(tmpdata, 0,
+ compressed, 0, bit);
+ long time2 = System.nanoTime();
+ BitPacking.fastunpack(compressed, 0,
+ uncompressed, 0, bit);
+ Delta.fastinverseDelta(uncompressed);
+ long time3 = System.nanoTime();
+ if (!Arrays.equals(data, uncompressed))
+ throw new RuntimeException("bug");
+ comp += time2 - time1;
+ decomp += time3 - time2;
+ tmpdata = Arrays.copyOf(data, data.length);
+ time1 = System.nanoTime();
+ IntegratedBitPacking.integratedpack(0, tmpdata,
+ 0, icompressed, 0, bit);
+ time2 = System.nanoTime();
+ IntegratedBitPacking.integratedunpack(0,
+ icompressed, 0, uncompressed, 0, bit);
+ time3 = System.nanoTime();
+ if (!Arrays.equals(icompressed, compressed))
+ throw new RuntimeException("ibug "
+ + bit);
+ if (!Arrays.equals(data, uncompressed))
+ throw new RuntimeException("bug " + bit);
+ icomp += time2 - time1;
+ idecomp += time3 - time2;
+ }
+ if (verbose)
+ System.out.println("bit = "
+ + bit
+ + " comp. speed = "
+ + dfspeed.format(N * times * 1000.0
+ / (comp))
+ + " decomp. speed = "
+ + dfspeed.format(N * times * 1000.0
+ / (decomp))
+ + " icomp. speed = "
+ + dfspeed.format(N * times * 1000.0
+ / (icomp))
+ + " idecomp. speed = "
+ + dfspeed.format(N * times * 1000.0
+ / (idecomp)));
+ }
+ }
+
+ /**
+ * Main method
+ *
+ * @param args
+ * command-line arguments
+ */
+ public static void main(String[] args) {
+ System.out.println("Testing packing and delta ");
+ testWithDeltas(false);
+ testWithDeltas(true);
+ System.out.println("Testing packing alone ");
+ test(false);
+ test(true);
+ }
+
+}
diff --git a/src/main/java/me/lemire/integercompression/benchmarktools/BenchmarkCSV.java b/src/main/java/me/lemire/integercompression/benchmarktools/BenchmarkCSV.java
new file mode 100644
index 0000000..3115f0a
--- /dev/null
+++ b/src/main/java/me/lemire/integercompression/benchmarktools/BenchmarkCSV.java
@@ -0,0 +1,314 @@
+package me.lemire.integercompression.benchmarktools;
+
+import me.lemire.integercompression.*;
+import me.lemire.integercompression.differential.IntegratedBinaryPacking;
+import me.lemire.integercompression.differential.IntegratedByteIntegerCODEC;
+import me.lemire.integercompression.differential.IntegratedComposition;
+import me.lemire.integercompression.differential.IntegratedIntegerCODEC;
+import me.lemire.integercompression.differential.IntegratedVariableByte;
+
+import java.io.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+
+/**
+ * This will run benchmarks using a set of posting lists stored as CSV files.
+ *
+ * @author lemire
+ *
+ */
+public class BenchmarkCSV {
+ static IntegratedIntegerCODEC codecs[] = {
+ new IntegratedComposition(new IntegratedBinaryPacking(),
+ new IntegratedVariableByte()) };
+ static IntegratedByteIntegerCODEC bcodecs[] = { new IntegratedVariableByte() };
+ static IntegerCODEC regcodecs[] = {
+ new Composition(new FastPFOR128(), new VariableByte()),
+ new Composition(new FastPFOR(), new VariableByte()),
+ new Composition(new BinaryPacking(), new VariableByte()) };
+ static ByteIntegerCODEC regbcodecs[] = { new VariableByte() };
+
+ private static ArrayList loadIntegers(final String filename, final Format f)
+ throws IOException {
+ int misparsed = 0;
+ if (f == Format.ONEARRAYPERLINE) {
+ ArrayList answer = new ArrayList();
+ BufferedReader br = new BufferedReader(new FileReader(
+ filename));
+ String s;
+ while ((s = br.readLine()) != null) {
+ String[] numbers = s.split("[,;;]"); // that's
+ // slow
+ int[] a = new int[numbers.length];
+ for (int k = 0; k < numbers.length; ++k) {
+ try {
+ a[k] = Integer
+ .parseInt(numbers[k]
+ .trim());
+ } catch (java.lang.NumberFormatException nfe) {
+ if (misparsed == 0)
+ System.err.println(nfe);
+ ++misparsed;
+ }
+ }
+ answer.add(a);
+ }
+ if (misparsed > 0)
+ System.out.println("Failed to parse "
+ + misparsed + " entries");
+ br.close();
+ return answer;
+ } else if (f == Format.ONEARRAYPERFILE) {
+ ArrayList answer = new ArrayList();
+ BufferedReader br = new BufferedReader(new FileReader(
+ filename));
+ String s;
+ while ((s = br.readLine()) != null) {
+ String[] numbers = s.split("[,;;]");// that's
+ // slow
+ for (int k = 0; k < numbers.length; ++k) {
+ try {
+ answer.add(Integer
+ .parseInt(numbers[k]
+ .trim()));
+ } catch (java.lang.NumberFormatException nfe) {
+ if (misparsed == 0)
+ System.err.println(nfe);
+ ++misparsed;
+ }
+ }
+ }
+ int[] actualanswer = new int[answer.size()];
+ for (int i = 0; i < answer.size(); ++i)
+ actualanswer[i] = answer.get(i);
+ ArrayList wrap = new ArrayList();
+ wrap.add(actualanswer);
+ if (misparsed > 0)
+ System.out.println("Failed to parse "
+ + misparsed + " entries");
+ br.close();
+ return wrap;
+ } else {
+ ArrayList answer = new ArrayList();
+ BufferedReader br = new BufferedReader(new FileReader(
+ filename));
+ String s;
+ while ((s = br.readLine()) != null) {
+ try {
+ answer.add(Integer.parseInt(s.trim()));
+ } catch (java.lang.NumberFormatException nfe) {
+ if (misparsed == 0)
+ System.err.println(nfe);
+ ++misparsed;
+ }
+ }
+ int[] actualanswer = new int[answer.size()];
+ for (int i = 0; i < answer.size(); ++i)
+ actualanswer[i] = answer.get(i);
+ ArrayList wrap = new ArrayList();
+ wrap.add(actualanswer);
+ if (misparsed > 0)
+ System.out.println("Failed to parse "
+ + misparsed + " entries");
+ br.close();
+ return wrap;
+ }
+ }
+
+ private enum Format {
+ ONEARRAYPERLINE, ONEARRAYPERFILE, ONEINTPERLINE
+ }
+
+ private enum CompressionMode {
+ AS_IS, DELTA
+ }
+
+ /**
+ * @param args command-line arguments
+ * @throws IOException when some IO error occurs
+ */
+ public static void main(final String[] args) throws IOException {
+ Format myformat = Format.ONEARRAYPERLINE;
+ CompressionMode cm = CompressionMode.DELTA;
+ ArrayList files = new ArrayList();
+ for (String s : args) {
+ if (s.startsWith("-")) {// it is a flag
+ if (s.equals("--onearrayperfile"))
+ myformat = Format.ONEARRAYPERFILE;
+ else if (s.equals("--nodelta"))
+ cm = CompressionMode.AS_IS;
+ else if (s.equals("--oneintperline"))
+ myformat = Format.ONEINTPERLINE;
+ else
+ throw new RuntimeException(
+ "I don't understand: " + s);
+ } else {// it is a filename
+ files.add(s);
+ }
+ }
+ if (myformat == Format.ONEARRAYPERFILE)
+ System.out.println("Treating each file as one array.");
+ else if (myformat == Format.ONEARRAYPERLINE)
+ System.out
+ .println("Each line of each file is an array: use --onearrayperfile or --oneintperline to change.");
+ else if (myformat == Format.ONEINTPERLINE)
+ System.out
+ .println("Treating each file as one array, with one integer per line.");
+ if (cm == CompressionMode.AS_IS)
+ System.out
+ .println("Compressing the integers 'as is' (no differential coding)");
+ else
+ System.out
+ .println("Using differential coding (arrays will be sorted): use --nodelta to prevent sorting");
+ ArrayList data = new ArrayList();
+ for (String fn : files)
+ for (int[] x : loadIntegers(fn, myformat))
+ data.add(x);
+ System.out.println("Loaded " + data.size() + " array(s)");
+ if (cm == CompressionMode.DELTA) {
+ System.out
+ .println("Sorting the arrray(s) because you are using differential coding");
+ for (int[] x : data)
+ Arrays.sort(x);
+ }
+ bench(data, cm, false);
+ bench(data, cm, false);
+ bench(data, cm, true);
+ bytebench(data, cm, false);
+ bytebench(data, cm, false);
+ bytebench(data, cm, true);
+ }
+
+ private static void bench(ArrayList postings, CompressionMode cm,
+ boolean verbose) {
+ int maxlength = 0;
+ for (int[] x : postings)
+ if (maxlength < x.length)
+ maxlength = x.length;
+ if (verbose)
+ System.out.println("Max array length: " + maxlength);
+ int[] compbuffer = new int[2 * maxlength + 1024];
+ int[] decompbuffer = new int[maxlength];
+ if (verbose)
+ System.out.println("Scheme -- bits/int -- speed (mis)");
+ for (IntegerCODEC c : (cm == CompressionMode.DELTA ? codecs
+ : regcodecs)) {
+ long bef = 0;
+ long aft = 0;
+ long decomptime = 0;
+ long volumein = 0;
+ long volumeout = 0;
+ int[][] compdata = new int[postings.size()][];
+ for (int k = 0; k < postings.size(); ++k) {
+ int[] in = postings.get(k);
+ IntWrapper inpos = new IntWrapper(0);
+ IntWrapper outpos = new IntWrapper(0);
+ c.compress(in, inpos, in.length, compbuffer,
+ outpos);
+ int clength = outpos.get();
+ inpos = new IntWrapper(0);
+ outpos = new IntWrapper(0);
+ c.uncompress(compbuffer, inpos, clength,
+ decompbuffer, outpos);
+ volumein += in.length;
+ volumeout += clength;
+
+ if (outpos.get() != in.length)
+ throw new RuntimeException("bug");
+ for (int z = 0; z < in.length; ++z)
+ if (in[z] != decompbuffer[z])
+ throw new RuntimeException(
+ "bug");
+ compdata[k] = Arrays
+ .copyOf(compbuffer, clength);
+ }
+ bef = System.nanoTime();
+ for (int[] cin : compdata) {
+ IntWrapper inpos = new IntWrapper(0);
+ IntWrapper outpos = new IntWrapper(0);
+ c.uncompress(cin, inpos, cin.length,
+ decompbuffer, outpos);
+ if (inpos.get() != cin.length)
+ throw new RuntimeException("bug");
+ }
+ aft = System.nanoTime();
+ decomptime += (aft - bef);
+ double bitsPerInt = volumeout * 32.0 / volumein;
+ double decompressSpeed = volumein * 1000.0
+ / (decomptime);
+ if (verbose)
+ System.out.println(c.toString()
+ + "\t"
+ + String.format("\t%1$.2f\t%2$.2f",
+ bitsPerInt, decompressSpeed));
+
+ }
+ }
+
+ private static void bytebench(ArrayList postings,
+ CompressionMode cm, boolean verbose) {
+ int maxlength = 0;
+ for (int[] x : postings)
+ if (maxlength < x.length)
+ maxlength = x.length;
+ if (verbose)
+ System.out.println("Max array length: " + maxlength);
+ byte[] compbuffer = new byte[6 * (maxlength + 1024)];
+ int[] decompbuffer = new int[maxlength];
+ if (verbose)
+ System.out.println("Scheme -- bits/int -- speed (mis)");
+ for (ByteIntegerCODEC c : (cm == CompressionMode.DELTA ? bcodecs
+ : regbcodecs)) {
+ long bef = 0;
+ long aft = 0;
+ long decomptime = 0;
+ long volumein = 0;
+ long volumeout = 0;
+ byte[][] compdata = new byte[postings.size()][];
+ for (int k = 0; k < postings.size(); ++k) {
+ int[] in = postings.get(k);
+ IntWrapper inpos = new IntWrapper(0);
+ IntWrapper outpos = new IntWrapper(0);
+ c.compress(in, inpos, in.length, compbuffer,
+ outpos);
+ int clength = outpos.get();
+ inpos = new IntWrapper(0);
+ outpos = new IntWrapper(0);
+ c.uncompress(compbuffer, inpos, clength,
+ decompbuffer, outpos);
+ volumein += in.length;
+ volumeout += clength;
+
+ if (outpos.get() != in.length)
+ throw new RuntimeException("bug");
+ for (int z = 0; z < in.length; ++z)
+ if (in[z] != decompbuffer[z])
+ throw new RuntimeException(
+ "bug");
+ compdata[k] = Arrays
+ .copyOf(compbuffer, clength);
+ }
+ bef = System.nanoTime();
+ for (byte[] cin : compdata) {
+ IntWrapper inpos = new IntWrapper(0);
+ IntWrapper outpos = new IntWrapper(0);
+ c.uncompress(cin, inpos, cin.length,
+ decompbuffer, outpos);
+ if (inpos.get() != cin.length)
+ throw new RuntimeException("bug");
+ }
+ aft = System.nanoTime();
+ decomptime += (aft - bef);
+ double bitsPerInt = volumeout * 8.0 / volumein;
+ double decompressSpeed = volumein * 1000.0
+ / (decomptime);
+ if (verbose)
+ System.out.println(c.toString()
+ + "\t"
+ + String.format("\t%1$.2f\t%2$.2f",
+ bitsPerInt, decompressSpeed));
+
+ }
+ }
+
+}
diff --git a/src/main/java/me/lemire/integercompression/benchmarktools/BenchmarkOffsettedSeries.java b/src/main/java/me/lemire/integercompression/benchmarktools/BenchmarkOffsettedSeries.java
new file mode 100644
index 0000000..c31411d
--- /dev/null
+++ b/src/main/java/me/lemire/integercompression/benchmarktools/BenchmarkOffsettedSeries.java
@@ -0,0 +1,295 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ */
+package me.lemire.integercompression.benchmarktools;
+
+import java.io.File;
+import java.io.PrintWriter;
+import java.util.Arrays;
+import java.util.Random;
+
+import me.lemire.integercompression.BinaryPacking;
+import me.lemire.integercompression.DeltaZigzagBinaryPacking;
+import me.lemire.integercompression.DeltaZigzagVariableByte;
+import me.lemire.integercompression.FastPFOR;
+import me.lemire.integercompression.FastPFOR128;
+import me.lemire.integercompression.IntWrapper;
+import me.lemire.integercompression.IntegerCODEC;
+import me.lemire.integercompression.JustCopy;
+import me.lemire.integercompression.differential.IntegratedBinaryPacking;
+import me.lemire.integercompression.differential.XorBinaryPacking;
+
+/**
+ * Simple synthetic benchmark
+ *
+ */
+public class BenchmarkOffsettedSeries {
+ private static final int DEFAULT_MEAN = 1 << 20;
+ private static final int DEFAULT_RANGE = 1 << 10;
+ private static final int DEFAULT_REPEAT = 5;
+ private static final int DEFAULT_WARMUP = 2;
+
+
+ /**
+ * Run benchmark.
+ *
+ * @param csvWriter
+ * Write for results in CSV.
+ * @param count
+ * Count of data chunks.
+ * @param length
+ * Length of a data chunk.
+ */
+ public static void run(final PrintWriter csvWriter, final int count, final int length) {
+ IntegerCODEC[] codecs = { new JustCopy(), new BinaryPacking(),
+ new DeltaZigzagBinaryPacking(),
+ new DeltaZigzagVariableByte(),
+ new IntegratedBinaryPacking(), new XorBinaryPacking(),
+ new FastPFOR128(), new FastPFOR()};
+
+ csvWriter
+ .format("\"Dataset\",\"CODEC\",\"Bits per int\","
+ + "\"Compress speed (MiS)\",\"Decompress speed (MiS)\"\n");
+
+ benchmark(csvWriter, codecs, count, length, DEFAULT_MEAN,
+ DEFAULT_RANGE);
+ benchmark(csvWriter, codecs, count, length, DEFAULT_MEAN >> 5,
+ DEFAULT_RANGE);
+
+ IntegerCODEC[] codecs2 = { new JustCopy(), new BinaryPacking(),
+ new DeltaZigzagBinaryPacking(),
+ new DeltaZigzagVariableByte(),
+ new IntegratedBinaryPacking(), new XorBinaryPacking(),
+ new FastPFOR128(),new FastPFOR(), };
+
+ int freq = length / 4;
+ benchmarkSine(csvWriter, codecs2, count, length,
+ DEFAULT_MEAN >> 0, DEFAULT_RANGE >> 0, freq);
+ benchmarkSine(csvWriter, codecs2, count, length,
+ DEFAULT_MEAN >> 5, DEFAULT_RANGE >> 0, freq);
+ benchmarkSine(csvWriter, codecs2, count, length,
+ DEFAULT_MEAN >> 10, DEFAULT_RANGE >> 0, freq);
+ benchmarkSine(csvWriter, codecs2, count, length,
+ DEFAULT_MEAN >> 0, DEFAULT_RANGE >> 2, freq);
+ benchmarkSine(csvWriter, codecs2, count, length,
+ DEFAULT_MEAN >> 5, DEFAULT_RANGE >> 2, freq);
+ benchmarkSine(csvWriter, codecs2, count, length,
+ DEFAULT_MEAN >> 10, DEFAULT_RANGE >> 2, freq);
+ benchmarkSine(csvWriter, codecs2, count, length,
+ DEFAULT_MEAN >> 0, DEFAULT_RANGE >> 4, freq);
+ benchmarkSine(csvWriter, codecs2, count, length,
+ DEFAULT_MEAN >> 5, DEFAULT_RANGE >> 4, freq);
+ benchmarkSine(csvWriter, codecs2, count, length,
+ DEFAULT_MEAN >> 10, DEFAULT_RANGE >> 4, freq);
+ }
+
+ private static void benchmarkSine(final PrintWriter csvWriter,
+ final IntegerCODEC[] codecs, final int count, final int length, final int mean,
+ final int range, final int freq) {
+ String dataProp = String.format(
+ "(mean=%1$d range=%2$d freq=%3$d)", mean, range, freq);
+ int[][] data = generateSineDataChunks(0, count, length, mean,
+ range, freq);
+ benchmark(csvWriter, "Sine " + dataProp, codecs, data,
+ DEFAULT_REPEAT, DEFAULT_WARMUP);
+ benchmark(csvWriter, "Sine+delta " + dataProp, codecs, data,
+ DEFAULT_REPEAT, DEFAULT_WARMUP);
+ }
+
+ private static void benchmark(final PrintWriter csvWriter, final IntegerCODEC[] codecs,
+ final int count, final int length, final int mean, final int range) {
+ String dataProp = String.format("(mean=%1$d range=%2$d)", mean,
+ range);
+
+ int[][] randData = generateDataChunks(0, count, length, mean,
+ range);
+ int[][] deltaData = deltaDataChunks(randData);
+ int[][] sortedData = sortDataChunks(randData);
+ int[][] sortedDeltaData = deltaDataChunks(sortedData);
+
+ benchmark(csvWriter, "Random " + dataProp, codecs, randData,
+ DEFAULT_REPEAT, DEFAULT_WARMUP);
+ benchmark(csvWriter, "Random+delta " + dataProp, codecs,
+ deltaData, DEFAULT_REPEAT, DEFAULT_WARMUP);
+ benchmark(csvWriter, "Sorted " + dataProp, codecs, sortedData,
+ DEFAULT_REPEAT, DEFAULT_WARMUP);
+ benchmark(csvWriter, "Sorted+delta " + dataProp, codecs,
+ sortedDeltaData, DEFAULT_REPEAT, DEFAULT_WARMUP);
+ }
+
+ private static void benchmark(final PrintWriter csvWriter, final String dataName,
+ final IntegerCODEC[] codecs, final int[][] data, final int repeat, final int warmup) {
+ System.out.println("Processing: " + dataName);
+ for (IntegerCODEC codec : codecs) {
+ String codecName = codec.toString();
+ for (int i = 0; i < warmup; ++i) {
+ benchmark(null, null, null, codec, data, repeat);
+ }
+ benchmark(csvWriter, dataName, codecName, codec, data,
+ repeat);
+ }
+ }
+
+ private static void benchmark(PrintWriter csvWriter, String dataName,
+ String codecName, IntegerCODEC codec, int[][] data, int repeat) {
+ PerformanceLogger logger = new PerformanceLogger();
+
+ int maxLen = getMaxLen(data);
+ int[] compressBuffer = new int[4 * maxLen + 1024];
+ int[] decompressBuffer = new int[maxLen];
+
+ for (int i = 0; i < repeat; ++i) {
+ for (int[] array : data) {
+ int compSize = compress(logger, codec, array,
+ compressBuffer);
+ int decompSize = decompress(logger, codec,
+ compressBuffer, compSize,
+ decompressBuffer);
+ checkArray(array, decompressBuffer, decompSize,
+ codec);
+ }
+ }
+
+ if (csvWriter != null) {
+ csvWriter.format(
+ "\"%1$s\",\"%2$s\",%3$.2f,%4$.0f,%5$.0f\n",
+ dataName, codecName, logger.getBitPerInt(),
+ logger.getCompressSpeed(),
+ logger.getDecompressSpeed());
+ }
+ }
+
+ private static void checkArray(int[] expected, int[] actualArray,
+ int actualLen, IntegerCODEC codec) {
+ if (actualLen != expected.length) {
+ throw new RuntimeException("Length mismatch:"
+ + " expected=" + expected.length + " actual="
+ + actualLen + " codec=" + codec.toString());
+ }
+ for (int i = 0; i < expected.length; ++i) {
+ if (actualArray[i] != expected[i]) {
+ throw new RuntimeException("Value mismatch: "
+ + " where=" + i + " expected="
+ + expected[i] + " actual="
+ + actualArray[i] + " codec="
+ + codec.toString());
+ }
+ }
+ }
+
+ private static int compress(PerformanceLogger logger, IntegerCODEC codec,
+ int[] src, int[] dst) {
+ IntWrapper inpos = new IntWrapper();
+ IntWrapper outpos = new IntWrapper();
+ logger.compressionTimer.start();
+ codec.compress(src, inpos, src.length, dst, outpos);
+ logger.compressionTimer.end();
+ int outSize = outpos.get();
+ logger.addOriginalSize(src.length);
+ logger.addCompressedSize(outSize);
+ return outSize;
+ }
+
+ private static int decompress(PerformanceLogger logger, IntegerCODEC codec,
+ int[] src, int srcLen, int[] dst) {
+ IntWrapper inpos = new IntWrapper();
+ IntWrapper outpos = new IntWrapper();
+ logger.decompressionTimer.start();
+ codec.uncompress(src, inpos, srcLen, dst, outpos);
+ logger.decompressionTimer.end();
+ return outpos.get();
+ }
+
+ private static int getMaxLen(int[][] data) {
+ int maxLen = 0;
+ for (int[] array : data) {
+ if (array.length > maxLen) {
+ maxLen = array.length;
+ }
+ }
+ return maxLen;
+ }
+
+ private static int[][] generateSineDataChunks(long seed, int count,
+ int length, int mean, int range, int freq) {
+ int[][] chunks = new int[count][];
+ Random r = new Random(seed);
+ for (int i = 0; i < count; ++i) {
+ int[] chunk = chunks[i] = new int[length];
+ int phase = r.nextInt(2 * freq);
+ for (int j = 0; j < length; ++j) {
+ double angle = 2.0 * Math.PI * (j + phase)
+ / freq;
+ chunk[j] = (int) (mean + Math.sin(angle)
+ * range);
+ }
+ }
+ return chunks;
+ }
+
+ private static int[][] generateDataChunks(long seed, int count,
+ int length, int mean, int range) {
+ int offset = mean - range / 2;
+ int[][] chunks = new int[count][];
+ Random r = new Random(seed);
+ for (int i = 0; i < count; ++i) {
+ int[] chunk = chunks[i] = new int[length];
+ for (int j = 0; j < length; ++j) {
+ chunk[j] = r.nextInt(range) + offset;
+ }
+ }
+ return chunks;
+ }
+
+ private static int[][] deltaDataChunks(int[][] src) {
+ int[][] dst = new int[src.length][];
+ for (int i = 0; i < src.length; ++i) {
+ int[] s = src[i];
+ int[] d = dst[i] = new int[s.length];
+ int prev = 0;
+ for (int j = 0; j < s.length; ++j) {
+ d[j] = s[j] - prev;
+ prev = s[j];
+ }
+ }
+ return dst;
+ }
+
+ private static int[][] sortDataChunks(int[][] src) {
+ int[][] dst = new int[src.length][];
+ for (int i = 0; i < src.length; ++i) {
+ dst[i] = Arrays.copyOf(src[i], src[i].length);
+ Arrays.sort(dst[i]);
+ }
+ return dst;
+ }
+
+ /**
+ * @param args command-line arguments
+ * @throws Exception when some problem occurs
+ */
+ public static void main(final String[] args) throws Exception {
+ File csvFile = new File(
+ String.format(
+ "benchmark-offsetted-%1$tY%1$tm%1$tdT%1$tH%1$tM%1$tS.csv",
+ System.currentTimeMillis()));
+ PrintWriter writer = null;
+ try {
+ writer = new PrintWriter(csvFile);
+ System.out
+ .println("# Results will be written into a CSV file: "
+ + csvFile.getName());
+ System.out.println();
+ BenchmarkOffsettedSeries.run(writer, 8 * 1024, 1280);
+ System.out.println();
+ System.out
+ .println("# Results were written into a CSV file: "
+ + csvFile.getName());
+ } finally {
+ if (writer != null) {
+ writer.close();
+ }
+ }
+ }
+}
diff --git a/src/main/java/me/lemire/integercompression/benchmarktools/BenchmarkSkippable.java b/src/main/java/me/lemire/integercompression/benchmarktools/BenchmarkSkippable.java
new file mode 100644
index 0000000..b930568
--- /dev/null
+++ b/src/main/java/me/lemire/integercompression/benchmarktools/BenchmarkSkippable.java
@@ -0,0 +1,339 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+package me.lemire.integercompression.benchmarktools;
+
+import me.lemire.integercompression.BinaryPacking;
+import me.lemire.integercompression.FastPFOR;
+import me.lemire.integercompression.FastPFOR128;
+import me.lemire.integercompression.IntWrapper;
+import me.lemire.integercompression.JustCopy;
+import me.lemire.integercompression.NewPFD;
+import me.lemire.integercompression.NewPFDS16;
+import me.lemire.integercompression.NewPFDS9;
+import me.lemire.integercompression.OptPFD;
+import me.lemire.integercompression.OptPFDS16;
+import me.lemire.integercompression.OptPFDS9;
+import me.lemire.integercompression.Simple16;
+import me.lemire.integercompression.Simple9;
+import me.lemire.integercompression.SkippableComposition;
+import me.lemire.integercompression.SkippableIntegerCODEC;
+import me.lemire.integercompression.VariableByte;
+import me.lemire.integercompression.differential.Delta;
+import me.lemire.integercompression.differential.IntegratedBinaryPacking;
+import me.lemire.integercompression.differential.IntegratedVariableByte;
+import me.lemire.integercompression.differential.SkippableIntegratedComposition;
+import me.lemire.integercompression.differential.SkippableIntegratedIntegerCODEC;
+import me.lemire.integercompression.synth.ClusteredDataGenerator;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.PrintWriter;
+import java.util.Arrays;
+
+/**
+ *
+ * Simple class meant to compare the speed of different schemes.
+ *
+ * @author Daniel Lemire
+ *
+ */
+public class BenchmarkSkippable {
+
+ private static int compressWithSkipTable(Object c, int[] data,
+ int[] output, IntWrapper outpos, int[] metadata, int blocksize) {
+ int metapos = 0;
+ metadata[metapos++] = data.length;
+ IntWrapper inpos = new IntWrapper();
+ int initvalue = 0;
+ IntWrapper ival = new IntWrapper(initvalue);
+ while (inpos.get() < data.length) {
+ metadata[metapos++] = outpos.get();
+ metadata[metapos++] = initvalue;
+ if (c instanceof SkippableIntegerCODEC) {
+ int size = blocksize > data.length - inpos.get() ? data.length
+ - inpos.get() : blocksize;
+ initvalue = Delta.delta(data, inpos.get(), size, initvalue);
+
+ ((SkippableIntegerCODEC) c).headlessCompress(data, inpos,
+ blocksize, output, outpos);
+ } else if (c instanceof SkippableIntegratedIntegerCODEC) {
+ ival.set(initvalue);
+ ((SkippableIntegratedIntegerCODEC) c).headlessCompress(data,
+ inpos, blocksize, output, outpos, ival);
+ initvalue = ival.get();
+ } else {
+ throw new RuntimeException("Unrecognized codec " + c);
+ }
+ }
+ return metapos;
+ }
+
+ private static int decompressFromSkipTable(Object c, int[] compressed,
+ IntWrapper compressedpos, int[] metadata, int blocksize, int[] data) {
+ int metapos = 0;
+ int length = metadata[metapos++];
+ IntWrapper uncomppos = new IntWrapper();
+ IntWrapper ival = new IntWrapper();
+ while (uncomppos.get() < length) {
+ int num = blocksize;
+ if (num > length - uncomppos.get())
+ num = length - uncomppos.get();
+ int location = metadata[metapos++];
+ int initvalue = metadata[metapos++];
+ int outputlocation = uncomppos.get();
+ if (location != compressedpos.get())
+ throw new RuntimeException("Bug " + location + " "
+ + compressedpos.get() + " codec " + c);
+ if (c instanceof SkippableIntegerCODEC) {
+ ((SkippableIntegerCODEC) c).headlessUncompress(compressed,
+ compressedpos, compressed.length - uncomppos.get(),
+ data, uncomppos, num);
+ initvalue = Delta.fastinverseDelta(data, outputlocation, num,
+ initvalue);
+ } else if (c instanceof SkippableIntegratedIntegerCODEC) {
+ ival.set(initvalue);
+ ((SkippableIntegratedIntegerCODEC) c).headlessUncompress(
+ compressed, compressedpos, compressed.length
+ - uncomppos.get(), data, uncomppos, num, ival);
+ } else {
+ throw new RuntimeException("Unrecognized codec " + c);
+ }
+ }
+ return length;
+ }
+
+ /**
+ * Standard benchmark
+ *
+ * @param csvLog
+ * Writer for CSV log.
+ * @param c
+ * the codec
+ * @param data
+ * arrays of input data
+ * @param repeat
+ * How many times to repeat the test
+ * @param verbose
+ * whether to output result on screen
+ */
+ private static void testCodec(PrintWriter csvLog, int sparsity, Object c,
+ int[][] data, int repeat, boolean verbose) {
+ if (verbose) {
+ System.out.println("# " + c.toString());
+ System.out
+ .println("# bits per int, compress speed (mis), decompression speed (mis) ");
+ }
+
+ int N = data.length;
+
+ int totalSize = 0;
+ int maxLength = 0;
+ for (int k = 0; k < N; ++k) {
+ totalSize += data[k].length;
+ if (data[k].length > maxLength) {
+ maxLength = data[k].length;
+ }
+ }
+
+ // 4x + 1024 to account for the possibility of some negative
+ // compression.
+ int[] compressBuffer = new int[4 * maxLength + 1024];
+ int[] decompressBuffer = new int[maxLength + 1024];
+ int[] metadataBuffer = new int[maxLength];
+ final int blocksize = 1024;
+
+ // These variables hold time in microseconds (10^-6).
+ double compressTime = 0;
+ double decompressTime = 0;
+ final int times = 5;
+
+ int size = 0;
+
+ for (int r = 0; r < repeat; ++r) {
+ size = 0;
+ for (int k = 0; k < N; ++k) {
+ int[] backupdata = Arrays.copyOf(data[k], data[k].length);
+
+ // compress data.
+ long beforeCompress = System.nanoTime() / 1000;
+ IntWrapper outpos = new IntWrapper();
+ compressWithSkipTable(c, backupdata, compressBuffer, outpos,
+ metadataBuffer, blocksize);
+ long afterCompress = System.nanoTime() / 1000;
+
+ // measure time of compression.
+ compressTime += afterCompress - beforeCompress;
+ final int thiscompsize = outpos.get();
+ size += thiscompsize;
+ // dry run
+ int volume = 0;
+ {
+ IntWrapper compressedpos = new IntWrapper(0);
+ volume = decompressFromSkipTable(c, compressBuffer,
+ compressedpos, metadataBuffer, blocksize,
+ decompressBuffer);
+
+ // let us check the answer
+ if (volume != backupdata.length)
+ throw new RuntimeException(
+ "Bad output size with codec " + c);
+ for (int j = 0; j < volume; ++j) {
+ if (data[k][j] != decompressBuffer[j])
+ throw new RuntimeException("bug in codec " + c);
+ }
+ }
+ // extract (uncompress) data
+ long beforeDecompress = System.nanoTime() / 1000;
+ for (int t = 0; t < times; ++t) {
+ IntWrapper compressedpos = new IntWrapper(0);
+ volume = decompressFromSkipTable(c, compressBuffer,
+ compressedpos, metadataBuffer, blocksize,
+ decompressBuffer);
+ }
+ long afterDecompress = System.nanoTime() / 1000;
+
+ // measure time of extraction (uncompression).
+ decompressTime += (afterDecompress - beforeDecompress) / times;
+ if (volume != data[k].length)
+ throw new RuntimeException("we have a bug (diff length) "
+ + c + " expected " + data[k].length + " got "
+ + volume);
+
+ // verify: compare original array with
+ // compressed and
+ // uncompressed.
+ for (int m = 0; m < outpos.get(); ++m) {
+ if (decompressBuffer[m] != data[k][m]) {
+ throw new RuntimeException(
+ "we have a bug (actual difference), expected "
+ + data[k][m] + " found "
+ + decompressBuffer[m] + " at " + m);
+ }
+ }
+ }
+ }
+
+ if (verbose) {
+ double bitsPerInt = size * 32.0 / totalSize;
+ long compressSpeed = Math
+ .round(totalSize * repeat / (compressTime));
+ long decompressSpeed = Math.round(totalSize * repeat
+ / (decompressTime));
+ System.out.println(String.format("\t%1$.2f\t%2$d\t%3$d",
+ bitsPerInt, compressSpeed, decompressSpeed));
+ csvLog.format("\"%1$s\",%2$d,%3$.2f,%4$d,%5$d\n", c.toString(),
+ sparsity, bitsPerInt, compressSpeed, decompressSpeed);
+ csvLog.flush();
+ }
+ }
+
+ /**
+ * Main method.
+ *
+ * @param args
+ * command-line arguments
+ * @throws FileNotFoundException
+ * when we fail to create a new file
+ */
+ public static void main(String args[]) throws FileNotFoundException {
+ System.out.println("# benchmark based on the ClusterData model from:");
+ System.out.println("# Vo Ngoc Anh and Alistair Moffat. ");
+ System.out.println("# Index compression using 64-bit words.");
+ System.out
+ .println("# Softw. Pract. Exper.40, 2 (February 2010), 131-147. ");
+ System.out.println();
+
+ PrintWriter writer = null;
+ try {
+ File csvFile = new File(String.format(
+ "benchmark-%1$tY%1$tm%1$tdT%1$tH%1$tM%1$tS.csv",
+ System.currentTimeMillis()));
+ writer = new PrintWriter(csvFile);
+ System.out.println("# Results will be written into a CSV file: "
+ + csvFile.getName());
+ System.out.println();
+ test(writer, 20, 18, 10);
+ System.out.println();
+ System.out.println("Results were written into a CSV file: "
+ + csvFile.getName());
+ } finally {
+ if (writer != null) {
+ writer.close();
+ }
+ }
+ }
+
+ /**
+ * Generate test data.
+ *
+ * @param N
+ * How many input arrays to generate
+ * @param nbr
+ * How big (in log2) should the arrays be
+ * @param sparsity
+ * How sparse test data generated
+ */
+ private static int[][] generateTestData(ClusteredDataGenerator dataGen,
+ int N, int nbr, int sparsity) {
+ final int[][] data = new int[N][];
+ final int dataSize = (1 << (nbr + sparsity));
+ for (int i = 0; i < N; ++i) {
+ data[i] = dataGen.generateClustered((1 << nbr), dataSize);
+ }
+ return data;
+ }
+
+ static Object[] codecs = {
+
+ new SkippableIntegratedComposition(new IntegratedBinaryPacking(),
+ new IntegratedVariableByte()), new JustCopy(), new VariableByte(),
+
+ new SkippableComposition(new BinaryPacking(), new VariableByte()),
+ new SkippableComposition(new NewPFD(), new VariableByte()),
+ new SkippableComposition(new NewPFDS9(), new VariableByte()),
+ new SkippableComposition(new NewPFDS16(), new VariableByte()),
+ new SkippableComposition(new OptPFD(), new VariableByte()),
+ new SkippableComposition(new OptPFDS9(), new VariableByte()),
+ new SkippableComposition(new OptPFDS16(), new VariableByte()),
+ new SkippableComposition(new FastPFOR(), new VariableByte()),
+ new SkippableComposition(new FastPFOR128(), new VariableByte()),
+ new Simple9(), new Simple16() };
+
+ /**
+ * Generates data and calls other tests.
+ *
+ * @param csvLog
+ * Writer for CSV log.
+ * @param N
+ * How many input arrays to generate
+ * @param nbr
+ * how big (in log2) should the arrays be
+ * @param repeat
+ * How many times should we repeat tests.
+ */
+ private static void test(PrintWriter csvLog, int N, int nbr, int repeat) {
+ csvLog.format("\"Algorithm\",\"Sparsity\",\"Bits per int\",\"Compress speed (MiS)\",\"Decompress speed (MiS)\"\n");
+ ClusteredDataGenerator cdg = new ClusteredDataGenerator();
+ final int max_sparsity = 31 - nbr;
+
+ for (int sparsity = 1; sparsity < max_sparsity; sparsity+=4) {
+ System.out.println("# sparsity " + sparsity);
+ System.out.println("# generating random data...");
+ int[][] data = generateTestData(cdg, N, nbr, sparsity);
+ System.out.println("# generating random data... ok.");
+ for (Object c : codecs) {
+ testCodec(csvLog, sparsity, c, data, repeat, false);
+ testCodec(csvLog, sparsity, c, data, repeat, false);
+ testCodec(csvLog, sparsity, c, data, repeat, true);
+ testCodec(csvLog, sparsity, c, data, repeat, true);
+ testCodec(csvLog, sparsity, c, data, repeat, true);
+
+ }
+
+ }
+ }
+}
diff --git a/src/main/java/me/lemire/integercompression/benchmarktools/PerformanceLogger.java b/src/main/java/me/lemire/integercompression/benchmarktools/PerformanceLogger.java
new file mode 100644
index 0000000..ca97144
--- /dev/null
+++ b/src/main/java/me/lemire/integercompression/benchmarktools/PerformanceLogger.java
@@ -0,0 +1,75 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ */
+package me.lemire.integercompression.benchmarktools;
+
+/**
+ * PerformanceLogger for IntegerCODEC.
+ *
+ * @author MURAOKA Taro http://github.com/koron
+ */
+public final class PerformanceLogger {
+ static class Timer {
+ private long startNano;
+ private long duration = 0;
+
+ public Timer() {
+ }
+
+ public void start() {
+ this.startNano = System.nanoTime();
+ }
+
+ public long end() {
+ return this.duration += System.nanoTime()
+ - this.startNano;
+ }
+
+ public long getDuration() {
+ return this.duration;
+ }
+ }
+
+ final Timer compressionTimer = new Timer();
+
+ final Timer decompressionTimer = new Timer();
+
+ private long originalSize = 0;
+
+ private long compressedSize = 0;
+
+ long addOriginalSize(long value) {
+ return this.originalSize += value;
+ }
+
+ long addCompressedSize(long value) {
+ return this.compressedSize += value;
+ }
+
+ long getOriginalSize() {
+ return this.originalSize;
+ }
+
+ long getCompressedSize() {
+ return this.compressedSize;
+ }
+
+ double getBitPerInt() {
+ return this.compressedSize * 32.0 / this.originalSize;
+ }
+
+ private static double getMiS(long size, long nanoTime) {
+ return (size * 1e-6) / (nanoTime * 1.0e-9);
+ }
+
+ double getCompressSpeed() {
+ return getMiS(this.originalSize,
+ this.compressionTimer.getDuration());
+ }
+
+ double getDecompressSpeed() {
+ return getMiS(this.originalSize,
+ this.decompressionTimer.getDuration());
+ }
+}
diff --git a/src/main/java/me/lemire/integercompression/differential/Delta.java b/src/main/java/me/lemire/integercompression/differential/Delta.java
new file mode 100644
index 0000000..4f7c144
--- /dev/null
+++ b/src/main/java/me/lemire/integercompression/differential/Delta.java
@@ -0,0 +1,150 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+
+package me.lemire.integercompression.differential;
+
+/**
+ * Generic class to compute differential coding.
+ *
+ * @author Daniel Lemire
+ *
+ */
+public final class Delta {
+
+ /**
+ * Apply differential coding (in-place).
+ *
+ * @param data
+ * data to be modified
+ */
+ public static void delta(int[] data) {
+ for (int i = data.length - 1; i > 0; --i) {
+ data[i] -= data[i - 1];
+ }
+ }
+
+ /**
+ * Apply differential coding (in-place) given an initial value.
+ *
+ * @param data
+ * data to be modified
+ * @param start
+ * starting index
+ * @param length
+ * number of integers to process
+ * @param init
+ * initial value
+ * @return next initial vale
+ */
+ public static int delta(int[] data, int start, int length, int init) {
+ final int nextinit = data[start + length - 1];
+ for (int i = length - 1; i > 0; --i) {
+ data[start + i] -= data[start + i - 1];
+ }
+ data[start] -= init;
+ return nextinit;
+ }
+
+ /**
+ * Compute differential coding given an initial value. Output is written
+ * to a provided array: must have length "length" or better.
+ *
+ * @param data
+ * data to be modified
+ * @param start
+ * starting index
+ * @param length
+ * number of integers to process
+ * @param init
+ * initial value
+ * @param out
+ * output array
+ * @return next initial vale
+ */
+ public static int delta(int[] data, int start, int length, int init,
+ int[] out) {
+ for (int i = length - 1; i > 0; --i) {
+ out[i] = data[start + i] - data[start + i - 1];
+ }
+ out[0] = data[start] - init;
+ return data[start + length - 1];
+ }
+
+ /**
+ * Undo differential coding (in-place). Effectively computes a prefix
+ * sum.
+ *
+ * @param data
+ * to be modified.
+ */
+ public static void inverseDelta(int[] data) {
+ for (int i = 1; i < data.length; ++i) {
+ data[i] += data[i - 1];
+ }
+ }
+
+ /**
+ * Undo differential coding (in-place). Effectively computes a prefix
+ * sum. Like inverseDelta, only faster.
+ *
+ * @param data
+ * to be modified
+ */
+ public static void fastinverseDelta(int[] data) {
+ int sz0 = data.length / 4 * 4;
+ int i = 1;
+ if (sz0 >= 4) {
+ int a = data[0];
+ for (; i < sz0 - 4; i += 4) {
+ a = data[i] += a;
+ a = data[i + 1] += a;
+ a = data[i + 2] += a;
+ a = data[i + 3] += a;
+ }
+ }
+
+ for (; i != data.length; ++i) {
+ data[i] += data[i - 1];
+ }
+ }
+
+ /**
+ * Undo differential coding (in-place). Effectively computes a prefix
+ * sum. Like inverseDelta, only faster. Uses an initial value.
+ *
+ * @param data
+ * to be modified
+ * @param start
+ * starting index
+ * @param length
+ * number of integers to process
+ * @param init
+ * initial value
+ * @return next initial value
+ */
+ public static int fastinverseDelta(int[] data, int start, int length,
+ int init) {
+ data[start] += init;
+ int sz0 = length / 4 * 4;
+ int i = 1;
+ if (sz0 >= 4) {
+ int a = data[start];
+ for (; i < sz0 - 4; i += 4) {
+ a = data[start + i] += a;
+ a = data[start + i + 1] += a;
+ a = data[start + i + 2] += a;
+ a = data[start + i + 3] += a;
+ }
+ }
+
+ for (; i != length; ++i) {
+ data[start + i] += data[start + i - 1];
+ }
+ return data[start + length - 1];
+ }
+
+}
diff --git a/src/main/java/me/lemire/integercompression/differential/IntegratedBinaryPacking.java b/src/main/java/me/lemire/integercompression/differential/IntegratedBinaryPacking.java
new file mode 100644
index 0000000..f50a367
--- /dev/null
+++ b/src/main/java/me/lemire/integercompression/differential/IntegratedBinaryPacking.java
@@ -0,0 +1,183 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+
+package me.lemire.integercompression.differential;
+
+import me.lemire.integercompression.BitPacking;
+import me.lemire.integercompression.IntWrapper;
+import me.lemire.integercompression.Util;
+
+/**
+ * Scheme based on a commonly used idea: can be extremely fast.
+ *
+ * You should only use this scheme on sorted arrays. Use BinaryPacking if you
+ * have unsorted arrays.
+ *
+ * It encodes integers in blocks of 32 integers. For arrays containing an
+ * arbitrary number of integers, you should use it in conjunction with another
+ * CODEC:
+ *
+ *
+ * IntegratedIntegerCODEC is =
+ * new IntegratedComposition(new IntegratedBinaryPacking(),
+ * new IntegratedVariableByte())
+ *
+ *
+ *
+ * For details, please see
+ *
+ *
+ * Daniel Lemire and Leonid Boytsov, Decoding billions of integers per second
+ * through vectorization Software: Practice & Experience http://onlinelibrary.wiley.com/doi/10.1002/spe.2203/abstract http://arxiv.org/abs/1209.2137
+ *
+ *
+ * Daniel Lemire, Leonid Boytsov, Nathan Kurz, SIMD Compression and the
+ * Intersection of Sorted Integers http://arxiv.org/abs/1401.6399
+ *
+ *
+ * @author Daniel Lemire
+ *
+ */
+public class IntegratedBinaryPacking implements IntegratedIntegerCODEC,
+ SkippableIntegratedIntegerCODEC {
+
+ public static final int BLOCK_SIZE = 32;
+ private static final int MAX_BIT_WIDTH = Integer.SIZE;
+
+ @Override
+ public void compress(int[] in, IntWrapper inpos, int inlength, int[] out,
+ IntWrapper outpos) {
+ inlength = Util.greatestMultiple(inlength, BLOCK_SIZE);
+ if (inlength == 0)
+ return;
+ out[outpos.get()] = inlength;
+ outpos.increment();
+ headlessCompress(in, inpos, inlength, out, outpos, new IntWrapper(0));
+ }
+
+ @Override
+ public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out,
+ IntWrapper outpos) {
+ if (inlength == 0)
+ return;
+ final int outlength = in[inpos.get()];
+ inpos.increment();
+ headlessUncompress(in,inpos,inlength,out,outpos,outlength, new IntWrapper(0));
+ }
+
+ @Override
+ public String toString() {
+ return this.getClass().getSimpleName();
+ }
+
+ @Override
+ public void headlessCompress(int[] in, IntWrapper inpos, int inlength,
+ int[] out, IntWrapper outpos, IntWrapper initvalue) {
+ inlength = Util.greatestMultiple(inlength, BLOCK_SIZE);
+ if (inlength == 0)
+ return;
+ int tmpoutpos = outpos.get();
+
+ int initoffset = initvalue.get();
+ initvalue.set(in[inpos.get()+inlength -1]);
+ int s = inpos.get();
+ for (; s + BLOCK_SIZE * 4 - 1 < inpos.get() + inlength; s += BLOCK_SIZE * 4) {
+ final int mbits1 = Util.maxdiffbits(initoffset, in, s, BLOCK_SIZE);
+ int initoffset2 = in[s + 31];
+ final int mbits2 = Util.maxdiffbits(initoffset2, in, s + BLOCK_SIZE, BLOCK_SIZE);
+ int initoffset3 = in[s + BLOCK_SIZE + 31];
+ final int mbits3 = Util
+ .maxdiffbits(initoffset3, in, s + 2 * BLOCK_SIZE, BLOCK_SIZE);
+ int initoffset4 = in[s + 2 * BLOCK_SIZE + 31];
+ final int mbits4 = Util
+ .maxdiffbits(initoffset4, in, s + 3 * BLOCK_SIZE, BLOCK_SIZE);
+ out[tmpoutpos++] = (mbits1 << 24) | (mbits2 << 16) | (mbits3 << 8)
+ | (mbits4);
+ IntegratedBitPacking.integratedpack(initoffset, in, s, out,
+ tmpoutpos, mbits1);
+ tmpoutpos += mbits1;
+ IntegratedBitPacking.integratedpack(initoffset2, in, s + BLOCK_SIZE, out,
+ tmpoutpos, mbits2);
+ tmpoutpos += mbits2;
+ IntegratedBitPacking.integratedpack(initoffset3, in, s + 2 * BLOCK_SIZE,
+ out, tmpoutpos, mbits3);
+ tmpoutpos += mbits3;
+ IntegratedBitPacking.integratedpack(initoffset4, in, s + 3 * BLOCK_SIZE,
+ out, tmpoutpos, mbits4);
+ tmpoutpos += mbits4;
+ initoffset = in[s + 3 * BLOCK_SIZE + 31];
+ }
+ for (; s < inpos.get() + inlength; s += BLOCK_SIZE ) {
+ final int mbits = Util.maxdiffbits(initoffset, in, s, BLOCK_SIZE);
+ out[tmpoutpos++] = mbits;
+ IntegratedBitPacking.integratedpack(initoffset, in, s, out,
+ tmpoutpos, mbits);
+ tmpoutpos += mbits;
+ initoffset = in[s + 31];
+ }
+ inpos.add(inlength);
+ outpos.set(tmpoutpos);
+ }
+
+ @Override
+ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength,
+ int[] out, IntWrapper outpos, int num, IntWrapper initvalue) {
+ final int outlength = Util.greatestMultiple(num, BLOCK_SIZE);
+ int tmpinpos = inpos.get();
+ int initoffset = initvalue.get();
+ int s = outpos.get();
+ for (; s + BLOCK_SIZE * 4 - 1 < outpos.get() + outlength; s += BLOCK_SIZE * 4) {
+ final int mbits1 = (in[tmpinpos] >>> 24);
+ final int mbits2 = (in[tmpinpos] >>> 16) & 0xFF;
+ final int mbits3 = (in[tmpinpos] >>> 8) & 0xFF;
+ final int mbits4 = (in[tmpinpos]) & 0xFF;
+
+ ++tmpinpos;
+ IntegratedBitPacking.integratedunpack(initoffset, in, tmpinpos,
+ out, s, mbits1);
+ tmpinpos += mbits1;
+ initoffset = out[s + 31];
+ IntegratedBitPacking.integratedunpack(initoffset, in, tmpinpos,
+ out, s + BLOCK_SIZE, mbits2);
+ tmpinpos += mbits2;
+ initoffset = out[s + BLOCK_SIZE + 31];
+ IntegratedBitPacking.integratedunpack(initoffset, in, tmpinpos,
+ out, s + 2 * BLOCK_SIZE, mbits3);
+ tmpinpos += mbits3;
+ initoffset = out[s + 2 * BLOCK_SIZE + 31];
+ IntegratedBitPacking.integratedunpack(initoffset, in, tmpinpos,
+ out, s + 3 * BLOCK_SIZE, mbits4);
+ tmpinpos += mbits4;
+ initoffset = out[s + 3 * BLOCK_SIZE + 31];
+ }
+ for (; s < outpos.get() + outlength; s += BLOCK_SIZE) {
+ final int mbits = in[tmpinpos];
+ ++tmpinpos;
+ IntegratedBitPacking.integratedunpack(initoffset, in, tmpinpos,
+ out, s, mbits);
+ initoffset = out[s + 31];
+
+ tmpinpos += mbits;
+ }
+ outpos.add(outlength);
+ initvalue.set(initoffset);
+ inpos.set(tmpinpos);
+ }
+
+ @Override
+ public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) {
+ int blockCount = inlength / BLOCK_SIZE;
+ int headersSizeInInts = blockCount / Integer.BYTES + (blockCount % Integer.BYTES);
+ int blocksSizeInInts = blockCount * MAX_BIT_WIDTH;
+ compressedPositions.add(blockCount * BLOCK_SIZE);
+ return headersSizeInInts + blocksSizeInInts;
+ }
+}
diff --git a/src/main/java/me/lemire/integercompression/differential/IntegratedBitPacking.java b/src/main/java/me/lemire/integercompression/differential/IntegratedBitPacking.java
new file mode 100644
index 0000000..8b26f6b
--- /dev/null
+++ b/src/main/java/me/lemire/integercompression/differential/IntegratedBitPacking.java
@@ -0,0 +1,3914 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+
+package me.lemire.integercompression.differential;
+
+import java.util.Arrays;
+
+/**
+ * "Integrated" bit packing routines: they include both the bit packing and the
+ * differential coding.
+ *
+ * For details, please see
+ *
+ * Daniel Lemire and Leonid Boytsov, Decoding billions of integers per second
+ * through vectorization Software: Practice & Experience
+ * http://onlinelibrary.wiley.com/doi/10.1002/spe.2203/abstract
+ * http://arxiv.org/abs/1209.2137
+ *
+ *
+ * @author Daniel Lemire
+ *
+ */
+public final class IntegratedBitPacking {
+
+ /**
+ * Pack 32 integers as deltas with an initial value
+ *
+ * @param initoffset initial value (used to compute first delta)
+ * @param in input array
+ * @param inpos initial position in input array
+ * @param out output array
+ * @param outpos initial position in output array
+ * @param bit number of bits to use per integer
+ */
+ public static void integratedpack(final int initoffset, final int[] in,
+ final int inpos, final int[] out, final int outpos, final int bit) {
+ switch (bit) {
+ case 0:
+ integratedpack0(initoffset, in, inpos, out, outpos);
+ break;
+ case 1:
+ integratedpack1(initoffset, in, inpos, out, outpos);
+ break;
+ case 2:
+ integratedpack2(initoffset, in, inpos, out, outpos);
+ break;
+ case 3:
+ integratedpack3(initoffset, in, inpos, out, outpos);
+ break;
+ case 4:
+ integratedpack4(initoffset, in, inpos, out, outpos);
+ break;
+ case 5:
+ integratedpack5(initoffset, in, inpos, out, outpos);
+ break;
+ case 6:
+ integratedpack6(initoffset, in, inpos, out, outpos);
+ break;
+ case 7:
+ integratedpack7(initoffset, in, inpos, out, outpos);
+ break;
+ case 8:
+ integratedpack8(initoffset, in, inpos, out, outpos);
+ break;
+ case 9:
+ integratedpack9(initoffset, in, inpos, out, outpos);
+ break;
+ case 10:
+ integratedpack10(initoffset, in, inpos, out, outpos);
+ break;
+ case 11:
+ integratedpack11(initoffset, in, inpos, out, outpos);
+ break;
+ case 12:
+ integratedpack12(initoffset, in, inpos, out, outpos);
+ break;
+ case 13:
+ integratedpack13(initoffset, in, inpos, out, outpos);
+ break;
+ case 14:
+ integratedpack14(initoffset, in, inpos, out, outpos);
+ break;
+ case 15:
+ integratedpack15(initoffset, in, inpos, out, outpos);
+ break;
+ case 16:
+ integratedpack16(initoffset, in, inpos, out, outpos);
+ break;
+ case 17:
+ integratedpack17(initoffset, in, inpos, out, outpos);
+ break;
+ case 18:
+ integratedpack18(initoffset, in, inpos, out, outpos);
+ break;
+ case 19:
+ integratedpack19(initoffset, in, inpos, out, outpos);
+ break;
+ case 20:
+ integratedpack20(initoffset, in, inpos, out, outpos);
+ break;
+ case 21:
+ integratedpack21(initoffset, in, inpos, out, outpos);
+ break;
+ case 22:
+ integratedpack22(initoffset, in, inpos, out, outpos);
+ break;
+ case 23:
+ integratedpack23(initoffset, in, inpos, out, outpos);
+ break;
+ case 24:
+ integratedpack24(initoffset, in, inpos, out, outpos);
+ break;
+ case 25:
+ integratedpack25(initoffset, in, inpos, out, outpos);
+ break;
+ case 26:
+ integratedpack26(initoffset, in, inpos, out, outpos);
+ break;
+ case 27:
+ integratedpack27(initoffset, in, inpos, out, outpos);
+ break;
+ case 28:
+ integratedpack28(initoffset, in, inpos, out, outpos);
+ break;
+ case 29:
+ integratedpack29(initoffset, in, inpos, out, outpos);
+ break;
+ case 30:
+ integratedpack30(initoffset, in, inpos, out, outpos);
+ break;
+ case 31:
+ integratedpack31(initoffset, in, inpos, out, outpos);
+ break;
+ case 32:
+ integratedpack32(initoffset, in, inpos, out, outpos);
+ break;
+ default:
+ throw new IllegalArgumentException(
+ "Unsupported bit width.");
+ }
+ }
+
+ protected static void integratedpack0(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ // nothing
+ }
+
+ protected static void integratedpack1(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (in[0 + inpos] - initoffset)
+ | ((in[1 + inpos] - in[1 + inpos - 1]) << 1)
+ | ((in[2 + inpos] - in[2 + inpos - 1]) << 2)
+ | ((in[3 + inpos] - in[3 + inpos - 1]) << 3)
+ | ((in[4 + inpos] - in[4 + inpos - 1]) << 4)
+ | ((in[5 + inpos] - in[5 + inpos - 1]) << 5)
+ | ((in[6 + inpos] - in[6 + inpos - 1]) << 6)
+ | ((in[7 + inpos] - in[7 + inpos - 1]) << 7)
+ | ((in[8 + inpos] - in[8 + inpos - 1]) << 8)
+ | ((in[9 + inpos] - in[9 + inpos - 1]) << 9)
+ | ((in[10 + inpos] - in[10 + inpos - 1]) << 10)
+ | ((in[11 + inpos] - in[11 + inpos - 1]) << 11)
+ | ((in[12 + inpos] - in[12 + inpos - 1]) << 12)
+ | ((in[13 + inpos] - in[13 + inpos - 1]) << 13)
+ | ((in[14 + inpos] - in[14 + inpos - 1]) << 14)
+ | ((in[15 + inpos] - in[15 + inpos - 1]) << 15)
+ | ((in[16 + inpos] - in[16 + inpos - 1]) << 16)
+ | ((in[17 + inpos] - in[17 + inpos - 1]) << 17)
+ | ((in[18 + inpos] - in[18 + inpos - 1]) << 18)
+ | ((in[19 + inpos] - in[19 + inpos - 1]) << 19)
+ | ((in[20 + inpos] - in[20 + inpos - 1]) << 20)
+ | ((in[21 + inpos] - in[21 + inpos - 1]) << 21)
+ | ((in[22 + inpos] - in[22 + inpos - 1]) << 22)
+ | ((in[23 + inpos] - in[23 + inpos - 1]) << 23)
+ | ((in[24 + inpos] - in[24 + inpos - 1]) << 24)
+ | ((in[25 + inpos] - in[25 + inpos - 1]) << 25)
+ | ((in[26 + inpos] - in[26 + inpos - 1]) << 26)
+ | ((in[27 + inpos] - in[27 + inpos - 1]) << 27)
+ | ((in[28 + inpos] - in[28 + inpos - 1]) << 28)
+ | ((in[29 + inpos] - in[29 + inpos - 1]) << 29)
+ | ((in[30 + inpos] - in[30 + inpos - 1]) << 30)
+ | ((in[31 + inpos] - in[31 + inpos - 1]) << 31);
+ }
+
+ protected static void integratedpack10(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (in[0 + inpos] - initoffset)
+ | ((in[1 + inpos] - in[1 + inpos - 1]) << 10)
+ | ((in[2 + inpos] - in[2 + inpos - 1]) << 20)
+ | ((in[3 + inpos] - in[3 + inpos - 1]) << 30);
+ out[1 + outpos] = (in[3 + inpos] - in[3 + inpos - 1]) >>> (10 - 8)
+ | ((in[4 + inpos] - in[4 + inpos - 1]) << 8)
+ | ((in[5 + inpos] - in[5 + inpos - 1]) << 18)
+ | ((in[6 + inpos] - in[6 + inpos - 1]) << 28);
+ out[2 + outpos] = (in[6 + inpos] - in[6 + inpos - 1]) >>> (10 - 6)
+ | ((in[7 + inpos] - in[7 + inpos - 1]) << 6)
+ | ((in[8 + inpos] - in[8 + inpos - 1]) << 16)
+ | ((in[9 + inpos] - in[9 + inpos - 1]) << 26);
+ out[3 + outpos] = (in[9 + inpos] - in[9 + inpos - 1]) >>> (10 - 4)
+ | ((in[10 + inpos] - in[10 + inpos - 1]) << 4)
+ | ((in[11 + inpos] - in[11 + inpos - 1]) << 14)
+ | ((in[12 + inpos] - in[12 + inpos - 1]) << 24);
+ out[4 + outpos] = (in[12 + inpos] - in[12 + inpos - 1]) >>> (10 - 2)
+ | ((in[13 + inpos] - in[13 + inpos - 1]) << 2)
+ | ((in[14 + inpos] - in[14 + inpos - 1]) << 12)
+ | ((in[15 + inpos] - in[15 + inpos - 1]) << 22);
+ out[5 + outpos] = (in[16 + inpos] - in[16 + inpos - 1])
+ | ((in[17 + inpos] - in[17 + inpos - 1]) << 10)
+ | ((in[18 + inpos] - in[18 + inpos - 1]) << 20)
+ | ((in[19 + inpos] - in[19 + inpos - 1]) << 30);
+ out[6 + outpos] = (in[19 + inpos] - in[19 + inpos - 1]) >>> (10 - 8)
+ | ((in[20 + inpos] - in[20 + inpos - 1]) << 8)
+ | ((in[21 + inpos] - in[21 + inpos - 1]) << 18)
+ | ((in[22 + inpos] - in[22 + inpos - 1]) << 28);
+ out[7 + outpos] = (in[22 + inpos] - in[22 + inpos - 1]) >>> (10 - 6)
+ | ((in[23 + inpos] - in[23 + inpos - 1]) << 6)
+ | ((in[24 + inpos] - in[24 + inpos - 1]) << 16)
+ | ((in[25 + inpos] - in[25 + inpos - 1]) << 26);
+ out[8 + outpos] = (in[25 + inpos] - in[25 + inpos - 1]) >>> (10 - 4)
+ | ((in[26 + inpos] - in[26 + inpos - 1]) << 4)
+ | ((in[27 + inpos] - in[27 + inpos - 1]) << 14)
+ | ((in[28 + inpos] - in[28 + inpos - 1]) << 24);
+ out[9 + outpos] = (in[28 + inpos] - in[28 + inpos - 1]) >>> (10 - 2)
+ | ((in[29 + inpos] - in[29 + inpos - 1]) << 2)
+ | ((in[30 + inpos] - in[30 + inpos - 1]) << 12)
+ | ((in[31 + inpos] - in[31 + inpos - 1]) << 22);
+ }
+
+ protected static void integratedpack11(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (in[0 + inpos] - initoffset)
+ | ((in[1 + inpos] - in[1 + inpos - 1]) << 11)
+ | ((in[2 + inpos] - in[2 + inpos - 1]) << 22);
+ out[1 + outpos] = (in[2 + inpos] - in[2 + inpos - 1]) >>> (11 - 1)
+ | ((in[3 + inpos] - in[3 + inpos - 1]) << 1)
+ | ((in[4 + inpos] - in[4 + inpos - 1]) << 12)
+ | ((in[5 + inpos] - in[5 + inpos - 1]) << 23);
+ out[2 + outpos] = (in[5 + inpos] - in[5 + inpos - 1]) >>> (11 - 2)
+ | ((in[6 + inpos] - in[6 + inpos - 1]) << 2)
+ | ((in[7 + inpos] - in[7 + inpos - 1]) << 13)
+ | ((in[8 + inpos] - in[8 + inpos - 1]) << 24);
+ out[3 + outpos] = (in[8 + inpos] - in[8 + inpos - 1]) >>> (11 - 3)
+ | ((in[9 + inpos] - in[9 + inpos - 1]) << 3)
+ | ((in[10 + inpos] - in[10 + inpos - 1]) << 14)
+ | ((in[11 + inpos] - in[11 + inpos - 1]) << 25);
+ out[4 + outpos] = (in[11 + inpos] - in[11 + inpos - 1]) >>> (11 - 4)
+ | ((in[12 + inpos] - in[12 + inpos - 1]) << 4)
+ | ((in[13 + inpos] - in[13 + inpos - 1]) << 15)
+ | ((in[14 + inpos] - in[14 + inpos - 1]) << 26);
+ out[5 + outpos] = (in[14 + inpos] - in[14 + inpos - 1]) >>> (11 - 5)
+ | ((in[15 + inpos] - in[15 + inpos - 1]) << 5)
+ | ((in[16 + inpos] - in[16 + inpos - 1]) << 16)
+ | ((in[17 + inpos] - in[17 + inpos - 1]) << 27);
+ out[6 + outpos] = (in[17 + inpos] - in[17 + inpos - 1]) >>> (11 - 6)
+ | ((in[18 + inpos] - in[18 + inpos - 1]) << 6)
+ | ((in[19 + inpos] - in[19 + inpos - 1]) << 17)
+ | ((in[20 + inpos] - in[20 + inpos - 1]) << 28);
+ out[7 + outpos] = (in[20 + inpos] - in[20 + inpos - 1]) >>> (11 - 7)
+ | ((in[21 + inpos] - in[21 + inpos - 1]) << 7)
+ | ((in[22 + inpos] - in[22 + inpos - 1]) << 18)
+ | ((in[23 + inpos] - in[23 + inpos - 1]) << 29);
+ out[8 + outpos] = (in[23 + inpos] - in[23 + inpos - 1]) >>> (11 - 8)
+ | ((in[24 + inpos] - in[24 + inpos - 1]) << 8)
+ | ((in[25 + inpos] - in[25 + inpos - 1]) << 19)
+ | ((in[26 + inpos] - in[26 + inpos - 1]) << 30);
+ out[9 + outpos] = (in[26 + inpos] - in[26 + inpos - 1]) >>> (11 - 9)
+ | ((in[27 + inpos] - in[27 + inpos - 1]) << 9)
+ | ((in[28 + inpos] - in[28 + inpos - 1]) << 20)
+ | ((in[29 + inpos] - in[29 + inpos - 1]) << 31);
+ out[10 + outpos] = (in[29 + inpos] - in[29 + inpos - 1]) >>> (11 - 10)
+ | ((in[30 + inpos] - in[30 + inpos - 1]) << 10)
+ | ((in[31 + inpos] - in[31 + inpos - 1]) << 21);
+ }
+
+ protected static void integratedpack12(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (in[0 + inpos] - initoffset)
+ | ((in[1 + inpos] - in[1 + inpos - 1]) << 12)
+ | ((in[2 + inpos] - in[2 + inpos - 1]) << 24);
+ out[1 + outpos] = (in[2 + inpos] - in[2 + inpos - 1]) >>> (12 - 4)
+ | ((in[3 + inpos] - in[3 + inpos - 1]) << 4)
+ | ((in[4 + inpos] - in[4 + inpos - 1]) << 16)
+ | ((in[5 + inpos] - in[5 + inpos - 1]) << 28);
+ out[2 + outpos] = (in[5 + inpos] - in[5 + inpos - 1]) >>> (12 - 8)
+ | ((in[6 + inpos] - in[6 + inpos - 1]) << 8)
+ | ((in[7 + inpos] - in[7 + inpos - 1]) << 20);
+ out[3 + outpos] = (in[8 + inpos] - in[8 + inpos - 1])
+ | ((in[9 + inpos] - in[9 + inpos - 1]) << 12)
+ | ((in[10 + inpos] - in[10 + inpos - 1]) << 24);
+ out[4 + outpos] = (in[10 + inpos] - in[10 + inpos - 1]) >>> (12 - 4)
+ | ((in[11 + inpos] - in[11 + inpos - 1]) << 4)
+ | ((in[12 + inpos] - in[12 + inpos - 1]) << 16)
+ | ((in[13 + inpos] - in[13 + inpos - 1]) << 28);
+ out[5 + outpos] = (in[13 + inpos] - in[13 + inpos - 1]) >>> (12 - 8)
+ | ((in[14 + inpos] - in[14 + inpos - 1]) << 8)
+ | ((in[15 + inpos] - in[15 + inpos - 1]) << 20);
+ out[6 + outpos] = (in[16 + inpos] - in[16 + inpos - 1])
+ | ((in[17 + inpos] - in[17 + inpos - 1]) << 12)
+ | ((in[18 + inpos] - in[18 + inpos - 1]) << 24);
+ out[7 + outpos] = (in[18 + inpos] - in[18 + inpos - 1]) >>> (12 - 4)
+ | ((in[19 + inpos] - in[19 + inpos - 1]) << 4)
+ | ((in[20 + inpos] - in[20 + inpos - 1]) << 16)
+ | ((in[21 + inpos] - in[21 + inpos - 1]) << 28);
+ out[8 + outpos] = (in[21 + inpos] - in[21 + inpos - 1]) >>> (12 - 8)
+ | ((in[22 + inpos] - in[22 + inpos - 1]) << 8)
+ | ((in[23 + inpos] - in[23 + inpos - 1]) << 20);
+ out[9 + outpos] = (in[24 + inpos] - in[24 + inpos - 1])
+ | ((in[25 + inpos] - in[25 + inpos - 1]) << 12)
+ | ((in[26 + inpos] - in[26 + inpos - 1]) << 24);
+ out[10 + outpos] = (in[26 + inpos] - in[26 + inpos - 1]) >>> (12 - 4)
+ | ((in[27 + inpos] - in[27 + inpos - 1]) << 4)
+ | ((in[28 + inpos] - in[28 + inpos - 1]) << 16)
+ | ((in[29 + inpos] - in[29 + inpos - 1]) << 28);
+ out[11 + outpos] = (in[29 + inpos] - in[29 + inpos - 1]) >>> (12 - 8)
+ | ((in[30 + inpos] - in[30 + inpos - 1]) << 8)
+ | ((in[31 + inpos] - in[31 + inpos - 1]) << 20);
+ }
+
+ protected static void integratedpack13(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (in[0 + inpos] - initoffset)
+ | ((in[1 + inpos] - in[1 + inpos - 1]) << 13)
+ | ((in[2 + inpos] - in[2 + inpos - 1]) << 26);
+ out[1 + outpos] = (in[2 + inpos] - in[2 + inpos - 1]) >>> (13 - 7)
+ | ((in[3 + inpos] - in[3 + inpos - 1]) << 7)
+ | ((in[4 + inpos] - in[4 + inpos - 1]) << 20);
+ out[2 + outpos] = (in[4 + inpos] - in[4 + inpos - 1]) >>> (13 - 1)
+ | ((in[5 + inpos] - in[5 + inpos - 1]) << 1)
+ | ((in[6 + inpos] - in[6 + inpos - 1]) << 14)
+ | ((in[7 + inpos] - in[7 + inpos - 1]) << 27);
+ out[3 + outpos] = (in[7 + inpos] - in[7 + inpos - 1]) >>> (13 - 8)
+ | ((in[8 + inpos] - in[8 + inpos - 1]) << 8)
+ | ((in[9 + inpos] - in[9 + inpos - 1]) << 21);
+ out[4 + outpos] = (in[9 + inpos] - in[9 + inpos - 1]) >>> (13 - 2)
+ | ((in[10 + inpos] - in[10 + inpos - 1]) << 2)
+ | ((in[11 + inpos] - in[11 + inpos - 1]) << 15)
+ | ((in[12 + inpos] - in[12 + inpos - 1]) << 28);
+ out[5 + outpos] = (in[12 + inpos] - in[12 + inpos - 1]) >>> (13 - 9)
+ | ((in[13 + inpos] - in[13 + inpos - 1]) << 9)
+ | ((in[14 + inpos] - in[14 + inpos - 1]) << 22);
+ out[6 + outpos] = (in[14 + inpos] - in[14 + inpos - 1]) >>> (13 - 3)
+ | ((in[15 + inpos] - in[15 + inpos - 1]) << 3)
+ | ((in[16 + inpos] - in[16 + inpos - 1]) << 16)
+ | ((in[17 + inpos] - in[17 + inpos - 1]) << 29);
+ out[7 + outpos] = (in[17 + inpos] - in[17 + inpos - 1]) >>> (13 - 10)
+ | ((in[18 + inpos] - in[18 + inpos - 1]) << 10)
+ | ((in[19 + inpos] - in[19 + inpos - 1]) << 23);
+ out[8 + outpos] = (in[19 + inpos] - in[19 + inpos - 1]) >>> (13 - 4)
+ | ((in[20 + inpos] - in[20 + inpos - 1]) << 4)
+ | ((in[21 + inpos] - in[21 + inpos - 1]) << 17)
+ | ((in[22 + inpos] - in[22 + inpos - 1]) << 30);
+ out[9 + outpos] = (in[22 + inpos] - in[22 + inpos - 1]) >>> (13 - 11)
+ | ((in[23 + inpos] - in[23 + inpos - 1]) << 11)
+ | ((in[24 + inpos] - in[24 + inpos - 1]) << 24);
+ out[10 + outpos] = (in[24 + inpos] - in[24 + inpos - 1]) >>> (13 - 5)
+ | ((in[25 + inpos] - in[25 + inpos - 1]) << 5)
+ | ((in[26 + inpos] - in[26 + inpos - 1]) << 18)
+ | ((in[27 + inpos] - in[27 + inpos - 1]) << 31);
+ out[11 + outpos] = (in[27 + inpos] - in[27 + inpos - 1]) >>> (13 - 12)
+ | ((in[28 + inpos] - in[28 + inpos - 1]) << 12)
+ | ((in[29 + inpos] - in[29 + inpos - 1]) << 25);
+ out[12 + outpos] = (in[29 + inpos] - in[29 + inpos - 1]) >>> (13 - 6)
+ | ((in[30 + inpos] - in[30 + inpos - 1]) << 6)
+ | ((in[31 + inpos] - in[31 + inpos - 1]) << 19);
+ }
+
+ protected static void integratedpack14(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (in[0 + inpos] - initoffset)
+ | ((in[1 + inpos] - in[1 + inpos - 1]) << 14)
+ | ((in[2 + inpos] - in[2 + inpos - 1]) << 28);
+ out[1 + outpos] = (in[2 + inpos] - in[2 + inpos - 1]) >>> (14 - 10)
+ | ((in[3 + inpos] - in[3 + inpos - 1]) << 10)
+ | ((in[4 + inpos] - in[4 + inpos - 1]) << 24);
+ out[2 + outpos] = (in[4 + inpos] - in[4 + inpos - 1]) >>> (14 - 6)
+ | ((in[5 + inpos] - in[5 + inpos - 1]) << 6)
+ | ((in[6 + inpos] - in[6 + inpos - 1]) << 20);
+ out[3 + outpos] = (in[6 + inpos] - in[6 + inpos - 1]) >>> (14 - 2)
+ | ((in[7 + inpos] - in[7 + inpos - 1]) << 2)
+ | ((in[8 + inpos] - in[8 + inpos - 1]) << 16)
+ | ((in[9 + inpos] - in[9 + inpos - 1]) << 30);
+ out[4 + outpos] = (in[9 + inpos] - in[9 + inpos - 1]) >>> (14 - 12)
+ | ((in[10 + inpos] - in[10 + inpos - 1]) << 12)
+ | ((in[11 + inpos] - in[11 + inpos - 1]) << 26);
+ out[5 + outpos] = (in[11 + inpos] - in[11 + inpos - 1]) >>> (14 - 8)
+ | ((in[12 + inpos] - in[12 + inpos - 1]) << 8)
+ | ((in[13 + inpos] - in[13 + inpos - 1]) << 22);
+ out[6 + outpos] = (in[13 + inpos] - in[13 + inpos - 1]) >>> (14 - 4)
+ | ((in[14 + inpos] - in[14 + inpos - 1]) << 4)
+ | ((in[15 + inpos] - in[15 + inpos - 1]) << 18);
+ out[7 + outpos] = (in[16 + inpos] - in[16 + inpos - 1])
+ | ((in[17 + inpos] - in[17 + inpos - 1]) << 14)
+ | ((in[18 + inpos] - in[18 + inpos - 1]) << 28);
+ out[8 + outpos] = (in[18 + inpos] - in[18 + inpos - 1]) >>> (14 - 10)
+ | ((in[19 + inpos] - in[19 + inpos - 1]) << 10)
+ | ((in[20 + inpos] - in[20 + inpos - 1]) << 24);
+ out[9 + outpos] = (in[20 + inpos] - in[20 + inpos - 1]) >>> (14 - 6)
+ | ((in[21 + inpos] - in[21 + inpos - 1]) << 6)
+ | ((in[22 + inpos] - in[22 + inpos - 1]) << 20);
+ out[10 + outpos] = (in[22 + inpos] - in[22 + inpos - 1]) >>> (14 - 2)
+ | ((in[23 + inpos] - in[23 + inpos - 1]) << 2)
+ | ((in[24 + inpos] - in[24 + inpos - 1]) << 16)
+ | ((in[25 + inpos] - in[25 + inpos - 1]) << 30);
+ out[11 + outpos] = (in[25 + inpos] - in[25 + inpos - 1]) >>> (14 - 12)
+ | ((in[26 + inpos] - in[26 + inpos - 1]) << 12)
+ | ((in[27 + inpos] - in[27 + inpos - 1]) << 26);
+ out[12 + outpos] = (in[27 + inpos] - in[27 + inpos - 1]) >>> (14 - 8)
+ | ((in[28 + inpos] - in[28 + inpos - 1]) << 8)
+ | ((in[29 + inpos] - in[29 + inpos - 1]) << 22);
+ out[13 + outpos] = (in[29 + inpos] - in[29 + inpos - 1]) >>> (14 - 4)
+ | ((in[30 + inpos] - in[30 + inpos - 1]) << 4)
+ | ((in[31 + inpos] - in[31 + inpos - 1]) << 18);
+ }
+
+ protected static void integratedpack15(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (in[0 + inpos] - initoffset)
+ | ((in[1 + inpos] - in[1 + inpos - 1]) << 15)
+ | ((in[2 + inpos] - in[2 + inpos - 1]) << 30);
+ out[1 + outpos] = (in[2 + inpos] - in[2 + inpos - 1]) >>> (15 - 13)
+ | ((in[3 + inpos] - in[3 + inpos - 1]) << 13)
+ | ((in[4 + inpos] - in[4 + inpos - 1]) << 28);
+ out[2 + outpos] = (in[4 + inpos] - in[4 + inpos - 1]) >>> (15 - 11)
+ | ((in[5 + inpos] - in[5 + inpos - 1]) << 11)
+ | ((in[6 + inpos] - in[6 + inpos - 1]) << 26);
+ out[3 + outpos] = (in[6 + inpos] - in[6 + inpos - 1]) >>> (15 - 9)
+ | ((in[7 + inpos] - in[7 + inpos - 1]) << 9)
+ | ((in[8 + inpos] - in[8 + inpos - 1]) << 24);
+ out[4 + outpos] = (in[8 + inpos] - in[8 + inpos - 1]) >>> (15 - 7)
+ | ((in[9 + inpos] - in[9 + inpos - 1]) << 7)
+ | ((in[10 + inpos] - in[10 + inpos - 1]) << 22);
+ out[5 + outpos] = (in[10 + inpos] - in[10 + inpos - 1]) >>> (15 - 5)
+ | ((in[11 + inpos] - in[11 + inpos - 1]) << 5)
+ | ((in[12 + inpos] - in[12 + inpos - 1]) << 20);
+ out[6 + outpos] = (in[12 + inpos] - in[12 + inpos - 1]) >>> (15 - 3)
+ | ((in[13 + inpos] - in[13 + inpos - 1]) << 3)
+ | ((in[14 + inpos] - in[14 + inpos - 1]) << 18);
+ out[7 + outpos] = (in[14 + inpos] - in[14 + inpos - 1]) >>> (15 - 1)
+ | ((in[15 + inpos] - in[15 + inpos - 1]) << 1)
+ | ((in[16 + inpos] - in[16 + inpos - 1]) << 16)
+ | ((in[17 + inpos] - in[17 + inpos - 1]) << 31);
+ out[8 + outpos] = (in[17 + inpos] - in[17 + inpos - 1]) >>> (15 - 14)
+ | ((in[18 + inpos] - in[18 + inpos - 1]) << 14)
+ | ((in[19 + inpos] - in[19 + inpos - 1]) << 29);
+ out[9 + outpos] = (in[19 + inpos] - in[19 + inpos - 1]) >>> (15 - 12)
+ | ((in[20 + inpos] - in[20 + inpos - 1]) << 12)
+ | ((in[21 + inpos] - in[21 + inpos - 1]) << 27);
+ out[10 + outpos] = (in[21 + inpos] - in[21 + inpos - 1]) >>> (15 - 10)
+ | ((in[22 + inpos] - in[22 + inpos - 1]) << 10)
+ | ((in[23 + inpos] - in[23 + inpos - 1]) << 25);
+ out[11 + outpos] = (in[23 + inpos] - in[23 + inpos - 1]) >>> (15 - 8)
+ | ((in[24 + inpos] - in[24 + inpos - 1]) << 8)
+ | ((in[25 + inpos] - in[25 + inpos - 1]) << 23);
+ out[12 + outpos] = (in[25 + inpos] - in[25 + inpos - 1]) >>> (15 - 6)
+ | ((in[26 + inpos] - in[26 + inpos - 1]) << 6)
+ | ((in[27 + inpos] - in[27 + inpos - 1]) << 21);
+ out[13 + outpos] = (in[27 + inpos] - in[27 + inpos - 1]) >>> (15 - 4)
+ | ((in[28 + inpos] - in[28 + inpos - 1]) << 4)
+ | ((in[29 + inpos] - in[29 + inpos - 1]) << 19);
+ out[14 + outpos] = (in[29 + inpos] - in[29 + inpos - 1]) >>> (15 - 2)
+ | ((in[30 + inpos] - in[30 + inpos - 1]) << 2)
+ | ((in[31 + inpos] - in[31 + inpos - 1]) << 17);
+ }
+
+ protected static void integratedpack16(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (in[0 + inpos] - initoffset)
+ | ((in[1 + inpos] - in[1 + inpos - 1]) << 16);
+ out[1 + outpos] = (in[2 + inpos] - in[2 + inpos - 1])
+ | ((in[3 + inpos] - in[3 + inpos - 1]) << 16);
+ out[2 + outpos] = (in[4 + inpos] - in[4 + inpos - 1])
+ | ((in[5 + inpos] - in[5 + inpos - 1]) << 16);
+ out[3 + outpos] = (in[6 + inpos] - in[6 + inpos - 1])
+ | ((in[7 + inpos] - in[7 + inpos - 1]) << 16);
+ out[4 + outpos] = (in[8 + inpos] - in[8 + inpos - 1])
+ | ((in[9 + inpos] - in[9 + inpos - 1]) << 16);
+ out[5 + outpos] = (in[10 + inpos] - in[10 + inpos - 1])
+ | ((in[11 + inpos] - in[11 + inpos - 1]) << 16);
+ out[6 + outpos] = (in[12 + inpos] - in[12 + inpos - 1])
+ | ((in[13 + inpos] - in[13 + inpos - 1]) << 16);
+ out[7 + outpos] = (in[14 + inpos] - in[14 + inpos - 1])
+ | ((in[15 + inpos] - in[15 + inpos - 1]) << 16);
+ out[8 + outpos] = (in[16 + inpos] - in[16 + inpos - 1])
+ | ((in[17 + inpos] - in[17 + inpos - 1]) << 16);
+ out[9 + outpos] = (in[18 + inpos] - in[18 + inpos - 1])
+ | ((in[19 + inpos] - in[19 + inpos - 1]) << 16);
+ out[10 + outpos] = (in[20 + inpos] - in[20 + inpos - 1])
+ | ((in[21 + inpos] - in[21 + inpos - 1]) << 16);
+ out[11 + outpos] = (in[22 + inpos] - in[22 + inpos - 1])
+ | ((in[23 + inpos] - in[23 + inpos - 1]) << 16);
+ out[12 + outpos] = (in[24 + inpos] - in[24 + inpos - 1])
+ | ((in[25 + inpos] - in[25 + inpos - 1]) << 16);
+ out[13 + outpos] = (in[26 + inpos] - in[26 + inpos - 1])
+ | ((in[27 + inpos] - in[27 + inpos - 1]) << 16);
+ out[14 + outpos] = (in[28 + inpos] - in[28 + inpos - 1])
+ | ((in[29 + inpos] - in[29 + inpos - 1]) << 16);
+ out[15 + outpos] = (in[30 + inpos] - in[30 + inpos - 1])
+ | ((in[31 + inpos] - in[31 + inpos - 1]) << 16);
+ }
+
+ protected static void integratedpack17(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (in[0 + inpos] - initoffset)
+ | ((in[1 + inpos] - in[1 + inpos - 1]) << 17);
+ out[1 + outpos] = (in[1 + inpos] - in[1 + inpos - 1]) >>> (17 - 2)
+ | ((in[2 + inpos] - in[2 + inpos - 1]) << 2)
+ | ((in[3 + inpos] - in[3 + inpos - 1]) << 19);
+ out[2 + outpos] = (in[3 + inpos] - in[3 + inpos - 1]) >>> (17 - 4)
+ | ((in[4 + inpos] - in[4 + inpos - 1]) << 4)
+ | ((in[5 + inpos] - in[5 + inpos - 1]) << 21);
+ out[3 + outpos] = (in[5 + inpos] - in[5 + inpos - 1]) >>> (17 - 6)
+ | ((in[6 + inpos] - in[6 + inpos - 1]) << 6)
+ | ((in[7 + inpos] - in[7 + inpos - 1]) << 23);
+ out[4 + outpos] = (in[7 + inpos] - in[7 + inpos - 1]) >>> (17 - 8)
+ | ((in[8 + inpos] - in[8 + inpos - 1]) << 8)
+ | ((in[9 + inpos] - in[9 + inpos - 1]) << 25);
+ out[5 + outpos] = (in[9 + inpos] - in[9 + inpos - 1]) >>> (17 - 10)
+ | ((in[10 + inpos] - in[10 + inpos - 1]) << 10)
+ | ((in[11 + inpos] - in[11 + inpos - 1]) << 27);
+ out[6 + outpos] = (in[11 + inpos] - in[11 + inpos - 1]) >>> (17 - 12)
+ | ((in[12 + inpos] - in[12 + inpos - 1]) << 12)
+ | ((in[13 + inpos] - in[13 + inpos - 1]) << 29);
+ out[7 + outpos] = (in[13 + inpos] - in[13 + inpos - 1]) >>> (17 - 14)
+ | ((in[14 + inpos] - in[14 + inpos - 1]) << 14)
+ | ((in[15 + inpos] - in[15 + inpos - 1]) << 31);
+ out[8 + outpos] = (in[15 + inpos] - in[15 + inpos - 1]) >>> (17 - 16)
+ | ((in[16 + inpos] - in[16 + inpos - 1]) << 16);
+ out[9 + outpos] = (in[16 + inpos] - in[16 + inpos - 1]) >>> (17 - 1)
+ | ((in[17 + inpos] - in[17 + inpos - 1]) << 1)
+ | ((in[18 + inpos] - in[18 + inpos - 1]) << 18);
+ out[10 + outpos] = (in[18 + inpos] - in[18 + inpos - 1]) >>> (17 - 3)
+ | ((in[19 + inpos] - in[19 + inpos - 1]) << 3)
+ | ((in[20 + inpos] - in[20 + inpos - 1]) << 20);
+ out[11 + outpos] = (in[20 + inpos] - in[20 + inpos - 1]) >>> (17 - 5)
+ | ((in[21 + inpos] - in[21 + inpos - 1]) << 5)
+ | ((in[22 + inpos] - in[22 + inpos - 1]) << 22);
+ out[12 + outpos] = (in[22 + inpos] - in[22 + inpos - 1]) >>> (17 - 7)
+ | ((in[23 + inpos] - in[23 + inpos - 1]) << 7)
+ | ((in[24 + inpos] - in[24 + inpos - 1]) << 24);
+ out[13 + outpos] = (in[24 + inpos] - in[24 + inpos - 1]) >>> (17 - 9)
+ | ((in[25 + inpos] - in[25 + inpos - 1]) << 9)
+ | ((in[26 + inpos] - in[26 + inpos - 1]) << 26);
+ out[14 + outpos] = (in[26 + inpos] - in[26 + inpos - 1]) >>> (17 - 11)
+ | ((in[27 + inpos] - in[27 + inpos - 1]) << 11)
+ | ((in[28 + inpos] - in[28 + inpos - 1]) << 28);
+ out[15 + outpos] = (in[28 + inpos] - in[28 + inpos - 1]) >>> (17 - 13)
+ | ((in[29 + inpos] - in[29 + inpos - 1]) << 13)
+ | ((in[30 + inpos] - in[30 + inpos - 1]) << 30);
+ out[16 + outpos] = (in[30 + inpos] - in[30 + inpos - 1]) >>> (17 - 15)
+ | ((in[31 + inpos] - in[31 + inpos - 1]) << 15);
+ }
+
+ protected static void integratedpack18(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (in[0 + inpos] - initoffset)
+ | ((in[1 + inpos] - in[1 + inpos - 1]) << 18);
+ out[1 + outpos] = (in[1 + inpos] - in[1 + inpos - 1]) >>> (18 - 4)
+ | ((in[2 + inpos] - in[2 + inpos - 1]) << 4)
+ | ((in[3 + inpos] - in[3 + inpos - 1]) << 22);
+ out[2 + outpos] = (in[3 + inpos] - in[3 + inpos - 1]) >>> (18 - 8)
+ | ((in[4 + inpos] - in[4 + inpos - 1]) << 8)
+ | ((in[5 + inpos] - in[5 + inpos - 1]) << 26);
+ out[3 + outpos] = (in[5 + inpos] - in[5 + inpos - 1]) >>> (18 - 12)
+ | ((in[6 + inpos] - in[6 + inpos - 1]) << 12)
+ | ((in[7 + inpos] - in[7 + inpos - 1]) << 30);
+ out[4 + outpos] = (in[7 + inpos] - in[7 + inpos - 1]) >>> (18 - 16)
+ | ((in[8 + inpos] - in[8 + inpos - 1]) << 16);
+ out[5 + outpos] = (in[8 + inpos] - in[8 + inpos - 1]) >>> (18 - 2)
+ | ((in[9 + inpos] - in[9 + inpos - 1]) << 2)
+ | ((in[10 + inpos] - in[10 + inpos - 1]) << 20);
+ out[6 + outpos] = (in[10 + inpos] - in[10 + inpos - 1]) >>> (18 - 6)
+ | ((in[11 + inpos] - in[11 + inpos - 1]) << 6)
+ | ((in[12 + inpos] - in[12 + inpos - 1]) << 24);
+ out[7 + outpos] = (in[12 + inpos] - in[12 + inpos - 1]) >>> (18 - 10)
+ | ((in[13 + inpos] - in[13 + inpos - 1]) << 10)
+ | ((in[14 + inpos] - in[14 + inpos - 1]) << 28);
+ out[8 + outpos] = (in[14 + inpos] - in[14 + inpos - 1]) >>> (18 - 14)
+ | ((in[15 + inpos] - in[15 + inpos - 1]) << 14);
+ out[9 + outpos] = (in[16 + inpos] - in[16 + inpos - 1])
+ | ((in[17 + inpos] - in[17 + inpos - 1]) << 18);
+ out[10 + outpos] = (in[17 + inpos] - in[17 + inpos - 1]) >>> (18 - 4)
+ | ((in[18 + inpos] - in[18 + inpos - 1]) << 4)
+ | ((in[19 + inpos] - in[19 + inpos - 1]) << 22);
+ out[11 + outpos] = (in[19 + inpos] - in[19 + inpos - 1]) >>> (18 - 8)
+ | ((in[20 + inpos] - in[20 + inpos - 1]) << 8)
+ | ((in[21 + inpos] - in[21 + inpos - 1]) << 26);
+ out[12 + outpos] = (in[21 + inpos] - in[21 + inpos - 1]) >>> (18 - 12)
+ | ((in[22 + inpos] - in[22 + inpos - 1]) << 12)
+ | ((in[23 + inpos] - in[23 + inpos - 1]) << 30);
+ out[13 + outpos] = (in[23 + inpos] - in[23 + inpos - 1]) >>> (18 - 16)
+ | ((in[24 + inpos] - in[24 + inpos - 1]) << 16);
+ out[14 + outpos] = (in[24 + inpos] - in[24 + inpos - 1]) >>> (18 - 2)
+ | ((in[25 + inpos] - in[25 + inpos - 1]) << 2)
+ | ((in[26 + inpos] - in[26 + inpos - 1]) << 20);
+ out[15 + outpos] = (in[26 + inpos] - in[26 + inpos - 1]) >>> (18 - 6)
+ | ((in[27 + inpos] - in[27 + inpos - 1]) << 6)
+ | ((in[28 + inpos] - in[28 + inpos - 1]) << 24);
+ out[16 + outpos] = (in[28 + inpos] - in[28 + inpos - 1]) >>> (18 - 10)
+ | ((in[29 + inpos] - in[29 + inpos - 1]) << 10)
+ | ((in[30 + inpos] - in[30 + inpos - 1]) << 28);
+ out[17 + outpos] = (in[30 + inpos] - in[30 + inpos - 1]) >>> (18 - 14)
+ | ((in[31 + inpos] - in[31 + inpos - 1]) << 14);
+ }
+
+ protected static void integratedpack19(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (in[0 + inpos] - initoffset)
+ | ((in[1 + inpos] - in[1 + inpos - 1]) << 19);
+ out[1 + outpos] = (in[1 + inpos] - in[1 + inpos - 1]) >>> (19 - 6)
+ | ((in[2 + inpos] - in[2 + inpos - 1]) << 6)
+ | ((in[3 + inpos] - in[3 + inpos - 1]) << 25);
+ out[2 + outpos] = (in[3 + inpos] - in[3 + inpos - 1]) >>> (19 - 12)
+ | ((in[4 + inpos] - in[4 + inpos - 1]) << 12)
+ | ((in[5 + inpos] - in[5 + inpos - 1]) << 31);
+ out[3 + outpos] = (in[5 + inpos] - in[5 + inpos - 1]) >>> (19 - 18)
+ | ((in[6 + inpos] - in[6 + inpos - 1]) << 18);
+ out[4 + outpos] = (in[6 + inpos] - in[6 + inpos - 1]) >>> (19 - 5)
+ | ((in[7 + inpos] - in[7 + inpos - 1]) << 5)
+ | ((in[8 + inpos] - in[8 + inpos - 1]) << 24);
+ out[5 + outpos] = (in[8 + inpos] - in[8 + inpos - 1]) >>> (19 - 11)
+ | ((in[9 + inpos] - in[9 + inpos - 1]) << 11)
+ | ((in[10 + inpos] - in[10 + inpos - 1]) << 30);
+ out[6 + outpos] = (in[10 + inpos] - in[10 + inpos - 1]) >>> (19 - 17)
+ | ((in[11 + inpos] - in[11 + inpos - 1]) << 17);
+ out[7 + outpos] = (in[11 + inpos] - in[11 + inpos - 1]) >>> (19 - 4)
+ | ((in[12 + inpos] - in[12 + inpos - 1]) << 4)
+ | ((in[13 + inpos] - in[13 + inpos - 1]) << 23);
+ out[8 + outpos] = (in[13 + inpos] - in[13 + inpos - 1]) >>> (19 - 10)
+ | ((in[14 + inpos] - in[14 + inpos - 1]) << 10)
+ | ((in[15 + inpos] - in[15 + inpos - 1]) << 29);
+ out[9 + outpos] = (in[15 + inpos] - in[15 + inpos - 1]) >>> (19 - 16)
+ | ((in[16 + inpos] - in[16 + inpos - 1]) << 16);
+ out[10 + outpos] = (in[16 + inpos] - in[16 + inpos - 1]) >>> (19 - 3)
+ | ((in[17 + inpos] - in[17 + inpos - 1]) << 3)
+ | ((in[18 + inpos] - in[18 + inpos - 1]) << 22);
+ out[11 + outpos] = (in[18 + inpos] - in[18 + inpos - 1]) >>> (19 - 9)
+ | ((in[19 + inpos] - in[19 + inpos - 1]) << 9)
+ | ((in[20 + inpos] - in[20 + inpos - 1]) << 28);
+ out[12 + outpos] = (in[20 + inpos] - in[20 + inpos - 1]) >>> (19 - 15)
+ | ((in[21 + inpos] - in[21 + inpos - 1]) << 15);
+ out[13 + outpos] = (in[21 + inpos] - in[21 + inpos - 1]) >>> (19 - 2)
+ | ((in[22 + inpos] - in[22 + inpos - 1]) << 2)
+ | ((in[23 + inpos] - in[23 + inpos - 1]) << 21);
+ out[14 + outpos] = (in[23 + inpos] - in[23 + inpos - 1]) >>> (19 - 8)
+ | ((in[24 + inpos] - in[24 + inpos - 1]) << 8)
+ | ((in[25 + inpos] - in[25 + inpos - 1]) << 27);
+ out[15 + outpos] = (in[25 + inpos] - in[25 + inpos - 1]) >>> (19 - 14)
+ | ((in[26 + inpos] - in[26 + inpos - 1]) << 14);
+ out[16 + outpos] = (in[26 + inpos] - in[26 + inpos - 1]) >>> (19 - 1)
+ | ((in[27 + inpos] - in[27 + inpos - 1]) << 1)
+ | ((in[28 + inpos] - in[28 + inpos - 1]) << 20);
+ out[17 + outpos] = (in[28 + inpos] - in[28 + inpos - 1]) >>> (19 - 7)
+ | ((in[29 + inpos] - in[29 + inpos - 1]) << 7)
+ | ((in[30 + inpos] - in[30 + inpos - 1]) << 26);
+ out[18 + outpos] = (in[30 + inpos] - in[30 + inpos - 1]) >>> (19 - 13)
+ | ((in[31 + inpos] - in[31 + inpos - 1]) << 13);
+ }
+
+ protected static void integratedpack2(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (in[0 + inpos] - initoffset)
+ | ((in[1 + inpos] - in[1 + inpos - 1]) << 2)
+ | ((in[2 + inpos] - in[2 + inpos - 1]) << 4)
+ | ((in[3 + inpos] - in[3 + inpos - 1]) << 6)
+ | ((in[4 + inpos] - in[4 + inpos - 1]) << 8)
+ | ((in[5 + inpos] - in[5 + inpos - 1]) << 10)
+ | ((in[6 + inpos] - in[6 + inpos - 1]) << 12)
+ | ((in[7 + inpos] - in[7 + inpos - 1]) << 14)
+ | ((in[8 + inpos] - in[8 + inpos - 1]) << 16)
+ | ((in[9 + inpos] - in[9 + inpos - 1]) << 18)
+ | ((in[10 + inpos] - in[10 + inpos - 1]) << 20)
+ | ((in[11 + inpos] - in[11 + inpos - 1]) << 22)
+ | ((in[12 + inpos] - in[12 + inpos - 1]) << 24)
+ | ((in[13 + inpos] - in[13 + inpos - 1]) << 26)
+ | ((in[14 + inpos] - in[14 + inpos - 1]) << 28)
+ | ((in[15 + inpos] - in[15 + inpos - 1]) << 30);
+ out[1 + outpos] = (in[16 + inpos] - in[16 + inpos - 1])
+ | ((in[17 + inpos] - in[17 + inpos - 1]) << 2)
+ | ((in[18 + inpos] - in[18 + inpos - 1]) << 4)
+ | ((in[19 + inpos] - in[19 + inpos - 1]) << 6)
+ | ((in[20 + inpos] - in[20 + inpos - 1]) << 8)
+ | ((in[21 + inpos] - in[21 + inpos - 1]) << 10)
+ | ((in[22 + inpos] - in[22 + inpos - 1]) << 12)
+ | ((in[23 + inpos] - in[23 + inpos - 1]) << 14)
+ | ((in[24 + inpos] - in[24 + inpos - 1]) << 16)
+ | ((in[25 + inpos] - in[25 + inpos - 1]) << 18)
+ | ((in[26 + inpos] - in[26 + inpos - 1]) << 20)
+ | ((in[27 + inpos] - in[27 + inpos - 1]) << 22)
+ | ((in[28 + inpos] - in[28 + inpos - 1]) << 24)
+ | ((in[29 + inpos] - in[29 + inpos - 1]) << 26)
+ | ((in[30 + inpos] - in[30 + inpos - 1]) << 28)
+ | ((in[31 + inpos] - in[31 + inpos - 1]) << 30);
+ }
+
+ protected static void integratedpack20(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (in[0 + inpos] - initoffset)
+ | ((in[1 + inpos] - in[1 + inpos - 1]) << 20);
+ out[1 + outpos] = (in[1 + inpos] - in[1 + inpos - 1]) >>> (20 - 8)
+ | ((in[2 + inpos] - in[2 + inpos - 1]) << 8)
+ | ((in[3 + inpos] - in[3 + inpos - 1]) << 28);
+ out[2 + outpos] = (in[3 + inpos] - in[3 + inpos - 1]) >>> (20 - 16)
+ | ((in[4 + inpos] - in[4 + inpos - 1]) << 16);
+ out[3 + outpos] = (in[4 + inpos] - in[4 + inpos - 1]) >>> (20 - 4)
+ | ((in[5 + inpos] - in[5 + inpos - 1]) << 4)
+ | ((in[6 + inpos] - in[6 + inpos - 1]) << 24);
+ out[4 + outpos] = (in[6 + inpos] - in[6 + inpos - 1]) >>> (20 - 12)
+ | ((in[7 + inpos] - in[7 + inpos - 1]) << 12);
+ out[5 + outpos] = (in[8 + inpos] - in[8 + inpos - 1])
+ | ((in[9 + inpos] - in[9 + inpos - 1]) << 20);
+ out[6 + outpos] = (in[9 + inpos] - in[9 + inpos - 1]) >>> (20 - 8)
+ | ((in[10 + inpos] - in[10 + inpos - 1]) << 8)
+ | ((in[11 + inpos] - in[11 + inpos - 1]) << 28);
+ out[7 + outpos] = (in[11 + inpos] - in[11 + inpos - 1]) >>> (20 - 16)
+ | ((in[12 + inpos] - in[12 + inpos - 1]) << 16);
+ out[8 + outpos] = (in[12 + inpos] - in[12 + inpos - 1]) >>> (20 - 4)
+ | ((in[13 + inpos] - in[13 + inpos - 1]) << 4)
+ | ((in[14 + inpos] - in[14 + inpos - 1]) << 24);
+ out[9 + outpos] = (in[14 + inpos] - in[14 + inpos - 1]) >>> (20 - 12)
+ | ((in[15 + inpos] - in[15 + inpos - 1]) << 12);
+ out[10 + outpos] = (in[16 + inpos] - in[16 + inpos - 1])
+ | ((in[17 + inpos] - in[17 + inpos - 1]) << 20);
+ out[11 + outpos] = (in[17 + inpos] - in[17 + inpos - 1]) >>> (20 - 8)
+ | ((in[18 + inpos] - in[18 + inpos - 1]) << 8)
+ | ((in[19 + inpos] - in[19 + inpos - 1]) << 28);
+ out[12 + outpos] = (in[19 + inpos] - in[19 + inpos - 1]) >>> (20 - 16)
+ | ((in[20 + inpos] - in[20 + inpos - 1]) << 16);
+ out[13 + outpos] = (in[20 + inpos] - in[20 + inpos - 1]) >>> (20 - 4)
+ | ((in[21 + inpos] - in[21 + inpos - 1]) << 4)
+ | ((in[22 + inpos] - in[22 + inpos - 1]) << 24);
+ out[14 + outpos] = (in[22 + inpos] - in[22 + inpos - 1]) >>> (20 - 12)
+ | ((in[23 + inpos] - in[23 + inpos - 1]) << 12);
+ out[15 + outpos] = (in[24 + inpos] - in[24 + inpos - 1])
+ | ((in[25 + inpos] - in[25 + inpos - 1]) << 20);
+ out[16 + outpos] = (in[25 + inpos] - in[25 + inpos - 1]) >>> (20 - 8)
+ | ((in[26 + inpos] - in[26 + inpos - 1]) << 8)
+ | ((in[27 + inpos] - in[27 + inpos - 1]) << 28);
+ out[17 + outpos] = (in[27 + inpos] - in[27 + inpos - 1]) >>> (20 - 16)
+ | ((in[28 + inpos] - in[28 + inpos - 1]) << 16);
+ out[18 + outpos] = (in[28 + inpos] - in[28 + inpos - 1]) >>> (20 - 4)
+ | ((in[29 + inpos] - in[29 + inpos - 1]) << 4)
+ | ((in[30 + inpos] - in[30 + inpos - 1]) << 24);
+ out[19 + outpos] = (in[30 + inpos] - in[30 + inpos - 1]) >>> (20 - 12)
+ | ((in[31 + inpos] - in[31 + inpos - 1]) << 12);
+ }
+
+ protected static void integratedpack21(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (in[0 + inpos] - initoffset)
+ | ((in[1 + inpos] - in[1 + inpos - 1]) << 21);
+ out[1 + outpos] = (in[1 + inpos] - in[1 + inpos - 1]) >>> (21 - 10)
+ | ((in[2 + inpos] - in[2 + inpos - 1]) << 10)
+ | ((in[3 + inpos] - in[3 + inpos - 1]) << 31);
+ out[2 + outpos] = (in[3 + inpos] - in[3 + inpos - 1]) >>> (21 - 20)
+ | ((in[4 + inpos] - in[4 + inpos - 1]) << 20);
+ out[3 + outpos] = (in[4 + inpos] - in[4 + inpos - 1]) >>> (21 - 9)
+ | ((in[5 + inpos] - in[5 + inpos - 1]) << 9)
+ | ((in[6 + inpos] - in[6 + inpos - 1]) << 30);
+ out[4 + outpos] = (in[6 + inpos] - in[6 + inpos - 1]) >>> (21 - 19)
+ | ((in[7 + inpos] - in[7 + inpos - 1]) << 19);
+ out[5 + outpos] = (in[7 + inpos] - in[7 + inpos - 1]) >>> (21 - 8)
+ | ((in[8 + inpos] - in[8 + inpos - 1]) << 8)
+ | ((in[9 + inpos] - in[9 + inpos - 1]) << 29);
+ out[6 + outpos] = (in[9 + inpos] - in[9 + inpos - 1]) >>> (21 - 18)
+ | ((in[10 + inpos] - in[10 + inpos - 1]) << 18);
+ out[7 + outpos] = (in[10 + inpos] - in[10 + inpos - 1]) >>> (21 - 7)
+ | ((in[11 + inpos] - in[11 + inpos - 1]) << 7)
+ | ((in[12 + inpos] - in[12 + inpos - 1]) << 28);
+ out[8 + outpos] = (in[12 + inpos] - in[12 + inpos - 1]) >>> (21 - 17)
+ | ((in[13 + inpos] - in[13 + inpos - 1]) << 17);
+ out[9 + outpos] = (in[13 + inpos] - in[13 + inpos - 1]) >>> (21 - 6)
+ | ((in[14 + inpos] - in[14 + inpos - 1]) << 6)
+ | ((in[15 + inpos] - in[15 + inpos - 1]) << 27);
+ out[10 + outpos] = (in[15 + inpos] - in[15 + inpos - 1]) >>> (21 - 16)
+ | ((in[16 + inpos] - in[16 + inpos - 1]) << 16);
+ out[11 + outpos] = (in[16 + inpos] - in[16 + inpos - 1]) >>> (21 - 5)
+ | ((in[17 + inpos] - in[17 + inpos - 1]) << 5)
+ | ((in[18 + inpos] - in[18 + inpos - 1]) << 26);
+ out[12 + outpos] = (in[18 + inpos] - in[18 + inpos - 1]) >>> (21 - 15)
+ | ((in[19 + inpos] - in[19 + inpos - 1]) << 15);
+ out[13 + outpos] = (in[19 + inpos] - in[19 + inpos - 1]) >>> (21 - 4)
+ | ((in[20 + inpos] - in[20 + inpos - 1]) << 4)
+ | ((in[21 + inpos] - in[21 + inpos - 1]) << 25);
+ out[14 + outpos] = (in[21 + inpos] - in[21 + inpos - 1]) >>> (21 - 14)
+ | ((in[22 + inpos] - in[22 + inpos - 1]) << 14);
+ out[15 + outpos] = (in[22 + inpos] - in[22 + inpos - 1]) >>> (21 - 3)
+ | ((in[23 + inpos] - in[23 + inpos - 1]) << 3)
+ | ((in[24 + inpos] - in[24 + inpos - 1]) << 24);
+ out[16 + outpos] = (in[24 + inpos] - in[24 + inpos - 1]) >>> (21 - 13)
+ | ((in[25 + inpos] - in[25 + inpos - 1]) << 13);
+ out[17 + outpos] = (in[25 + inpos] - in[25 + inpos - 1]) >>> (21 - 2)
+ | ((in[26 + inpos] - in[26 + inpos - 1]) << 2)
+ | ((in[27 + inpos] - in[27 + inpos - 1]) << 23);
+ out[18 + outpos] = (in[27 + inpos] - in[27 + inpos - 1]) >>> (21 - 12)
+ | ((in[28 + inpos] - in[28 + inpos - 1]) << 12);
+ out[19 + outpos] = (in[28 + inpos] - in[28 + inpos - 1]) >>> (21 - 1)
+ | ((in[29 + inpos] - in[29 + inpos - 1]) << 1)
+ | ((in[30 + inpos] - in[30 + inpos - 1]) << 22);
+ out[20 + outpos] = (in[30 + inpos] - in[30 + inpos - 1]) >>> (21 - 11)
+ | ((in[31 + inpos] - in[31 + inpos - 1]) << 11);
+ }
+
+ protected static void integratedpack22(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (in[0 + inpos] - initoffset)
+ | ((in[1 + inpos] - in[1 + inpos - 1]) << 22);
+ out[1 + outpos] = (in[1 + inpos] - in[1 + inpos - 1]) >>> (22 - 12)
+ | ((in[2 + inpos] - in[2 + inpos - 1]) << 12);
+ out[2 + outpos] = (in[2 + inpos] - in[2 + inpos - 1]) >>> (22 - 2)
+ | ((in[3 + inpos] - in[3 + inpos - 1]) << 2)
+ | ((in[4 + inpos] - in[4 + inpos - 1]) << 24);
+ out[3 + outpos] = (in[4 + inpos] - in[4 + inpos - 1]) >>> (22 - 14)
+ | ((in[5 + inpos] - in[5 + inpos - 1]) << 14);
+ out[4 + outpos] = (in[5 + inpos] - in[5 + inpos - 1]) >>> (22 - 4)
+ | ((in[6 + inpos] - in[6 + inpos - 1]) << 4)
+ | ((in[7 + inpos] - in[7 + inpos - 1]) << 26);
+ out[5 + outpos] = (in[7 + inpos] - in[7 + inpos - 1]) >>> (22 - 16)
+ | ((in[8 + inpos] - in[8 + inpos - 1]) << 16);
+ out[6 + outpos] = (in[8 + inpos] - in[8 + inpos - 1]) >>> (22 - 6)
+ | ((in[9 + inpos] - in[9 + inpos - 1]) << 6)
+ | ((in[10 + inpos] - in[10 + inpos - 1]) << 28);
+ out[7 + outpos] = (in[10 + inpos] - in[10 + inpos - 1]) >>> (22 - 18)
+ | ((in[11 + inpos] - in[11 + inpos - 1]) << 18);
+ out[8 + outpos] = (in[11 + inpos] - in[11 + inpos - 1]) >>> (22 - 8)
+ | ((in[12 + inpos] - in[12 + inpos - 1]) << 8)
+ | ((in[13 + inpos] - in[13 + inpos - 1]) << 30);
+ out[9 + outpos] = (in[13 + inpos] - in[13 + inpos - 1]) >>> (22 - 20)
+ | ((in[14 + inpos] - in[14 + inpos - 1]) << 20);
+ out[10 + outpos] = (in[14 + inpos] - in[14 + inpos - 1]) >>> (22 - 10)
+ | ((in[15 + inpos] - in[15 + inpos - 1]) << 10);
+ out[11 + outpos] = (in[16 + inpos] - in[16 + inpos - 1])
+ | ((in[17 + inpos] - in[17 + inpos - 1]) << 22);
+ out[12 + outpos] = (in[17 + inpos] - in[17 + inpos - 1]) >>> (22 - 12)
+ | ((in[18 + inpos] - in[18 + inpos - 1]) << 12);
+ out[13 + outpos] = (in[18 + inpos] - in[18 + inpos - 1]) >>> (22 - 2)
+ | ((in[19 + inpos] - in[19 + inpos - 1]) << 2)
+ | ((in[20 + inpos] - in[20 + inpos - 1]) << 24);
+ out[14 + outpos] = (in[20 + inpos] - in[20 + inpos - 1]) >>> (22 - 14)
+ | ((in[21 + inpos] - in[21 + inpos - 1]) << 14);
+ out[15 + outpos] = (in[21 + inpos] - in[21 + inpos - 1]) >>> (22 - 4)
+ | ((in[22 + inpos] - in[22 + inpos - 1]) << 4)
+ | ((in[23 + inpos] - in[23 + inpos - 1]) << 26);
+ out[16 + outpos] = (in[23 + inpos] - in[23 + inpos - 1]) >>> (22 - 16)
+ | ((in[24 + inpos] - in[24 + inpos - 1]) << 16);
+ out[17 + outpos] = (in[24 + inpos] - in[24 + inpos - 1]) >>> (22 - 6)
+ | ((in[25 + inpos] - in[25 + inpos - 1]) << 6)
+ | ((in[26 + inpos] - in[26 + inpos - 1]) << 28);
+ out[18 + outpos] = (in[26 + inpos] - in[26 + inpos - 1]) >>> (22 - 18)
+ | ((in[27 + inpos] - in[27 + inpos - 1]) << 18);
+ out[19 + outpos] = (in[27 + inpos] - in[27 + inpos - 1]) >>> (22 - 8)
+ | ((in[28 + inpos] - in[28 + inpos - 1]) << 8)
+ | ((in[29 + inpos] - in[29 + inpos - 1]) << 30);
+ out[20 + outpos] = (in[29 + inpos] - in[29 + inpos - 1]) >>> (22 - 20)
+ | ((in[30 + inpos] - in[30 + inpos - 1]) << 20);
+ out[21 + outpos] = (in[30 + inpos] - in[30 + inpos - 1]) >>> (22 - 10)
+ | ((in[31 + inpos] - in[31 + inpos - 1]) << 10);
+ }
+
+ protected static void integratedpack23(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (in[0 + inpos] - initoffset)
+ | ((in[1 + inpos] - in[1 + inpos - 1]) << 23);
+ out[1 + outpos] = (in[1 + inpos] - in[1 + inpos - 1]) >>> (23 - 14)
+ | ((in[2 + inpos] - in[2 + inpos - 1]) << 14);
+ out[2 + outpos] = (in[2 + inpos] - in[2 + inpos - 1]) >>> (23 - 5)
+ | ((in[3 + inpos] - in[3 + inpos - 1]) << 5)
+ | ((in[4 + inpos] - in[4 + inpos - 1]) << 28);
+ out[3 + outpos] = (in[4 + inpos] - in[4 + inpos - 1]) >>> (23 - 19)
+ | ((in[5 + inpos] - in[5 + inpos - 1]) << 19);
+ out[4 + outpos] = (in[5 + inpos] - in[5 + inpos - 1]) >>> (23 - 10)
+ | ((in[6 + inpos] - in[6 + inpos - 1]) << 10);
+ out[5 + outpos] = (in[6 + inpos] - in[6 + inpos - 1]) >>> (23 - 1)
+ | ((in[7 + inpos] - in[7 + inpos - 1]) << 1)
+ | ((in[8 + inpos] - in[8 + inpos - 1]) << 24);
+ out[6 + outpos] = (in[8 + inpos] - in[8 + inpos - 1]) >>> (23 - 15)
+ | ((in[9 + inpos] - in[9 + inpos - 1]) << 15);
+ out[7 + outpos] = (in[9 + inpos] - in[9 + inpos - 1]) >>> (23 - 6)
+ | ((in[10 + inpos] - in[10 + inpos - 1]) << 6)
+ | ((in[11 + inpos] - in[11 + inpos - 1]) << 29);
+ out[8 + outpos] = (in[11 + inpos] - in[11 + inpos - 1]) >>> (23 - 20)
+ | ((in[12 + inpos] - in[12 + inpos - 1]) << 20);
+ out[9 + outpos] = (in[12 + inpos] - in[12 + inpos - 1]) >>> (23 - 11)
+ | ((in[13 + inpos] - in[13 + inpos - 1]) << 11);
+ out[10 + outpos] = (in[13 + inpos] - in[13 + inpos - 1]) >>> (23 - 2)
+ | ((in[14 + inpos] - in[14 + inpos - 1]) << 2)
+ | ((in[15 + inpos] - in[15 + inpos - 1]) << 25);
+ out[11 + outpos] = (in[15 + inpos] - in[15 + inpos - 1]) >>> (23 - 16)
+ | ((in[16 + inpos] - in[16 + inpos - 1]) << 16);
+ out[12 + outpos] = (in[16 + inpos] - in[16 + inpos - 1]) >>> (23 - 7)
+ | ((in[17 + inpos] - in[17 + inpos - 1]) << 7)
+ | ((in[18 + inpos] - in[18 + inpos - 1]) << 30);
+ out[13 + outpos] = (in[18 + inpos] - in[18 + inpos - 1]) >>> (23 - 21)
+ | ((in[19 + inpos] - in[19 + inpos - 1]) << 21);
+ out[14 + outpos] = (in[19 + inpos] - in[19 + inpos - 1]) >>> (23 - 12)
+ | ((in[20 + inpos] - in[20 + inpos - 1]) << 12);
+ out[15 + outpos] = (in[20 + inpos] - in[20 + inpos - 1]) >>> (23 - 3)
+ | ((in[21 + inpos] - in[21 + inpos - 1]) << 3)
+ | ((in[22 + inpos] - in[22 + inpos - 1]) << 26);
+ out[16 + outpos] = (in[22 + inpos] - in[22 + inpos - 1]) >>> (23 - 17)
+ | ((in[23 + inpos] - in[23 + inpos - 1]) << 17);
+ out[17 + outpos] = (in[23 + inpos] - in[23 + inpos - 1]) >>> (23 - 8)
+ | ((in[24 + inpos] - in[24 + inpos - 1]) << 8)
+ | ((in[25 + inpos] - in[25 + inpos - 1]) << 31);
+ out[18 + outpos] = (in[25 + inpos] - in[25 + inpos - 1]) >>> (23 - 22)
+ | ((in[26 + inpos] - in[26 + inpos - 1]) << 22);
+ out[19 + outpos] = (in[26 + inpos] - in[26 + inpos - 1]) >>> (23 - 13)
+ | ((in[27 + inpos] - in[27 + inpos - 1]) << 13);
+ out[20 + outpos] = (in[27 + inpos] - in[27 + inpos - 1]) >>> (23 - 4)
+ | ((in[28 + inpos] - in[28 + inpos - 1]) << 4)
+ | ((in[29 + inpos] - in[29 + inpos - 1]) << 27);
+ out[21 + outpos] = (in[29 + inpos] - in[29 + inpos - 1]) >>> (23 - 18)
+ | ((in[30 + inpos] - in[30 + inpos - 1]) << 18);
+ out[22 + outpos] = (in[30 + inpos] - in[30 + inpos - 1]) >>> (23 - 9)
+ | ((in[31 + inpos] - in[31 + inpos - 1]) << 9);
+ }
+
+ protected static void integratedpack24(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (in[0 + inpos] - initoffset)
+ | ((in[1 + inpos] - in[1 + inpos - 1]) << 24);
+ out[1 + outpos] = (in[1 + inpos] - in[1 + inpos - 1]) >>> (24 - 16)
+ | ((in[2 + inpos] - in[2 + inpos - 1]) << 16);
+ out[2 + outpos] = (in[2 + inpos] - in[2 + inpos - 1]) >>> (24 - 8)
+ | ((in[3 + inpos] - in[3 + inpos - 1]) << 8);
+ out[3 + outpos] = (in[4 + inpos] - in[4 + inpos - 1])
+ | ((in[5 + inpos] - in[5 + inpos - 1]) << 24);
+ out[4 + outpos] = (in[5 + inpos] - in[5 + inpos - 1]) >>> (24 - 16)
+ | ((in[6 + inpos] - in[6 + inpos - 1]) << 16);
+ out[5 + outpos] = (in[6 + inpos] - in[6 + inpos - 1]) >>> (24 - 8)
+ | ((in[7 + inpos] - in[7 + inpos - 1]) << 8);
+ out[6 + outpos] = (in[8 + inpos] - in[8 + inpos - 1])
+ | ((in[9 + inpos] - in[9 + inpos - 1]) << 24);
+ out[7 + outpos] = (in[9 + inpos] - in[9 + inpos - 1]) >>> (24 - 16)
+ | ((in[10 + inpos] - in[10 + inpos - 1]) << 16);
+ out[8 + outpos] = (in[10 + inpos] - in[10 + inpos - 1]) >>> (24 - 8)
+ | ((in[11 + inpos] - in[11 + inpos - 1]) << 8);
+ out[9 + outpos] = (in[12 + inpos] - in[12 + inpos - 1])
+ | ((in[13 + inpos] - in[13 + inpos - 1]) << 24);
+ out[10 + outpos] = (in[13 + inpos] - in[13 + inpos - 1]) >>> (24 - 16)
+ | ((in[14 + inpos] - in[14 + inpos - 1]) << 16);
+ out[11 + outpos] = (in[14 + inpos] - in[14 + inpos - 1]) >>> (24 - 8)
+ | ((in[15 + inpos] - in[15 + inpos - 1]) << 8);
+ out[12 + outpos] = (in[16 + inpos] - in[16 + inpos - 1])
+ | ((in[17 + inpos] - in[17 + inpos - 1]) << 24);
+ out[13 + outpos] = (in[17 + inpos] - in[17 + inpos - 1]) >>> (24 - 16)
+ | ((in[18 + inpos] - in[18 + inpos - 1]) << 16);
+ out[14 + outpos] = (in[18 + inpos] - in[18 + inpos - 1]) >>> (24 - 8)
+ | ((in[19 + inpos] - in[19 + inpos - 1]) << 8);
+ out[15 + outpos] = (in[20 + inpos] - in[20 + inpos - 1])
+ | ((in[21 + inpos] - in[21 + inpos - 1]) << 24);
+ out[16 + outpos] = (in[21 + inpos] - in[21 + inpos - 1]) >>> (24 - 16)
+ | ((in[22 + inpos] - in[22 + inpos - 1]) << 16);
+ out[17 + outpos] = (in[22 + inpos] - in[22 + inpos - 1]) >>> (24 - 8)
+ | ((in[23 + inpos] - in[23 + inpos - 1]) << 8);
+ out[18 + outpos] = (in[24 + inpos] - in[24 + inpos - 1])
+ | ((in[25 + inpos] - in[25 + inpos - 1]) << 24);
+ out[19 + outpos] = (in[25 + inpos] - in[25 + inpos - 1]) >>> (24 - 16)
+ | ((in[26 + inpos] - in[26 + inpos - 1]) << 16);
+ out[20 + outpos] = (in[26 + inpos] - in[26 + inpos - 1]) >>> (24 - 8)
+ | ((in[27 + inpos] - in[27 + inpos - 1]) << 8);
+ out[21 + outpos] = (in[28 + inpos] - in[28 + inpos - 1])
+ | ((in[29 + inpos] - in[29 + inpos - 1]) << 24);
+ out[22 + outpos] = (in[29 + inpos] - in[29 + inpos - 1]) >>> (24 - 16)
+ | ((in[30 + inpos] - in[30 + inpos - 1]) << 16);
+ out[23 + outpos] = (in[30 + inpos] - in[30 + inpos - 1]) >>> (24 - 8)
+ | ((in[31 + inpos] - in[31 + inpos - 1]) << 8);
+ }
+
+ protected static void integratedpack25(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (in[0 + inpos] - initoffset)
+ | ((in[1 + inpos] - in[1 + inpos - 1]) << 25);
+ out[1 + outpos] = (in[1 + inpos] - in[1 + inpos - 1]) >>> (25 - 18)
+ | ((in[2 + inpos] - in[2 + inpos - 1]) << 18);
+ out[2 + outpos] = (in[2 + inpos] - in[2 + inpos - 1]) >>> (25 - 11)
+ | ((in[3 + inpos] - in[3 + inpos - 1]) << 11);
+ out[3 + outpos] = (in[3 + inpos] - in[3 + inpos - 1]) >>> (25 - 4)
+ | ((in[4 + inpos] - in[4 + inpos - 1]) << 4)
+ | ((in[5 + inpos] - in[5 + inpos - 1]) << 29);
+ out[4 + outpos] = (in[5 + inpos] - in[5 + inpos - 1]) >>> (25 - 22)
+ | ((in[6 + inpos] - in[6 + inpos - 1]) << 22);
+ out[5 + outpos] = (in[6 + inpos] - in[6 + inpos - 1]) >>> (25 - 15)
+ | ((in[7 + inpos] - in[7 + inpos - 1]) << 15);
+ out[6 + outpos] = (in[7 + inpos] - in[7 + inpos - 1]) >>> (25 - 8)
+ | ((in[8 + inpos] - in[8 + inpos - 1]) << 8);
+ out[7 + outpos] = (in[8 + inpos] - in[8 + inpos - 1]) >>> (25 - 1)
+ | ((in[9 + inpos] - in[9 + inpos - 1]) << 1)
+ | ((in[10 + inpos] - in[10 + inpos - 1]) << 26);
+ out[8 + outpos] = (in[10 + inpos] - in[10 + inpos - 1]) >>> (25 - 19)
+ | ((in[11 + inpos] - in[11 + inpos - 1]) << 19);
+ out[9 + outpos] = (in[11 + inpos] - in[11 + inpos - 1]) >>> (25 - 12)
+ | ((in[12 + inpos] - in[12 + inpos - 1]) << 12);
+ out[10 + outpos] = (in[12 + inpos] - in[12 + inpos - 1]) >>> (25 - 5)
+ | ((in[13 + inpos] - in[13 + inpos - 1]) << 5)
+ | ((in[14 + inpos] - in[14 + inpos - 1]) << 30);
+ out[11 + outpos] = (in[14 + inpos] - in[14 + inpos - 1]) >>> (25 - 23)
+ | ((in[15 + inpos] - in[15 + inpos - 1]) << 23);
+ out[12 + outpos] = (in[15 + inpos] - in[15 + inpos - 1]) >>> (25 - 16)
+ | ((in[16 + inpos] - in[16 + inpos - 1]) << 16);
+ out[13 + outpos] = (in[16 + inpos] - in[16 + inpos - 1]) >>> (25 - 9)
+ | ((in[17 + inpos] - in[17 + inpos - 1]) << 9);
+ out[14 + outpos] = (in[17 + inpos] - in[17 + inpos - 1]) >>> (25 - 2)
+ | ((in[18 + inpos] - in[18 + inpos - 1]) << 2)
+ | ((in[19 + inpos] - in[19 + inpos - 1]) << 27);
+ out[15 + outpos] = (in[19 + inpos] - in[19 + inpos - 1]) >>> (25 - 20)
+ | ((in[20 + inpos] - in[20 + inpos - 1]) << 20);
+ out[16 + outpos] = (in[20 + inpos] - in[20 + inpos - 1]) >>> (25 - 13)
+ | ((in[21 + inpos] - in[21 + inpos - 1]) << 13);
+ out[17 + outpos] = (in[21 + inpos] - in[21 + inpos - 1]) >>> (25 - 6)
+ | ((in[22 + inpos] - in[22 + inpos - 1]) << 6)
+ | ((in[23 + inpos] - in[23 + inpos - 1]) << 31);
+ out[18 + outpos] = (in[23 + inpos] - in[23 + inpos - 1]) >>> (25 - 24)
+ | ((in[24 + inpos] - in[24 + inpos - 1]) << 24);
+ out[19 + outpos] = (in[24 + inpos] - in[24 + inpos - 1]) >>> (25 - 17)
+ | ((in[25 + inpos] - in[25 + inpos - 1]) << 17);
+ out[20 + outpos] = (in[25 + inpos] - in[25 + inpos - 1]) >>> (25 - 10)
+ | ((in[26 + inpos] - in[26 + inpos - 1]) << 10);
+ out[21 + outpos] = (in[26 + inpos] - in[26 + inpos - 1]) >>> (25 - 3)
+ | ((in[27 + inpos] - in[27 + inpos - 1]) << 3)
+ | ((in[28 + inpos] - in[28 + inpos - 1]) << 28);
+ out[22 + outpos] = (in[28 + inpos] - in[28 + inpos - 1]) >>> (25 - 21)
+ | ((in[29 + inpos] - in[29 + inpos - 1]) << 21);
+ out[23 + outpos] = (in[29 + inpos] - in[29 + inpos - 1]) >>> (25 - 14)
+ | ((in[30 + inpos] - in[30 + inpos - 1]) << 14);
+ out[24 + outpos] = (in[30 + inpos] - in[30 + inpos - 1]) >>> (25 - 7)
+ | ((in[31 + inpos] - in[31 + inpos - 1]) << 7);
+ }
+
+ protected static void integratedpack26(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (in[0 + inpos] - initoffset)
+ | ((in[1 + inpos] - in[1 + inpos - 1]) << 26);
+ out[1 + outpos] = (in[1 + inpos] - in[1 + inpos - 1]) >>> (26 - 20)
+ | ((in[2 + inpos] - in[2 + inpos - 1]) << 20);
+ out[2 + outpos] = (in[2 + inpos] - in[2 + inpos - 1]) >>> (26 - 14)
+ | ((in[3 + inpos] - in[3 + inpos - 1]) << 14);
+ out[3 + outpos] = (in[3 + inpos] - in[3 + inpos - 1]) >>> (26 - 8)
+ | ((in[4 + inpos] - in[4 + inpos - 1]) << 8);
+ out[4 + outpos] = (in[4 + inpos] - in[4 + inpos - 1]) >>> (26 - 2)
+ | ((in[5 + inpos] - in[5 + inpos - 1]) << 2)
+ | ((in[6 + inpos] - in[6 + inpos - 1]) << 28);
+ out[5 + outpos] = (in[6 + inpos] - in[6 + inpos - 1]) >>> (26 - 22)
+ | ((in[7 + inpos] - in[7 + inpos - 1]) << 22);
+ out[6 + outpos] = (in[7 + inpos] - in[7 + inpos - 1]) >>> (26 - 16)
+ | ((in[8 + inpos] - in[8 + inpos - 1]) << 16);
+ out[7 + outpos] = (in[8 + inpos] - in[8 + inpos - 1]) >>> (26 - 10)
+ | ((in[9 + inpos] - in[9 + inpos - 1]) << 10);
+ out[8 + outpos] = (in[9 + inpos] - in[9 + inpos - 1]) >>> (26 - 4)
+ | ((in[10 + inpos] - in[10 + inpos - 1]) << 4)
+ | ((in[11 + inpos] - in[11 + inpos - 1]) << 30);
+ out[9 + outpos] = (in[11 + inpos] - in[11 + inpos - 1]) >>> (26 - 24)
+ | ((in[12 + inpos] - in[12 + inpos - 1]) << 24);
+ out[10 + outpos] = (in[12 + inpos] - in[12 + inpos - 1]) >>> (26 - 18)
+ | ((in[13 + inpos] - in[13 + inpos - 1]) << 18);
+ out[11 + outpos] = (in[13 + inpos] - in[13 + inpos - 1]) >>> (26 - 12)
+ | ((in[14 + inpos] - in[14 + inpos - 1]) << 12);
+ out[12 + outpos] = (in[14 + inpos] - in[14 + inpos - 1]) >>> (26 - 6)
+ | ((in[15 + inpos] - in[15 + inpos - 1]) << 6);
+ out[13 + outpos] = (in[16 + inpos] - in[16 + inpos - 1])
+ | ((in[17 + inpos] - in[17 + inpos - 1]) << 26);
+ out[14 + outpos] = (in[17 + inpos] - in[17 + inpos - 1]) >>> (26 - 20)
+ | ((in[18 + inpos] - in[18 + inpos - 1]) << 20);
+ out[15 + outpos] = (in[18 + inpos] - in[18 + inpos - 1]) >>> (26 - 14)
+ | ((in[19 + inpos] - in[19 + inpos - 1]) << 14);
+ out[16 + outpos] = (in[19 + inpos] - in[19 + inpos - 1]) >>> (26 - 8)
+ | ((in[20 + inpos] - in[20 + inpos - 1]) << 8);
+ out[17 + outpos] = (in[20 + inpos] - in[20 + inpos - 1]) >>> (26 - 2)
+ | ((in[21 + inpos] - in[21 + inpos - 1]) << 2)
+ | ((in[22 + inpos] - in[22 + inpos - 1]) << 28);
+ out[18 + outpos] = (in[22 + inpos] - in[22 + inpos - 1]) >>> (26 - 22)
+ | ((in[23 + inpos] - in[23 + inpos - 1]) << 22);
+ out[19 + outpos] = (in[23 + inpos] - in[23 + inpos - 1]) >>> (26 - 16)
+ | ((in[24 + inpos] - in[24 + inpos - 1]) << 16);
+ out[20 + outpos] = (in[24 + inpos] - in[24 + inpos - 1]) >>> (26 - 10)
+ | ((in[25 + inpos] - in[25 + inpos - 1]) << 10);
+ out[21 + outpos] = (in[25 + inpos] - in[25 + inpos - 1]) >>> (26 - 4)
+ | ((in[26 + inpos] - in[26 + inpos - 1]) << 4)
+ | ((in[27 + inpos] - in[27 + inpos - 1]) << 30);
+ out[22 + outpos] = (in[27 + inpos] - in[27 + inpos - 1]) >>> (26 - 24)
+ | ((in[28 + inpos] - in[28 + inpos - 1]) << 24);
+ out[23 + outpos] = (in[28 + inpos] - in[28 + inpos - 1]) >>> (26 - 18)
+ | ((in[29 + inpos] - in[29 + inpos - 1]) << 18);
+ out[24 + outpos] = (in[29 + inpos] - in[29 + inpos - 1]) >>> (26 - 12)
+ | ((in[30 + inpos] - in[30 + inpos - 1]) << 12);
+ out[25 + outpos] = (in[30 + inpos] - in[30 + inpos - 1]) >>> (26 - 6)
+ | ((in[31 + inpos] - in[31 + inpos - 1]) << 6);
+ }
+
+ protected static void integratedpack27(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (in[0 + inpos] - initoffset)
+ | ((in[1 + inpos] - in[1 + inpos - 1]) << 27);
+ out[1 + outpos] = (in[1 + inpos] - in[1 + inpos - 1]) >>> (27 - 22)
+ | ((in[2 + inpos] - in[2 + inpos - 1]) << 22);
+ out[2 + outpos] = (in[2 + inpos] - in[2 + inpos - 1]) >>> (27 - 17)
+ | ((in[3 + inpos] - in[3 + inpos - 1]) << 17);
+ out[3 + outpos] = (in[3 + inpos] - in[3 + inpos - 1]) >>> (27 - 12)
+ | ((in[4 + inpos] - in[4 + inpos - 1]) << 12);
+ out[4 + outpos] = (in[4 + inpos] - in[4 + inpos - 1]) >>> (27 - 7)
+ | ((in[5 + inpos] - in[5 + inpos - 1]) << 7);
+ out[5 + outpos] = (in[5 + inpos] - in[5 + inpos - 1]) >>> (27 - 2)
+ | ((in[6 + inpos] - in[6 + inpos - 1]) << 2)
+ | ((in[7 + inpos] - in[7 + inpos - 1]) << 29);
+ out[6 + outpos] = (in[7 + inpos] - in[7 + inpos - 1]) >>> (27 - 24)
+ | ((in[8 + inpos] - in[8 + inpos - 1]) << 24);
+ out[7 + outpos] = (in[8 + inpos] - in[8 + inpos - 1]) >>> (27 - 19)
+ | ((in[9 + inpos] - in[9 + inpos - 1]) << 19);
+ out[8 + outpos] = (in[9 + inpos] - in[9 + inpos - 1]) >>> (27 - 14)
+ | ((in[10 + inpos] - in[10 + inpos - 1]) << 14);
+ out[9 + outpos] = (in[10 + inpos] - in[10 + inpos - 1]) >>> (27 - 9)
+ | ((in[11 + inpos] - in[11 + inpos - 1]) << 9);
+ out[10 + outpos] = (in[11 + inpos] - in[11 + inpos - 1]) >>> (27 - 4)
+ | ((in[12 + inpos] - in[12 + inpos - 1]) << 4)
+ | ((in[13 + inpos] - in[13 + inpos - 1]) << 31);
+ out[11 + outpos] = (in[13 + inpos] - in[13 + inpos - 1]) >>> (27 - 26)
+ | ((in[14 + inpos] - in[14 + inpos - 1]) << 26);
+ out[12 + outpos] = (in[14 + inpos] - in[14 + inpos - 1]) >>> (27 - 21)
+ | ((in[15 + inpos] - in[15 + inpos - 1]) << 21);
+ out[13 + outpos] = (in[15 + inpos] - in[15 + inpos - 1]) >>> (27 - 16)
+ | ((in[16 + inpos] - in[16 + inpos - 1]) << 16);
+ out[14 + outpos] = (in[16 + inpos] - in[16 + inpos - 1]) >>> (27 - 11)
+ | ((in[17 + inpos] - in[17 + inpos - 1]) << 11);
+ out[15 + outpos] = (in[17 + inpos] - in[17 + inpos - 1]) >>> (27 - 6)
+ | ((in[18 + inpos] - in[18 + inpos - 1]) << 6);
+ out[16 + outpos] = (in[18 + inpos] - in[18 + inpos - 1]) >>> (27 - 1)
+ | ((in[19 + inpos] - in[19 + inpos - 1]) << 1)
+ | ((in[20 + inpos] - in[20 + inpos - 1]) << 28);
+ out[17 + outpos] = (in[20 + inpos] - in[20 + inpos - 1]) >>> (27 - 23)
+ | ((in[21 + inpos] - in[21 + inpos - 1]) << 23);
+ out[18 + outpos] = (in[21 + inpos] - in[21 + inpos - 1]) >>> (27 - 18)
+ | ((in[22 + inpos] - in[22 + inpos - 1]) << 18);
+ out[19 + outpos] = (in[22 + inpos] - in[22 + inpos - 1]) >>> (27 - 13)
+ | ((in[23 + inpos] - in[23 + inpos - 1]) << 13);
+ out[20 + outpos] = (in[23 + inpos] - in[23 + inpos - 1]) >>> (27 - 8)
+ | ((in[24 + inpos] - in[24 + inpos - 1]) << 8);
+ out[21 + outpos] = (in[24 + inpos] - in[24 + inpos - 1]) >>> (27 - 3)
+ | ((in[25 + inpos] - in[25 + inpos - 1]) << 3)
+ | ((in[26 + inpos] - in[26 + inpos - 1]) << 30);
+ out[22 + outpos] = (in[26 + inpos] - in[26 + inpos - 1]) >>> (27 - 25)
+ | ((in[27 + inpos] - in[27 + inpos - 1]) << 25);
+ out[23 + outpos] = (in[27 + inpos] - in[27 + inpos - 1]) >>> (27 - 20)
+ | ((in[28 + inpos] - in[28 + inpos - 1]) << 20);
+ out[24 + outpos] = (in[28 + inpos] - in[28 + inpos - 1]) >>> (27 - 15)
+ | ((in[29 + inpos] - in[29 + inpos - 1]) << 15);
+ out[25 + outpos] = (in[29 + inpos] - in[29 + inpos - 1]) >>> (27 - 10)
+ | ((in[30 + inpos] - in[30 + inpos - 1]) << 10);
+ out[26 + outpos] = (in[30 + inpos] - in[30 + inpos - 1]) >>> (27 - 5)
+ | ((in[31 + inpos] - in[31 + inpos - 1]) << 5);
+ }
+
+ protected static void integratedpack28(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (in[0 + inpos] - initoffset)
+ | ((in[1 + inpos] - in[1 + inpos - 1]) << 28);
+ out[1 + outpos] = (in[1 + inpos] - in[1 + inpos - 1]) >>> (28 - 24)
+ | ((in[2 + inpos] - in[2 + inpos - 1]) << 24);
+ out[2 + outpos] = (in[2 + inpos] - in[2 + inpos - 1]) >>> (28 - 20)
+ | ((in[3 + inpos] - in[3 + inpos - 1]) << 20);
+ out[3 + outpos] = (in[3 + inpos] - in[3 + inpos - 1]) >>> (28 - 16)
+ | ((in[4 + inpos] - in[4 + inpos - 1]) << 16);
+ out[4 + outpos] = (in[4 + inpos] - in[4 + inpos - 1]) >>> (28 - 12)
+ | ((in[5 + inpos] - in[5 + inpos - 1]) << 12);
+ out[5 + outpos] = (in[5 + inpos] - in[5 + inpos - 1]) >>> (28 - 8)
+ | ((in[6 + inpos] - in[6 + inpos - 1]) << 8);
+ out[6 + outpos] = (in[6 + inpos] - in[6 + inpos - 1]) >>> (28 - 4)
+ | ((in[7 + inpos] - in[7 + inpos - 1]) << 4);
+ out[7 + outpos] = (in[8 + inpos] - in[8 + inpos - 1])
+ | ((in[9 + inpos] - in[9 + inpos - 1]) << 28);
+ out[8 + outpos] = (in[9 + inpos] - in[9 + inpos - 1]) >>> (28 - 24)
+ | ((in[10 + inpos] - in[10 + inpos - 1]) << 24);
+ out[9 + outpos] = (in[10 + inpos] - in[10 + inpos - 1]) >>> (28 - 20)
+ | ((in[11 + inpos] - in[11 + inpos - 1]) << 20);
+ out[10 + outpos] = (in[11 + inpos] - in[11 + inpos - 1]) >>> (28 - 16)
+ | ((in[12 + inpos] - in[12 + inpos - 1]) << 16);
+ out[11 + outpos] = (in[12 + inpos] - in[12 + inpos - 1]) >>> (28 - 12)
+ | ((in[13 + inpos] - in[13 + inpos - 1]) << 12);
+ out[12 + outpos] = (in[13 + inpos] - in[13 + inpos - 1]) >>> (28 - 8)
+ | ((in[14 + inpos] - in[14 + inpos - 1]) << 8);
+ out[13 + outpos] = (in[14 + inpos] - in[14 + inpos - 1]) >>> (28 - 4)
+ | ((in[15 + inpos] - in[15 + inpos - 1]) << 4);
+ out[14 + outpos] = (in[16 + inpos] - in[16 + inpos - 1])
+ | ((in[17 + inpos] - in[17 + inpos - 1]) << 28);
+ out[15 + outpos] = (in[17 + inpos] - in[17 + inpos - 1]) >>> (28 - 24)
+ | ((in[18 + inpos] - in[18 + inpos - 1]) << 24);
+ out[16 + outpos] = (in[18 + inpos] - in[18 + inpos - 1]) >>> (28 - 20)
+ | ((in[19 + inpos] - in[19 + inpos - 1]) << 20);
+ out[17 + outpos] = (in[19 + inpos] - in[19 + inpos - 1]) >>> (28 - 16)
+ | ((in[20 + inpos] - in[20 + inpos - 1]) << 16);
+ out[18 + outpos] = (in[20 + inpos] - in[20 + inpos - 1]) >>> (28 - 12)
+ | ((in[21 + inpos] - in[21 + inpos - 1]) << 12);
+ out[19 + outpos] = (in[21 + inpos] - in[21 + inpos - 1]) >>> (28 - 8)
+ | ((in[22 + inpos] - in[22 + inpos - 1]) << 8);
+ out[20 + outpos] = (in[22 + inpos] - in[22 + inpos - 1]) >>> (28 - 4)
+ | ((in[23 + inpos] - in[23 + inpos - 1]) << 4);
+ out[21 + outpos] = (in[24 + inpos] - in[24 + inpos - 1])
+ | ((in[25 + inpos] - in[25 + inpos - 1]) << 28);
+ out[22 + outpos] = (in[25 + inpos] - in[25 + inpos - 1]) >>> (28 - 24)
+ | ((in[26 + inpos] - in[26 + inpos - 1]) << 24);
+ out[23 + outpos] = (in[26 + inpos] - in[26 + inpos - 1]) >>> (28 - 20)
+ | ((in[27 + inpos] - in[27 + inpos - 1]) << 20);
+ out[24 + outpos] = (in[27 + inpos] - in[27 + inpos - 1]) >>> (28 - 16)
+ | ((in[28 + inpos] - in[28 + inpos - 1]) << 16);
+ out[25 + outpos] = (in[28 + inpos] - in[28 + inpos - 1]) >>> (28 - 12)
+ | ((in[29 + inpos] - in[29 + inpos - 1]) << 12);
+ out[26 + outpos] = (in[29 + inpos] - in[29 + inpos - 1]) >>> (28 - 8)
+ | ((in[30 + inpos] - in[30 + inpos - 1]) << 8);
+ out[27 + outpos] = (in[30 + inpos] - in[30 + inpos - 1]) >>> (28 - 4)
+ | ((in[31 + inpos] - in[31 + inpos - 1]) << 4);
+ }
+
+ protected static void integratedpack29(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (in[0 + inpos] - initoffset)
+ | ((in[1 + inpos] - in[1 + inpos - 1]) << 29);
+ out[1 + outpos] = (in[1 + inpos] - in[1 + inpos - 1]) >>> (29 - 26)
+ | ((in[2 + inpos] - in[2 + inpos - 1]) << 26);
+ out[2 + outpos] = (in[2 + inpos] - in[2 + inpos - 1]) >>> (29 - 23)
+ | ((in[3 + inpos] - in[3 + inpos - 1]) << 23);
+ out[3 + outpos] = (in[3 + inpos] - in[3 + inpos - 1]) >>> (29 - 20)
+ | ((in[4 + inpos] - in[4 + inpos - 1]) << 20);
+ out[4 + outpos] = (in[4 + inpos] - in[4 + inpos - 1]) >>> (29 - 17)
+ | ((in[5 + inpos] - in[5 + inpos - 1]) << 17);
+ out[5 + outpos] = (in[5 + inpos] - in[5 + inpos - 1]) >>> (29 - 14)
+ | ((in[6 + inpos] - in[6 + inpos - 1]) << 14);
+ out[6 + outpos] = (in[6 + inpos] - in[6 + inpos - 1]) >>> (29 - 11)
+ | ((in[7 + inpos] - in[7 + inpos - 1]) << 11);
+ out[7 + outpos] = (in[7 + inpos] - in[7 + inpos - 1]) >>> (29 - 8)
+ | ((in[8 + inpos] - in[8 + inpos - 1]) << 8);
+ out[8 + outpos] = (in[8 + inpos] - in[8 + inpos - 1]) >>> (29 - 5)
+ | ((in[9 + inpos] - in[9 + inpos - 1]) << 5);
+ out[9 + outpos] = (in[9 + inpos] - in[9 + inpos - 1]) >>> (29 - 2)
+ | ((in[10 + inpos] - in[10 + inpos - 1]) << 2)
+ | ((in[11 + inpos] - in[11 + inpos - 1]) << 31);
+ out[10 + outpos] = (in[11 + inpos] - in[11 + inpos - 1]) >>> (29 - 28)
+ | ((in[12 + inpos] - in[12 + inpos - 1]) << 28);
+ out[11 + outpos] = (in[12 + inpos] - in[12 + inpos - 1]) >>> (29 - 25)
+ | ((in[13 + inpos] - in[13 + inpos - 1]) << 25);
+ out[12 + outpos] = (in[13 + inpos] - in[13 + inpos - 1]) >>> (29 - 22)
+ | ((in[14 + inpos] - in[14 + inpos - 1]) << 22);
+ out[13 + outpos] = (in[14 + inpos] - in[14 + inpos - 1]) >>> (29 - 19)
+ | ((in[15 + inpos] - in[15 + inpos - 1]) << 19);
+ out[14 + outpos] = (in[15 + inpos] - in[15 + inpos - 1]) >>> (29 - 16)
+ | ((in[16 + inpos] - in[16 + inpos - 1]) << 16);
+ out[15 + outpos] = (in[16 + inpos] - in[16 + inpos - 1]) >>> (29 - 13)
+ | ((in[17 + inpos] - in[17 + inpos - 1]) << 13);
+ out[16 + outpos] = (in[17 + inpos] - in[17 + inpos - 1]) >>> (29 - 10)
+ | ((in[18 + inpos] - in[18 + inpos - 1]) << 10);
+ out[17 + outpos] = (in[18 + inpos] - in[18 + inpos - 1]) >>> (29 - 7)
+ | ((in[19 + inpos] - in[19 + inpos - 1]) << 7);
+ out[18 + outpos] = (in[19 + inpos] - in[19 + inpos - 1]) >>> (29 - 4)
+ | ((in[20 + inpos] - in[20 + inpos - 1]) << 4);
+ out[19 + outpos] = (in[20 + inpos] - in[20 + inpos - 1]) >>> (29 - 1)
+ | ((in[21 + inpos] - in[21 + inpos - 1]) << 1)
+ | ((in[22 + inpos] - in[22 + inpos - 1]) << 30);
+ out[20 + outpos] = (in[22 + inpos] - in[22 + inpos - 1]) >>> (29 - 27)
+ | ((in[23 + inpos] - in[23 + inpos - 1]) << 27);
+ out[21 + outpos] = (in[23 + inpos] - in[23 + inpos - 1]) >>> (29 - 24)
+ | ((in[24 + inpos] - in[24 + inpos - 1]) << 24);
+ out[22 + outpos] = (in[24 + inpos] - in[24 + inpos - 1]) >>> (29 - 21)
+ | ((in[25 + inpos] - in[25 + inpos - 1]) << 21);
+ out[23 + outpos] = (in[25 + inpos] - in[25 + inpos - 1]) >>> (29 - 18)
+ | ((in[26 + inpos] - in[26 + inpos - 1]) << 18);
+ out[24 + outpos] = (in[26 + inpos] - in[26 + inpos - 1]) >>> (29 - 15)
+ | ((in[27 + inpos] - in[27 + inpos - 1]) << 15);
+ out[25 + outpos] = (in[27 + inpos] - in[27 + inpos - 1]) >>> (29 - 12)
+ | ((in[28 + inpos] - in[28 + inpos - 1]) << 12);
+ out[26 + outpos] = (in[28 + inpos] - in[28 + inpos - 1]) >>> (29 - 9)
+ | ((in[29 + inpos] - in[29 + inpos - 1]) << 9);
+ out[27 + outpos] = (in[29 + inpos] - in[29 + inpos - 1]) >>> (29 - 6)
+ | ((in[30 + inpos] - in[30 + inpos - 1]) << 6);
+ out[28 + outpos] = (in[30 + inpos] - in[30 + inpos - 1]) >>> (29 - 3)
+ | ((in[31 + inpos] - in[31 + inpos - 1]) << 3);
+ }
+
+ protected static void integratedpack3(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (in[0 + inpos] - initoffset)
+ | ((in[1 + inpos] - in[1 + inpos - 1]) << 3)
+ | ((in[2 + inpos] - in[2 + inpos - 1]) << 6)
+ | ((in[3 + inpos] - in[3 + inpos - 1]) << 9)
+ | ((in[4 + inpos] - in[4 + inpos - 1]) << 12)
+ | ((in[5 + inpos] - in[5 + inpos - 1]) << 15)
+ | ((in[6 + inpos] - in[6 + inpos - 1]) << 18)
+ | ((in[7 + inpos] - in[7 + inpos - 1]) << 21)
+ | ((in[8 + inpos] - in[8 + inpos - 1]) << 24)
+ | ((in[9 + inpos] - in[9 + inpos - 1]) << 27)
+ | ((in[10 + inpos] - in[10 + inpos - 1]) << 30);
+ out[1 + outpos] = (in[10 + inpos] - in[10 + inpos - 1]) >>> (3 - 1)
+ | ((in[11 + inpos] - in[11 + inpos - 1]) << 1)
+ | ((in[12 + inpos] - in[12 + inpos - 1]) << 4)
+ | ((in[13 + inpos] - in[13 + inpos - 1]) << 7)
+ | ((in[14 + inpos] - in[14 + inpos - 1]) << 10)
+ | ((in[15 + inpos] - in[15 + inpos - 1]) << 13)
+ | ((in[16 + inpos] - in[16 + inpos - 1]) << 16)
+ | ((in[17 + inpos] - in[17 + inpos - 1]) << 19)
+ | ((in[18 + inpos] - in[18 + inpos - 1]) << 22)
+ | ((in[19 + inpos] - in[19 + inpos - 1]) << 25)
+ | ((in[20 + inpos] - in[20 + inpos - 1]) << 28)
+ | ((in[21 + inpos] - in[21 + inpos - 1]) << 31);
+ out[2 + outpos] = (in[21 + inpos] - in[21 + inpos - 1]) >>> (3 - 2)
+ | ((in[22 + inpos] - in[22 + inpos - 1]) << 2)
+ | ((in[23 + inpos] - in[23 + inpos - 1]) << 5)
+ | ((in[24 + inpos] - in[24 + inpos - 1]) << 8)
+ | ((in[25 + inpos] - in[25 + inpos - 1]) << 11)
+ | ((in[26 + inpos] - in[26 + inpos - 1]) << 14)
+ | ((in[27 + inpos] - in[27 + inpos - 1]) << 17)
+ | ((in[28 + inpos] - in[28 + inpos - 1]) << 20)
+ | ((in[29 + inpos] - in[29 + inpos - 1]) << 23)
+ | ((in[30 + inpos] - in[30 + inpos - 1]) << 26)
+ | ((in[31 + inpos] - in[31 + inpos - 1]) << 29);
+ }
+
+ protected static void integratedpack30(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (in[0 + inpos] - initoffset)
+ | ((in[1 + inpos] - in[1 + inpos - 1]) << 30);
+ out[1 + outpos] = (in[1 + inpos] - in[1 + inpos - 1]) >>> (30 - 28)
+ | ((in[2 + inpos] - in[2 + inpos - 1]) << 28);
+ out[2 + outpos] = (in[2 + inpos] - in[2 + inpos - 1]) >>> (30 - 26)
+ | ((in[3 + inpos] - in[3 + inpos - 1]) << 26);
+ out[3 + outpos] = (in[3 + inpos] - in[3 + inpos - 1]) >>> (30 - 24)
+ | ((in[4 + inpos] - in[4 + inpos - 1]) << 24);
+ out[4 + outpos] = (in[4 + inpos] - in[4 + inpos - 1]) >>> (30 - 22)
+ | ((in[5 + inpos] - in[5 + inpos - 1]) << 22);
+ out[5 + outpos] = (in[5 + inpos] - in[5 + inpos - 1]) >>> (30 - 20)
+ | ((in[6 + inpos] - in[6 + inpos - 1]) << 20);
+ out[6 + outpos] = (in[6 + inpos] - in[6 + inpos - 1]) >>> (30 - 18)
+ | ((in[7 + inpos] - in[7 + inpos - 1]) << 18);
+ out[7 + outpos] = (in[7 + inpos] - in[7 + inpos - 1]) >>> (30 - 16)
+ | ((in[8 + inpos] - in[8 + inpos - 1]) << 16);
+ out[8 + outpos] = (in[8 + inpos] - in[8 + inpos - 1]) >>> (30 - 14)
+ | ((in[9 + inpos] - in[9 + inpos - 1]) << 14);
+ out[9 + outpos] = (in[9 + inpos] - in[9 + inpos - 1]) >>> (30 - 12)
+ | ((in[10 + inpos] - in[10 + inpos - 1]) << 12);
+ out[10 + outpos] = (in[10 + inpos] - in[10 + inpos - 1]) >>> (30 - 10)
+ | ((in[11 + inpos] - in[11 + inpos - 1]) << 10);
+ out[11 + outpos] = (in[11 + inpos] - in[11 + inpos - 1]) >>> (30 - 8)
+ | ((in[12 + inpos] - in[12 + inpos - 1]) << 8);
+ out[12 + outpos] = (in[12 + inpos] - in[12 + inpos - 1]) >>> (30 - 6)
+ | ((in[13 + inpos] - in[13 + inpos - 1]) << 6);
+ out[13 + outpos] = (in[13 + inpos] - in[13 + inpos - 1]) >>> (30 - 4)
+ | ((in[14 + inpos] - in[14 + inpos - 1]) << 4);
+ out[14 + outpos] = (in[14 + inpos] - in[14 + inpos - 1]) >>> (30 - 2)
+ | ((in[15 + inpos] - in[15 + inpos - 1]) << 2);
+ out[15 + outpos] = (in[16 + inpos] - in[16 + inpos - 1])
+ | ((in[17 + inpos] - in[17 + inpos - 1]) << 30);
+ out[16 + outpos] = (in[17 + inpos] - in[17 + inpos - 1]) >>> (30 - 28)
+ | ((in[18 + inpos] - in[18 + inpos - 1]) << 28);
+ out[17 + outpos] = (in[18 + inpos] - in[18 + inpos - 1]) >>> (30 - 26)
+ | ((in[19 + inpos] - in[19 + inpos - 1]) << 26);
+ out[18 + outpos] = (in[19 + inpos] - in[19 + inpos - 1]) >>> (30 - 24)
+ | ((in[20 + inpos] - in[20 + inpos - 1]) << 24);
+ out[19 + outpos] = (in[20 + inpos] - in[20 + inpos - 1]) >>> (30 - 22)
+ | ((in[21 + inpos] - in[21 + inpos - 1]) << 22);
+ out[20 + outpos] = (in[21 + inpos] - in[21 + inpos - 1]) >>> (30 - 20)
+ | ((in[22 + inpos] - in[22 + inpos - 1]) << 20);
+ out[21 + outpos] = (in[22 + inpos] - in[22 + inpos - 1]) >>> (30 - 18)
+ | ((in[23 + inpos] - in[23 + inpos - 1]) << 18);
+ out[22 + outpos] = (in[23 + inpos] - in[23 + inpos - 1]) >>> (30 - 16)
+ | ((in[24 + inpos] - in[24 + inpos - 1]) << 16);
+ out[23 + outpos] = (in[24 + inpos] - in[24 + inpos - 1]) >>> (30 - 14)
+ | ((in[25 + inpos] - in[25 + inpos - 1]) << 14);
+ out[24 + outpos] = (in[25 + inpos] - in[25 + inpos - 1]) >>> (30 - 12)
+ | ((in[26 + inpos] - in[26 + inpos - 1]) << 12);
+ out[25 + outpos] = (in[26 + inpos] - in[26 + inpos - 1]) >>> (30 - 10)
+ | ((in[27 + inpos] - in[27 + inpos - 1]) << 10);
+ out[26 + outpos] = (in[27 + inpos] - in[27 + inpos - 1]) >>> (30 - 8)
+ | ((in[28 + inpos] - in[28 + inpos - 1]) << 8);
+ out[27 + outpos] = (in[28 + inpos] - in[28 + inpos - 1]) >>> (30 - 6)
+ | ((in[29 + inpos] - in[29 + inpos - 1]) << 6);
+ out[28 + outpos] = (in[29 + inpos] - in[29 + inpos - 1]) >>> (30 - 4)
+ | ((in[30 + inpos] - in[30 + inpos - 1]) << 4);
+ out[29 + outpos] = (in[30 + inpos] - in[30 + inpos - 1]) >>> (30 - 2)
+ | ((in[31 + inpos] - in[31 + inpos - 1]) << 2);
+ }
+
+ protected static void integratedpack31(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (in[0 + inpos] - initoffset)
+ | ((in[1 + inpos] - in[1 + inpos - 1]) << 31);
+ out[1 + outpos] = (in[1 + inpos] - in[1 + inpos - 1]) >>> (31 - 30)
+ | ((in[2 + inpos] - in[2 + inpos - 1]) << 30);
+ out[2 + outpos] = (in[2 + inpos] - in[2 + inpos - 1]) >>> (31 - 29)
+ | ((in[3 + inpos] - in[3 + inpos - 1]) << 29);
+ out[3 + outpos] = (in[3 + inpos] - in[3 + inpos - 1]) >>> (31 - 28)
+ | ((in[4 + inpos] - in[4 + inpos - 1]) << 28);
+ out[4 + outpos] = (in[4 + inpos] - in[4 + inpos - 1]) >>> (31 - 27)
+ | ((in[5 + inpos] - in[5 + inpos - 1]) << 27);
+ out[5 + outpos] = (in[5 + inpos] - in[5 + inpos - 1]) >>> (31 - 26)
+ | ((in[6 + inpos] - in[6 + inpos - 1]) << 26);
+ out[6 + outpos] = (in[6 + inpos] - in[6 + inpos - 1]) >>> (31 - 25)
+ | ((in[7 + inpos] - in[7 + inpos - 1]) << 25);
+ out[7 + outpos] = (in[7 + inpos] - in[7 + inpos - 1]) >>> (31 - 24)
+ | ((in[8 + inpos] - in[8 + inpos - 1]) << 24);
+ out[8 + outpos] = (in[8 + inpos] - in[8 + inpos - 1]) >>> (31 - 23)
+ | ((in[9 + inpos] - in[9 + inpos - 1]) << 23);
+ out[9 + outpos] = (in[9 + inpos] - in[9 + inpos - 1]) >>> (31 - 22)
+ | ((in[10 + inpos] - in[10 + inpos - 1]) << 22);
+ out[10 + outpos] = (in[10 + inpos] - in[10 + inpos - 1]) >>> (31 - 21)
+ | ((in[11 + inpos] - in[11 + inpos - 1]) << 21);
+ out[11 + outpos] = (in[11 + inpos] - in[11 + inpos - 1]) >>> (31 - 20)
+ | ((in[12 + inpos] - in[12 + inpos - 1]) << 20);
+ out[12 + outpos] = (in[12 + inpos] - in[12 + inpos - 1]) >>> (31 - 19)
+ | ((in[13 + inpos] - in[13 + inpos - 1]) << 19);
+ out[13 + outpos] = (in[13 + inpos] - in[13 + inpos - 1]) >>> (31 - 18)
+ | ((in[14 + inpos] - in[14 + inpos - 1]) << 18);
+ out[14 + outpos] = (in[14 + inpos] - in[14 + inpos - 1]) >>> (31 - 17)
+ | ((in[15 + inpos] - in[15 + inpos - 1]) << 17);
+ out[15 + outpos] = (in[15 + inpos] - in[15 + inpos - 1]) >>> (31 - 16)
+ | ((in[16 + inpos] - in[16 + inpos - 1]) << 16);
+ out[16 + outpos] = (in[16 + inpos] - in[16 + inpos - 1]) >>> (31 - 15)
+ | ((in[17 + inpos] - in[17 + inpos - 1]) << 15);
+ out[17 + outpos] = (in[17 + inpos] - in[17 + inpos - 1]) >>> (31 - 14)
+ | ((in[18 + inpos] - in[18 + inpos - 1]) << 14);
+ out[18 + outpos] = (in[18 + inpos] - in[18 + inpos - 1]) >>> (31 - 13)
+ | ((in[19 + inpos] - in[19 + inpos - 1]) << 13);
+ out[19 + outpos] = (in[19 + inpos] - in[19 + inpos - 1]) >>> (31 - 12)
+ | ((in[20 + inpos] - in[20 + inpos - 1]) << 12);
+ out[20 + outpos] = (in[20 + inpos] - in[20 + inpos - 1]) >>> (31 - 11)
+ | ((in[21 + inpos] - in[21 + inpos - 1]) << 11);
+ out[21 + outpos] = (in[21 + inpos] - in[21 + inpos - 1]) >>> (31 - 10)
+ | ((in[22 + inpos] - in[22 + inpos - 1]) << 10);
+ out[22 + outpos] = (in[22 + inpos] - in[22 + inpos - 1]) >>> (31 - 9)
+ | ((in[23 + inpos] - in[23 + inpos - 1]) << 9);
+ out[23 + outpos] = (in[23 + inpos] - in[23 + inpos - 1]) >>> (31 - 8)
+ | ((in[24 + inpos] - in[24 + inpos - 1]) << 8);
+ out[24 + outpos] = (in[24 + inpos] - in[24 + inpos - 1]) >>> (31 - 7)
+ | ((in[25 + inpos] - in[25 + inpos - 1]) << 7);
+ out[25 + outpos] = (in[25 + inpos] - in[25 + inpos - 1]) >>> (31 - 6)
+ | ((in[26 + inpos] - in[26 + inpos - 1]) << 6);
+ out[26 + outpos] = (in[26 + inpos] - in[26 + inpos - 1]) >>> (31 - 5)
+ | ((in[27 + inpos] - in[27 + inpos - 1]) << 5);
+ out[27 + outpos] = (in[27 + inpos] - in[27 + inpos - 1]) >>> (31 - 4)
+ | ((in[28 + inpos] - in[28 + inpos - 1]) << 4);
+ out[28 + outpos] = (in[28 + inpos] - in[28 + inpos - 1]) >>> (31 - 3)
+ | ((in[29 + inpos] - in[29 + inpos - 1]) << 3);
+ out[29 + outpos] = (in[29 + inpos] - in[29 + inpos - 1]) >>> (31 - 2)
+ | ((in[30 + inpos] - in[30 + inpos - 1]) << 2);
+ out[30 + outpos] = (in[30 + inpos] - in[30 + inpos - 1]) >>> (31 - 1)
+ | ((in[31 + inpos] - in[31 + inpos - 1]) << 1);
+ }
+
+ protected static void integratedpack32(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ System.arraycopy(in, inpos, out, outpos, 32); // no sense in
+ // doing delta
+ // coding
+ }
+
+ protected static void integratedpack4(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (in[0 + inpos] - initoffset)
+ | ((in[1 + inpos] - in[1 + inpos - 1]) << 4)
+ | ((in[2 + inpos] - in[2 + inpos - 1]) << 8)
+ | ((in[3 + inpos] - in[3 + inpos - 1]) << 12)
+ | ((in[4 + inpos] - in[4 + inpos - 1]) << 16)
+ | ((in[5 + inpos] - in[5 + inpos - 1]) << 20)
+ | ((in[6 + inpos] - in[6 + inpos - 1]) << 24)
+ | ((in[7 + inpos] - in[7 + inpos - 1]) << 28);
+ out[1 + outpos] = (in[8 + inpos] - in[8 + inpos - 1])
+ | ((in[9 + inpos] - in[9 + inpos - 1]) << 4)
+ | ((in[10 + inpos] - in[10 + inpos - 1]) << 8)
+ | ((in[11 + inpos] - in[11 + inpos - 1]) << 12)
+ | ((in[12 + inpos] - in[12 + inpos - 1]) << 16)
+ | ((in[13 + inpos] - in[13 + inpos - 1]) << 20)
+ | ((in[14 + inpos] - in[14 + inpos - 1]) << 24)
+ | ((in[15 + inpos] - in[15 + inpos - 1]) << 28);
+ out[2 + outpos] = (in[16 + inpos] - in[16 + inpos - 1])
+ | ((in[17 + inpos] - in[17 + inpos - 1]) << 4)
+ | ((in[18 + inpos] - in[18 + inpos - 1]) << 8)
+ | ((in[19 + inpos] - in[19 + inpos - 1]) << 12)
+ | ((in[20 + inpos] - in[20 + inpos - 1]) << 16)
+ | ((in[21 + inpos] - in[21 + inpos - 1]) << 20)
+ | ((in[22 + inpos] - in[22 + inpos - 1]) << 24)
+ | ((in[23 + inpos] - in[23 + inpos - 1]) << 28);
+ out[3 + outpos] = (in[24 + inpos] - in[24 + inpos - 1])
+ | ((in[25 + inpos] - in[25 + inpos - 1]) << 4)
+ | ((in[26 + inpos] - in[26 + inpos - 1]) << 8)
+ | ((in[27 + inpos] - in[27 + inpos - 1]) << 12)
+ | ((in[28 + inpos] - in[28 + inpos - 1]) << 16)
+ | ((in[29 + inpos] - in[29 + inpos - 1]) << 20)
+ | ((in[30 + inpos] - in[30 + inpos - 1]) << 24)
+ | ((in[31 + inpos] - in[31 + inpos - 1]) << 28);
+ }
+
+ protected static void integratedpack5(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (in[0 + inpos] - initoffset)
+ | ((in[1 + inpos] - in[1 + inpos - 1]) << 5)
+ | ((in[2 + inpos] - in[2 + inpos - 1]) << 10)
+ | ((in[3 + inpos] - in[3 + inpos - 1]) << 15)
+ | ((in[4 + inpos] - in[4 + inpos - 1]) << 20)
+ | ((in[5 + inpos] - in[5 + inpos - 1]) << 25)
+ | ((in[6 + inpos] - in[6 + inpos - 1]) << 30);
+ out[1 + outpos] = (in[6 + inpos] - in[6 + inpos - 1]) >>> (5 - 3)
+ | ((in[7 + inpos] - in[7 + inpos - 1]) << 3)
+ | ((in[8 + inpos] - in[8 + inpos - 1]) << 8)
+ | ((in[9 + inpos] - in[9 + inpos - 1]) << 13)
+ | ((in[10 + inpos] - in[10 + inpos - 1]) << 18)
+ | ((in[11 + inpos] - in[11 + inpos - 1]) << 23)
+ | ((in[12 + inpos] - in[12 + inpos - 1]) << 28);
+ out[2 + outpos] = (in[12 + inpos] - in[12 + inpos - 1]) >>> (5 - 1)
+ | ((in[13 + inpos] - in[13 + inpos - 1]) << 1)
+ | ((in[14 + inpos] - in[14 + inpos - 1]) << 6)
+ | ((in[15 + inpos] - in[15 + inpos - 1]) << 11)
+ | ((in[16 + inpos] - in[16 + inpos - 1]) << 16)
+ | ((in[17 + inpos] - in[17 + inpos - 1]) << 21)
+ | ((in[18 + inpos] - in[18 + inpos - 1]) << 26)
+ | ((in[19 + inpos] - in[19 + inpos - 1]) << 31);
+ out[3 + outpos] = (in[19 + inpos] - in[19 + inpos - 1]) >>> (5 - 4)
+ | ((in[20 + inpos] - in[20 + inpos - 1]) << 4)
+ | ((in[21 + inpos] - in[21 + inpos - 1]) << 9)
+ | ((in[22 + inpos] - in[22 + inpos - 1]) << 14)
+ | ((in[23 + inpos] - in[23 + inpos - 1]) << 19)
+ | ((in[24 + inpos] - in[24 + inpos - 1]) << 24)
+ | ((in[25 + inpos] - in[25 + inpos - 1]) << 29);
+ out[4 + outpos] = (in[25 + inpos] - in[25 + inpos - 1]) >>> (5 - 2)
+ | ((in[26 + inpos] - in[26 + inpos - 1]) << 2)
+ | ((in[27 + inpos] - in[27 + inpos - 1]) << 7)
+ | ((in[28 + inpos] - in[28 + inpos - 1]) << 12)
+ | ((in[29 + inpos] - in[29 + inpos - 1]) << 17)
+ | ((in[30 + inpos] - in[30 + inpos - 1]) << 22)
+ | ((in[31 + inpos] - in[31 + inpos - 1]) << 27);
+ }
+
+ protected static void integratedpack6(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (in[0 + inpos] - initoffset)
+ | ((in[1 + inpos] - in[1 + inpos - 1]) << 6)
+ | ((in[2 + inpos] - in[2 + inpos - 1]) << 12)
+ | ((in[3 + inpos] - in[3 + inpos - 1]) << 18)
+ | ((in[4 + inpos] - in[4 + inpos - 1]) << 24)
+ | ((in[5 + inpos] - in[5 + inpos - 1]) << 30);
+ out[1 + outpos] = (in[5 + inpos] - in[5 + inpos - 1]) >>> (6 - 4)
+ | ((in[6 + inpos] - in[6 + inpos - 1]) << 4)
+ | ((in[7 + inpos] - in[7 + inpos - 1]) << 10)
+ | ((in[8 + inpos] - in[8 + inpos - 1]) << 16)
+ | ((in[9 + inpos] - in[9 + inpos - 1]) << 22)
+ | ((in[10 + inpos] - in[10 + inpos - 1]) << 28);
+ out[2 + outpos] = (in[10 + inpos] - in[10 + inpos - 1]) >>> (6 - 2)
+ | ((in[11 + inpos] - in[11 + inpos - 1]) << 2)
+ | ((in[12 + inpos] - in[12 + inpos - 1]) << 8)
+ | ((in[13 + inpos] - in[13 + inpos - 1]) << 14)
+ | ((in[14 + inpos] - in[14 + inpos - 1]) << 20)
+ | ((in[15 + inpos] - in[15 + inpos - 1]) << 26);
+ out[3 + outpos] = (in[16 + inpos] - in[16 + inpos - 1])
+ | ((in[17 + inpos] - in[17 + inpos - 1]) << 6)
+ | ((in[18 + inpos] - in[18 + inpos - 1]) << 12)
+ | ((in[19 + inpos] - in[19 + inpos - 1]) << 18)
+ | ((in[20 + inpos] - in[20 + inpos - 1]) << 24)
+ | ((in[21 + inpos] - in[21 + inpos - 1]) << 30);
+ out[4 + outpos] = (in[21 + inpos] - in[21 + inpos - 1]) >>> (6 - 4)
+ | ((in[22 + inpos] - in[22 + inpos - 1]) << 4)
+ | ((in[23 + inpos] - in[23 + inpos - 1]) << 10)
+ | ((in[24 + inpos] - in[24 + inpos - 1]) << 16)
+ | ((in[25 + inpos] - in[25 + inpos - 1]) << 22)
+ | ((in[26 + inpos] - in[26 + inpos - 1]) << 28);
+ out[5 + outpos] = (in[26 + inpos] - in[26 + inpos - 1]) >>> (6 - 2)
+ | ((in[27 + inpos] - in[27 + inpos - 1]) << 2)
+ | ((in[28 + inpos] - in[28 + inpos - 1]) << 8)
+ | ((in[29 + inpos] - in[29 + inpos - 1]) << 14)
+ | ((in[30 + inpos] - in[30 + inpos - 1]) << 20)
+ | ((in[31 + inpos] - in[31 + inpos - 1]) << 26);
+ }
+
+ protected static void integratedpack7(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (in[0 + inpos] - initoffset)
+ | ((in[1 + inpos] - in[1 + inpos - 1]) << 7)
+ | ((in[2 + inpos] - in[2 + inpos - 1]) << 14)
+ | ((in[3 + inpos] - in[3 + inpos - 1]) << 21)
+ | ((in[4 + inpos] - in[4 + inpos - 1]) << 28);
+ out[1 + outpos] = (in[4 + inpos] - in[4 + inpos - 1]) >>> (7 - 3)
+ | ((in[5 + inpos] - in[5 + inpos - 1]) << 3)
+ | ((in[6 + inpos] - in[6 + inpos - 1]) << 10)
+ | ((in[7 + inpos] - in[7 + inpos - 1]) << 17)
+ | ((in[8 + inpos] - in[8 + inpos - 1]) << 24)
+ | ((in[9 + inpos] - in[9 + inpos - 1]) << 31);
+ out[2 + outpos] = (in[9 + inpos] - in[9 + inpos - 1]) >>> (7 - 6)
+ | ((in[10 + inpos] - in[10 + inpos - 1]) << 6)
+ | ((in[11 + inpos] - in[11 + inpos - 1]) << 13)
+ | ((in[12 + inpos] - in[12 + inpos - 1]) << 20)
+ | ((in[13 + inpos] - in[13 + inpos - 1]) << 27);
+ out[3 + outpos] = (in[13 + inpos] - in[13 + inpos - 1]) >>> (7 - 2)
+ | ((in[14 + inpos] - in[14 + inpos - 1]) << 2)
+ | ((in[15 + inpos] - in[15 + inpos - 1]) << 9)
+ | ((in[16 + inpos] - in[16 + inpos - 1]) << 16)
+ | ((in[17 + inpos] - in[17 + inpos - 1]) << 23)
+ | ((in[18 + inpos] - in[18 + inpos - 1]) << 30);
+ out[4 + outpos] = (in[18 + inpos] - in[18 + inpos - 1]) >>> (7 - 5)
+ | ((in[19 + inpos] - in[19 + inpos - 1]) << 5)
+ | ((in[20 + inpos] - in[20 + inpos - 1]) << 12)
+ | ((in[21 + inpos] - in[21 + inpos - 1]) << 19)
+ | ((in[22 + inpos] - in[22 + inpos - 1]) << 26);
+ out[5 + outpos] = (in[22 + inpos] - in[22 + inpos - 1]) >>> (7 - 1)
+ | ((in[23 + inpos] - in[23 + inpos - 1]) << 1)
+ | ((in[24 + inpos] - in[24 + inpos - 1]) << 8)
+ | ((in[25 + inpos] - in[25 + inpos - 1]) << 15)
+ | ((in[26 + inpos] - in[26 + inpos - 1]) << 22)
+ | ((in[27 + inpos] - in[27 + inpos - 1]) << 29);
+ out[6 + outpos] = (in[27 + inpos] - in[27 + inpos - 1]) >>> (7 - 4)
+ | ((in[28 + inpos] - in[28 + inpos - 1]) << 4)
+ | ((in[29 + inpos] - in[29 + inpos - 1]) << 11)
+ | ((in[30 + inpos] - in[30 + inpos - 1]) << 18)
+ | ((in[31 + inpos] - in[31 + inpos - 1]) << 25);
+ }
+
+ protected static void integratedpack8(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (in[0 + inpos] - initoffset)
+ | ((in[1 + inpos] - in[1 + inpos - 1]) << 8)
+ | ((in[2 + inpos] - in[2 + inpos - 1]) << 16)
+ | ((in[3 + inpos] - in[3 + inpos - 1]) << 24);
+ out[1 + outpos] = (in[4 + inpos] - in[4 + inpos - 1])
+ | ((in[5 + inpos] - in[5 + inpos - 1]) << 8)
+ | ((in[6 + inpos] - in[6 + inpos - 1]) << 16)
+ | ((in[7 + inpos] - in[7 + inpos - 1]) << 24);
+ out[2 + outpos] = (in[8 + inpos] - in[8 + inpos - 1])
+ | ((in[9 + inpos] - in[9 + inpos - 1]) << 8)
+ | ((in[10 + inpos] - in[10 + inpos - 1]) << 16)
+ | ((in[11 + inpos] - in[11 + inpos - 1]) << 24);
+ out[3 + outpos] = (in[12 + inpos] - in[12 + inpos - 1])
+ | ((in[13 + inpos] - in[13 + inpos - 1]) << 8)
+ | ((in[14 + inpos] - in[14 + inpos - 1]) << 16)
+ | ((in[15 + inpos] - in[15 + inpos - 1]) << 24);
+ out[4 + outpos] = (in[16 + inpos] - in[16 + inpos - 1])
+ | ((in[17 + inpos] - in[17 + inpos - 1]) << 8)
+ | ((in[18 + inpos] - in[18 + inpos - 1]) << 16)
+ | ((in[19 + inpos] - in[19 + inpos - 1]) << 24);
+ out[5 + outpos] = (in[20 + inpos] - in[20 + inpos - 1])
+ | ((in[21 + inpos] - in[21 + inpos - 1]) << 8)
+ | ((in[22 + inpos] - in[22 + inpos - 1]) << 16)
+ | ((in[23 + inpos] - in[23 + inpos - 1]) << 24);
+ out[6 + outpos] = (in[24 + inpos] - in[24 + inpos - 1])
+ | ((in[25 + inpos] - in[25 + inpos - 1]) << 8)
+ | ((in[26 + inpos] - in[26 + inpos - 1]) << 16)
+ | ((in[27 + inpos] - in[27 + inpos - 1]) << 24);
+ out[7 + outpos] = (in[28 + inpos] - in[28 + inpos - 1])
+ | ((in[29 + inpos] - in[29 + inpos - 1]) << 8)
+ | ((in[30 + inpos] - in[30 + inpos - 1]) << 16)
+ | ((in[31 + inpos] - in[31 + inpos - 1]) << 24);
+ }
+
+ protected static void integratedpack9(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (in[0 + inpos] - initoffset)
+ | ((in[1 + inpos] - in[1 + inpos - 1]) << 9)
+ | ((in[2 + inpos] - in[2 + inpos - 1]) << 18)
+ | ((in[3 + inpos] - in[3 + inpos - 1]) << 27);
+ out[1 + outpos] = (in[3 + inpos] - in[3 + inpos - 1]) >>> (9 - 4)
+ | ((in[4 + inpos] - in[4 + inpos - 1]) << 4)
+ | ((in[5 + inpos] - in[5 + inpos - 1]) << 13)
+ | ((in[6 + inpos] - in[6 + inpos - 1]) << 22)
+ | ((in[7 + inpos] - in[7 + inpos - 1]) << 31);
+ out[2 + outpos] = (in[7 + inpos] - in[7 + inpos - 1]) >>> (9 - 8)
+ | ((in[8 + inpos] - in[8 + inpos - 1]) << 8)
+ | ((in[9 + inpos] - in[9 + inpos - 1]) << 17)
+ | ((in[10 + inpos] - in[10 + inpos - 1]) << 26);
+ out[3 + outpos] = (in[10 + inpos] - in[10 + inpos - 1]) >>> (9 - 3)
+ | ((in[11 + inpos] - in[11 + inpos - 1]) << 3)
+ | ((in[12 + inpos] - in[12 + inpos - 1]) << 12)
+ | ((in[13 + inpos] - in[13 + inpos - 1]) << 21)
+ | ((in[14 + inpos] - in[14 + inpos - 1]) << 30);
+ out[4 + outpos] = (in[14 + inpos] - in[14 + inpos - 1]) >>> (9 - 7)
+ | ((in[15 + inpos] - in[15 + inpos - 1]) << 7)
+ | ((in[16 + inpos] - in[16 + inpos - 1]) << 16)
+ | ((in[17 + inpos] - in[17 + inpos - 1]) << 25);
+ out[5 + outpos] = (in[17 + inpos] - in[17 + inpos - 1]) >>> (9 - 2)
+ | ((in[18 + inpos] - in[18 + inpos - 1]) << 2)
+ | ((in[19 + inpos] - in[19 + inpos - 1]) << 11)
+ | ((in[20 + inpos] - in[20 + inpos - 1]) << 20)
+ | ((in[21 + inpos] - in[21 + inpos - 1]) << 29);
+ out[6 + outpos] = (in[21 + inpos] - in[21 + inpos - 1]) >>> (9 - 6)
+ | ((in[22 + inpos] - in[22 + inpos - 1]) << 6)
+ | ((in[23 + inpos] - in[23 + inpos - 1]) << 15)
+ | ((in[24 + inpos] - in[24 + inpos - 1]) << 24);
+ out[7 + outpos] = (in[24 + inpos] - in[24 + inpos - 1]) >>> (9 - 1)
+ | ((in[25 + inpos] - in[25 + inpos - 1]) << 1)
+ | ((in[26 + inpos] - in[26 + inpos - 1]) << 10)
+ | ((in[27 + inpos] - in[27 + inpos - 1]) << 19)
+ | ((in[28 + inpos] - in[28 + inpos - 1]) << 28);
+ out[8 + outpos] = (in[28 + inpos] - in[28 + inpos - 1]) >>> (9 - 5)
+ | ((in[29 + inpos] - in[29 + inpos - 1]) << 5)
+ | ((in[30 + inpos] - in[30 + inpos - 1]) << 14)
+ | ((in[31 + inpos] - in[31 + inpos - 1]) << 23);
+ }
+
+ /**
+ * Unpack 32 integers along with prefix sum computation
+ *
+ * @param initoffset value to add to all outputted values
+ * @param in source array
+ * @param inpos initial position in source array
+ * @param out output array
+ * @param outpos initial position in output array
+ * @param bit number of bits to use per integer
+ */
+ public static void integratedunpack(final int initoffset,
+ final int[] in, final int inpos, final int[] out, final int outpos,
+ final int bit) {
+ switch (bit) {
+ case 0:
+ integratedunpack0(initoffset, in, inpos, out, outpos);
+ break;
+ case 1:
+ integratedunpack1(initoffset, in, inpos, out, outpos);
+ break;
+ case 2:
+ integratedunpack2(initoffset, in, inpos, out, outpos);
+ break;
+ case 3:
+ integratedunpack3(initoffset, in, inpos, out, outpos);
+ break;
+ case 4:
+ integratedunpack4(initoffset, in, inpos, out, outpos);
+ break;
+ case 5:
+ integratedunpack5(initoffset, in, inpos, out, outpos);
+ break;
+ case 6:
+ integratedunpack6(initoffset, in, inpos, out, outpos);
+ break;
+ case 7:
+ integratedunpack7(initoffset, in, inpos, out, outpos);
+ break;
+ case 8:
+ integratedunpack8(initoffset, in, inpos, out, outpos);
+ break;
+ case 9:
+ integratedunpack9(initoffset, in, inpos, out, outpos);
+ break;
+ case 10:
+ integratedunpack10(initoffset, in, inpos, out, outpos);
+ break;
+ case 11:
+ integratedunpack11(initoffset, in, inpos, out, outpos);
+ break;
+ case 12:
+ integratedunpack12(initoffset, in, inpos, out, outpos);
+ break;
+ case 13:
+ integratedunpack13(initoffset, in, inpos, out, outpos);
+ break;
+ case 14:
+ integratedunpack14(initoffset, in, inpos, out, outpos);
+ break;
+ case 15:
+ integratedunpack15(initoffset, in, inpos, out, outpos);
+ break;
+ case 16:
+ integratedunpack16(initoffset, in, inpos, out, outpos);
+ break;
+ case 17:
+ integratedunpack17(initoffset, in, inpos, out, outpos);
+ break;
+ case 18:
+ integratedunpack18(initoffset, in, inpos, out, outpos);
+ break;
+ case 19:
+ integratedunpack19(initoffset, in, inpos, out, outpos);
+ break;
+ case 20:
+ integratedunpack20(initoffset, in, inpos, out, outpos);
+ break;
+ case 21:
+ integratedunpack21(initoffset, in, inpos, out, outpos);
+ break;
+ case 22:
+ integratedunpack22(initoffset, in, inpos, out, outpos);
+ break;
+ case 23:
+ integratedunpack23(initoffset, in, inpos, out, outpos);
+ break;
+ case 24:
+ integratedunpack24(initoffset, in, inpos, out, outpos);
+ break;
+ case 25:
+ integratedunpack25(initoffset, in, inpos, out, outpos);
+ break;
+ case 26:
+ integratedunpack26(initoffset, in, inpos, out, outpos);
+ break;
+ case 27:
+ integratedunpack27(initoffset, in, inpos, out, outpos);
+ break;
+ case 28:
+ integratedunpack28(initoffset, in, inpos, out, outpos);
+ break;
+ case 29:
+ integratedunpack29(initoffset, in, inpos, out, outpos);
+ break;
+ case 30:
+ integratedunpack30(initoffset, in, inpos, out, outpos);
+ break;
+ case 31:
+ integratedunpack31(initoffset, in, inpos, out, outpos);
+ break;
+ case 32:
+ integratedunpack32(initoffset, in, inpos, out, outpos);
+ break;
+ default:
+ throw new IllegalArgumentException(
+ "Unsupported bit width.");
+ }
+ }
+
+ protected static void integratedunpack0(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ Arrays.fill(out, outpos, outpos + 32, initoffset);
+ }
+
+ protected static void integratedunpack1(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (((in[0 + inpos] >>> 0) & 1)) + initoffset;
+ out[1 + outpos] = (((in[0 + inpos] >>> 1) & 1))
+ + out[1 + outpos - 1];
+ out[2 + outpos] = (((in[0 + inpos] >>> 2) & 1))
+ + out[2 + outpos - 1];
+ out[3 + outpos] = (((in[0 + inpos] >>> 3) & 1))
+ + out[3 + outpos - 1];
+ out[4 + outpos] = (((in[0 + inpos] >>> 4) & 1))
+ + out[4 + outpos - 1];
+ out[5 + outpos] = (((in[0 + inpos] >>> 5) & 1))
+ + out[5 + outpos - 1];
+ out[6 + outpos] = (((in[0 + inpos] >>> 6) & 1))
+ + out[6 + outpos - 1];
+ out[7 + outpos] = (((in[0 + inpos] >>> 7) & 1))
+ + out[7 + outpos - 1];
+ out[8 + outpos] = (((in[0 + inpos] >>> 8) & 1))
+ + out[8 + outpos - 1];
+ out[9 + outpos] = (((in[0 + inpos] >>> 9) & 1))
+ + out[9 + outpos - 1];
+ out[10 + outpos] = (((in[0 + inpos] >>> 10) & 1))
+ + out[10 + outpos - 1];
+ out[11 + outpos] = (((in[0 + inpos] >>> 11) & 1))
+ + out[11 + outpos - 1];
+ out[12 + outpos] = (((in[0 + inpos] >>> 12) & 1))
+ + out[12 + outpos - 1];
+ out[13 + outpos] = (((in[0 + inpos] >>> 13) & 1))
+ + out[13 + outpos - 1];
+ out[14 + outpos] = (((in[0 + inpos] >>> 14) & 1))
+ + out[14 + outpos - 1];
+ out[15 + outpos] = (((in[0 + inpos] >>> 15) & 1))
+ + out[15 + outpos - 1];
+ out[16 + outpos] = (((in[0 + inpos] >>> 16) & 1))
+ + out[16 + outpos - 1];
+ out[17 + outpos] = (((in[0 + inpos] >>> 17) & 1))
+ + out[17 + outpos - 1];
+ out[18 + outpos] = (((in[0 + inpos] >>> 18) & 1))
+ + out[18 + outpos - 1];
+ out[19 + outpos] = (((in[0 + inpos] >>> 19) & 1))
+ + out[19 + outpos - 1];
+ out[20 + outpos] = (((in[0 + inpos] >>> 20) & 1))
+ + out[20 + outpos - 1];
+ out[21 + outpos] = (((in[0 + inpos] >>> 21) & 1))
+ + out[21 + outpos - 1];
+ out[22 + outpos] = (((in[0 + inpos] >>> 22) & 1))
+ + out[22 + outpos - 1];
+ out[23 + outpos] = (((in[0 + inpos] >>> 23) & 1))
+ + out[23 + outpos - 1];
+ out[24 + outpos] = (((in[0 + inpos] >>> 24) & 1))
+ + out[24 + outpos - 1];
+ out[25 + outpos] = (((in[0 + inpos] >>> 25) & 1))
+ + out[25 + outpos - 1];
+ out[26 + outpos] = (((in[0 + inpos] >>> 26) & 1))
+ + out[26 + outpos - 1];
+ out[27 + outpos] = (((in[0 + inpos] >>> 27) & 1))
+ + out[27 + outpos - 1];
+ out[28 + outpos] = (((in[0 + inpos] >>> 28) & 1))
+ + out[28 + outpos - 1];
+ out[29 + outpos] = (((in[0 + inpos] >>> 29) & 1))
+ + out[29 + outpos - 1];
+ out[30 + outpos] = (((in[0 + inpos] >>> 30) & 1))
+ + out[30 + outpos - 1];
+ out[31 + outpos] = ((in[0 + inpos] >>> 31))
+ + out[31 + outpos - 1];
+ }
+
+ protected static void integratedunpack10(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (((in[0 + inpos] >>> 0) & 1023)) + initoffset;
+ out[1 + outpos] = (((in[0 + inpos] >>> 10) & 1023))
+ + out[1 + outpos - 1];
+ out[2 + outpos] = (((in[0 + inpos] >>> 20) & 1023))
+ + out[2 + outpos - 1];
+ out[3 + outpos] = ((in[0 + inpos] >>> 30) | ((in[1 + inpos] & 255) << (10 - 8)))
+ + out[3 + outpos - 1];
+ out[4 + outpos] = (((in[1 + inpos] >>> 8) & 1023))
+ + out[4 + outpos - 1];
+ out[5 + outpos] = (((in[1 + inpos] >>> 18) & 1023))
+ + out[5 + outpos - 1];
+ out[6 + outpos] = ((in[1 + inpos] >>> 28) | ((in[2 + inpos] & 63) << (10 - 6)))
+ + out[6 + outpos - 1];
+ out[7 + outpos] = (((in[2 + inpos] >>> 6) & 1023))
+ + out[7 + outpos - 1];
+ out[8 + outpos] = (((in[2 + inpos] >>> 16) & 1023))
+ + out[8 + outpos - 1];
+ out[9 + outpos] = ((in[2 + inpos] >>> 26) | ((in[3 + inpos] & 15) << (10 - 4)))
+ + out[9 + outpos - 1];
+ out[10 + outpos] = (((in[3 + inpos] >>> 4) & 1023))
+ + out[10 + outpos - 1];
+ out[11 + outpos] = (((in[3 + inpos] >>> 14) & 1023))
+ + out[11 + outpos - 1];
+ out[12 + outpos] = ((in[3 + inpos] >>> 24) | ((in[4 + inpos] & 3) << (10 - 2)))
+ + out[12 + outpos - 1];
+ out[13 + outpos] = (((in[4 + inpos] >>> 2) & 1023))
+ + out[13 + outpos - 1];
+ out[14 + outpos] = (((in[4 + inpos] >>> 12) & 1023))
+ + out[14 + outpos - 1];
+ out[15 + outpos] = ((in[4 + inpos] >>> 22))
+ + out[15 + outpos - 1];
+ out[16 + outpos] = (((in[5 + inpos] >>> 0) & 1023))
+ + out[16 + outpos - 1];
+ out[17 + outpos] = (((in[5 + inpos] >>> 10) & 1023))
+ + out[17 + outpos - 1];
+ out[18 + outpos] = (((in[5 + inpos] >>> 20) & 1023))
+ + out[18 + outpos - 1];
+ out[19 + outpos] = ((in[5 + inpos] >>> 30) | ((in[6 + inpos] & 255) << (10 - 8)))
+ + out[19 + outpos - 1];
+ out[20 + outpos] = (((in[6 + inpos] >>> 8) & 1023))
+ + out[20 + outpos - 1];
+ out[21 + outpos] = (((in[6 + inpos] >>> 18) & 1023))
+ + out[21 + outpos - 1];
+ out[22 + outpos] = ((in[6 + inpos] >>> 28) | ((in[7 + inpos] & 63) << (10 - 6)))
+ + out[22 + outpos - 1];
+ out[23 + outpos] = (((in[7 + inpos] >>> 6) & 1023))
+ + out[23 + outpos - 1];
+ out[24 + outpos] = (((in[7 + inpos] >>> 16) & 1023))
+ + out[24 + outpos - 1];
+ out[25 + outpos] = ((in[7 + inpos] >>> 26) | ((in[8 + inpos] & 15) << (10 - 4)))
+ + out[25 + outpos - 1];
+ out[26 + outpos] = (((in[8 + inpos] >>> 4) & 1023))
+ + out[26 + outpos - 1];
+ out[27 + outpos] = (((in[8 + inpos] >>> 14) & 1023))
+ + out[27 + outpos - 1];
+ out[28 + outpos] = ((in[8 + inpos] >>> 24) | ((in[9 + inpos] & 3) << (10 - 2)))
+ + out[28 + outpos - 1];
+ out[29 + outpos] = (((in[9 + inpos] >>> 2) & 1023))
+ + out[29 + outpos - 1];
+ out[30 + outpos] = (((in[9 + inpos] >>> 12) & 1023))
+ + out[30 + outpos - 1];
+ out[31 + outpos] = ((in[9 + inpos] >>> 22))
+ + out[31 + outpos - 1];
+ }
+
+ protected static void integratedunpack11(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (((in[0 + inpos] >>> 0) & 2047)) + initoffset;
+ out[1 + outpos] = (((in[0 + inpos] >>> 11) & 2047))
+ + out[1 + outpos - 1];
+ out[2 + outpos] = ((in[0 + inpos] >>> 22) | ((in[1 + inpos] & 1) << (11 - 1)))
+ + out[2 + outpos - 1];
+ out[3 + outpos] = (((in[1 + inpos] >>> 1) & 2047))
+ + out[3 + outpos - 1];
+ out[4 + outpos] = (((in[1 + inpos] >>> 12) & 2047))
+ + out[4 + outpos - 1];
+ out[5 + outpos] = ((in[1 + inpos] >>> 23) | ((in[2 + inpos] & 3) << (11 - 2)))
+ + out[5 + outpos - 1];
+ out[6 + outpos] = (((in[2 + inpos] >>> 2) & 2047))
+ + out[6 + outpos - 1];
+ out[7 + outpos] = (((in[2 + inpos] >>> 13) & 2047))
+ + out[7 + outpos - 1];
+ out[8 + outpos] = ((in[2 + inpos] >>> 24) | ((in[3 + inpos] & 7) << (11 - 3)))
+ + out[8 + outpos - 1];
+ out[9 + outpos] = (((in[3 + inpos] >>> 3) & 2047))
+ + out[9 + outpos - 1];
+ out[10 + outpos] = (((in[3 + inpos] >>> 14) & 2047))
+ + out[10 + outpos - 1];
+ out[11 + outpos] = ((in[3 + inpos] >>> 25) | ((in[4 + inpos] & 15) << (11 - 4)))
+ + out[11 + outpos - 1];
+ out[12 + outpos] = (((in[4 + inpos] >>> 4) & 2047))
+ + out[12 + outpos - 1];
+ out[13 + outpos] = (((in[4 + inpos] >>> 15) & 2047))
+ + out[13 + outpos - 1];
+ out[14 + outpos] = ((in[4 + inpos] >>> 26) | ((in[5 + inpos] & 31) << (11 - 5)))
+ + out[14 + outpos - 1];
+ out[15 + outpos] = (((in[5 + inpos] >>> 5) & 2047))
+ + out[15 + outpos - 1];
+ out[16 + outpos] = (((in[5 + inpos] >>> 16) & 2047))
+ + out[16 + outpos - 1];
+ out[17 + outpos] = ((in[5 + inpos] >>> 27) | ((in[6 + inpos] & 63) << (11 - 6)))
+ + out[17 + outpos - 1];
+ out[18 + outpos] = (((in[6 + inpos] >>> 6) & 2047))
+ + out[18 + outpos - 1];
+ out[19 + outpos] = (((in[6 + inpos] >>> 17) & 2047))
+ + out[19 + outpos - 1];
+ out[20 + outpos] = ((in[6 + inpos] >>> 28) | ((in[7 + inpos] & 127) << (11 - 7)))
+ + out[20 + outpos - 1];
+ out[21 + outpos] = (((in[7 + inpos] >>> 7) & 2047))
+ + out[21 + outpos - 1];
+ out[22 + outpos] = (((in[7 + inpos] >>> 18) & 2047))
+ + out[22 + outpos - 1];
+ out[23 + outpos] = ((in[7 + inpos] >>> 29) | ((in[8 + inpos] & 255) << (11 - 8)))
+ + out[23 + outpos - 1];
+ out[24 + outpos] = (((in[8 + inpos] >>> 8) & 2047))
+ + out[24 + outpos - 1];
+ out[25 + outpos] = (((in[8 + inpos] >>> 19) & 2047))
+ + out[25 + outpos - 1];
+ out[26 + outpos] = ((in[8 + inpos] >>> 30) | ((in[9 + inpos] & 511) << (11 - 9)))
+ + out[26 + outpos - 1];
+ out[27 + outpos] = (((in[9 + inpos] >>> 9) & 2047))
+ + out[27 + outpos - 1];
+ out[28 + outpos] = (((in[9 + inpos] >>> 20) & 2047))
+ + out[28 + outpos - 1];
+ out[29 + outpos] = ((in[9 + inpos] >>> 31) | ((in[10 + inpos] & 1023) << (11 - 10)))
+ + out[29 + outpos - 1];
+ out[30 + outpos] = (((in[10 + inpos] >>> 10) & 2047))
+ + out[30 + outpos - 1];
+ out[31 + outpos] = ((in[10 + inpos] >>> 21))
+ + out[31 + outpos - 1];
+ }
+
+ protected static void integratedunpack12(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (((in[0 + inpos] >>> 0) & 4095)) + initoffset;
+ out[1 + outpos] = (((in[0 + inpos] >>> 12) & 4095))
+ + out[1 + outpos - 1];
+ out[2 + outpos] = ((in[0 + inpos] >>> 24) | ((in[1 + inpos] & 15) << (12 - 4)))
+ + out[2 + outpos - 1];
+ out[3 + outpos] = (((in[1 + inpos] >>> 4) & 4095))
+ + out[3 + outpos - 1];
+ out[4 + outpos] = (((in[1 + inpos] >>> 16) & 4095))
+ + out[4 + outpos - 1];
+ out[5 + outpos] = ((in[1 + inpos] >>> 28) | ((in[2 + inpos] & 255) << (12 - 8)))
+ + out[5 + outpos - 1];
+ out[6 + outpos] = (((in[2 + inpos] >>> 8) & 4095))
+ + out[6 + outpos - 1];
+ out[7 + outpos] = ((in[2 + inpos] >>> 20))
+ + out[7 + outpos - 1];
+ out[8 + outpos] = (((in[3 + inpos] >>> 0) & 4095))
+ + out[8 + outpos - 1];
+ out[9 + outpos] = (((in[3 + inpos] >>> 12) & 4095))
+ + out[9 + outpos - 1];
+ out[10 + outpos] = ((in[3 + inpos] >>> 24) | ((in[4 + inpos] & 15) << (12 - 4)))
+ + out[10 + outpos - 1];
+ out[11 + outpos] = (((in[4 + inpos] >>> 4) & 4095))
+ + out[11 + outpos - 1];
+ out[12 + outpos] = (((in[4 + inpos] >>> 16) & 4095))
+ + out[12 + outpos - 1];
+ out[13 + outpos] = ((in[4 + inpos] >>> 28) | ((in[5 + inpos] & 255) << (12 - 8)))
+ + out[13 + outpos - 1];
+ out[14 + outpos] = (((in[5 + inpos] >>> 8) & 4095))
+ + out[14 + outpos - 1];
+ out[15 + outpos] = ((in[5 + inpos] >>> 20))
+ + out[15 + outpos - 1];
+ out[16 + outpos] = (((in[6 + inpos] >>> 0) & 4095))
+ + out[16 + outpos - 1];
+ out[17 + outpos] = (((in[6 + inpos] >>> 12) & 4095))
+ + out[17 + outpos - 1];
+ out[18 + outpos] = ((in[6 + inpos] >>> 24) | ((in[7 + inpos] & 15) << (12 - 4)))
+ + out[18 + outpos - 1];
+ out[19 + outpos] = (((in[7 + inpos] >>> 4) & 4095))
+ + out[19 + outpos - 1];
+ out[20 + outpos] = (((in[7 + inpos] >>> 16) & 4095))
+ + out[20 + outpos - 1];
+ out[21 + outpos] = ((in[7 + inpos] >>> 28) | ((in[8 + inpos] & 255) << (12 - 8)))
+ + out[21 + outpos - 1];
+ out[22 + outpos] = (((in[8 + inpos] >>> 8) & 4095))
+ + out[22 + outpos - 1];
+ out[23 + outpos] = ((in[8 + inpos] >>> 20))
+ + out[23 + outpos - 1];
+ out[24 + outpos] = (((in[9 + inpos] >>> 0) & 4095))
+ + out[24 + outpos - 1];
+ out[25 + outpos] = (((in[9 + inpos] >>> 12) & 4095))
+ + out[25 + outpos - 1];
+ out[26 + outpos] = ((in[9 + inpos] >>> 24) | ((in[10 + inpos] & 15) << (12 - 4)))
+ + out[26 + outpos - 1];
+ out[27 + outpos] = (((in[10 + inpos] >>> 4) & 4095))
+ + out[27 + outpos - 1];
+ out[28 + outpos] = (((in[10 + inpos] >>> 16) & 4095))
+ + out[28 + outpos - 1];
+ out[29 + outpos] = ((in[10 + inpos] >>> 28) | ((in[11 + inpos] & 255) << (12 - 8)))
+ + out[29 + outpos - 1];
+ out[30 + outpos] = (((in[11 + inpos] >>> 8) & 4095))
+ + out[30 + outpos - 1];
+ out[31 + outpos] = ((in[11 + inpos] >>> 20))
+ + out[31 + outpos - 1];
+ }
+
+ protected static void integratedunpack13(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (((in[0 + inpos] >>> 0) & 8191)) + initoffset;
+ out[1 + outpos] = (((in[0 + inpos] >>> 13) & 8191))
+ + out[1 + outpos - 1];
+ out[2 + outpos] = ((in[0 + inpos] >>> 26) | ((in[1 + inpos] & 127) << (13 - 7)))
+ + out[2 + outpos - 1];
+ out[3 + outpos] = (((in[1 + inpos] >>> 7) & 8191))
+ + out[3 + outpos - 1];
+ out[4 + outpos] = ((in[1 + inpos] >>> 20) | ((in[2 + inpos] & 1) << (13 - 1)))
+ + out[4 + outpos - 1];
+ out[5 + outpos] = (((in[2 + inpos] >>> 1) & 8191))
+ + out[5 + outpos - 1];
+ out[6 + outpos] = (((in[2 + inpos] >>> 14) & 8191))
+ + out[6 + outpos - 1];
+ out[7 + outpos] = ((in[2 + inpos] >>> 27) | ((in[3 + inpos] & 255) << (13 - 8)))
+ + out[7 + outpos - 1];
+ out[8 + outpos] = (((in[3 + inpos] >>> 8) & 8191))
+ + out[8 + outpos - 1];
+ out[9 + outpos] = ((in[3 + inpos] >>> 21) | ((in[4 + inpos] & 3) << (13 - 2)))
+ + out[9 + outpos - 1];
+ out[10 + outpos] = (((in[4 + inpos] >>> 2) & 8191))
+ + out[10 + outpos - 1];
+ out[11 + outpos] = (((in[4 + inpos] >>> 15) & 8191))
+ + out[11 + outpos - 1];
+ out[12 + outpos] = ((in[4 + inpos] >>> 28) | ((in[5 + inpos] & 511) << (13 - 9)))
+ + out[12 + outpos - 1];
+ out[13 + outpos] = (((in[5 + inpos] >>> 9) & 8191))
+ + out[13 + outpos - 1];
+ out[14 + outpos] = ((in[5 + inpos] >>> 22) | ((in[6 + inpos] & 7) << (13 - 3)))
+ + out[14 + outpos - 1];
+ out[15 + outpos] = (((in[6 + inpos] >>> 3) & 8191))
+ + out[15 + outpos - 1];
+ out[16 + outpos] = (((in[6 + inpos] >>> 16) & 8191))
+ + out[16 + outpos - 1];
+ out[17 + outpos] = ((in[6 + inpos] >>> 29) | ((in[7 + inpos] & 1023) << (13 - 10)))
+ + out[17 + outpos - 1];
+ out[18 + outpos] = (((in[7 + inpos] >>> 10) & 8191))
+ + out[18 + outpos - 1];
+ out[19 + outpos] = ((in[7 + inpos] >>> 23) | ((in[8 + inpos] & 15) << (13 - 4)))
+ + out[19 + outpos - 1];
+ out[20 + outpos] = (((in[8 + inpos] >>> 4) & 8191))
+ + out[20 + outpos - 1];
+ out[21 + outpos] = (((in[8 + inpos] >>> 17) & 8191))
+ + out[21 + outpos - 1];
+ out[22 + outpos] = ((in[8 + inpos] >>> 30) | ((in[9 + inpos] & 2047) << (13 - 11)))
+ + out[22 + outpos - 1];
+ out[23 + outpos] = (((in[9 + inpos] >>> 11) & 8191))
+ + out[23 + outpos - 1];
+ out[24 + outpos] = ((in[9 + inpos] >>> 24) | ((in[10 + inpos] & 31) << (13 - 5)))
+ + out[24 + outpos - 1];
+ out[25 + outpos] = (((in[10 + inpos] >>> 5) & 8191))
+ + out[25 + outpos - 1];
+ out[26 + outpos] = (((in[10 + inpos] >>> 18) & 8191))
+ + out[26 + outpos - 1];
+ out[27 + outpos] = ((in[10 + inpos] >>> 31) | ((in[11 + inpos] & 4095) << (13 - 12)))
+ + out[27 + outpos - 1];
+ out[28 + outpos] = (((in[11 + inpos] >>> 12) & 8191))
+ + out[28 + outpos - 1];
+ out[29 + outpos] = ((in[11 + inpos] >>> 25) | ((in[12 + inpos] & 63) << (13 - 6)))
+ + out[29 + outpos - 1];
+ out[30 + outpos] = (((in[12 + inpos] >>> 6) & 8191))
+ + out[30 + outpos - 1];
+ out[31 + outpos] = ((in[12 + inpos] >>> 19))
+ + out[31 + outpos - 1];
+ }
+
+ protected static void integratedunpack14(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (((in[0 + inpos] >>> 0) & 16383))
+ + initoffset;
+ out[1 + outpos] = (((in[0 + inpos] >>> 14) & 16383))
+ + out[1 + outpos - 1];
+ out[2 + outpos] = ((in[0 + inpos] >>> 28) | ((in[1 + inpos] & 1023) << (14 - 10)))
+ + out[2 + outpos - 1];
+ out[3 + outpos] = (((in[1 + inpos] >>> 10) & 16383))
+ + out[3 + outpos - 1];
+ out[4 + outpos] = ((in[1 + inpos] >>> 24) | ((in[2 + inpos] & 63) << (14 - 6)))
+ + out[4 + outpos - 1];
+ out[5 + outpos] = (((in[2 + inpos] >>> 6) & 16383))
+ + out[5 + outpos - 1];
+ out[6 + outpos] = ((in[2 + inpos] >>> 20) | ((in[3 + inpos] & 3) << (14 - 2)))
+ + out[6 + outpos - 1];
+ out[7 + outpos] = (((in[3 + inpos] >>> 2) & 16383))
+ + out[7 + outpos - 1];
+ out[8 + outpos] = (((in[3 + inpos] >>> 16) & 16383))
+ + out[8 + outpos - 1];
+ out[9 + outpos] = ((in[3 + inpos] >>> 30) | ((in[4 + inpos] & 4095) << (14 - 12)))
+ + out[9 + outpos - 1];
+ out[10 + outpos] = (((in[4 + inpos] >>> 12) & 16383))
+ + out[10 + outpos - 1];
+ out[11 + outpos] = ((in[4 + inpos] >>> 26) | ((in[5 + inpos] & 255) << (14 - 8)))
+ + out[11 + outpos - 1];
+ out[12 + outpos] = (((in[5 + inpos] >>> 8) & 16383))
+ + out[12 + outpos - 1];
+ out[13 + outpos] = ((in[5 + inpos] >>> 22) | ((in[6 + inpos] & 15) << (14 - 4)))
+ + out[13 + outpos - 1];
+ out[14 + outpos] = (((in[6 + inpos] >>> 4) & 16383))
+ + out[14 + outpos - 1];
+ out[15 + outpos] = ((in[6 + inpos] >>> 18))
+ + out[15 + outpos - 1];
+ out[16 + outpos] = (((in[7 + inpos] >>> 0) & 16383))
+ + out[16 + outpos - 1];
+ out[17 + outpos] = (((in[7 + inpos] >>> 14) & 16383))
+ + out[17 + outpos - 1];
+ out[18 + outpos] = ((in[7 + inpos] >>> 28) | ((in[8 + inpos] & 1023) << (14 - 10)))
+ + out[18 + outpos - 1];
+ out[19 + outpos] = (((in[8 + inpos] >>> 10) & 16383))
+ + out[19 + outpos - 1];
+ out[20 + outpos] = ((in[8 + inpos] >>> 24) | ((in[9 + inpos] & 63) << (14 - 6)))
+ + out[20 + outpos - 1];
+ out[21 + outpos] = (((in[9 + inpos] >>> 6) & 16383))
+ + out[21 + outpos - 1];
+ out[22 + outpos] = ((in[9 + inpos] >>> 20) | ((in[10 + inpos] & 3) << (14 - 2)))
+ + out[22 + outpos - 1];
+ out[23 + outpos] = (((in[10 + inpos] >>> 2) & 16383))
+ + out[23 + outpos - 1];
+ out[24 + outpos] = (((in[10 + inpos] >>> 16) & 16383))
+ + out[24 + outpos - 1];
+ out[25 + outpos] = ((in[10 + inpos] >>> 30) | ((in[11 + inpos] & 4095) << (14 - 12)))
+ + out[25 + outpos - 1];
+ out[26 + outpos] = (((in[11 + inpos] >>> 12) & 16383))
+ + out[26 + outpos - 1];
+ out[27 + outpos] = ((in[11 + inpos] >>> 26) | ((in[12 + inpos] & 255) << (14 - 8)))
+ + out[27 + outpos - 1];
+ out[28 + outpos] = (((in[12 + inpos] >>> 8) & 16383))
+ + out[28 + outpos - 1];
+ out[29 + outpos] = ((in[12 + inpos] >>> 22) | ((in[13 + inpos] & 15) << (14 - 4)))
+ + out[29 + outpos - 1];
+ out[30 + outpos] = (((in[13 + inpos] >>> 4) & 16383))
+ + out[30 + outpos - 1];
+ out[31 + outpos] = ((in[13 + inpos] >>> 18))
+ + out[31 + outpos - 1];
+ }
+
+ protected static void integratedunpack15(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (((in[0 + inpos] >>> 0) & 32767))
+ + initoffset;
+ out[1 + outpos] = (((in[0 + inpos] >>> 15) & 32767))
+ + out[1 + outpos - 1];
+ out[2 + outpos] = ((in[0 + inpos] >>> 30) | ((in[1 + inpos] & 8191) << (15 - 13)))
+ + out[2 + outpos - 1];
+ out[3 + outpos] = (((in[1 + inpos] >>> 13) & 32767))
+ + out[3 + outpos - 1];
+ out[4 + outpos] = ((in[1 + inpos] >>> 28) | ((in[2 + inpos] & 2047) << (15 - 11)))
+ + out[4 + outpos - 1];
+ out[5 + outpos] = (((in[2 + inpos] >>> 11) & 32767))
+ + out[5 + outpos - 1];
+ out[6 + outpos] = ((in[2 + inpos] >>> 26) | ((in[3 + inpos] & 511) << (15 - 9)))
+ + out[6 + outpos - 1];
+ out[7 + outpos] = (((in[3 + inpos] >>> 9) & 32767))
+ + out[7 + outpos - 1];
+ out[8 + outpos] = ((in[3 + inpos] >>> 24) | ((in[4 + inpos] & 127) << (15 - 7)))
+ + out[8 + outpos - 1];
+ out[9 + outpos] = (((in[4 + inpos] >>> 7) & 32767))
+ + out[9 + outpos - 1];
+ out[10 + outpos] = ((in[4 + inpos] >>> 22) | ((in[5 + inpos] & 31) << (15 - 5)))
+ + out[10 + outpos - 1];
+ out[11 + outpos] = (((in[5 + inpos] >>> 5) & 32767))
+ + out[11 + outpos - 1];
+ out[12 + outpos] = ((in[5 + inpos] >>> 20) | ((in[6 + inpos] & 7) << (15 - 3)))
+ + out[12 + outpos - 1];
+ out[13 + outpos] = (((in[6 + inpos] >>> 3) & 32767))
+ + out[13 + outpos - 1];
+ out[14 + outpos] = ((in[6 + inpos] >>> 18) | ((in[7 + inpos] & 1) << (15 - 1)))
+ + out[14 + outpos - 1];
+ out[15 + outpos] = (((in[7 + inpos] >>> 1) & 32767))
+ + out[15 + outpos - 1];
+ out[16 + outpos] = (((in[7 + inpos] >>> 16) & 32767))
+ + out[16 + outpos - 1];
+ out[17 + outpos] = ((in[7 + inpos] >>> 31) | ((in[8 + inpos] & 16383) << (15 - 14)))
+ + out[17 + outpos - 1];
+ out[18 + outpos] = (((in[8 + inpos] >>> 14) & 32767))
+ + out[18 + outpos - 1];
+ out[19 + outpos] = ((in[8 + inpos] >>> 29) | ((in[9 + inpos] & 4095) << (15 - 12)))
+ + out[19 + outpos - 1];
+ out[20 + outpos] = (((in[9 + inpos] >>> 12) & 32767))
+ + out[20 + outpos - 1];
+ out[21 + outpos] = ((in[9 + inpos] >>> 27) | ((in[10 + inpos] & 1023) << (15 - 10)))
+ + out[21 + outpos - 1];
+ out[22 + outpos] = (((in[10 + inpos] >>> 10) & 32767))
+ + out[22 + outpos - 1];
+ out[23 + outpos] = ((in[10 + inpos] >>> 25) | ((in[11 + inpos] & 255) << (15 - 8)))
+ + out[23 + outpos - 1];
+ out[24 + outpos] = (((in[11 + inpos] >>> 8) & 32767))
+ + out[24 + outpos - 1];
+ out[25 + outpos] = ((in[11 + inpos] >>> 23) | ((in[12 + inpos] & 63) << (15 - 6)))
+ + out[25 + outpos - 1];
+ out[26 + outpos] = (((in[12 + inpos] >>> 6) & 32767))
+ + out[26 + outpos - 1];
+ out[27 + outpos] = ((in[12 + inpos] >>> 21) | ((in[13 + inpos] & 15) << (15 - 4)))
+ + out[27 + outpos - 1];
+ out[28 + outpos] = (((in[13 + inpos] >>> 4) & 32767))
+ + out[28 + outpos - 1];
+ out[29 + outpos] = ((in[13 + inpos] >>> 19) | ((in[14 + inpos] & 3) << (15 - 2)))
+ + out[29 + outpos - 1];
+ out[30 + outpos] = (((in[14 + inpos] >>> 2) & 32767))
+ + out[30 + outpos - 1];
+ out[31 + outpos] = ((in[14 + inpos] >>> 17))
+ + out[31 + outpos - 1];
+ }
+
+ protected static void integratedunpack16(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (((in[0 + inpos] >>> 0) & 65535))
+ + initoffset;
+ out[1 + outpos] = ((in[0 + inpos] >>> 16))
+ + out[1 + outpos - 1];
+ out[2 + outpos] = (((in[1 + inpos] >>> 0) & 65535))
+ + out[2 + outpos - 1];
+ out[3 + outpos] = ((in[1 + inpos] >>> 16))
+ + out[3 + outpos - 1];
+ out[4 + outpos] = (((in[2 + inpos] >>> 0) & 65535))
+ + out[4 + outpos - 1];
+ out[5 + outpos] = ((in[2 + inpos] >>> 16))
+ + out[5 + outpos - 1];
+ out[6 + outpos] = (((in[3 + inpos] >>> 0) & 65535))
+ + out[6 + outpos - 1];
+ out[7 + outpos] = ((in[3 + inpos] >>> 16))
+ + out[7 + outpos - 1];
+ out[8 + outpos] = (((in[4 + inpos] >>> 0) & 65535))
+ + out[8 + outpos - 1];
+ out[9 + outpos] = ((in[4 + inpos] >>> 16))
+ + out[9 + outpos - 1];
+ out[10 + outpos] = (((in[5 + inpos] >>> 0) & 65535))
+ + out[10 + outpos - 1];
+ out[11 + outpos] = ((in[5 + inpos] >>> 16))
+ + out[11 + outpos - 1];
+ out[12 + outpos] = (((in[6 + inpos] >>> 0) & 65535))
+ + out[12 + outpos - 1];
+ out[13 + outpos] = ((in[6 + inpos] >>> 16))
+ + out[13 + outpos - 1];
+ out[14 + outpos] = (((in[7 + inpos] >>> 0) & 65535))
+ + out[14 + outpos - 1];
+ out[15 + outpos] = ((in[7 + inpos] >>> 16))
+ + out[15 + outpos - 1];
+ out[16 + outpos] = (((in[8 + inpos] >>> 0) & 65535))
+ + out[16 + outpos - 1];
+ out[17 + outpos] = ((in[8 + inpos] >>> 16))
+ + out[17 + outpos - 1];
+ out[18 + outpos] = (((in[9 + inpos] >>> 0) & 65535))
+ + out[18 + outpos - 1];
+ out[19 + outpos] = ((in[9 + inpos] >>> 16))
+ + out[19 + outpos - 1];
+ out[20 + outpos] = (((in[10 + inpos] >>> 0) & 65535))
+ + out[20 + outpos - 1];
+ out[21 + outpos] = ((in[10 + inpos] >>> 16))
+ + out[21 + outpos - 1];
+ out[22 + outpos] = (((in[11 + inpos] >>> 0) & 65535))
+ + out[22 + outpos - 1];
+ out[23 + outpos] = ((in[11 + inpos] >>> 16))
+ + out[23 + outpos - 1];
+ out[24 + outpos] = (((in[12 + inpos] >>> 0) & 65535))
+ + out[24 + outpos - 1];
+ out[25 + outpos] = ((in[12 + inpos] >>> 16))
+ + out[25 + outpos - 1];
+ out[26 + outpos] = (((in[13 + inpos] >>> 0) & 65535))
+ + out[26 + outpos - 1];
+ out[27 + outpos] = ((in[13 + inpos] >>> 16))
+ + out[27 + outpos - 1];
+ out[28 + outpos] = (((in[14 + inpos] >>> 0) & 65535))
+ + out[28 + outpos - 1];
+ out[29 + outpos] = ((in[14 + inpos] >>> 16))
+ + out[29 + outpos - 1];
+ out[30 + outpos] = (((in[15 + inpos] >>> 0) & 65535))
+ + out[30 + outpos - 1];
+ out[31 + outpos] = ((in[15 + inpos] >>> 16))
+ + out[31 + outpos - 1];
+ }
+
+ protected static void integratedunpack17(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (((in[0 + inpos] >>> 0) & 131071))
+ + initoffset;
+ out[1 + outpos] = ((in[0 + inpos] >>> 17) | ((in[1 + inpos] & 3) << (17 - 2)))
+ + out[1 + outpos - 1];
+ out[2 + outpos] = (((in[1 + inpos] >>> 2) & 131071))
+ + out[2 + outpos - 1];
+ out[3 + outpos] = ((in[1 + inpos] >>> 19) | ((in[2 + inpos] & 15) << (17 - 4)))
+ + out[3 + outpos - 1];
+ out[4 + outpos] = (((in[2 + inpos] >>> 4) & 131071))
+ + out[4 + outpos - 1];
+ out[5 + outpos] = ((in[2 + inpos] >>> 21) | ((in[3 + inpos] & 63) << (17 - 6)))
+ + out[5 + outpos - 1];
+ out[6 + outpos] = (((in[3 + inpos] >>> 6) & 131071))
+ + out[6 + outpos - 1];
+ out[7 + outpos] = ((in[3 + inpos] >>> 23) | ((in[4 + inpos] & 255) << (17 - 8)))
+ + out[7 + outpos - 1];
+ out[8 + outpos] = (((in[4 + inpos] >>> 8) & 131071))
+ + out[8 + outpos - 1];
+ out[9 + outpos] = ((in[4 + inpos] >>> 25) | ((in[5 + inpos] & 1023) << (17 - 10)))
+ + out[9 + outpos - 1];
+ out[10 + outpos] = (((in[5 + inpos] >>> 10) & 131071))
+ + out[10 + outpos - 1];
+ out[11 + outpos] = ((in[5 + inpos] >>> 27) | ((in[6 + inpos] & 4095) << (17 - 12)))
+ + out[11 + outpos - 1];
+ out[12 + outpos] = (((in[6 + inpos] >>> 12) & 131071))
+ + out[12 + outpos - 1];
+ out[13 + outpos] = ((in[6 + inpos] >>> 29) | ((in[7 + inpos] & 16383) << (17 - 14)))
+ + out[13 + outpos - 1];
+ out[14 + outpos] = (((in[7 + inpos] >>> 14) & 131071))
+ + out[14 + outpos - 1];
+ out[15 + outpos] = ((in[7 + inpos] >>> 31) | ((in[8 + inpos] & 65535) << (17 - 16)))
+ + out[15 + outpos - 1];
+ out[16 + outpos] = ((in[8 + inpos] >>> 16) | ((in[9 + inpos] & 1) << (17 - 1)))
+ + out[16 + outpos - 1];
+ out[17 + outpos] = (((in[9 + inpos] >>> 1) & 131071))
+ + out[17 + outpos - 1];
+ out[18 + outpos] = ((in[9 + inpos] >>> 18) | ((in[10 + inpos] & 7) << (17 - 3)))
+ + out[18 + outpos - 1];
+ out[19 + outpos] = (((in[10 + inpos] >>> 3) & 131071))
+ + out[19 + outpos - 1];
+ out[20 + outpos] = ((in[10 + inpos] >>> 20) | ((in[11 + inpos] & 31) << (17 - 5)))
+ + out[20 + outpos - 1];
+ out[21 + outpos] = (((in[11 + inpos] >>> 5) & 131071))
+ + out[21 + outpos - 1];
+ out[22 + outpos] = ((in[11 + inpos] >>> 22) | ((in[12 + inpos] & 127) << (17 - 7)))
+ + out[22 + outpos - 1];
+ out[23 + outpos] = (((in[12 + inpos] >>> 7) & 131071))
+ + out[23 + outpos - 1];
+ out[24 + outpos] = ((in[12 + inpos] >>> 24) | ((in[13 + inpos] & 511) << (17 - 9)))
+ + out[24 + outpos - 1];
+ out[25 + outpos] = (((in[13 + inpos] >>> 9) & 131071))
+ + out[25 + outpos - 1];
+ out[26 + outpos] = ((in[13 + inpos] >>> 26) | ((in[14 + inpos] & 2047) << (17 - 11)))
+ + out[26 + outpos - 1];
+ out[27 + outpos] = (((in[14 + inpos] >>> 11) & 131071))
+ + out[27 + outpos - 1];
+ out[28 + outpos] = ((in[14 + inpos] >>> 28) | ((in[15 + inpos] & 8191) << (17 - 13)))
+ + out[28 + outpos - 1];
+ out[29 + outpos] = (((in[15 + inpos] >>> 13) & 131071))
+ + out[29 + outpos - 1];
+ out[30 + outpos] = ((in[15 + inpos] >>> 30) | ((in[16 + inpos] & 32767) << (17 - 15)))
+ + out[30 + outpos - 1];
+ out[31 + outpos] = ((in[16 + inpos] >>> 15))
+ + out[31 + outpos - 1];
+ }
+
+ protected static void integratedunpack18(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (((in[0 + inpos] >>> 0) & 262143))
+ + initoffset;
+ out[1 + outpos] = ((in[0 + inpos] >>> 18) | ((in[1 + inpos] & 15) << (18 - 4)))
+ + out[1 + outpos - 1];
+ out[2 + outpos] = (((in[1 + inpos] >>> 4) & 262143))
+ + out[2 + outpos - 1];
+ out[3 + outpos] = ((in[1 + inpos] >>> 22) | ((in[2 + inpos] & 255) << (18 - 8)))
+ + out[3 + outpos - 1];
+ out[4 + outpos] = (((in[2 + inpos] >>> 8) & 262143))
+ + out[4 + outpos - 1];
+ out[5 + outpos] = ((in[2 + inpos] >>> 26) | ((in[3 + inpos] & 4095) << (18 - 12)))
+ + out[5 + outpos - 1];
+ out[6 + outpos] = (((in[3 + inpos] >>> 12) & 262143))
+ + out[6 + outpos - 1];
+ out[7 + outpos] = ((in[3 + inpos] >>> 30) | ((in[4 + inpos] & 65535) << (18 - 16)))
+ + out[7 + outpos - 1];
+ out[8 + outpos] = ((in[4 + inpos] >>> 16) | ((in[5 + inpos] & 3) << (18 - 2)))
+ + out[8 + outpos - 1];
+ out[9 + outpos] = (((in[5 + inpos] >>> 2) & 262143))
+ + out[9 + outpos - 1];
+ out[10 + outpos] = ((in[5 + inpos] >>> 20) | ((in[6 + inpos] & 63) << (18 - 6)))
+ + out[10 + outpos - 1];
+ out[11 + outpos] = (((in[6 + inpos] >>> 6) & 262143))
+ + out[11 + outpos - 1];
+ out[12 + outpos] = ((in[6 + inpos] >>> 24) | ((in[7 + inpos] & 1023) << (18 - 10)))
+ + out[12 + outpos - 1];
+ out[13 + outpos] = (((in[7 + inpos] >>> 10) & 262143))
+ + out[13 + outpos - 1];
+ out[14 + outpos] = ((in[7 + inpos] >>> 28) | ((in[8 + inpos] & 16383) << (18 - 14)))
+ + out[14 + outpos - 1];
+ out[15 + outpos] = ((in[8 + inpos] >>> 14))
+ + out[15 + outpos - 1];
+ out[16 + outpos] = (((in[9 + inpos] >>> 0) & 262143))
+ + out[16 + outpos - 1];
+ out[17 + outpos] = ((in[9 + inpos] >>> 18) | ((in[10 + inpos] & 15) << (18 - 4)))
+ + out[17 + outpos - 1];
+ out[18 + outpos] = (((in[10 + inpos] >>> 4) & 262143))
+ + out[18 + outpos - 1];
+ out[19 + outpos] = ((in[10 + inpos] >>> 22) | ((in[11 + inpos] & 255) << (18 - 8)))
+ + out[19 + outpos - 1];
+ out[20 + outpos] = (((in[11 + inpos] >>> 8) & 262143))
+ + out[20 + outpos - 1];
+ out[21 + outpos] = ((in[11 + inpos] >>> 26) | ((in[12 + inpos] & 4095) << (18 - 12)))
+ + out[21 + outpos - 1];
+ out[22 + outpos] = (((in[12 + inpos] >>> 12) & 262143))
+ + out[22 + outpos - 1];
+ out[23 + outpos] = ((in[12 + inpos] >>> 30) | ((in[13 + inpos] & 65535) << (18 - 16)))
+ + out[23 + outpos - 1];
+ out[24 + outpos] = ((in[13 + inpos] >>> 16) | ((in[14 + inpos] & 3) << (18 - 2)))
+ + out[24 + outpos - 1];
+ out[25 + outpos] = (((in[14 + inpos] >>> 2) & 262143))
+ + out[25 + outpos - 1];
+ out[26 + outpos] = ((in[14 + inpos] >>> 20) | ((in[15 + inpos] & 63) << (18 - 6)))
+ + out[26 + outpos - 1];
+ out[27 + outpos] = (((in[15 + inpos] >>> 6) & 262143))
+ + out[27 + outpos - 1];
+ out[28 + outpos] = ((in[15 + inpos] >>> 24) | ((in[16 + inpos] & 1023) << (18 - 10)))
+ + out[28 + outpos - 1];
+ out[29 + outpos] = (((in[16 + inpos] >>> 10) & 262143))
+ + out[29 + outpos - 1];
+ out[30 + outpos] = ((in[16 + inpos] >>> 28) | ((in[17 + inpos] & 16383) << (18 - 14)))
+ + out[30 + outpos - 1];
+ out[31 + outpos] = ((in[17 + inpos] >>> 14))
+ + out[31 + outpos - 1];
+ }
+
+ protected static void integratedunpack19(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (((in[0 + inpos] >>> 0) & 524287))
+ + initoffset;
+ out[1 + outpos] = ((in[0 + inpos] >>> 19) | ((in[1 + inpos] & 63) << (19 - 6)))
+ + out[1 + outpos - 1];
+ out[2 + outpos] = (((in[1 + inpos] >>> 6) & 524287))
+ + out[2 + outpos - 1];
+ out[3 + outpos] = ((in[1 + inpos] >>> 25) | ((in[2 + inpos] & 4095) << (19 - 12)))
+ + out[3 + outpos - 1];
+ out[4 + outpos] = (((in[2 + inpos] >>> 12) & 524287))
+ + out[4 + outpos - 1];
+ out[5 + outpos] = ((in[2 + inpos] >>> 31) | ((in[3 + inpos] & 262143) << (19 - 18)))
+ + out[5 + outpos - 1];
+ out[6 + outpos] = ((in[3 + inpos] >>> 18) | ((in[4 + inpos] & 31) << (19 - 5)))
+ + out[6 + outpos - 1];
+ out[7 + outpos] = (((in[4 + inpos] >>> 5) & 524287))
+ + out[7 + outpos - 1];
+ out[8 + outpos] = ((in[4 + inpos] >>> 24) | ((in[5 + inpos] & 2047) << (19 - 11)))
+ + out[8 + outpos - 1];
+ out[9 + outpos] = (((in[5 + inpos] >>> 11) & 524287))
+ + out[9 + outpos - 1];
+ out[10 + outpos] = ((in[5 + inpos] >>> 30) | ((in[6 + inpos] & 131071) << (19 - 17)))
+ + out[10 + outpos - 1];
+ out[11 + outpos] = ((in[6 + inpos] >>> 17) | ((in[7 + inpos] & 15) << (19 - 4)))
+ + out[11 + outpos - 1];
+ out[12 + outpos] = (((in[7 + inpos] >>> 4) & 524287))
+ + out[12 + outpos - 1];
+ out[13 + outpos] = ((in[7 + inpos] >>> 23) | ((in[8 + inpos] & 1023) << (19 - 10)))
+ + out[13 + outpos - 1];
+ out[14 + outpos] = (((in[8 + inpos] >>> 10) & 524287))
+ + out[14 + outpos - 1];
+ out[15 + outpos] = ((in[8 + inpos] >>> 29) | ((in[9 + inpos] & 65535) << (19 - 16)))
+ + out[15 + outpos - 1];
+ out[16 + outpos] = ((in[9 + inpos] >>> 16) | ((in[10 + inpos] & 7) << (19 - 3)))
+ + out[16 + outpos - 1];
+ out[17 + outpos] = (((in[10 + inpos] >>> 3) & 524287))
+ + out[17 + outpos - 1];
+ out[18 + outpos] = ((in[10 + inpos] >>> 22) | ((in[11 + inpos] & 511) << (19 - 9)))
+ + out[18 + outpos - 1];
+ out[19 + outpos] = (((in[11 + inpos] >>> 9) & 524287))
+ + out[19 + outpos - 1];
+ out[20 + outpos] = ((in[11 + inpos] >>> 28) | ((in[12 + inpos] & 32767) << (19 - 15)))
+ + out[20 + outpos - 1];
+ out[21 + outpos] = ((in[12 + inpos] >>> 15) | ((in[13 + inpos] & 3) << (19 - 2)))
+ + out[21 + outpos - 1];
+ out[22 + outpos] = (((in[13 + inpos] >>> 2) & 524287))
+ + out[22 + outpos - 1];
+ out[23 + outpos] = ((in[13 + inpos] >>> 21) | ((in[14 + inpos] & 255) << (19 - 8)))
+ + out[23 + outpos - 1];
+ out[24 + outpos] = (((in[14 + inpos] >>> 8) & 524287))
+ + out[24 + outpos - 1];
+ out[25 + outpos] = ((in[14 + inpos] >>> 27) | ((in[15 + inpos] & 16383) << (19 - 14)))
+ + out[25 + outpos - 1];
+ out[26 + outpos] = ((in[15 + inpos] >>> 14) | ((in[16 + inpos] & 1) << (19 - 1)))
+ + out[26 + outpos - 1];
+ out[27 + outpos] = (((in[16 + inpos] >>> 1) & 524287))
+ + out[27 + outpos - 1];
+ out[28 + outpos] = ((in[16 + inpos] >>> 20) | ((in[17 + inpos] & 127) << (19 - 7)))
+ + out[28 + outpos - 1];
+ out[29 + outpos] = (((in[17 + inpos] >>> 7) & 524287))
+ + out[29 + outpos - 1];
+ out[30 + outpos] = ((in[17 + inpos] >>> 26) | ((in[18 + inpos] & 8191) << (19 - 13)))
+ + out[30 + outpos - 1];
+ out[31 + outpos] = ((in[18 + inpos] >>> 13))
+ + out[31 + outpos - 1];
+ }
+
+ protected static void integratedunpack2(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (((in[0 + inpos] >>> 0) & 3)) + initoffset;
+ out[1 + outpos] = (((in[0 + inpos] >>> 2) & 3))
+ + out[1 + outpos - 1];
+ out[2 + outpos] = (((in[0 + inpos] >>> 4) & 3))
+ + out[2 + outpos - 1];
+ out[3 + outpos] = (((in[0 + inpos] >>> 6) & 3))
+ + out[3 + outpos - 1];
+ out[4 + outpos] = (((in[0 + inpos] >>> 8) & 3))
+ + out[4 + outpos - 1];
+ out[5 + outpos] = (((in[0 + inpos] >>> 10) & 3))
+ + out[5 + outpos - 1];
+ out[6 + outpos] = (((in[0 + inpos] >>> 12) & 3))
+ + out[6 + outpos - 1];
+ out[7 + outpos] = (((in[0 + inpos] >>> 14) & 3))
+ + out[7 + outpos - 1];
+ out[8 + outpos] = (((in[0 + inpos] >>> 16) & 3))
+ + out[8 + outpos - 1];
+ out[9 + outpos] = (((in[0 + inpos] >>> 18) & 3))
+ + out[9 + outpos - 1];
+ out[10 + outpos] = (((in[0 + inpos] >>> 20) & 3))
+ + out[10 + outpos - 1];
+ out[11 + outpos] = (((in[0 + inpos] >>> 22) & 3))
+ + out[11 + outpos - 1];
+ out[12 + outpos] = (((in[0 + inpos] >>> 24) & 3))
+ + out[12 + outpos - 1];
+ out[13 + outpos] = (((in[0 + inpos] >>> 26) & 3))
+ + out[13 + outpos - 1];
+ out[14 + outpos] = (((in[0 + inpos] >>> 28) & 3))
+ + out[14 + outpos - 1];
+ out[15 + outpos] = ((in[0 + inpos] >>> 30))
+ + out[15 + outpos - 1];
+ out[16 + outpos] = (((in[1 + inpos] >>> 0) & 3))
+ + out[16 + outpos - 1];
+ out[17 + outpos] = (((in[1 + inpos] >>> 2) & 3))
+ + out[17 + outpos - 1];
+ out[18 + outpos] = (((in[1 + inpos] >>> 4) & 3))
+ + out[18 + outpos - 1];
+ out[19 + outpos] = (((in[1 + inpos] >>> 6) & 3))
+ + out[19 + outpos - 1];
+ out[20 + outpos] = (((in[1 + inpos] >>> 8) & 3))
+ + out[20 + outpos - 1];
+ out[21 + outpos] = (((in[1 + inpos] >>> 10) & 3))
+ + out[21 + outpos - 1];
+ out[22 + outpos] = (((in[1 + inpos] >>> 12) & 3))
+ + out[22 + outpos - 1];
+ out[23 + outpos] = (((in[1 + inpos] >>> 14) & 3))
+ + out[23 + outpos - 1];
+ out[24 + outpos] = (((in[1 + inpos] >>> 16) & 3))
+ + out[24 + outpos - 1];
+ out[25 + outpos] = (((in[1 + inpos] >>> 18) & 3))
+ + out[25 + outpos - 1];
+ out[26 + outpos] = (((in[1 + inpos] >>> 20) & 3))
+ + out[26 + outpos - 1];
+ out[27 + outpos] = (((in[1 + inpos] >>> 22) & 3))
+ + out[27 + outpos - 1];
+ out[28 + outpos] = (((in[1 + inpos] >>> 24) & 3))
+ + out[28 + outpos - 1];
+ out[29 + outpos] = (((in[1 + inpos] >>> 26) & 3))
+ + out[29 + outpos - 1];
+ out[30 + outpos] = (((in[1 + inpos] >>> 28) & 3))
+ + out[30 + outpos - 1];
+ out[31 + outpos] = ((in[1 + inpos] >>> 30))
+ + out[31 + outpos - 1];
+ }
+
+ protected static void integratedunpack20(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (((in[0 + inpos] >>> 0) & 1048575))
+ + initoffset;
+ out[1 + outpos] = ((in[0 + inpos] >>> 20) | ((in[1 + inpos] & 255) << (20 - 8)))
+ + out[1 + outpos - 1];
+ out[2 + outpos] = (((in[1 + inpos] >>> 8) & 1048575))
+ + out[2 + outpos - 1];
+ out[3 + outpos] = ((in[1 + inpos] >>> 28) | ((in[2 + inpos] & 65535) << (20 - 16)))
+ + out[3 + outpos - 1];
+ out[4 + outpos] = ((in[2 + inpos] >>> 16) | ((in[3 + inpos] & 15) << (20 - 4)))
+ + out[4 + outpos - 1];
+ out[5 + outpos] = (((in[3 + inpos] >>> 4) & 1048575))
+ + out[5 + outpos - 1];
+ out[6 + outpos] = ((in[3 + inpos] >>> 24) | ((in[4 + inpos] & 4095) << (20 - 12)))
+ + out[6 + outpos - 1];
+ out[7 + outpos] = ((in[4 + inpos] >>> 12))
+ + out[7 + outpos - 1];
+ out[8 + outpos] = (((in[5 + inpos] >>> 0) & 1048575))
+ + out[8 + outpos - 1];
+ out[9 + outpos] = ((in[5 + inpos] >>> 20) | ((in[6 + inpos] & 255) << (20 - 8)))
+ + out[9 + outpos - 1];
+ out[10 + outpos] = (((in[6 + inpos] >>> 8) & 1048575))
+ + out[10 + outpos - 1];
+ out[11 + outpos] = ((in[6 + inpos] >>> 28) | ((in[7 + inpos] & 65535) << (20 - 16)))
+ + out[11 + outpos - 1];
+ out[12 + outpos] = ((in[7 + inpos] >>> 16) | ((in[8 + inpos] & 15) << (20 - 4)))
+ + out[12 + outpos - 1];
+ out[13 + outpos] = (((in[8 + inpos] >>> 4) & 1048575))
+ + out[13 + outpos - 1];
+ out[14 + outpos] = ((in[8 + inpos] >>> 24) | ((in[9 + inpos] & 4095) << (20 - 12)))
+ + out[14 + outpos - 1];
+ out[15 + outpos] = ((in[9 + inpos] >>> 12))
+ + out[15 + outpos - 1];
+ out[16 + outpos] = (((in[10 + inpos] >>> 0) & 1048575))
+ + out[16 + outpos - 1];
+ out[17 + outpos] = ((in[10 + inpos] >>> 20) | ((in[11 + inpos] & 255) << (20 - 8)))
+ + out[17 + outpos - 1];
+ out[18 + outpos] = (((in[11 + inpos] >>> 8) & 1048575))
+ + out[18 + outpos - 1];
+ out[19 + outpos] = ((in[11 + inpos] >>> 28) | ((in[12 + inpos] & 65535) << (20 - 16)))
+ + out[19 + outpos - 1];
+ out[20 + outpos] = ((in[12 + inpos] >>> 16) | ((in[13 + inpos] & 15) << (20 - 4)))
+ + out[20 + outpos - 1];
+ out[21 + outpos] = (((in[13 + inpos] >>> 4) & 1048575))
+ + out[21 + outpos - 1];
+ out[22 + outpos] = ((in[13 + inpos] >>> 24) | ((in[14 + inpos] & 4095) << (20 - 12)))
+ + out[22 + outpos - 1];
+ out[23 + outpos] = ((in[14 + inpos] >>> 12))
+ + out[23 + outpos - 1];
+ out[24 + outpos] = (((in[15 + inpos] >>> 0) & 1048575))
+ + out[24 + outpos - 1];
+ out[25 + outpos] = ((in[15 + inpos] >>> 20) | ((in[16 + inpos] & 255) << (20 - 8)))
+ + out[25 + outpos - 1];
+ out[26 + outpos] = (((in[16 + inpos] >>> 8) & 1048575))
+ + out[26 + outpos - 1];
+ out[27 + outpos] = ((in[16 + inpos] >>> 28) | ((in[17 + inpos] & 65535) << (20 - 16)))
+ + out[27 + outpos - 1];
+ out[28 + outpos] = ((in[17 + inpos] >>> 16) | ((in[18 + inpos] & 15) << (20 - 4)))
+ + out[28 + outpos - 1];
+ out[29 + outpos] = (((in[18 + inpos] >>> 4) & 1048575))
+ + out[29 + outpos - 1];
+ out[30 + outpos] = ((in[18 + inpos] >>> 24) | ((in[19 + inpos] & 4095) << (20 - 12)))
+ + out[30 + outpos - 1];
+ out[31 + outpos] = ((in[19 + inpos] >>> 12))
+ + out[31 + outpos - 1];
+ }
+
+ protected static void integratedunpack21(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (((in[0 + inpos] >>> 0) & 2097151))
+ + initoffset;
+ out[1 + outpos] = ((in[0 + inpos] >>> 21) | ((in[1 + inpos] & 1023) << (21 - 10)))
+ + out[1 + outpos - 1];
+ out[2 + outpos] = (((in[1 + inpos] >>> 10) & 2097151))
+ + out[2 + outpos - 1];
+ out[3 + outpos] = ((in[1 + inpos] >>> 31) | ((in[2 + inpos] & 1048575) << (21 - 20)))
+ + out[3 + outpos - 1];
+ out[4 + outpos] = ((in[2 + inpos] >>> 20) | ((in[3 + inpos] & 511) << (21 - 9)))
+ + out[4 + outpos - 1];
+ out[5 + outpos] = (((in[3 + inpos] >>> 9) & 2097151))
+ + out[5 + outpos - 1];
+ out[6 + outpos] = ((in[3 + inpos] >>> 30) | ((in[4 + inpos] & 524287) << (21 - 19)))
+ + out[6 + outpos - 1];
+ out[7 + outpos] = ((in[4 + inpos] >>> 19) | ((in[5 + inpos] & 255) << (21 - 8)))
+ + out[7 + outpos - 1];
+ out[8 + outpos] = (((in[5 + inpos] >>> 8) & 2097151))
+ + out[8 + outpos - 1];
+ out[9 + outpos] = ((in[5 + inpos] >>> 29) | ((in[6 + inpos] & 262143) << (21 - 18)))
+ + out[9 + outpos - 1];
+ out[10 + outpos] = ((in[6 + inpos] >>> 18) | ((in[7 + inpos] & 127) << (21 - 7)))
+ + out[10 + outpos - 1];
+ out[11 + outpos] = (((in[7 + inpos] >>> 7) & 2097151))
+ + out[11 + outpos - 1];
+ out[12 + outpos] = ((in[7 + inpos] >>> 28) | ((in[8 + inpos] & 131071) << (21 - 17)))
+ + out[12 + outpos - 1];
+ out[13 + outpos] = ((in[8 + inpos] >>> 17) | ((in[9 + inpos] & 63) << (21 - 6)))
+ + out[13 + outpos - 1];
+ out[14 + outpos] = (((in[9 + inpos] >>> 6) & 2097151))
+ + out[14 + outpos - 1];
+ out[15 + outpos] = ((in[9 + inpos] >>> 27) | ((in[10 + inpos] & 65535) << (21 - 16)))
+ + out[15 + outpos - 1];
+ out[16 + outpos] = ((in[10 + inpos] >>> 16) | ((in[11 + inpos] & 31) << (21 - 5)))
+ + out[16 + outpos - 1];
+ out[17 + outpos] = (((in[11 + inpos] >>> 5) & 2097151))
+ + out[17 + outpos - 1];
+ out[18 + outpos] = ((in[11 + inpos] >>> 26) | ((in[12 + inpos] & 32767) << (21 - 15)))
+ + out[18 + outpos - 1];
+ out[19 + outpos] = ((in[12 + inpos] >>> 15) | ((in[13 + inpos] & 15) << (21 - 4)))
+ + out[19 + outpos - 1];
+ out[20 + outpos] = (((in[13 + inpos] >>> 4) & 2097151))
+ + out[20 + outpos - 1];
+ out[21 + outpos] = ((in[13 + inpos] >>> 25) | ((in[14 + inpos] & 16383) << (21 - 14)))
+ + out[21 + outpos - 1];
+ out[22 + outpos] = ((in[14 + inpos] >>> 14) | ((in[15 + inpos] & 7) << (21 - 3)))
+ + out[22 + outpos - 1];
+ out[23 + outpos] = (((in[15 + inpos] >>> 3) & 2097151))
+ + out[23 + outpos - 1];
+ out[24 + outpos] = ((in[15 + inpos] >>> 24) | ((in[16 + inpos] & 8191) << (21 - 13)))
+ + out[24 + outpos - 1];
+ out[25 + outpos] = ((in[16 + inpos] >>> 13) | ((in[17 + inpos] & 3) << (21 - 2)))
+ + out[25 + outpos - 1];
+ out[26 + outpos] = (((in[17 + inpos] >>> 2) & 2097151))
+ + out[26 + outpos - 1];
+ out[27 + outpos] = ((in[17 + inpos] >>> 23) | ((in[18 + inpos] & 4095) << (21 - 12)))
+ + out[27 + outpos - 1];
+ out[28 + outpos] = ((in[18 + inpos] >>> 12) | ((in[19 + inpos] & 1) << (21 - 1)))
+ + out[28 + outpos - 1];
+ out[29 + outpos] = (((in[19 + inpos] >>> 1) & 2097151))
+ + out[29 + outpos - 1];
+ out[30 + outpos] = ((in[19 + inpos] >>> 22) | ((in[20 + inpos] & 2047) << (21 - 11)))
+ + out[30 + outpos - 1];
+ out[31 + outpos] = ((in[20 + inpos] >>> 11))
+ + out[31 + outpos - 1];
+ }
+
+ protected static void integratedunpack22(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (((in[0 + inpos] >>> 0) & 4194303))
+ + initoffset;
+ out[1 + outpos] = ((in[0 + inpos] >>> 22) | ((in[1 + inpos] & 4095) << (22 - 12)))
+ + out[1 + outpos - 1];
+ out[2 + outpos] = ((in[1 + inpos] >>> 12) | ((in[2 + inpos] & 3) << (22 - 2)))
+ + out[2 + outpos - 1];
+ out[3 + outpos] = (((in[2 + inpos] >>> 2) & 4194303))
+ + out[3 + outpos - 1];
+ out[4 + outpos] = ((in[2 + inpos] >>> 24) | ((in[3 + inpos] & 16383) << (22 - 14)))
+ + out[4 + outpos - 1];
+ out[5 + outpos] = ((in[3 + inpos] >>> 14) | ((in[4 + inpos] & 15) << (22 - 4)))
+ + out[5 + outpos - 1];
+ out[6 + outpos] = (((in[4 + inpos] >>> 4) & 4194303))
+ + out[6 + outpos - 1];
+ out[7 + outpos] = ((in[4 + inpos] >>> 26) | ((in[5 + inpos] & 65535) << (22 - 16)))
+ + out[7 + outpos - 1];
+ out[8 + outpos] = ((in[5 + inpos] >>> 16) | ((in[6 + inpos] & 63) << (22 - 6)))
+ + out[8 + outpos - 1];
+ out[9 + outpos] = (((in[6 + inpos] >>> 6) & 4194303))
+ + out[9 + outpos - 1];
+ out[10 + outpos] = ((in[6 + inpos] >>> 28) | ((in[7 + inpos] & 262143) << (22 - 18)))
+ + out[10 + outpos - 1];
+ out[11 + outpos] = ((in[7 + inpos] >>> 18) | ((in[8 + inpos] & 255) << (22 - 8)))
+ + out[11 + outpos - 1];
+ out[12 + outpos] = (((in[8 + inpos] >>> 8) & 4194303))
+ + out[12 + outpos - 1];
+ out[13 + outpos] = ((in[8 + inpos] >>> 30) | ((in[9 + inpos] & 1048575) << (22 - 20)))
+ + out[13 + outpos - 1];
+ out[14 + outpos] = ((in[9 + inpos] >>> 20) | ((in[10 + inpos] & 1023) << (22 - 10)))
+ + out[14 + outpos - 1];
+ out[15 + outpos] = ((in[10 + inpos] >>> 10))
+ + out[15 + outpos - 1];
+ out[16 + outpos] = (((in[11 + inpos] >>> 0) & 4194303))
+ + out[16 + outpos - 1];
+ out[17 + outpos] = ((in[11 + inpos] >>> 22) | ((in[12 + inpos] & 4095) << (22 - 12)))
+ + out[17 + outpos - 1];
+ out[18 + outpos] = ((in[12 + inpos] >>> 12) | ((in[13 + inpos] & 3) << (22 - 2)))
+ + out[18 + outpos - 1];
+ out[19 + outpos] = (((in[13 + inpos] >>> 2) & 4194303))
+ + out[19 + outpos - 1];
+ out[20 + outpos] = ((in[13 + inpos] >>> 24) | ((in[14 + inpos] & 16383) << (22 - 14)))
+ + out[20 + outpos - 1];
+ out[21 + outpos] = ((in[14 + inpos] >>> 14) | ((in[15 + inpos] & 15) << (22 - 4)))
+ + out[21 + outpos - 1];
+ out[22 + outpos] = (((in[15 + inpos] >>> 4) & 4194303))
+ + out[22 + outpos - 1];
+ out[23 + outpos] = ((in[15 + inpos] >>> 26) | ((in[16 + inpos] & 65535) << (22 - 16)))
+ + out[23 + outpos - 1];
+ out[24 + outpos] = ((in[16 + inpos] >>> 16) | ((in[17 + inpos] & 63) << (22 - 6)))
+ + out[24 + outpos - 1];
+ out[25 + outpos] = (((in[17 + inpos] >>> 6) & 4194303))
+ + out[25 + outpos - 1];
+ out[26 + outpos] = ((in[17 + inpos] >>> 28) | ((in[18 + inpos] & 262143) << (22 - 18)))
+ + out[26 + outpos - 1];
+ out[27 + outpos] = ((in[18 + inpos] >>> 18) | ((in[19 + inpos] & 255) << (22 - 8)))
+ + out[27 + outpos - 1];
+ out[28 + outpos] = (((in[19 + inpos] >>> 8) & 4194303))
+ + out[28 + outpos - 1];
+ out[29 + outpos] = ((in[19 + inpos] >>> 30) | ((in[20 + inpos] & 1048575) << (22 - 20)))
+ + out[29 + outpos - 1];
+ out[30 + outpos] = ((in[20 + inpos] >>> 20) | ((in[21 + inpos] & 1023) << (22 - 10)))
+ + out[30 + outpos - 1];
+ out[31 + outpos] = ((in[21 + inpos] >>> 10))
+ + out[31 + outpos - 1];
+ }
+
+ protected static void integratedunpack23(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (((in[0 + inpos] >>> 0) & 8388607))
+ + initoffset;
+ out[1 + outpos] = ((in[0 + inpos] >>> 23) | ((in[1 + inpos] & 16383) << (23 - 14)))
+ + out[1 + outpos - 1];
+ out[2 + outpos] = ((in[1 + inpos] >>> 14) | ((in[2 + inpos] & 31) << (23 - 5)))
+ + out[2 + outpos - 1];
+ out[3 + outpos] = (((in[2 + inpos] >>> 5) & 8388607))
+ + out[3 + outpos - 1];
+ out[4 + outpos] = ((in[2 + inpos] >>> 28) | ((in[3 + inpos] & 524287) << (23 - 19)))
+ + out[4 + outpos - 1];
+ out[5 + outpos] = ((in[3 + inpos] >>> 19) | ((in[4 + inpos] & 1023) << (23 - 10)))
+ + out[5 + outpos - 1];
+ out[6 + outpos] = ((in[4 + inpos] >>> 10) | ((in[5 + inpos] & 1) << (23 - 1)))
+ + out[6 + outpos - 1];
+ out[7 + outpos] = (((in[5 + inpos] >>> 1) & 8388607))
+ + out[7 + outpos - 1];
+ out[8 + outpos] = ((in[5 + inpos] >>> 24) | ((in[6 + inpos] & 32767) << (23 - 15)))
+ + out[8 + outpos - 1];
+ out[9 + outpos] = ((in[6 + inpos] >>> 15) | ((in[7 + inpos] & 63) << (23 - 6)))
+ + out[9 + outpos - 1];
+ out[10 + outpos] = (((in[7 + inpos] >>> 6) & 8388607))
+ + out[10 + outpos - 1];
+ out[11 + outpos] = ((in[7 + inpos] >>> 29) | ((in[8 + inpos] & 1048575) << (23 - 20)))
+ + out[11 + outpos - 1];
+ out[12 + outpos] = ((in[8 + inpos] >>> 20) | ((in[9 + inpos] & 2047) << (23 - 11)))
+ + out[12 + outpos - 1];
+ out[13 + outpos] = ((in[9 + inpos] >>> 11) | ((in[10 + inpos] & 3) << (23 - 2)))
+ + out[13 + outpos - 1];
+ out[14 + outpos] = (((in[10 + inpos] >>> 2) & 8388607))
+ + out[14 + outpos - 1];
+ out[15 + outpos] = ((in[10 + inpos] >>> 25) | ((in[11 + inpos] & 65535) << (23 - 16)))
+ + out[15 + outpos - 1];
+ out[16 + outpos] = ((in[11 + inpos] >>> 16) | ((in[12 + inpos] & 127) << (23 - 7)))
+ + out[16 + outpos - 1];
+ out[17 + outpos] = (((in[12 + inpos] >>> 7) & 8388607))
+ + out[17 + outpos - 1];
+ out[18 + outpos] = ((in[12 + inpos] >>> 30) | ((in[13 + inpos] & 2097151) << (23 - 21)))
+ + out[18 + outpos - 1];
+ out[19 + outpos] = ((in[13 + inpos] >>> 21) | ((in[14 + inpos] & 4095) << (23 - 12)))
+ + out[19 + outpos - 1];
+ out[20 + outpos] = ((in[14 + inpos] >>> 12) | ((in[15 + inpos] & 7) << (23 - 3)))
+ + out[20 + outpos - 1];
+ out[21 + outpos] = (((in[15 + inpos] >>> 3) & 8388607))
+ + out[21 + outpos - 1];
+ out[22 + outpos] = ((in[15 + inpos] >>> 26) | ((in[16 + inpos] & 131071) << (23 - 17)))
+ + out[22 + outpos - 1];
+ out[23 + outpos] = ((in[16 + inpos] >>> 17) | ((in[17 + inpos] & 255) << (23 - 8)))
+ + out[23 + outpos - 1];
+ out[24 + outpos] = (((in[17 + inpos] >>> 8) & 8388607))
+ + out[24 + outpos - 1];
+ out[25 + outpos] = ((in[17 + inpos] >>> 31) | ((in[18 + inpos] & 4194303) << (23 - 22)))
+ + out[25 + outpos - 1];
+ out[26 + outpos] = ((in[18 + inpos] >>> 22) | ((in[19 + inpos] & 8191) << (23 - 13)))
+ + out[26 + outpos - 1];
+ out[27 + outpos] = ((in[19 + inpos] >>> 13) | ((in[20 + inpos] & 15) << (23 - 4)))
+ + out[27 + outpos - 1];
+ out[28 + outpos] = (((in[20 + inpos] >>> 4) & 8388607))
+ + out[28 + outpos - 1];
+ out[29 + outpos] = ((in[20 + inpos] >>> 27) | ((in[21 + inpos] & 262143) << (23 - 18)))
+ + out[29 + outpos - 1];
+ out[30 + outpos] = ((in[21 + inpos] >>> 18) | ((in[22 + inpos] & 511) << (23 - 9)))
+ + out[30 + outpos - 1];
+ out[31 + outpos] = ((in[22 + inpos] >>> 9))
+ + out[31 + outpos - 1];
+ }
+
+ protected static void integratedunpack24(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (((in[0 + inpos] >>> 0) & 16777215))
+ + initoffset;
+ out[1 + outpos] = ((in[0 + inpos] >>> 24) | ((in[1 + inpos] & 65535) << (24 - 16)))
+ + out[1 + outpos - 1];
+ out[2 + outpos] = ((in[1 + inpos] >>> 16) | ((in[2 + inpos] & 255) << (24 - 8)))
+ + out[2 + outpos - 1];
+ out[3 + outpos] = ((in[2 + inpos] >>> 8)) + out[3 + outpos - 1];
+ out[4 + outpos] = (((in[3 + inpos] >>> 0) & 16777215))
+ + out[4 + outpos - 1];
+ out[5 + outpos] = ((in[3 + inpos] >>> 24) | ((in[4 + inpos] & 65535) << (24 - 16)))
+ + out[5 + outpos - 1];
+ out[6 + outpos] = ((in[4 + inpos] >>> 16) | ((in[5 + inpos] & 255) << (24 - 8)))
+ + out[6 + outpos - 1];
+ out[7 + outpos] = ((in[5 + inpos] >>> 8)) + out[7 + outpos - 1];
+ out[8 + outpos] = (((in[6 + inpos] >>> 0) & 16777215))
+ + out[8 + outpos - 1];
+ out[9 + outpos] = ((in[6 + inpos] >>> 24) | ((in[7 + inpos] & 65535) << (24 - 16)))
+ + out[9 + outpos - 1];
+ out[10 + outpos] = ((in[7 + inpos] >>> 16) | ((in[8 + inpos] & 255) << (24 - 8)))
+ + out[10 + outpos - 1];
+ out[11 + outpos] = ((in[8 + inpos] >>> 8))
+ + out[11 + outpos - 1];
+ out[12 + outpos] = (((in[9 + inpos] >>> 0) & 16777215))
+ + out[12 + outpos - 1];
+ out[13 + outpos] = ((in[9 + inpos] >>> 24) | ((in[10 + inpos] & 65535) << (24 - 16)))
+ + out[13 + outpos - 1];
+ out[14 + outpos] = ((in[10 + inpos] >>> 16) | ((in[11 + inpos] & 255) << (24 - 8)))
+ + out[14 + outpos - 1];
+ out[15 + outpos] = ((in[11 + inpos] >>> 8))
+ + out[15 + outpos - 1];
+ out[16 + outpos] = (((in[12 + inpos] >>> 0) & 16777215))
+ + out[16 + outpos - 1];
+ out[17 + outpos] = ((in[12 + inpos] >>> 24) | ((in[13 + inpos] & 65535) << (24 - 16)))
+ + out[17 + outpos - 1];
+ out[18 + outpos] = ((in[13 + inpos] >>> 16) | ((in[14 + inpos] & 255) << (24 - 8)))
+ + out[18 + outpos - 1];
+ out[19 + outpos] = ((in[14 + inpos] >>> 8))
+ + out[19 + outpos - 1];
+ out[20 + outpos] = (((in[15 + inpos] >>> 0) & 16777215))
+ + out[20 + outpos - 1];
+ out[21 + outpos] = ((in[15 + inpos] >>> 24) | ((in[16 + inpos] & 65535) << (24 - 16)))
+ + out[21 + outpos - 1];
+ out[22 + outpos] = ((in[16 + inpos] >>> 16) | ((in[17 + inpos] & 255) << (24 - 8)))
+ + out[22 + outpos - 1];
+ out[23 + outpos] = ((in[17 + inpos] >>> 8))
+ + out[23 + outpos - 1];
+ out[24 + outpos] = (((in[18 + inpos] >>> 0) & 16777215))
+ + out[24 + outpos - 1];
+ out[25 + outpos] = ((in[18 + inpos] >>> 24) | ((in[19 + inpos] & 65535) << (24 - 16)))
+ + out[25 + outpos - 1];
+ out[26 + outpos] = ((in[19 + inpos] >>> 16) | ((in[20 + inpos] & 255) << (24 - 8)))
+ + out[26 + outpos - 1];
+ out[27 + outpos] = ((in[20 + inpos] >>> 8))
+ + out[27 + outpos - 1];
+ out[28 + outpos] = (((in[21 + inpos] >>> 0) & 16777215))
+ + out[28 + outpos - 1];
+ out[29 + outpos] = ((in[21 + inpos] >>> 24) | ((in[22 + inpos] & 65535) << (24 - 16)))
+ + out[29 + outpos - 1];
+ out[30 + outpos] = ((in[22 + inpos] >>> 16) | ((in[23 + inpos] & 255) << (24 - 8)))
+ + out[30 + outpos - 1];
+ out[31 + outpos] = ((in[23 + inpos] >>> 8))
+ + out[31 + outpos - 1];
+ }
+
+ protected static void integratedunpack25(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (((in[0 + inpos] >>> 0) & 33554431))
+ + initoffset;
+ out[1 + outpos] = ((in[0 + inpos] >>> 25) | ((in[1 + inpos] & 262143) << (25 - 18)))
+ + out[1 + outpos - 1];
+ out[2 + outpos] = ((in[1 + inpos] >>> 18) | ((in[2 + inpos] & 2047) << (25 - 11)))
+ + out[2 + outpos - 1];
+ out[3 + outpos] = ((in[2 + inpos] >>> 11) | ((in[3 + inpos] & 15) << (25 - 4)))
+ + out[3 + outpos - 1];
+ out[4 + outpos] = (((in[3 + inpos] >>> 4) & 33554431))
+ + out[4 + outpos - 1];
+ out[5 + outpos] = ((in[3 + inpos] >>> 29) | ((in[4 + inpos] & 4194303) << (25 - 22)))
+ + out[5 + outpos - 1];
+ out[6 + outpos] = ((in[4 + inpos] >>> 22) | ((in[5 + inpos] & 32767) << (25 - 15)))
+ + out[6 + outpos - 1];
+ out[7 + outpos] = ((in[5 + inpos] >>> 15) | ((in[6 + inpos] & 255) << (25 - 8)))
+ + out[7 + outpos - 1];
+ out[8 + outpos] = ((in[6 + inpos] >>> 8) | ((in[7 + inpos] & 1) << (25 - 1)))
+ + out[8 + outpos - 1];
+ out[9 + outpos] = (((in[7 + inpos] >>> 1) & 33554431))
+ + out[9 + outpos - 1];
+ out[10 + outpos] = ((in[7 + inpos] >>> 26) | ((in[8 + inpos] & 524287) << (25 - 19)))
+ + out[10 + outpos - 1];
+ out[11 + outpos] = ((in[8 + inpos] >>> 19) | ((in[9 + inpos] & 4095) << (25 - 12)))
+ + out[11 + outpos - 1];
+ out[12 + outpos] = ((in[9 + inpos] >>> 12) | ((in[10 + inpos] & 31) << (25 - 5)))
+ + out[12 + outpos - 1];
+ out[13 + outpos] = (((in[10 + inpos] >>> 5) & 33554431))
+ + out[13 + outpos - 1];
+ out[14 + outpos] = ((in[10 + inpos] >>> 30) | ((in[11 + inpos] & 8388607) << (25 - 23)))
+ + out[14 + outpos - 1];
+ out[15 + outpos] = ((in[11 + inpos] >>> 23) | ((in[12 + inpos] & 65535) << (25 - 16)))
+ + out[15 + outpos - 1];
+ out[16 + outpos] = ((in[12 + inpos] >>> 16) | ((in[13 + inpos] & 511) << (25 - 9)))
+ + out[16 + outpos - 1];
+ out[17 + outpos] = ((in[13 + inpos] >>> 9) | ((in[14 + inpos] & 3) << (25 - 2)))
+ + out[17 + outpos - 1];
+ out[18 + outpos] = (((in[14 + inpos] >>> 2) & 33554431))
+ + out[18 + outpos - 1];
+ out[19 + outpos] = ((in[14 + inpos] >>> 27) | ((in[15 + inpos] & 1048575) << (25 - 20)))
+ + out[19 + outpos - 1];
+ out[20 + outpos] = ((in[15 + inpos] >>> 20) | ((in[16 + inpos] & 8191) << (25 - 13)))
+ + out[20 + outpos - 1];
+ out[21 + outpos] = ((in[16 + inpos] >>> 13) | ((in[17 + inpos] & 63) << (25 - 6)))
+ + out[21 + outpos - 1];
+ out[22 + outpos] = (((in[17 + inpos] >>> 6) & 33554431))
+ + out[22 + outpos - 1];
+ out[23 + outpos] = ((in[17 + inpos] >>> 31) | ((in[18 + inpos] & 16777215) << (25 - 24)))
+ + out[23 + outpos - 1];
+ out[24 + outpos] = ((in[18 + inpos] >>> 24) | ((in[19 + inpos] & 131071) << (25 - 17)))
+ + out[24 + outpos - 1];
+ out[25 + outpos] = ((in[19 + inpos] >>> 17) | ((in[20 + inpos] & 1023) << (25 - 10)))
+ + out[25 + outpos - 1];
+ out[26 + outpos] = ((in[20 + inpos] >>> 10) | ((in[21 + inpos] & 7) << (25 - 3)))
+ + out[26 + outpos - 1];
+ out[27 + outpos] = (((in[21 + inpos] >>> 3) & 33554431))
+ + out[27 + outpos - 1];
+ out[28 + outpos] = ((in[21 + inpos] >>> 28) | ((in[22 + inpos] & 2097151) << (25 - 21)))
+ + out[28 + outpos - 1];
+ out[29 + outpos] = ((in[22 + inpos] >>> 21) | ((in[23 + inpos] & 16383) << (25 - 14)))
+ + out[29 + outpos - 1];
+ out[30 + outpos] = ((in[23 + inpos] >>> 14) | ((in[24 + inpos] & 127) << (25 - 7)))
+ + out[30 + outpos - 1];
+ out[31 + outpos] = ((in[24 + inpos] >>> 7))
+ + out[31 + outpos - 1];
+ }
+
+ protected static void integratedunpack26(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (((in[0 + inpos] >>> 0) & 67108863))
+ + initoffset;
+ out[1 + outpos] = ((in[0 + inpos] >>> 26) | ((in[1 + inpos] & 1048575) << (26 - 20)))
+ + out[1 + outpos - 1];
+ out[2 + outpos] = ((in[1 + inpos] >>> 20) | ((in[2 + inpos] & 16383) << (26 - 14)))
+ + out[2 + outpos - 1];
+ out[3 + outpos] = ((in[2 + inpos] >>> 14) | ((in[3 + inpos] & 255) << (26 - 8)))
+ + out[3 + outpos - 1];
+ out[4 + outpos] = ((in[3 + inpos] >>> 8) | ((in[4 + inpos] & 3) << (26 - 2)))
+ + out[4 + outpos - 1];
+ out[5 + outpos] = (((in[4 + inpos] >>> 2) & 67108863))
+ + out[5 + outpos - 1];
+ out[6 + outpos] = ((in[4 + inpos] >>> 28) | ((in[5 + inpos] & 4194303) << (26 - 22)))
+ + out[6 + outpos - 1];
+ out[7 + outpos] = ((in[5 + inpos] >>> 22) | ((in[6 + inpos] & 65535) << (26 - 16)))
+ + out[7 + outpos - 1];
+ out[8 + outpos] = ((in[6 + inpos] >>> 16) | ((in[7 + inpos] & 1023) << (26 - 10)))
+ + out[8 + outpos - 1];
+ out[9 + outpos] = ((in[7 + inpos] >>> 10) | ((in[8 + inpos] & 15) << (26 - 4)))
+ + out[9 + outpos - 1];
+ out[10 + outpos] = (((in[8 + inpos] >>> 4) & 67108863))
+ + out[10 + outpos - 1];
+ out[11 + outpos] = ((in[8 + inpos] >>> 30) | ((in[9 + inpos] & 16777215) << (26 - 24)))
+ + out[11 + outpos - 1];
+ out[12 + outpos] = ((in[9 + inpos] >>> 24) | ((in[10 + inpos] & 262143) << (26 - 18)))
+ + out[12 + outpos - 1];
+ out[13 + outpos] = ((in[10 + inpos] >>> 18) | ((in[11 + inpos] & 4095) << (26 - 12)))
+ + out[13 + outpos - 1];
+ out[14 + outpos] = ((in[11 + inpos] >>> 12) | ((in[12 + inpos] & 63) << (26 - 6)))
+ + out[14 + outpos - 1];
+ out[15 + outpos] = ((in[12 + inpos] >>> 6))
+ + out[15 + outpos - 1];
+ out[16 + outpos] = (((in[13 + inpos] >>> 0) & 67108863))
+ + out[16 + outpos - 1];
+ out[17 + outpos] = ((in[13 + inpos] >>> 26) | ((in[14 + inpos] & 1048575) << (26 - 20)))
+ + out[17 + outpos - 1];
+ out[18 + outpos] = ((in[14 + inpos] >>> 20) | ((in[15 + inpos] & 16383) << (26 - 14)))
+ + out[18 + outpos - 1];
+ out[19 + outpos] = ((in[15 + inpos] >>> 14) | ((in[16 + inpos] & 255) << (26 - 8)))
+ + out[19 + outpos - 1];
+ out[20 + outpos] = ((in[16 + inpos] >>> 8) | ((in[17 + inpos] & 3) << (26 - 2)))
+ + out[20 + outpos - 1];
+ out[21 + outpos] = (((in[17 + inpos] >>> 2) & 67108863))
+ + out[21 + outpos - 1];
+ out[22 + outpos] = ((in[17 + inpos] >>> 28) | ((in[18 + inpos] & 4194303) << (26 - 22)))
+ + out[22 + outpos - 1];
+ out[23 + outpos] = ((in[18 + inpos] >>> 22) | ((in[19 + inpos] & 65535) << (26 - 16)))
+ + out[23 + outpos - 1];
+ out[24 + outpos] = ((in[19 + inpos] >>> 16) | ((in[20 + inpos] & 1023) << (26 - 10)))
+ + out[24 + outpos - 1];
+ out[25 + outpos] = ((in[20 + inpos] >>> 10) | ((in[21 + inpos] & 15) << (26 - 4)))
+ + out[25 + outpos - 1];
+ out[26 + outpos] = (((in[21 + inpos] >>> 4) & 67108863))
+ + out[26 + outpos - 1];
+ out[27 + outpos] = ((in[21 + inpos] >>> 30) | ((in[22 + inpos] & 16777215) << (26 - 24)))
+ + out[27 + outpos - 1];
+ out[28 + outpos] = ((in[22 + inpos] >>> 24) | ((in[23 + inpos] & 262143) << (26 - 18)))
+ + out[28 + outpos - 1];
+ out[29 + outpos] = ((in[23 + inpos] >>> 18) | ((in[24 + inpos] & 4095) << (26 - 12)))
+ + out[29 + outpos - 1];
+ out[30 + outpos] = ((in[24 + inpos] >>> 12) | ((in[25 + inpos] & 63) << (26 - 6)))
+ + out[30 + outpos - 1];
+ out[31 + outpos] = ((in[25 + inpos] >>> 6))
+ + out[31 + outpos - 1];
+ }
+
+ protected static void integratedunpack27(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (((in[0 + inpos] >>> 0) & 134217727))
+ + initoffset;
+ out[1 + outpos] = ((in[0 + inpos] >>> 27) | ((in[1 + inpos] & 4194303) << (27 - 22)))
+ + out[1 + outpos - 1];
+ out[2 + outpos] = ((in[1 + inpos] >>> 22) | ((in[2 + inpos] & 131071) << (27 - 17)))
+ + out[2 + outpos - 1];
+ out[3 + outpos] = ((in[2 + inpos] >>> 17) | ((in[3 + inpos] & 4095) << (27 - 12)))
+ + out[3 + outpos - 1];
+ out[4 + outpos] = ((in[3 + inpos] >>> 12) | ((in[4 + inpos] & 127) << (27 - 7)))
+ + out[4 + outpos - 1];
+ out[5 + outpos] = ((in[4 + inpos] >>> 7) | ((in[5 + inpos] & 3) << (27 - 2)))
+ + out[5 + outpos - 1];
+ out[6 + outpos] = (((in[5 + inpos] >>> 2) & 134217727))
+ + out[6 + outpos - 1];
+ out[7 + outpos] = ((in[5 + inpos] >>> 29) | ((in[6 + inpos] & 16777215) << (27 - 24)))
+ + out[7 + outpos - 1];
+ out[8 + outpos] = ((in[6 + inpos] >>> 24) | ((in[7 + inpos] & 524287) << (27 - 19)))
+ + out[8 + outpos - 1];
+ out[9 + outpos] = ((in[7 + inpos] >>> 19) | ((in[8 + inpos] & 16383) << (27 - 14)))
+ + out[9 + outpos - 1];
+ out[10 + outpos] = ((in[8 + inpos] >>> 14) | ((in[9 + inpos] & 511) << (27 - 9)))
+ + out[10 + outpos - 1];
+ out[11 + outpos] = ((in[9 + inpos] >>> 9) | ((in[10 + inpos] & 15) << (27 - 4)))
+ + out[11 + outpos - 1];
+ out[12 + outpos] = (((in[10 + inpos] >>> 4) & 134217727))
+ + out[12 + outpos - 1];
+ out[13 + outpos] = ((in[10 + inpos] >>> 31) | ((in[11 + inpos] & 67108863) << (27 - 26)))
+ + out[13 + outpos - 1];
+ out[14 + outpos] = ((in[11 + inpos] >>> 26) | ((in[12 + inpos] & 2097151) << (27 - 21)))
+ + out[14 + outpos - 1];
+ out[15 + outpos] = ((in[12 + inpos] >>> 21) | ((in[13 + inpos] & 65535) << (27 - 16)))
+ + out[15 + outpos - 1];
+ out[16 + outpos] = ((in[13 + inpos] >>> 16) | ((in[14 + inpos] & 2047) << (27 - 11)))
+ + out[16 + outpos - 1];
+ out[17 + outpos] = ((in[14 + inpos] >>> 11) | ((in[15 + inpos] & 63) << (27 - 6)))
+ + out[17 + outpos - 1];
+ out[18 + outpos] = ((in[15 + inpos] >>> 6) | ((in[16 + inpos] & 1) << (27 - 1)))
+ + out[18 + outpos - 1];
+ out[19 + outpos] = (((in[16 + inpos] >>> 1) & 134217727))
+ + out[19 + outpos - 1];
+ out[20 + outpos] = ((in[16 + inpos] >>> 28) | ((in[17 + inpos] & 8388607) << (27 - 23)))
+ + out[20 + outpos - 1];
+ out[21 + outpos] = ((in[17 + inpos] >>> 23) | ((in[18 + inpos] & 262143) << (27 - 18)))
+ + out[21 + outpos - 1];
+ out[22 + outpos] = ((in[18 + inpos] >>> 18) | ((in[19 + inpos] & 8191) << (27 - 13)))
+ + out[22 + outpos - 1];
+ out[23 + outpos] = ((in[19 + inpos] >>> 13) | ((in[20 + inpos] & 255) << (27 - 8)))
+ + out[23 + outpos - 1];
+ out[24 + outpos] = ((in[20 + inpos] >>> 8) | ((in[21 + inpos] & 7) << (27 - 3)))
+ + out[24 + outpos - 1];
+ out[25 + outpos] = (((in[21 + inpos] >>> 3) & 134217727))
+ + out[25 + outpos - 1];
+ out[26 + outpos] = ((in[21 + inpos] >>> 30) | ((in[22 + inpos] & 33554431) << (27 - 25)))
+ + out[26 + outpos - 1];
+ out[27 + outpos] = ((in[22 + inpos] >>> 25) | ((in[23 + inpos] & 1048575) << (27 - 20)))
+ + out[27 + outpos - 1];
+ out[28 + outpos] = ((in[23 + inpos] >>> 20) | ((in[24 + inpos] & 32767) << (27 - 15)))
+ + out[28 + outpos - 1];
+ out[29 + outpos] = ((in[24 + inpos] >>> 15) | ((in[25 + inpos] & 1023) << (27 - 10)))
+ + out[29 + outpos - 1];
+ out[30 + outpos] = ((in[25 + inpos] >>> 10) | ((in[26 + inpos] & 31) << (27 - 5)))
+ + out[30 + outpos - 1];
+ out[31 + outpos] = ((in[26 + inpos] >>> 5))
+ + out[31 + outpos - 1];
+ }
+
+ protected static void integratedunpack28(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (((in[0 + inpos] >>> 0) & 268435455))
+ + initoffset;
+ out[1 + outpos] = ((in[0 + inpos] >>> 28) | ((in[1 + inpos] & 16777215) << (28 - 24)))
+ + out[1 + outpos - 1];
+ out[2 + outpos] = ((in[1 + inpos] >>> 24) | ((in[2 + inpos] & 1048575) << (28 - 20)))
+ + out[2 + outpos - 1];
+ out[3 + outpos] = ((in[2 + inpos] >>> 20) | ((in[3 + inpos] & 65535) << (28 - 16)))
+ + out[3 + outpos - 1];
+ out[4 + outpos] = ((in[3 + inpos] >>> 16) | ((in[4 + inpos] & 4095) << (28 - 12)))
+ + out[4 + outpos - 1];
+ out[5 + outpos] = ((in[4 + inpos] >>> 12) | ((in[5 + inpos] & 255) << (28 - 8)))
+ + out[5 + outpos - 1];
+ out[6 + outpos] = ((in[5 + inpos] >>> 8) | ((in[6 + inpos] & 15) << (28 - 4)))
+ + out[6 + outpos - 1];
+ out[7 + outpos] = ((in[6 + inpos] >>> 4)) + out[7 + outpos - 1];
+ out[8 + outpos] = (((in[7 + inpos] >>> 0) & 268435455))
+ + out[8 + outpos - 1];
+ out[9 + outpos] = ((in[7 + inpos] >>> 28) | ((in[8 + inpos] & 16777215) << (28 - 24)))
+ + out[9 + outpos - 1];
+ out[10 + outpos] = ((in[8 + inpos] >>> 24) | ((in[9 + inpos] & 1048575) << (28 - 20)))
+ + out[10 + outpos - 1];
+ out[11 + outpos] = ((in[9 + inpos] >>> 20) | ((in[10 + inpos] & 65535) << (28 - 16)))
+ + out[11 + outpos - 1];
+ out[12 + outpos] = ((in[10 + inpos] >>> 16) | ((in[11 + inpos] & 4095) << (28 - 12)))
+ + out[12 + outpos - 1];
+ out[13 + outpos] = ((in[11 + inpos] >>> 12) | ((in[12 + inpos] & 255) << (28 - 8)))
+ + out[13 + outpos - 1];
+ out[14 + outpos] = ((in[12 + inpos] >>> 8) | ((in[13 + inpos] & 15) << (28 - 4)))
+ + out[14 + outpos - 1];
+ out[15 + outpos] = ((in[13 + inpos] >>> 4))
+ + out[15 + outpos - 1];
+ out[16 + outpos] = (((in[14 + inpos] >>> 0) & 268435455))
+ + out[16 + outpos - 1];
+ out[17 + outpos] = ((in[14 + inpos] >>> 28) | ((in[15 + inpos] & 16777215) << (28 - 24)))
+ + out[17 + outpos - 1];
+ out[18 + outpos] = ((in[15 + inpos] >>> 24) | ((in[16 + inpos] & 1048575) << (28 - 20)))
+ + out[18 + outpos - 1];
+ out[19 + outpos] = ((in[16 + inpos] >>> 20) | ((in[17 + inpos] & 65535) << (28 - 16)))
+ + out[19 + outpos - 1];
+ out[20 + outpos] = ((in[17 + inpos] >>> 16) | ((in[18 + inpos] & 4095) << (28 - 12)))
+ + out[20 + outpos - 1];
+ out[21 + outpos] = ((in[18 + inpos] >>> 12) | ((in[19 + inpos] & 255) << (28 - 8)))
+ + out[21 + outpos - 1];
+ out[22 + outpos] = ((in[19 + inpos] >>> 8) | ((in[20 + inpos] & 15) << (28 - 4)))
+ + out[22 + outpos - 1];
+ out[23 + outpos] = ((in[20 + inpos] >>> 4))
+ + out[23 + outpos - 1];
+ out[24 + outpos] = (((in[21 + inpos] >>> 0) & 268435455))
+ + out[24 + outpos - 1];
+ out[25 + outpos] = ((in[21 + inpos] >>> 28) | ((in[22 + inpos] & 16777215) << (28 - 24)))
+ + out[25 + outpos - 1];
+ out[26 + outpos] = ((in[22 + inpos] >>> 24) | ((in[23 + inpos] & 1048575) << (28 - 20)))
+ + out[26 + outpos - 1];
+ out[27 + outpos] = ((in[23 + inpos] >>> 20) | ((in[24 + inpos] & 65535) << (28 - 16)))
+ + out[27 + outpos - 1];
+ out[28 + outpos] = ((in[24 + inpos] >>> 16) | ((in[25 + inpos] & 4095) << (28 - 12)))
+ + out[28 + outpos - 1];
+ out[29 + outpos] = ((in[25 + inpos] >>> 12) | ((in[26 + inpos] & 255) << (28 - 8)))
+ + out[29 + outpos - 1];
+ out[30 + outpos] = ((in[26 + inpos] >>> 8) | ((in[27 + inpos] & 15) << (28 - 4)))
+ + out[30 + outpos - 1];
+ out[31 + outpos] = ((in[27 + inpos] >>> 4))
+ + out[31 + outpos - 1];
+ }
+
+ protected static void integratedunpack29(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (((in[0 + inpos] >>> 0) & 536870911))
+ + initoffset;
+ out[1 + outpos] = ((in[0 + inpos] >>> 29) | ((in[1 + inpos] & 67108863) << (29 - 26)))
+ + out[1 + outpos - 1];
+ out[2 + outpos] = ((in[1 + inpos] >>> 26) | ((in[2 + inpos] & 8388607) << (29 - 23)))
+ + out[2 + outpos - 1];
+ out[3 + outpos] = ((in[2 + inpos] >>> 23) | ((in[3 + inpos] & 1048575) << (29 - 20)))
+ + out[3 + outpos - 1];
+ out[4 + outpos] = ((in[3 + inpos] >>> 20) | ((in[4 + inpos] & 131071) << (29 - 17)))
+ + out[4 + outpos - 1];
+ out[5 + outpos] = ((in[4 + inpos] >>> 17) | ((in[5 + inpos] & 16383) << (29 - 14)))
+ + out[5 + outpos - 1];
+ out[6 + outpos] = ((in[5 + inpos] >>> 14) | ((in[6 + inpos] & 2047) << (29 - 11)))
+ + out[6 + outpos - 1];
+ out[7 + outpos] = ((in[6 + inpos] >>> 11) | ((in[7 + inpos] & 255) << (29 - 8)))
+ + out[7 + outpos - 1];
+ out[8 + outpos] = ((in[7 + inpos] >>> 8) | ((in[8 + inpos] & 31) << (29 - 5)))
+ + out[8 + outpos - 1];
+ out[9 + outpos] = ((in[8 + inpos] >>> 5) | ((in[9 + inpos] & 3) << (29 - 2)))
+ + out[9 + outpos - 1];
+ out[10 + outpos] = (((in[9 + inpos] >>> 2) & 536870911))
+ + out[10 + outpos - 1];
+ out[11 + outpos] = ((in[9 + inpos] >>> 31) | ((in[10 + inpos] & 268435455) << (29 - 28)))
+ + out[11 + outpos - 1];
+ out[12 + outpos] = ((in[10 + inpos] >>> 28) | ((in[11 + inpos] & 33554431) << (29 - 25)))
+ + out[12 + outpos - 1];
+ out[13 + outpos] = ((in[11 + inpos] >>> 25) | ((in[12 + inpos] & 4194303) << (29 - 22)))
+ + out[13 + outpos - 1];
+ out[14 + outpos] = ((in[12 + inpos] >>> 22) | ((in[13 + inpos] & 524287) << (29 - 19)))
+ + out[14 + outpos - 1];
+ out[15 + outpos] = ((in[13 + inpos] >>> 19) | ((in[14 + inpos] & 65535) << (29 - 16)))
+ + out[15 + outpos - 1];
+ out[16 + outpos] = ((in[14 + inpos] >>> 16) | ((in[15 + inpos] & 8191) << (29 - 13)))
+ + out[16 + outpos - 1];
+ out[17 + outpos] = ((in[15 + inpos] >>> 13) | ((in[16 + inpos] & 1023) << (29 - 10)))
+ + out[17 + outpos - 1];
+ out[18 + outpos] = ((in[16 + inpos] >>> 10) | ((in[17 + inpos] & 127) << (29 - 7)))
+ + out[18 + outpos - 1];
+ out[19 + outpos] = ((in[17 + inpos] >>> 7) | ((in[18 + inpos] & 15) << (29 - 4)))
+ + out[19 + outpos - 1];
+ out[20 + outpos] = ((in[18 + inpos] >>> 4) | ((in[19 + inpos] & 1) << (29 - 1)))
+ + out[20 + outpos - 1];
+ out[21 + outpos] = (((in[19 + inpos] >>> 1) & 536870911))
+ + out[21 + outpos - 1];
+ out[22 + outpos] = ((in[19 + inpos] >>> 30) | ((in[20 + inpos] & 134217727) << (29 - 27)))
+ + out[22 + outpos - 1];
+ out[23 + outpos] = ((in[20 + inpos] >>> 27) | ((in[21 + inpos] & 16777215) << (29 - 24)))
+ + out[23 + outpos - 1];
+ out[24 + outpos] = ((in[21 + inpos] >>> 24) | ((in[22 + inpos] & 2097151) << (29 - 21)))
+ + out[24 + outpos - 1];
+ out[25 + outpos] = ((in[22 + inpos] >>> 21) | ((in[23 + inpos] & 262143) << (29 - 18)))
+ + out[25 + outpos - 1];
+ out[26 + outpos] = ((in[23 + inpos] >>> 18) | ((in[24 + inpos] & 32767) << (29 - 15)))
+ + out[26 + outpos - 1];
+ out[27 + outpos] = ((in[24 + inpos] >>> 15) | ((in[25 + inpos] & 4095) << (29 - 12)))
+ + out[27 + outpos - 1];
+ out[28 + outpos] = ((in[25 + inpos] >>> 12) | ((in[26 + inpos] & 511) << (29 - 9)))
+ + out[28 + outpos - 1];
+ out[29 + outpos] = ((in[26 + inpos] >>> 9) | ((in[27 + inpos] & 63) << (29 - 6)))
+ + out[29 + outpos - 1];
+ out[30 + outpos] = ((in[27 + inpos] >>> 6) | ((in[28 + inpos] & 7) << (29 - 3)))
+ + out[30 + outpos - 1];
+ out[31 + outpos] = ((in[28 + inpos] >>> 3))
+ + out[31 + outpos - 1];
+ }
+
+ protected static void integratedunpack3(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (((in[0 + inpos] >>> 0) & 7)) + initoffset;
+ out[1 + outpos] = (((in[0 + inpos] >>> 3) & 7))
+ + out[1 + outpos - 1];
+ out[2 + outpos] = (((in[0 + inpos] >>> 6) & 7))
+ + out[2 + outpos - 1];
+ out[3 + outpos] = (((in[0 + inpos] >>> 9) & 7))
+ + out[3 + outpos - 1];
+ out[4 + outpos] = (((in[0 + inpos] >>> 12) & 7))
+ + out[4 + outpos - 1];
+ out[5 + outpos] = (((in[0 + inpos] >>> 15) & 7))
+ + out[5 + outpos - 1];
+ out[6 + outpos] = (((in[0 + inpos] >>> 18) & 7))
+ + out[6 + outpos - 1];
+ out[7 + outpos] = (((in[0 + inpos] >>> 21) & 7))
+ + out[7 + outpos - 1];
+ out[8 + outpos] = (((in[0 + inpos] >>> 24) & 7))
+ + out[8 + outpos - 1];
+ out[9 + outpos] = (((in[0 + inpos] >>> 27) & 7))
+ + out[9 + outpos - 1];
+ out[10 + outpos] = ((in[0 + inpos] >>> 30) | ((in[1 + inpos] & 1) << (3 - 1)))
+ + out[10 + outpos - 1];
+ out[11 + outpos] = (((in[1 + inpos] >>> 1) & 7))
+ + out[11 + outpos - 1];
+ out[12 + outpos] = (((in[1 + inpos] >>> 4) & 7))
+ + out[12 + outpos - 1];
+ out[13 + outpos] = (((in[1 + inpos] >>> 7) & 7))
+ + out[13 + outpos - 1];
+ out[14 + outpos] = (((in[1 + inpos] >>> 10) & 7))
+ + out[14 + outpos - 1];
+ out[15 + outpos] = (((in[1 + inpos] >>> 13) & 7))
+ + out[15 + outpos - 1];
+ out[16 + outpos] = (((in[1 + inpos] >>> 16) & 7))
+ + out[16 + outpos - 1];
+ out[17 + outpos] = (((in[1 + inpos] >>> 19) & 7))
+ + out[17 + outpos - 1];
+ out[18 + outpos] = (((in[1 + inpos] >>> 22) & 7))
+ + out[18 + outpos - 1];
+ out[19 + outpos] = (((in[1 + inpos] >>> 25) & 7))
+ + out[19 + outpos - 1];
+ out[20 + outpos] = (((in[1 + inpos] >>> 28) & 7))
+ + out[20 + outpos - 1];
+ out[21 + outpos] = ((in[1 + inpos] >>> 31) | ((in[2 + inpos] & 3) << (3 - 2)))
+ + out[21 + outpos - 1];
+ out[22 + outpos] = (((in[2 + inpos] >>> 2) & 7))
+ + out[22 + outpos - 1];
+ out[23 + outpos] = (((in[2 + inpos] >>> 5) & 7))
+ + out[23 + outpos - 1];
+ out[24 + outpos] = (((in[2 + inpos] >>> 8) & 7))
+ + out[24 + outpos - 1];
+ out[25 + outpos] = (((in[2 + inpos] >>> 11) & 7))
+ + out[25 + outpos - 1];
+ out[26 + outpos] = (((in[2 + inpos] >>> 14) & 7))
+ + out[26 + outpos - 1];
+ out[27 + outpos] = (((in[2 + inpos] >>> 17) & 7))
+ + out[27 + outpos - 1];
+ out[28 + outpos] = (((in[2 + inpos] >>> 20) & 7))
+ + out[28 + outpos - 1];
+ out[29 + outpos] = (((in[2 + inpos] >>> 23) & 7))
+ + out[29 + outpos - 1];
+ out[30 + outpos] = (((in[2 + inpos] >>> 26) & 7))
+ + out[30 + outpos - 1];
+ out[31 + outpos] = ((in[2 + inpos] >>> 29))
+ + out[31 + outpos - 1];
+ }
+
+ protected static void integratedunpack30(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (((in[0 + inpos] >>> 0) & 1073741823))
+ + initoffset;
+ out[1 + outpos] = ((in[0 + inpos] >>> 30) | ((in[1 + inpos] & 268435455) << (30 - 28)))
+ + out[1 + outpos - 1];
+ out[2 + outpos] = ((in[1 + inpos] >>> 28) | ((in[2 + inpos] & 67108863) << (30 - 26)))
+ + out[2 + outpos - 1];
+ out[3 + outpos] = ((in[2 + inpos] >>> 26) | ((in[3 + inpos] & 16777215) << (30 - 24)))
+ + out[3 + outpos - 1];
+ out[4 + outpos] = ((in[3 + inpos] >>> 24) | ((in[4 + inpos] & 4194303) << (30 - 22)))
+ + out[4 + outpos - 1];
+ out[5 + outpos] = ((in[4 + inpos] >>> 22) | ((in[5 + inpos] & 1048575) << (30 - 20)))
+ + out[5 + outpos - 1];
+ out[6 + outpos] = ((in[5 + inpos] >>> 20) | ((in[6 + inpos] & 262143) << (30 - 18)))
+ + out[6 + outpos - 1];
+ out[7 + outpos] = ((in[6 + inpos] >>> 18) | ((in[7 + inpos] & 65535) << (30 - 16)))
+ + out[7 + outpos - 1];
+ out[8 + outpos] = ((in[7 + inpos] >>> 16) | ((in[8 + inpos] & 16383) << (30 - 14)))
+ + out[8 + outpos - 1];
+ out[9 + outpos] = ((in[8 + inpos] >>> 14) | ((in[9 + inpos] & 4095) << (30 - 12)))
+ + out[9 + outpos - 1];
+ out[10 + outpos] = ((in[9 + inpos] >>> 12) | ((in[10 + inpos] & 1023) << (30 - 10)))
+ + out[10 + outpos - 1];
+ out[11 + outpos] = ((in[10 + inpos] >>> 10) | ((in[11 + inpos] & 255) << (30 - 8)))
+ + out[11 + outpos - 1];
+ out[12 + outpos] = ((in[11 + inpos] >>> 8) | ((in[12 + inpos] & 63) << (30 - 6)))
+ + out[12 + outpos - 1];
+ out[13 + outpos] = ((in[12 + inpos] >>> 6) | ((in[13 + inpos] & 15) << (30 - 4)))
+ + out[13 + outpos - 1];
+ out[14 + outpos] = ((in[13 + inpos] >>> 4) | ((in[14 + inpos] & 3) << (30 - 2)))
+ + out[14 + outpos - 1];
+ out[15 + outpos] = ((in[14 + inpos] >>> 2))
+ + out[15 + outpos - 1];
+ out[16 + outpos] = (((in[15 + inpos] >>> 0) & 1073741823))
+ + out[16 + outpos - 1];
+ out[17 + outpos] = ((in[15 + inpos] >>> 30) | ((in[16 + inpos] & 268435455) << (30 - 28)))
+ + out[17 + outpos - 1];
+ out[18 + outpos] = ((in[16 + inpos] >>> 28) | ((in[17 + inpos] & 67108863) << (30 - 26)))
+ + out[18 + outpos - 1];
+ out[19 + outpos] = ((in[17 + inpos] >>> 26) | ((in[18 + inpos] & 16777215) << (30 - 24)))
+ + out[19 + outpos - 1];
+ out[20 + outpos] = ((in[18 + inpos] >>> 24) | ((in[19 + inpos] & 4194303) << (30 - 22)))
+ + out[20 + outpos - 1];
+ out[21 + outpos] = ((in[19 + inpos] >>> 22) | ((in[20 + inpos] & 1048575) << (30 - 20)))
+ + out[21 + outpos - 1];
+ out[22 + outpos] = ((in[20 + inpos] >>> 20) | ((in[21 + inpos] & 262143) << (30 - 18)))
+ + out[22 + outpos - 1];
+ out[23 + outpos] = ((in[21 + inpos] >>> 18) | ((in[22 + inpos] & 65535) << (30 - 16)))
+ + out[23 + outpos - 1];
+ out[24 + outpos] = ((in[22 + inpos] >>> 16) | ((in[23 + inpos] & 16383) << (30 - 14)))
+ + out[24 + outpos - 1];
+ out[25 + outpos] = ((in[23 + inpos] >>> 14) | ((in[24 + inpos] & 4095) << (30 - 12)))
+ + out[25 + outpos - 1];
+ out[26 + outpos] = ((in[24 + inpos] >>> 12) | ((in[25 + inpos] & 1023) << (30 - 10)))
+ + out[26 + outpos - 1];
+ out[27 + outpos] = ((in[25 + inpos] >>> 10) | ((in[26 + inpos] & 255) << (30 - 8)))
+ + out[27 + outpos - 1];
+ out[28 + outpos] = ((in[26 + inpos] >>> 8) | ((in[27 + inpos] & 63) << (30 - 6)))
+ + out[28 + outpos - 1];
+ out[29 + outpos] = ((in[27 + inpos] >>> 6) | ((in[28 + inpos] & 15) << (30 - 4)))
+ + out[29 + outpos - 1];
+ out[30 + outpos] = ((in[28 + inpos] >>> 4) | ((in[29 + inpos] & 3) << (30 - 2)))
+ + out[30 + outpos - 1];
+ out[31 + outpos] = ((in[29 + inpos] >>> 2))
+ + out[31 + outpos - 1];
+ }
+
+ protected static void integratedunpack31(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (((in[0 + inpos] >>> 0) & 2147483647))
+ + initoffset;
+ out[1 + outpos] = ((in[0 + inpos] >>> 31) | ((in[1 + inpos] & 1073741823) << (31 - 30)))
+ + out[1 + outpos - 1];
+ out[2 + outpos] = ((in[1 + inpos] >>> 30) | ((in[2 + inpos] & 536870911) << (31 - 29)))
+ + out[2 + outpos - 1];
+ out[3 + outpos] = ((in[2 + inpos] >>> 29) | ((in[3 + inpos] & 268435455) << (31 - 28)))
+ + out[3 + outpos - 1];
+ out[4 + outpos] = ((in[3 + inpos] >>> 28) | ((in[4 + inpos] & 134217727) << (31 - 27)))
+ + out[4 + outpos - 1];
+ out[5 + outpos] = ((in[4 + inpos] >>> 27) | ((in[5 + inpos] & 67108863) << (31 - 26)))
+ + out[5 + outpos - 1];
+ out[6 + outpos] = ((in[5 + inpos] >>> 26) | ((in[6 + inpos] & 33554431) << (31 - 25)))
+ + out[6 + outpos - 1];
+ out[7 + outpos] = ((in[6 + inpos] >>> 25) | ((in[7 + inpos] & 16777215) << (31 - 24)))
+ + out[7 + outpos - 1];
+ out[8 + outpos] = ((in[7 + inpos] >>> 24) | ((in[8 + inpos] & 8388607) << (31 - 23)))
+ + out[8 + outpos - 1];
+ out[9 + outpos] = ((in[8 + inpos] >>> 23) | ((in[9 + inpos] & 4194303) << (31 - 22)))
+ + out[9 + outpos - 1];
+ out[10 + outpos] = ((in[9 + inpos] >>> 22) | ((in[10 + inpos] & 2097151) << (31 - 21)))
+ + out[10 + outpos - 1];
+ out[11 + outpos] = ((in[10 + inpos] >>> 21) | ((in[11 + inpos] & 1048575) << (31 - 20)))
+ + out[11 + outpos - 1];
+ out[12 + outpos] = ((in[11 + inpos] >>> 20) | ((in[12 + inpos] & 524287) << (31 - 19)))
+ + out[12 + outpos - 1];
+ out[13 + outpos] = ((in[12 + inpos] >>> 19) | ((in[13 + inpos] & 262143) << (31 - 18)))
+ + out[13 + outpos - 1];
+ out[14 + outpos] = ((in[13 + inpos] >>> 18) | ((in[14 + inpos] & 131071) << (31 - 17)))
+ + out[14 + outpos - 1];
+ out[15 + outpos] = ((in[14 + inpos] >>> 17) | ((in[15 + inpos] & 65535) << (31 - 16)))
+ + out[15 + outpos - 1];
+ out[16 + outpos] = ((in[15 + inpos] >>> 16) | ((in[16 + inpos] & 32767) << (31 - 15)))
+ + out[16 + outpos - 1];
+ out[17 + outpos] = ((in[16 + inpos] >>> 15) | ((in[17 + inpos] & 16383) << (31 - 14)))
+ + out[17 + outpos - 1];
+ out[18 + outpos] = ((in[17 + inpos] >>> 14) | ((in[18 + inpos] & 8191) << (31 - 13)))
+ + out[18 + outpos - 1];
+ out[19 + outpos] = ((in[18 + inpos] >>> 13) | ((in[19 + inpos] & 4095) << (31 - 12)))
+ + out[19 + outpos - 1];
+ out[20 + outpos] = ((in[19 + inpos] >>> 12) | ((in[20 + inpos] & 2047) << (31 - 11)))
+ + out[20 + outpos - 1];
+ out[21 + outpos] = ((in[20 + inpos] >>> 11) | ((in[21 + inpos] & 1023) << (31 - 10)))
+ + out[21 + outpos - 1];
+ out[22 + outpos] = ((in[21 + inpos] >>> 10) | ((in[22 + inpos] & 511) << (31 - 9)))
+ + out[22 + outpos - 1];
+ out[23 + outpos] = ((in[22 + inpos] >>> 9) | ((in[23 + inpos] & 255) << (31 - 8)))
+ + out[23 + outpos - 1];
+ out[24 + outpos] = ((in[23 + inpos] >>> 8) | ((in[24 + inpos] & 127) << (31 - 7)))
+ + out[24 + outpos - 1];
+ out[25 + outpos] = ((in[24 + inpos] >>> 7) | ((in[25 + inpos] & 63) << (31 - 6)))
+ + out[25 + outpos - 1];
+ out[26 + outpos] = ((in[25 + inpos] >>> 6) | ((in[26 + inpos] & 31) << (31 - 5)))
+ + out[26 + outpos - 1];
+ out[27 + outpos] = ((in[26 + inpos] >>> 5) | ((in[27 + inpos] & 15) << (31 - 4)))
+ + out[27 + outpos - 1];
+ out[28 + outpos] = ((in[27 + inpos] >>> 4) | ((in[28 + inpos] & 7) << (31 - 3)))
+ + out[28 + outpos - 1];
+ out[29 + outpos] = ((in[28 + inpos] >>> 3) | ((in[29 + inpos] & 3) << (31 - 2)))
+ + out[29 + outpos - 1];
+ out[30 + outpos] = ((in[29 + inpos] >>> 2) | ((in[30 + inpos] & 1) << (31 - 1)))
+ + out[30 + outpos - 1];
+ out[31 + outpos] = ((in[30 + inpos] >>> 1))
+ + out[31 + outpos - 1];
+ }
+
+ protected static void integratedunpack32(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ System.arraycopy(in, inpos, out, outpos, 32); // no sense in
+ // doing delta
+ // coding
+ }
+
+ protected static void integratedunpack4(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (((in[0 + inpos] >>> 0) & 15)) + initoffset;
+ out[1 + outpos] = (((in[0 + inpos] >>> 4) & 15))
+ + out[1 + outpos - 1];
+ out[2 + outpos] = (((in[0 + inpos] >>> 8) & 15))
+ + out[2 + outpos - 1];
+ out[3 + outpos] = (((in[0 + inpos] >>> 12) & 15))
+ + out[3 + outpos - 1];
+ out[4 + outpos] = (((in[0 + inpos] >>> 16) & 15))
+ + out[4 + outpos - 1];
+ out[5 + outpos] = (((in[0 + inpos] >>> 20) & 15))
+ + out[5 + outpos - 1];
+ out[6 + outpos] = (((in[0 + inpos] >>> 24) & 15))
+ + out[6 + outpos - 1];
+ out[7 + outpos] = ((in[0 + inpos] >>> 28))
+ + out[7 + outpos - 1];
+ out[8 + outpos] = (((in[1 + inpos] >>> 0) & 15))
+ + out[8 + outpos - 1];
+ out[9 + outpos] = (((in[1 + inpos] >>> 4) & 15))
+ + out[9 + outpos - 1];
+ out[10 + outpos] = (((in[1 + inpos] >>> 8) & 15))
+ + out[10 + outpos - 1];
+ out[11 + outpos] = (((in[1 + inpos] >>> 12) & 15))
+ + out[11 + outpos - 1];
+ out[12 + outpos] = (((in[1 + inpos] >>> 16) & 15))
+ + out[12 + outpos - 1];
+ out[13 + outpos] = (((in[1 + inpos] >>> 20) & 15))
+ + out[13 + outpos - 1];
+ out[14 + outpos] = (((in[1 + inpos] >>> 24) & 15))
+ + out[14 + outpos - 1];
+ out[15 + outpos] = ((in[1 + inpos] >>> 28))
+ + out[15 + outpos - 1];
+ out[16 + outpos] = (((in[2 + inpos] >>> 0) & 15))
+ + out[16 + outpos - 1];
+ out[17 + outpos] = (((in[2 + inpos] >>> 4) & 15))
+ + out[17 + outpos - 1];
+ out[18 + outpos] = (((in[2 + inpos] >>> 8) & 15))
+ + out[18 + outpos - 1];
+ out[19 + outpos] = (((in[2 + inpos] >>> 12) & 15))
+ + out[19 + outpos - 1];
+ out[20 + outpos] = (((in[2 + inpos] >>> 16) & 15))
+ + out[20 + outpos - 1];
+ out[21 + outpos] = (((in[2 + inpos] >>> 20) & 15))
+ + out[21 + outpos - 1];
+ out[22 + outpos] = (((in[2 + inpos] >>> 24) & 15))
+ + out[22 + outpos - 1];
+ out[23 + outpos] = ((in[2 + inpos] >>> 28))
+ + out[23 + outpos - 1];
+ out[24 + outpos] = (((in[3 + inpos] >>> 0) & 15))
+ + out[24 + outpos - 1];
+ out[25 + outpos] = (((in[3 + inpos] >>> 4) & 15))
+ + out[25 + outpos - 1];
+ out[26 + outpos] = (((in[3 + inpos] >>> 8) & 15))
+ + out[26 + outpos - 1];
+ out[27 + outpos] = (((in[3 + inpos] >>> 12) & 15))
+ + out[27 + outpos - 1];
+ out[28 + outpos] = (((in[3 + inpos] >>> 16) & 15))
+ + out[28 + outpos - 1];
+ out[29 + outpos] = (((in[3 + inpos] >>> 20) & 15))
+ + out[29 + outpos - 1];
+ out[30 + outpos] = (((in[3 + inpos] >>> 24) & 15))
+ + out[30 + outpos - 1];
+ out[31 + outpos] = ((in[3 + inpos] >>> 28))
+ + out[31 + outpos - 1];
+ }
+
+ protected static void integratedunpack5(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (((in[0 + inpos] >>> 0) & 31)) + initoffset;
+ out[1 + outpos] = (((in[0 + inpos] >>> 5) & 31))
+ + out[1 + outpos - 1];
+ out[2 + outpos] = (((in[0 + inpos] >>> 10) & 31))
+ + out[2 + outpos - 1];
+ out[3 + outpos] = (((in[0 + inpos] >>> 15) & 31))
+ + out[3 + outpos - 1];
+ out[4 + outpos] = (((in[0 + inpos] >>> 20) & 31))
+ + out[4 + outpos - 1];
+ out[5 + outpos] = (((in[0 + inpos] >>> 25) & 31))
+ + out[5 + outpos - 1];
+ out[6 + outpos] = ((in[0 + inpos] >>> 30) | ((in[1 + inpos] & 7) << (5 - 3)))
+ + out[6 + outpos - 1];
+ out[7 + outpos] = (((in[1 + inpos] >>> 3) & 31))
+ + out[7 + outpos - 1];
+ out[8 + outpos] = (((in[1 + inpos] >>> 8) & 31))
+ + out[8 + outpos - 1];
+ out[9 + outpos] = (((in[1 + inpos] >>> 13) & 31))
+ + out[9 + outpos - 1];
+ out[10 + outpos] = (((in[1 + inpos] >>> 18) & 31))
+ + out[10 + outpos - 1];
+ out[11 + outpos] = (((in[1 + inpos] >>> 23) & 31))
+ + out[11 + outpos - 1];
+ out[12 + outpos] = ((in[1 + inpos] >>> 28) | ((in[2 + inpos] & 1) << (5 - 1)))
+ + out[12 + outpos - 1];
+ out[13 + outpos] = (((in[2 + inpos] >>> 1) & 31))
+ + out[13 + outpos - 1];
+ out[14 + outpos] = (((in[2 + inpos] >>> 6) & 31))
+ + out[14 + outpos - 1];
+ out[15 + outpos] = (((in[2 + inpos] >>> 11) & 31))
+ + out[15 + outpos - 1];
+ out[16 + outpos] = (((in[2 + inpos] >>> 16) & 31))
+ + out[16 + outpos - 1];
+ out[17 + outpos] = (((in[2 + inpos] >>> 21) & 31))
+ + out[17 + outpos - 1];
+ out[18 + outpos] = (((in[2 + inpos] >>> 26) & 31))
+ + out[18 + outpos - 1];
+ out[19 + outpos] = ((in[2 + inpos] >>> 31) | ((in[3 + inpos] & 15) << (5 - 4)))
+ + out[19 + outpos - 1];
+ out[20 + outpos] = (((in[3 + inpos] >>> 4) & 31))
+ + out[20 + outpos - 1];
+ out[21 + outpos] = (((in[3 + inpos] >>> 9) & 31))
+ + out[21 + outpos - 1];
+ out[22 + outpos] = (((in[3 + inpos] >>> 14) & 31))
+ + out[22 + outpos - 1];
+ out[23 + outpos] = (((in[3 + inpos] >>> 19) & 31))
+ + out[23 + outpos - 1];
+ out[24 + outpos] = (((in[3 + inpos] >>> 24) & 31))
+ + out[24 + outpos - 1];
+ out[25 + outpos] = ((in[3 + inpos] >>> 29) | ((in[4 + inpos] & 3) << (5 - 2)))
+ + out[25 + outpos - 1];
+ out[26 + outpos] = (((in[4 + inpos] >>> 2) & 31))
+ + out[26 + outpos - 1];
+ out[27 + outpos] = (((in[4 + inpos] >>> 7) & 31))
+ + out[27 + outpos - 1];
+ out[28 + outpos] = (((in[4 + inpos] >>> 12) & 31))
+ + out[28 + outpos - 1];
+ out[29 + outpos] = (((in[4 + inpos] >>> 17) & 31))
+ + out[29 + outpos - 1];
+ out[30 + outpos] = (((in[4 + inpos] >>> 22) & 31))
+ + out[30 + outpos - 1];
+ out[31 + outpos] = ((in[4 + inpos] >>> 27))
+ + out[31 + outpos - 1];
+ }
+
+ protected static void integratedunpack6(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (((in[0 + inpos] >>> 0) & 63)) + initoffset;
+ out[1 + outpos] = (((in[0 + inpos] >>> 6) & 63))
+ + out[1 + outpos - 1];
+ out[2 + outpos] = (((in[0 + inpos] >>> 12) & 63))
+ + out[2 + outpos - 1];
+ out[3 + outpos] = (((in[0 + inpos] >>> 18) & 63))
+ + out[3 + outpos - 1];
+ out[4 + outpos] = (((in[0 + inpos] >>> 24) & 63))
+ + out[4 + outpos - 1];
+ out[5 + outpos] = ((in[0 + inpos] >>> 30) | ((in[1 + inpos] & 15) << (6 - 4)))
+ + out[5 + outpos - 1];
+ out[6 + outpos] = (((in[1 + inpos] >>> 4) & 63))
+ + out[6 + outpos - 1];
+ out[7 + outpos] = (((in[1 + inpos] >>> 10) & 63))
+ + out[7 + outpos - 1];
+ out[8 + outpos] = (((in[1 + inpos] >>> 16) & 63))
+ + out[8 + outpos - 1];
+ out[9 + outpos] = (((in[1 + inpos] >>> 22) & 63))
+ + out[9 + outpos - 1];
+ out[10 + outpos] = ((in[1 + inpos] >>> 28) | ((in[2 + inpos] & 3) << (6 - 2)))
+ + out[10 + outpos - 1];
+ out[11 + outpos] = (((in[2 + inpos] >>> 2) & 63))
+ + out[11 + outpos - 1];
+ out[12 + outpos] = (((in[2 + inpos] >>> 8) & 63))
+ + out[12 + outpos - 1];
+ out[13 + outpos] = (((in[2 + inpos] >>> 14) & 63))
+ + out[13 + outpos - 1];
+ out[14 + outpos] = (((in[2 + inpos] >>> 20) & 63))
+ + out[14 + outpos - 1];
+ out[15 + outpos] = ((in[2 + inpos] >>> 26))
+ + out[15 + outpos - 1];
+ out[16 + outpos] = (((in[3 + inpos] >>> 0) & 63))
+ + out[16 + outpos - 1];
+ out[17 + outpos] = (((in[3 + inpos] >>> 6) & 63))
+ + out[17 + outpos - 1];
+ out[18 + outpos] = (((in[3 + inpos] >>> 12) & 63))
+ + out[18 + outpos - 1];
+ out[19 + outpos] = (((in[3 + inpos] >>> 18) & 63))
+ + out[19 + outpos - 1];
+ out[20 + outpos] = (((in[3 + inpos] >>> 24) & 63))
+ + out[20 + outpos - 1];
+ out[21 + outpos] = ((in[3 + inpos] >>> 30) | ((in[4 + inpos] & 15) << (6 - 4)))
+ + out[21 + outpos - 1];
+ out[22 + outpos] = (((in[4 + inpos] >>> 4) & 63))
+ + out[22 + outpos - 1];
+ out[23 + outpos] = (((in[4 + inpos] >>> 10) & 63))
+ + out[23 + outpos - 1];
+ out[24 + outpos] = (((in[4 + inpos] >>> 16) & 63))
+ + out[24 + outpos - 1];
+ out[25 + outpos] = (((in[4 + inpos] >>> 22) & 63))
+ + out[25 + outpos - 1];
+ out[26 + outpos] = ((in[4 + inpos] >>> 28) | ((in[5 + inpos] & 3) << (6 - 2)))
+ + out[26 + outpos - 1];
+ out[27 + outpos] = (((in[5 + inpos] >>> 2) & 63))
+ + out[27 + outpos - 1];
+ out[28 + outpos] = (((in[5 + inpos] >>> 8) & 63))
+ + out[28 + outpos - 1];
+ out[29 + outpos] = (((in[5 + inpos] >>> 14) & 63))
+ + out[29 + outpos - 1];
+ out[30 + outpos] = (((in[5 + inpos] >>> 20) & 63))
+ + out[30 + outpos - 1];
+ out[31 + outpos] = ((in[5 + inpos] >>> 26))
+ + out[31 + outpos - 1];
+ }
+
+ protected static void integratedunpack7(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (((in[0 + inpos] >>> 0) & 127)) + initoffset;
+ out[1 + outpos] = (((in[0 + inpos] >>> 7) & 127))
+ + out[1 + outpos - 1];
+ out[2 + outpos] = (((in[0 + inpos] >>> 14) & 127))
+ + out[2 + outpos - 1];
+ out[3 + outpos] = (((in[0 + inpos] >>> 21) & 127))
+ + out[3 + outpos - 1];
+ out[4 + outpos] = ((in[0 + inpos] >>> 28) | ((in[1 + inpos] & 7) << (7 - 3)))
+ + out[4 + outpos - 1];
+ out[5 + outpos] = (((in[1 + inpos] >>> 3) & 127))
+ + out[5 + outpos - 1];
+ out[6 + outpos] = (((in[1 + inpos] >>> 10) & 127))
+ + out[6 + outpos - 1];
+ out[7 + outpos] = (((in[1 + inpos] >>> 17) & 127))
+ + out[7 + outpos - 1];
+ out[8 + outpos] = (((in[1 + inpos] >>> 24) & 127))
+ + out[8 + outpos - 1];
+ out[9 + outpos] = ((in[1 + inpos] >>> 31) | ((in[2 + inpos] & 63) << (7 - 6)))
+ + out[9 + outpos - 1];
+ out[10 + outpos] = (((in[2 + inpos] >>> 6) & 127))
+ + out[10 + outpos - 1];
+ out[11 + outpos] = (((in[2 + inpos] >>> 13) & 127))
+ + out[11 + outpos - 1];
+ out[12 + outpos] = (((in[2 + inpos] >>> 20) & 127))
+ + out[12 + outpos - 1];
+ out[13 + outpos] = ((in[2 + inpos] >>> 27) | ((in[3 + inpos] & 3) << (7 - 2)))
+ + out[13 + outpos - 1];
+ out[14 + outpos] = (((in[3 + inpos] >>> 2) & 127))
+ + out[14 + outpos - 1];
+ out[15 + outpos] = (((in[3 + inpos] >>> 9) & 127))
+ + out[15 + outpos - 1];
+ out[16 + outpos] = (((in[3 + inpos] >>> 16) & 127))
+ + out[16 + outpos - 1];
+ out[17 + outpos] = (((in[3 + inpos] >>> 23) & 127))
+ + out[17 + outpos - 1];
+ out[18 + outpos] = ((in[3 + inpos] >>> 30) | ((in[4 + inpos] & 31) << (7 - 5)))
+ + out[18 + outpos - 1];
+ out[19 + outpos] = (((in[4 + inpos] >>> 5) & 127))
+ + out[19 + outpos - 1];
+ out[20 + outpos] = (((in[4 + inpos] >>> 12) & 127))
+ + out[20 + outpos - 1];
+ out[21 + outpos] = (((in[4 + inpos] >>> 19) & 127))
+ + out[21 + outpos - 1];
+ out[22 + outpos] = ((in[4 + inpos] >>> 26) | ((in[5 + inpos] & 1) << (7 - 1)))
+ + out[22 + outpos - 1];
+ out[23 + outpos] = (((in[5 + inpos] >>> 1) & 127))
+ + out[23 + outpos - 1];
+ out[24 + outpos] = (((in[5 + inpos] >>> 8) & 127))
+ + out[24 + outpos - 1];
+ out[25 + outpos] = (((in[5 + inpos] >>> 15) & 127))
+ + out[25 + outpos - 1];
+ out[26 + outpos] = (((in[5 + inpos] >>> 22) & 127))
+ + out[26 + outpos - 1];
+ out[27 + outpos] = ((in[5 + inpos] >>> 29) | ((in[6 + inpos] & 15) << (7 - 4)))
+ + out[27 + outpos - 1];
+ out[28 + outpos] = (((in[6 + inpos] >>> 4) & 127))
+ + out[28 + outpos - 1];
+ out[29 + outpos] = (((in[6 + inpos] >>> 11) & 127))
+ + out[29 + outpos - 1];
+ out[30 + outpos] = (((in[6 + inpos] >>> 18) & 127))
+ + out[30 + outpos - 1];
+ out[31 + outpos] = ((in[6 + inpos] >>> 25))
+ + out[31 + outpos - 1];
+ }
+
+ protected static void integratedunpack8(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (((in[0 + inpos] >>> 0) & 255)) + initoffset;
+ out[1 + outpos] = (((in[0 + inpos] >>> 8) & 255))
+ + out[1 + outpos - 1];
+ out[2 + outpos] = (((in[0 + inpos] >>> 16) & 255))
+ + out[2 + outpos - 1];
+ out[3 + outpos] = ((in[0 + inpos] >>> 24))
+ + out[3 + outpos - 1];
+ out[4 + outpos] = (((in[1 + inpos] >>> 0) & 255))
+ + out[4 + outpos - 1];
+ out[5 + outpos] = (((in[1 + inpos] >>> 8) & 255))
+ + out[5 + outpos - 1];
+ out[6 + outpos] = (((in[1 + inpos] >>> 16) & 255))
+ + out[6 + outpos - 1];
+ out[7 + outpos] = ((in[1 + inpos] >>> 24))
+ + out[7 + outpos - 1];
+ out[8 + outpos] = (((in[2 + inpos] >>> 0) & 255))
+ + out[8 + outpos - 1];
+ out[9 + outpos] = (((in[2 + inpos] >>> 8) & 255))
+ + out[9 + outpos - 1];
+ out[10 + outpos] = (((in[2 + inpos] >>> 16) & 255))
+ + out[10 + outpos - 1];
+ out[11 + outpos] = ((in[2 + inpos] >>> 24))
+ + out[11 + outpos - 1];
+ out[12 + outpos] = (((in[3 + inpos] >>> 0) & 255))
+ + out[12 + outpos - 1];
+ out[13 + outpos] = (((in[3 + inpos] >>> 8) & 255))
+ + out[13 + outpos - 1];
+ out[14 + outpos] = (((in[3 + inpos] >>> 16) & 255))
+ + out[14 + outpos - 1];
+ out[15 + outpos] = ((in[3 + inpos] >>> 24))
+ + out[15 + outpos - 1];
+ out[16 + outpos] = (((in[4 + inpos] >>> 0) & 255))
+ + out[16 + outpos - 1];
+ out[17 + outpos] = (((in[4 + inpos] >>> 8) & 255))
+ + out[17 + outpos - 1];
+ out[18 + outpos] = (((in[4 + inpos] >>> 16) & 255))
+ + out[18 + outpos - 1];
+ out[19 + outpos] = ((in[4 + inpos] >>> 24))
+ + out[19 + outpos - 1];
+ out[20 + outpos] = (((in[5 + inpos] >>> 0) & 255))
+ + out[20 + outpos - 1];
+ out[21 + outpos] = (((in[5 + inpos] >>> 8) & 255))
+ + out[21 + outpos - 1];
+ out[22 + outpos] = (((in[5 + inpos] >>> 16) & 255))
+ + out[22 + outpos - 1];
+ out[23 + outpos] = ((in[5 + inpos] >>> 24))
+ + out[23 + outpos - 1];
+ out[24 + outpos] = (((in[6 + inpos] >>> 0) & 255))
+ + out[24 + outpos - 1];
+ out[25 + outpos] = (((in[6 + inpos] >>> 8) & 255))
+ + out[25 + outpos - 1];
+ out[26 + outpos] = (((in[6 + inpos] >>> 16) & 255))
+ + out[26 + outpos - 1];
+ out[27 + outpos] = ((in[6 + inpos] >>> 24))
+ + out[27 + outpos - 1];
+ out[28 + outpos] = (((in[7 + inpos] >>> 0) & 255))
+ + out[28 + outpos - 1];
+ out[29 + outpos] = (((in[7 + inpos] >>> 8) & 255))
+ + out[29 + outpos - 1];
+ out[30 + outpos] = (((in[7 + inpos] >>> 16) & 255))
+ + out[30 + outpos - 1];
+ out[31 + outpos] = ((in[7 + inpos] >>> 24))
+ + out[31 + outpos - 1];
+ }
+
+ protected static void integratedunpack9(final int initoffset,
+ final int[] in, int inpos, final int[] out, int outpos) {
+ out[0 + outpos] = (((in[0 + inpos] >>> 0) & 511)) + initoffset;
+ out[1 + outpos] = (((in[0 + inpos] >>> 9) & 511))
+ + out[1 + outpos - 1];
+ out[2 + outpos] = (((in[0 + inpos] >>> 18) & 511))
+ + out[2 + outpos - 1];
+ out[3 + outpos] = ((in[0 + inpos] >>> 27) | ((in[1 + inpos] & 15) << (9 - 4)))
+ + out[3 + outpos - 1];
+ out[4 + outpos] = (((in[1 + inpos] >>> 4) & 511))
+ + out[4 + outpos - 1];
+ out[5 + outpos] = (((in[1 + inpos] >>> 13) & 511))
+ + out[5 + outpos - 1];
+ out[6 + outpos] = (((in[1 + inpos] >>> 22) & 511))
+ + out[6 + outpos - 1];
+ out[7 + outpos] = ((in[1 + inpos] >>> 31) | ((in[2 + inpos] & 255) << (9 - 8)))
+ + out[7 + outpos - 1];
+ out[8 + outpos] = (((in[2 + inpos] >>> 8) & 511))
+ + out[8 + outpos - 1];
+ out[9 + outpos] = (((in[2 + inpos] >>> 17) & 511))
+ + out[9 + outpos - 1];
+ out[10 + outpos] = ((in[2 + inpos] >>> 26) | ((in[3 + inpos] & 7) << (9 - 3)))
+ + out[10 + outpos - 1];
+ out[11 + outpos] = (((in[3 + inpos] >>> 3) & 511))
+ + out[11 + outpos - 1];
+ out[12 + outpos] = (((in[3 + inpos] >>> 12) & 511))
+ + out[12 + outpos - 1];
+ out[13 + outpos] = (((in[3 + inpos] >>> 21) & 511))
+ + out[13 + outpos - 1];
+ out[14 + outpos] = ((in[3 + inpos] >>> 30) | ((in[4 + inpos] & 127) << (9 - 7)))
+ + out[14 + outpos - 1];
+ out[15 + outpos] = (((in[4 + inpos] >>> 7) & 511))
+ + out[15 + outpos - 1];
+ out[16 + outpos] = (((in[4 + inpos] >>> 16) & 511))
+ + out[16 + outpos - 1];
+ out[17 + outpos] = ((in[4 + inpos] >>> 25) | ((in[5 + inpos] & 3) << (9 - 2)))
+ + out[17 + outpos - 1];
+ out[18 + outpos] = (((in[5 + inpos] >>> 2) & 511))
+ + out[18 + outpos - 1];
+ out[19 + outpos] = (((in[5 + inpos] >>> 11) & 511))
+ + out[19 + outpos - 1];
+ out[20 + outpos] = (((in[5 + inpos] >>> 20) & 511))
+ + out[20 + outpos - 1];
+ out[21 + outpos] = ((in[5 + inpos] >>> 29) | ((in[6 + inpos] & 63) << (9 - 6)))
+ + out[21 + outpos - 1];
+ out[22 + outpos] = (((in[6 + inpos] >>> 6) & 511))
+ + out[22 + outpos - 1];
+ out[23 + outpos] = (((in[6 + inpos] >>> 15) & 511))
+ + out[23 + outpos - 1];
+ out[24 + outpos] = ((in[6 + inpos] >>> 24) | ((in[7 + inpos] & 1) << (9 - 1)))
+ + out[24 + outpos - 1];
+ out[25 + outpos] = (((in[7 + inpos] >>> 1) & 511))
+ + out[25 + outpos - 1];
+ out[26 + outpos] = (((in[7 + inpos] >>> 10) & 511))
+ + out[26 + outpos - 1];
+ out[27 + outpos] = (((in[7 + inpos] >>> 19) & 511))
+ + out[27 + outpos - 1];
+ out[28 + outpos] = ((in[7 + inpos] >>> 28) | ((in[8 + inpos] & 31) << (9 - 5)))
+ + out[28 + outpos - 1];
+ out[29 + outpos] = (((in[8 + inpos] >>> 5) & 511))
+ + out[29 + outpos - 1];
+ out[30 + outpos] = (((in[8 + inpos] >>> 14) & 511))
+ + out[30 + outpos - 1];
+ out[31 + outpos] = ((in[8 + inpos] >>> 23))
+ + out[31 + outpos - 1];
+ }
+
+}
diff --git a/src/main/java/me/lemire/integercompression/differential/IntegratedByteIntegerCODEC.java b/src/main/java/me/lemire/integercompression/differential/IntegratedByteIntegerCODEC.java
new file mode 100644
index 0000000..b0184b8
--- /dev/null
+++ b/src/main/java/me/lemire/integercompression/differential/IntegratedByteIntegerCODEC.java
@@ -0,0 +1,21 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+
+package me.lemire.integercompression.differential;
+
+import me.lemire.integercompression.ByteIntegerCODEC;
+
+/**
+ * Interface describing a CODEC to compress integers to bytes.
+ *
+ * "Integrated" means that it uses differential coding.
+ *
+ * @author Daniel Lemire
+ *
+ */
+public interface IntegratedByteIntegerCODEC extends ByteIntegerCODEC {
+}
\ No newline at end of file
diff --git a/src/main/java/me/lemire/integercompression/differential/IntegratedComposition.java b/src/main/java/me/lemire/integercompression/differential/IntegratedComposition.java
new file mode 100644
index 0000000..dd4257e
--- /dev/null
+++ b/src/main/java/me/lemire/integercompression/differential/IntegratedComposition.java
@@ -0,0 +1,73 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+package me.lemire.integercompression.differential;
+
+import me.lemire.integercompression.IntWrapper;
+
+/**
+ * Helper class to compose schemes.
+ *
+ * @author Daniel Lemire
+ */
+public class IntegratedComposition implements IntegratedIntegerCODEC {
+ IntegratedIntegerCODEC F1, F2;
+
+ /**
+ * Compose a scheme from a first one (f1) and a second one (f2). The
+ * first one is called first and then the second one tries to compress
+ * whatever remains from the first run.
+ *
+ * By convention, the first scheme should be such that if, during
+ * decoding, a 32-bit zero is first encountered, then there is no
+ * output.
+ *
+ * @param f1
+ * first codec
+ * @param f2
+ * second codec
+ */
+ public IntegratedComposition(IntegratedIntegerCODEC f1,
+ IntegratedIntegerCODEC f2) {
+ F1 = f1;
+ F2 = f2;
+ }
+
+
+ @Override
+ public void compress(int[] in, IntWrapper inpos, int inlength,
+ int[] out, IntWrapper outpos) {
+ if (inlength == 0) {
+ return;
+ }
+ int inposInit = inpos.get();
+ int outposInit = outpos.get();
+ F1.compress(in, inpos, inlength, out, outpos);
+ if (outpos.get() == outposInit) {
+ out[outposInit] = 0;
+ outpos.increment();
+ }
+ inlength -= inpos.get() - inposInit;
+ F2.compress(in, inpos, inlength, out, outpos);
+ }
+
+ @Override
+ public void uncompress(int[] in, IntWrapper inpos, int inlength,
+ int[] out, IntWrapper outpos) {
+ if (inlength == 0)
+ return;
+ int init = inpos.get();
+ F1.uncompress(in, inpos, inlength, out, outpos);
+ inlength -= inpos.get() - init;
+ F2.uncompress(in, inpos, inlength, out, outpos);
+ }
+
+ @Override
+ public String toString() {
+ return F1.toString() + " + " + F2.toString();
+ }
+
+}
diff --git a/src/main/java/me/lemire/integercompression/differential/IntegratedIntCompressor.java b/src/main/java/me/lemire/integercompression/differential/IntegratedIntCompressor.java
new file mode 100644
index 0000000..1d935c4
--- /dev/null
+++ b/src/main/java/me/lemire/integercompression/differential/IntegratedIntCompressor.java
@@ -0,0 +1,66 @@
+package me.lemire.integercompression.differential;
+
+import java.util.Arrays;
+
+import me.lemire.integercompression.IntWrapper;
+
+/**
+ * This is a convenience class that wraps a codec to provide
+ * a "friendly" API. It is useful to compress sorted integers.
+ * If your integers are not sorted (not even nearly so), please
+ * consider the IntCompressor class instead.
+ *
+ */
+public class IntegratedIntCompressor {
+ SkippableIntegratedIntegerCODEC codec;
+ /**
+ * Constructor wrapping a codec.
+ *
+ * @param c the underlying codec
+ */
+ public IntegratedIntCompressor(SkippableIntegratedIntegerCODEC c) {
+ codec = c;
+ }
+
+ /**
+ * Constructor with default codec.
+ */
+ public IntegratedIntCompressor() {
+ codec = new SkippableIntegratedComposition(new IntegratedBinaryPacking(),
+ new IntegratedVariableByte());
+ }
+
+ /**
+ * Compress an array and returns the compressed result as a new array.
+ *
+ * @param input array to be compressed
+ * @return compressed array
+ */
+ public int[] compress(int[] input) {
+ int maxCompressedLength = codec.maxHeadlessCompressedLength(new IntWrapper(0), input.length);
+ int [] compressed = new int[maxCompressedLength + 1]; // +1 to store the length of the input
+ compressed[0] = input.length;
+ IntWrapper outpos = new IntWrapper(1);
+ IntWrapper initvalue = new IntWrapper(0);
+ codec.headlessCompress(input, new IntWrapper(0), input.length, compressed, outpos, initvalue);
+ compressed = Arrays.copyOf(compressed,outpos.intValue());
+ return compressed;
+ }
+
+ /**
+ * Uncompress an array and returns the uncompressed result as a new array.
+ *
+ * @param compressed compressed array
+ * @return uncompressed array
+ */
+ public int[] uncompress(int[] compressed) {
+ int[] decompressed = new int[compressed[0]];
+ IntWrapper inpos = new IntWrapper(1);
+ codec.headlessUncompress(compressed, inpos,
+ compressed.length - inpos.intValue(),
+ decompressed, new IntWrapper(0),
+ decompressed.length, new IntWrapper(0));
+ return decompressed;
+ }
+
+}
diff --git a/src/main/java/me/lemire/integercompression/IntegratedIntegerCODEC.java b/src/main/java/me/lemire/integercompression/differential/IntegratedIntegerCODEC.java
similarity index 50%
rename from src/main/java/me/lemire/integercompression/IntegratedIntegerCODEC.java
rename to src/main/java/me/lemire/integercompression/differential/IntegratedIntegerCODEC.java
index 10e22db..4c03d29 100644
--- a/src/main/java/me/lemire/integercompression/IntegratedIntegerCODEC.java
+++ b/src/main/java/me/lemire/integercompression/differential/IntegratedIntegerCODEC.java
@@ -4,17 +4,15 @@
*
* (c) Daniel Lemire, http://lemire.me/en/
*/
-package me.lemire.integercompression;
+package me.lemire.integercompression.differential;
+import me.lemire.integercompression.IntegerCODEC;
/**
- *
- * This is just like IntegerCODEC, except that it indicates
- * that delta coding is "integrated", so that you don't
- * need a separate step for delta coding.
+ * This is just like IntegerCODEC, except that it indicates that delta coding is
+ * "integrated", so that you don't need a separate step for delta coding.
*
* @author Daniel Lemire
- *
*/
public interface IntegratedIntegerCODEC extends IntegerCODEC {
diff --git a/src/main/java/me/lemire/integercompression/differential/IntegratedVariableByte.java b/src/main/java/me/lemire/integercompression/differential/IntegratedVariableByte.java
new file mode 100644
index 0000000..a577031
--- /dev/null
+++ b/src/main/java/me/lemire/integercompression/differential/IntegratedVariableByte.java
@@ -0,0 +1,280 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+package me.lemire.integercompression.differential;
+
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.nio.IntBuffer;
+
+import me.lemire.integercompression.IntWrapper;
+
+/**
+ * Implementation of variable-byte with differential coding. For best
+ * performance, use it using the IntegratedByteIntegerCODEC interface.
+ *
+ * You should only use this scheme on sorted arrays. Use VariableByte if you
+ * have unsorted arrays.
+ *
+ * @author Daniel Lemire
+ */
+public class IntegratedVariableByte implements IntegratedIntegerCODEC, IntegratedByteIntegerCODEC,
+SkippableIntegratedIntegerCODEC {
+
+ private static final int MAX_BYTES_PER_INT = 5;
+
+ private static byte extract7bits(int i, long val) {
+ return (byte)((val >> (7 * i)) & ((1 << 7) - 1));
+ }
+
+ private static byte extract7bitsmaskless(int i, long val) {
+ return (byte)((val >> (7 * i)));
+ }
+
+ @Override
+ public void compress(int[] in, IntWrapper inpos, int inlength,
+ int[] out, IntWrapper outpos) {
+ if (inlength == 0)
+ return;
+ int initoffset = 0;
+ ByteBuffer buf = makeBuffer(inlength * 8);
+ buf.order(ByteOrder.LITTLE_ENDIAN);
+ for (int k = inpos.get(); k < inpos.get() + inlength; ++k) {
+ final long val = (in[k] - initoffset) & 0xFFFFFFFFL; // To be consistent with unsigned integers in C/C++
+ initoffset = in[k];
+ if (val < (1 << 7)) {
+ buf.put((byte)(val | (1 << 7)));
+ } else if (val < (1 << 14)) {
+ buf.put((byte)extract7bits(0, val));
+ buf.put((byte)(extract7bitsmaskless(1, (val)) | (1 << 7)));
+ } else if (val < (1 << 21)) {
+ buf.put((byte)extract7bits(0, val));
+ buf.put((byte)extract7bits(1, val));
+ buf.put((byte)(extract7bitsmaskless(2, (val)) | (1 << 7)));
+ } else if (val < (1 << 28)) {
+ buf.put((byte)extract7bits(0, val));
+ buf.put((byte)extract7bits(1, val));
+ buf.put((byte)extract7bits(2, val));
+ buf.put((byte)(extract7bitsmaskless(3, (val)) | (1 << 7)));
+ } else {
+ buf.put((byte)extract7bits(0, val));
+ buf.put((byte)extract7bits(1, val));
+ buf.put((byte)extract7bits(2, val));
+ buf.put((byte)extract7bits(3, val));
+ buf.put((byte)(extract7bitsmaskless(4, (val)) | (1 << 7)));
+ }
+ }
+ while (buf.position() % 4 != 0)
+ buf.put((byte) 0);
+ final int length = buf.position();
+ buf.flip();
+ IntBuffer ibuf = buf.asIntBuffer();
+ ibuf.get(out, outpos.get(), length / 4);
+ outpos.add(length / 4);
+ inpos.add(inlength);
+ }
+
+ @Override
+ public void compress(int[] in, IntWrapper inpos, int inlength,
+ byte[] out, IntWrapper outpos) {
+ if (inlength == 0)
+ return;
+ int initoffset = 0;
+ int outpostmp = outpos.get();
+ for (int k = inpos.get(); k < inpos.get() + inlength; ++k) {
+ final long val = (in[k] - initoffset) & 0xFFFFFFFFL; // To be consistent with unsigned integers in C/C++
+ initoffset = in[k];
+ if (val < (1 << 7)) {
+ out[outpostmp++] = (byte)(val | (1 << 7));
+ } else if (val < (1 << 14)) {
+ out[outpostmp++] = (byte)extract7bits(0, val);
+ out[outpostmp++] = (byte)(extract7bitsmaskless(1, (val)) | (1 << 7));
+ } else if (val < (1 << 21)) {
+ out[outpostmp++] = (byte)extract7bits(0, val);
+ out[outpostmp++] = (byte)extract7bits(1, val);
+ out[outpostmp++] = (byte)(extract7bitsmaskless(2, (val)) | (1 << 7));
+ } else if (val < (1 << 28)) {
+ out[outpostmp++] = (byte)extract7bits(0, val);
+ out[outpostmp++] = (byte)extract7bits(1, val);
+ out[outpostmp++] = (byte)extract7bits(2, val);
+ out[outpostmp++] = (byte)(extract7bitsmaskless(3, (val)) | (1 << 7));
+ } else {
+ out[outpostmp++] = (byte)extract7bits(0, val);
+ out[outpostmp++] = (byte)extract7bits(1, val);
+ out[outpostmp++] = (byte)extract7bits(2, val);
+ out[outpostmp++] = (byte)extract7bits(3, val);
+ out[outpostmp++] = (byte)(extract7bitsmaskless(4, (val)) | (1 << 7));
+ }
+ }
+ outpos.set(outpostmp);
+ inpos.add(inlength);
+ }
+
+ @Override
+ public void uncompress(int[] in, IntWrapper inpos, int inlength,
+ int[] out, IntWrapper outpos) {
+ int s = 0;
+ int val = 0;
+ int p = inpos.get();
+ int finalp = inpos.get() + inlength;
+ int tmpoutpos = outpos.get();
+ int initoffset = 0;
+ for (int v = 0, shift =0; p < finalp;) {
+ val = in[p];
+ int c = (byte) (val >>> s);
+ s += 8;
+ p += s>>5;
+ s = s & 31;
+ v += ((c & 127) << shift);
+ if ((c & 128) == 128) {
+ out[tmpoutpos] = v + initoffset;
+ initoffset = out[tmpoutpos];
+ tmpoutpos++;
+ v = 0;
+ shift = 0;
+ } else
+ shift +=7;
+ }
+ outpos.set(tmpoutpos);
+ inpos.add(inlength);
+ }
+
+ @Override
+ public void uncompress(byte[] in, IntWrapper inpos, int inlength,
+ int[] out, IntWrapper outpos) {
+ int p = inpos.get();
+ int initoffset = 0;
+ int finalp = inpos.get() + inlength;
+ int tmpoutpos = outpos.get();
+ for (int v = 0;p < finalp; out[tmpoutpos++] = (initoffset = initoffset + v)) {
+ v = in[p] & 0x7F;
+ if (in[p] < 0 ) {
+ p+= 1;
+ continue;
+ }
+ v = ((in[p+1] & 0x7F)<<7) | v;
+ if (in[p+1] < 0) {
+ p+= 2;
+ continue;
+ }
+ v = ((in[p+2] & 0x7F)<<14) | v;
+ if (in[p+2] < 0) {
+ p+= 3;
+ continue;
+ }
+ v = ((in[p+3] & 0x7F)<<21) | v;
+ if (in[p+3] < 0) {
+ p+= 4;
+ continue;
+ }
+ v = ((in[p+4] & 0x7F)<<28) | v;
+ p+= 5;
+ }
+ outpos.set(tmpoutpos);
+ inpos.add(p);
+ }
+
+ @Override
+ public String toString() {
+ return this.getClass().getSimpleName();
+ }
+
+ @Override
+ public void headlessCompress(int[] in, IntWrapper inpos, int inlength,
+ int[] out, IntWrapper outpos, IntWrapper initvalue) {
+ if (inlength == 0)
+ return;
+ int initoffset = initvalue.get();
+ initvalue.set(in[inpos.get()+inlength -1]);
+ ByteBuffer buf = makeBuffer(inlength * 8);
+ buf.order(ByteOrder.LITTLE_ENDIAN);
+ for (int k = inpos.get(); k < inpos.get() + inlength; ++k) {
+ final long val = (in[k] - initoffset) & 0xFFFFFFFFL; // To be consistent with unsigned integers in C/C++
+ initoffset = in[k];
+ if (val < (1 << 7)) {
+ buf.put((byte) (val | (1 << 7)));
+ } else if (val < (1 << 14)) {
+ buf.put((byte) extract7bits(0, val));
+ buf.put((byte) (extract7bitsmaskless(1, (val)) | (1 << 7)));
+ } else if (val < (1 << 21)) {
+ buf.put((byte) extract7bits(0, val));
+ buf.put((byte) extract7bits(1, val));
+ buf.put((byte) (extract7bitsmaskless(2, (val)) | (1 << 7)));
+ } else if (val < (1 << 28)) {
+ buf.put((byte) extract7bits(0, val));
+ buf.put((byte) extract7bits(1, val));
+ buf.put((byte) extract7bits(2, val));
+ buf.put((byte) (extract7bitsmaskless(3, (val)) | (1 << 7)));
+ } else {
+ buf.put((byte) extract7bits(0, val));
+ buf.put((byte) extract7bits(1, val));
+ buf.put((byte) extract7bits(2, val));
+ buf.put((byte) extract7bits(3, val));
+ buf.put((byte) (extract7bitsmaskless(4, (val)) | (1 << 7)));
+ }
+ }
+ while (buf.position() % 4 != 0)
+ buf.put((byte) 0);
+ final int length = buf.position();
+ buf.flip();
+ IntBuffer ibuf = buf.asIntBuffer();
+ ibuf.get(out, outpos.get(), length / 4);
+ outpos.add(length / 4);
+ inpos.add(inlength);
+ }
+
+ @Override
+ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength,
+ int[] out, IntWrapper outpos, int num, IntWrapper initvalue) {
+ int s = 0;
+ int val = 0;
+
+ int p = inpos.get();
+ int initoffset = initvalue.get();
+ int tmpoutpos = outpos.get();
+ int finaloutpos = num + tmpoutpos;
+ for (int v = 0, shift = 0; tmpoutpos < finaloutpos;) {
+
+ val = in[p];
+ int c = (byte) (val >>> s);
+ s += 8;
+ p += s>>5;
+ s = s & 31;
+ v += ((c & 127) << shift);
+
+ if ((c & 128) == 128) {
+
+ out[tmpoutpos++] = (initoffset = initoffset + v);
+ v = 0;
+ shift = 0;
+ } else
+ shift += 7;
+ }
+ initvalue.set(out[tmpoutpos-1]);
+ outpos.set(tmpoutpos);
+
+ inpos.set(p + (s!=0 ? 1 : 0));
+ }
+
+ @Override
+ public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) {
+ int maxLengthInBytes = inlength * MAX_BYTES_PER_INT;
+ int maxLengthInInts = (maxLengthInBytes + Integer.BYTES - 1) / Integer.BYTES;
+ compressedPositions.add(inlength);
+ return maxLengthInInts;
+ }
+
+ /**
+ * Creates a new buffer of the requested size.
+ *
+ * In case you need a different way to allocate buffers, you can override this method
+ * with a custom behavior. The default implementation allocates a new Java direct
+ * {@link ByteBuffer} on each invocation.
+ */
+ protected ByteBuffer makeBuffer(int sizeInBytes) {
+ return ByteBuffer.allocateDirect(sizeInBytes);
+ }
+}
diff --git a/src/main/java/me/lemire/integercompression/differential/SkippableIntegratedComposition.java b/src/main/java/me/lemire/integercompression/differential/SkippableIntegratedComposition.java
new file mode 100644
index 0000000..4786ec5
--- /dev/null
+++ b/src/main/java/me/lemire/integercompression/differential/SkippableIntegratedComposition.java
@@ -0,0 +1,90 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+package me.lemire.integercompression.differential;
+
+import me.lemire.integercompression.IntWrapper;
+
+/**
+ * Helper class to compose schemes.
+ *
+ * @author Daniel Lemire
+ */
+public class SkippableIntegratedComposition implements
+ SkippableIntegratedIntegerCODEC {
+ SkippableIntegratedIntegerCODEC F1, F2;
+
+ /**
+ * Compose a scheme from a first one (f1) and a second one (f2). The first
+ * one is called first and then the second one tries to compress whatever
+ * remains from the first run.
+ *
+ * By convention, the first scheme should be such that if, during decoding,
+ * a 32-bit zero is first encountered, then there is no output.
+ *
+ * @param f1
+ * first codec
+ * @param f2
+ * second codec
+ */
+ public SkippableIntegratedComposition(SkippableIntegratedIntegerCODEC f1,
+ SkippableIntegratedIntegerCODEC f2) {
+ F1 = f1;
+ F2 = f2;
+ }
+
+
+
+ @Override
+ public String toString() {
+ return F1.toString() + " + " + F2.toString();
+ }
+
+ @Override
+ public void headlessCompress(int[] in, IntWrapper inpos, int inlength,
+ int[] out, IntWrapper outpos, IntWrapper initvalue) {
+ if (inlength == 0)
+ return;
+ final int init = inpos.get();
+ int outposInit = outpos.get();
+
+ F1.headlessCompress(in, inpos, inlength, out, outpos, initvalue);
+ if (outpos.get() == outposInit) {
+ out[outposInit] = 0;
+ outpos.increment();
+ }
+ inlength -= inpos.get() - init;
+ F2.headlessCompress(in, inpos, inlength, out, outpos, initvalue);
+ }
+
+ @Override
+ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength,
+ int[] out, IntWrapper outpos, int num, IntWrapper initvalue) {
+ if (inlength == 0)
+ return;
+ int init = inpos.get();
+ int outposInit = outpos.get();
+
+ F1.headlessUncompress(in, inpos, inlength, out, outpos,num,initvalue);
+ if (inpos.get() == init) {
+ inpos.increment();
+ }
+ inlength -= inpos.get() - init;
+
+ num -= outpos.get() - outposInit;
+ F2.headlessUncompress(in, inpos, inlength, out, outpos,num,initvalue);
+ }
+
+ @Override
+ public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) {
+ int init = compressedPositions.get();
+ int maxLength = F1.maxHeadlessCompressedLength(compressedPositions, inlength);
+ maxLength += 1; // Add +1 for the potential F2 header. Question: is this header actually needed in the headless version?
+ inlength -= compressedPositions.get() - init;
+ maxLength += F2.maxHeadlessCompressedLength(compressedPositions, inlength);
+ return maxLength;
+ }
+}
diff --git a/src/main/java/me/lemire/integercompression/differential/SkippableIntegratedIntegerCODEC.java b/src/main/java/me/lemire/integercompression/differential/SkippableIntegratedIntegerCODEC.java
new file mode 100644
index 0000000..e2df754
--- /dev/null
+++ b/src/main/java/me/lemire/integercompression/differential/SkippableIntegratedIntegerCODEC.java
@@ -0,0 +1,91 @@
+/**
+ * This is code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+
+package me.lemire.integercompression.differential;
+
+import me.lemire.integercompression.IntWrapper;
+
+
+/**
+ * Interface describing a standard CODEC to compress integers. This is a
+ * variation on the IntegerCODEC interface meant to be used for random access
+ * and with integrated differential coding
+ * (i.e., given a large array, you can segment it and decode just the subarray you need).
+ *
+ * The main differences are that we must specify the number of integers we wish to
+ * decode as well as the initial value (for differential coding). This information
+ * might be stored elsewhere.
+ *
+ *
+ * @author Daniel Lemire
+ *
+ */
+public interface SkippableIntegratedIntegerCODEC {
+ /**
+ * Compress data from an array to another array.
+ *
+ * Both inpos and outpos are modified to represent how much data was read
+ * and written to if 12 ints (inlength = 12) are compressed to 3 ints, then
+ * inpos will be incremented by 12 while outpos will be incremented by 3 we
+ * use IntWrapper to pass the values by reference.
+ *
+ * @param in
+ * input array
+ * @param inpos
+ * location in the input array
+ * @param inlength
+ * how many integers to compress
+ * @param out
+ * output array
+ * @param outpos
+ * where to write in the output array
+ * @param initvalue initial value for the purpose of differential coding, the value is automatically updated
+ */
+ public void headlessCompress(int[] in, IntWrapper inpos, int inlength, int[] out,
+ IntWrapper outpos, IntWrapper initvalue);
+
+ /**
+ * Uncompress data from an array to another array.
+ *
+ * Both inpos and outpos parameters are modified to indicate new positions
+ * after read/write.
+ *
+ * @param in
+ * array containing data in compressed form
+ * @param inpos
+ * where to start reading in the array
+ * @param inlength
+ * length of the compressed data (ignored by some schemes)
+ * @param out
+ * array where to write the compressed output
+ * @param outpos
+ * where to write the compressed output in out
+ * @param num
+ * number of integers we want to decode, the actual number of integers decoded can be less
+ * @param initvalue initial value for the purpose of differential coding, the value is automatically updated
+ */
+ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] out,
+ IntWrapper outpos, int num, IntWrapper initvalue);
+
+ /**
+ * Compute the maximum number of integers that might be required to store
+ * the compressed form of a given input array segment, without headers.
+ *
+ * This is useful to pre-allocate the output buffer before calling
+ * {@link #headlessCompress(int[], IntWrapper, int, int[], IntWrapper, IntWrapper)}.
+ *
+ *
+ * @param compressedPositions
+ * since not all schemes compress every input integer, this parameter
+ * returns how many input integers will actually be compressed.
+ * This is useful when composing multiple schemes.
+ * @param inlength
+ * number of integers to be compressed
+ * @return the maximum number of integers needed in the output array
+ */
+ int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength);
+}
diff --git a/src/main/java/me/lemire/integercompression/differential/XorBinaryPacking.java b/src/main/java/me/lemire/integercompression/differential/XorBinaryPacking.java
new file mode 100644
index 0000000..0e2b067
--- /dev/null
+++ b/src/main/java/me/lemire/integercompression/differential/XorBinaryPacking.java
@@ -0,0 +1,139 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ */
+package me.lemire.integercompression.differential;
+
+import me.lemire.integercompression.BitPacking;
+import me.lemire.integercompression.IntWrapper;
+
+/**
+ * BinaryPacking over XOR differential.
+ *
+ * IntegratedIntegerCODEC is =
+ * new Composition(new XorBinaryPacking(), new VariableByte())
+ *
+ * @author MURAOKA Taro http://github.com/koron
+ */
+public final class XorBinaryPacking implements IntegratedIntegerCODEC {
+
+ private static final int BLOCK_LENGTH = 128;
+
+ @Override
+ public void compress(final int[] inBuf, final IntWrapper inPos,
+ int inLen, final int[] outBuf, final IntWrapper outPos) {
+ inLen = inLen - inLen % BLOCK_LENGTH;
+ if (inLen == 0)
+ return;
+
+ outBuf[outPos.get()] = inLen;
+ outPos.increment();
+
+ int context = 0;
+ final int[] work = new int[32];
+
+ int op = outPos.get();
+ int ip = inPos.get();
+ final int inPosLast = ip + inLen;
+ for (; ip < inPosLast; ip += BLOCK_LENGTH) {
+ final int bits1 = xorMaxBits(inBuf, ip + 0, 32, context);
+ final int bits2 = xorMaxBits(inBuf, ip + 32, 32,
+ inBuf[ip + 31]);
+ final int bits3 = xorMaxBits(inBuf, ip + 64, 32,
+ inBuf[ip + 63]);
+ final int bits4 = xorMaxBits(inBuf, ip + 96, 32,
+ inBuf[ip + 95]);
+ outBuf[op++] = (bits1 << 24) | (bits2 << 16)
+ | (bits3 << 8) | (bits4 << 0);
+ op += xorPack(inBuf, ip + 0, outBuf, op, bits1,
+ context, work);
+ op += xorPack(inBuf, ip + 32, outBuf, op, bits2,
+ inBuf[ip + 31], work);
+ op += xorPack(inBuf, ip + 64, outBuf, op, bits3,
+ inBuf[ip + 63], work);
+ op += xorPack(inBuf, ip + 96, outBuf, op, bits4,
+ inBuf[ip + 95], work);
+ context = inBuf[ip + 127];
+ }
+
+ inPos.add(inLen);
+ outPos.set(op);
+ }
+
+ @Override
+ public void uncompress(int[] inBuf, IntWrapper inPos, int inLen,
+ int[] outBuf, IntWrapper outPos) {
+ if (inLen == 0)
+ return;
+
+ final int outLen = inBuf[inPos.get()];
+ inPos.increment();
+
+ int context = 0;
+ final int[] work = new int[32];
+
+ int ip = inPos.get();
+ int op = outPos.get();
+ final int outPosLast = op + outLen;
+ for (; op < outPosLast; op += BLOCK_LENGTH) {
+ final int bits1 = (inBuf[ip] >>> 24);
+ final int bits2 = (inBuf[ip] >>> 16) & 0xFF;
+ final int bits3 = (inBuf[ip] >>> 8) & 0xFF;
+ final int bits4 = (inBuf[ip] >>> 0) & 0xFF;
+ ++ip;
+ ip += xorUnpack(inBuf, ip, outBuf, op + 0, bits1,
+ context, work);
+ ip += xorUnpack(inBuf, ip, outBuf, op + 32, bits2,
+ outBuf[op + 31], work);
+ ip += xorUnpack(inBuf, ip, outBuf, op + 64, bits3,
+ outBuf[op + 63], work);
+ ip += xorUnpack(inBuf, ip, outBuf, op + 96, bits4,
+ outBuf[op + 95], work);
+ context = outBuf[op + 127];
+ }
+
+ outPos.add(outLen);
+ inPos.set(ip);
+ }
+
+ @Override
+ public String toString() {
+ return this.getClass().getSimpleName();
+ }
+
+ private static int xorMaxBits(final int[] buf, final int offset,
+ final int length, final int context) {
+ int mask = buf[offset] ^ context;
+ final int M = offset + length;
+ for (int i = offset + 1, prev = offset; i < M; ++i, ++prev) {
+ mask |= buf[i] ^ buf[prev];
+ }
+
+ return 32 - Integer.numberOfLeadingZeros(mask);
+ }
+
+ private static int xorPack(final int[] inBuf, final int inOff,
+ final int[] outBuf, final int outOff, final int validBits,
+ final int context, final int[] work) {
+ work[0] = inBuf[inOff] ^ context;
+ for (int i = 1, p = inOff + 1; i < 32; ++i, ++p) {
+ work[i] = inBuf[p] ^ inBuf[p - 1];
+ }
+ BitPacking.fastpackwithoutmask(work, 0, outBuf, outOff,
+ validBits);
+
+ return validBits;
+ }
+
+ private static int xorUnpack(final int[] inBuf, final int inOff,
+ final int[] outBuf, final int outOff, final int validBits,
+ int context, final int[] work) {
+
+ BitPacking.fastunpack(inBuf, inOff, work, 0, validBits);
+ outBuf[outOff] = context = work[0] ^ context;
+ for (int i = 1, p = outOff + 1; i < 32; ++i, ++p) {
+ outBuf[p] = context = work[i] ^ context;
+ }
+ return validBits;
+ }
+}
diff --git a/src/main/java/me/lemire/integercompression/synth/ClusteredDataGenerator.java b/src/main/java/me/lemire/integercompression/synth/ClusteredDataGenerator.java
index 897b3e5..12bf550 100644
--- a/src/main/java/me/lemire/integercompression/synth/ClusteredDataGenerator.java
+++ b/src/main/java/me/lemire/integercompression/synth/ClusteredDataGenerator.java
@@ -7,62 +7,82 @@
package me.lemire.integercompression.synth;
/**
- * This class will generate uniformly distributed lists of random integers.
+ * This class will generate lists of random integers based on the clustered
+ * model:
+ *
+ * Reference: Vo Ngoc Anh and Alistair Moffat. 2010. Index compression using
+ * 64-bit words. Softw. Pract. Exper.40, 2 (February 2010), 131-147.
*
* @author Daniel Lemire
*/
public class ClusteredDataGenerator {
- UniformDataGenerator unidg = new UniformDataGenerator();
+ UniformDataGenerator unidg = new UniformDataGenerator();
- public ClusteredDataGenerator() {
- }
+ /**
+ * Creating random array generator.
+ */
+ public ClusteredDataGenerator() {
+ }
- void fillUniform(int[] array, int offset, int length, int Min, int Max) {
- int[] v = this.unidg.generateUniform(length, Max - Min);
- for (int k = 0; k < v.length; ++k)
- array[k + offset] = Min + v[k];
- }
+ void fillUniform(int[] array, int offset, int length, int Min, int Max) {
+ int[] v = this.unidg.generateUniform(length, Max - Min);
+ for (int k = 0; k < v.length; ++k)
+ array[k + offset] = Min + v[k];
+ }
- void fillClustered(int[] array, int offset, int length, int Min, int Max) {
- final int range = Max - Min;
- if ((range == length) || (length <= 10)) {
- fillUniform(array, offset, length, Min, Max);
- return;
- }
- final int cut = length
- / 2
- + ((range - length - 1 > 0) ? this.unidg.rand.nextInt(range - length - 1)
- : 0);
- final double p = this.unidg.rand.nextDouble();
- if (p < 0.25) {
- fillUniform(array, offset, length / 2, Min, Min + cut);
- fillClustered(array, offset + length / 2, length - length / 2, Min + cut,
- Max);
- } else if (p < 0.5) {
- fillClustered(array, offset, length / 2, Min, Min + cut);
- fillUniform(array, offset + length / 2, length - length / 2, Min + cut,
- Max);
- } else {
- fillClustered(array, offset, length / 2, Min, Min + cut);
- fillClustered(array, offset + length / 2, length - length / 2, Min + cut,
- Max);
- }
- }
+ void fillClustered(int[] array, int offset, int length, int Min, int Max) {
+ final int range = Max - Min;
+ if ((range == length) || (length <= 10)) {
+ fillUniform(array, offset, length, Min, Max);
+ return;
+ }
+ final int cut = length
+ / 2
+ + ((range - length - 1 > 0) ? this.unidg.rand
+ .nextInt(range - length - 1) : 0);
+ final double p = this.unidg.rand.nextDouble();
+ if (p < 0.25) {
+ fillUniform(array, offset, length / 2, Min, Min + cut);
+ fillClustered(array, offset + length / 2, length
+ - length / 2, Min + cut, Max);
+ } else if (p < 0.5) {
+ fillClustered(array, offset, length / 2, Min, Min + cut);
+ fillUniform(array, offset + length / 2, length - length
+ / 2, Min + cut, Max);
+ } else {
+ fillClustered(array, offset, length / 2, Min, Min + cut);
+ fillClustered(array, offset + length / 2, length
+ - length / 2, Min + cut, Max);
+ }
+ }
- /**
- * generates randomly N distinct integers from 0 to Max.
- */
- public int[] generateClustered(int N, int Max) {
- int[] array = new int[N];
- fillClustered(array, 0, N, 0, Max);
- return array;
- }
+ /**
+ * generates randomly N distinct integers from 0 to Max.
+ *
+ * @param N
+ * number of integers to generate
+ * @param Max
+ * maximal value of the integers
+ * @return array containing the integers
+ */
+ public int[] generateClustered(int N, int Max) {
+ int[] array = new int[N];
+ fillClustered(array, 0, N, 0, Max);
+ return array;
+ }
- public static void main(String[] args) {
- int[] example = (new ClusteredDataGenerator()).generateClustered(20, 1000);
- for (int k = 0; k < example.length; ++k)
- System.out.println(example[k]);
- }
+ /**
+ * Little test program.
+ *
+ * @param args
+ * arguments are ignored
+ */
+ public static void main(final String[] args) {
+ int[] example = (new ClusteredDataGenerator())
+ .generateClustered(20, 1000);
+ for (int k = 0; k < example.length; ++k)
+ System.out.println(example[k]);
+ }
}
diff --git a/src/main/java/me/lemire/integercompression/synth/UniformDataGenerator.java b/src/main/java/me/lemire/integercompression/synth/UniformDataGenerator.java
index 7e7cf3e..a50497c 100644
--- a/src/main/java/me/lemire/integercompression/synth/UniformDataGenerator.java
+++ b/src/main/java/me/lemire/integercompression/synth/UniformDataGenerator.java
@@ -6,42 +6,109 @@
*/
package me.lemire.integercompression.synth;
+import java.util.Arrays;
+import java.util.BitSet;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.Random;
-import java.util.TreeSet;
/**
- * This class will generate "clustered" lists of random integers. That is, the
- * integers tend not to be randomly distributed.
+ * This class will generate "uniform" lists of random integers.
*
* @author Daniel Lemire
*/
public class UniformDataGenerator {
- Random rand = new Random();
-
- public UniformDataGenerator() {
- }
-
- /**
- * generates randomly N distinct integers from 0 to Max.
- */
- int[] generateUniform(int N, int Max) {
- if (N > Max)
- throw new RuntimeException("not possible");
- int[] ans = new int[N];
- if (N == Max) {
- for (int k = 0; k < N; ++k)
- ans[k] = k;
- return ans;
- }
- // can be done faster:
- TreeSet s = new TreeSet();
- while (s.size() < N)
- s.add(new Integer(this.rand.nextInt(Max)));
- Iterator i = s.iterator();
- for (int k = 0; k < N; ++k)
- ans[k] = i.next().intValue();
- return ans;
- }
-
-}
+ /**
+ * construct generator of random arrays.
+ */
+ public UniformDataGenerator() {
+ this.rand = new Random();
+ }
+
+ /**
+ * @param seed
+ * random seed
+ */
+ public UniformDataGenerator(final int seed) {
+ this.rand = new Random(seed);
+ }
+
+ /**
+ * generates randomly N distinct integers from 0 to Max.
+ */
+ int[] generateUniformHash(int N, int Max) {
+ if (N > Max)
+ throw new RuntimeException("not possible");
+ int[] ans = new int[N];
+ HashSet s = new HashSet();
+ while (s.size() < N)
+ s.add(this.rand.nextInt(Max));
+ Iterator i = s.iterator();
+ for (int k = 0; k < N; ++k)
+ ans[k] = i.next().intValue();
+ Arrays.sort(ans);
+ return ans;
+ }
+
+ /**
+ * output all integers from the range [0,Max) that are not in the array
+ */
+ static int[] negate(int[] x, int Max) {
+ int[] ans = new int[Max - x.length];
+ int i = 0;
+ int c = 0;
+ for (int j = 0; j < x.length; ++j) {
+ int v = x[j];
+ for (; i < v; ++i)
+ ans[c++] = i;
+ ++i;
+ }
+ while (c < ans.length)
+ ans[c++] = i++;
+ return ans;
+ }
+
+ /**
+ * generates randomly N distinct integers from 0 to Max.
+ *
+ * @param N
+ * number of integers to generate
+ * @param Max
+ * bound on the value of integers
+ * @return an array containing randomly selected integers
+ */
+ public int[] generateUniform(int N, int Max) {
+ if (N * 2 > Max) {
+ return negate(generateUniform(Max - N, Max), Max);
+ }
+ if (2048 * N > Max)
+ return generateUniformBitmap(N, Max);
+ return generateUniformHash(N, Max);
+ }
+
+ /**
+ * generates randomly N distinct integers from 0 to Max.
+ */
+ int[] generateUniformBitmap(int N, int Max) {
+ if (N > Max)
+ throw new RuntimeException("not possible");
+ int[] ans = new int[N];
+ BitSet bs = new BitSet(Max);
+ int cardinality = 0;
+ while (cardinality < N) {
+ int v = rand.nextInt(Max);
+ if (!bs.get(v)) {
+ bs.set(v);
+ cardinality++;
+ }
+ }
+ int pos = 0;
+ for (int i = bs.nextSetBit(0); i >= 0; i = bs.nextSetBit(i + 1)) {
+ ans[pos++] = i;
+ }
+ return ans;
+ }
+
+ Random rand = new Random();
+
+}
\ No newline at end of file
diff --git a/src/main/java/me/lemire/integercompression/vector/VectorBinaryPacking.java b/src/main/java/me/lemire/integercompression/vector/VectorBinaryPacking.java
new file mode 100644
index 0000000..6517357
--- /dev/null
+++ b/src/main/java/me/lemire/integercompression/vector/VectorBinaryPacking.java
@@ -0,0 +1,166 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ * (c) Intel Corp. (for Vector implementation)
+ */
+package me.lemire.integercompression.vector;
+
+import jdk.incubator.vector.IntVector;
+import jdk.incubator.vector.VectorOperators;
+import jdk.incubator.vector.VectorSpecies;
+import me.lemire.integercompression.IntWrapper;
+import me.lemire.integercompression.IntegerCODEC;
+import me.lemire.integercompression.SkippableIntegerCODEC;
+import me.lemire.integercompression.Util;
+import me.lemire.integercompression.vector.VectorBitPackerKernels.LaneWidth;
+
+/**
+ * BinaryPacking using the Vector API pack/unpack kernels: each block is packed at
+ * its own maximum bit width with no exceptions, so encoding is a single maxbits
+ * pass plus a vectorized pack. It encodes integers in blocks of BLOCK_SIZE
+ * integers. For arrays containing an arbitrary number of integers, you should use
+ * it in conjunction with another CODEC:
+ *
+ * IntegerCODEC ic =
+ * new Composition(new VectorBinaryPacking(), new VariableByte()).
+ *
+ * Note that this does not use differential coding: if you are working on sorted
+ * lists, use IntegratedBinaryPacking instead.
+ *
+ * Blocks are packed in a vectorized layout that differs by hardware vector lane
+ * width. The lane width is fixed at construction and not stored on the wire, so a
+ * stream must be decoded at the same lane width it was encoded at. The default
+ * constructor packs at this machine's preferred width; the {@code (LaneWidth)}
+ * constructor pins a width so a heterogeneous cluster can decode on its narrowest
+ * node.
+ *
+ * @author Daniel Lemire
+ */
+public final class VectorBinaryPacking implements IntegerCODEC, SkippableIntegerCODEC {
+ public final static int BLOCK_SIZE = 256;
+ private static final int MAX_BIT_WIDTH = Integer.SIZE;
+ // Output words a packed block occupies per bit of width (BLOCK_SIZE / Integer.SIZE).
+ private static final int WORDS_PER_BLOCK_BIT = BLOCK_SIZE / Integer.SIZE;
+ // Blocks sharing one packed header word (four max-bit values, one byte each).
+ private static final int GROUP_SIZE_IN_BLOCKS = 4;
+ // The OR-reduction result is independent of vector width, so it uses the widest
+ // available species regardless of the wire lane width.
+ private static final VectorSpecies MAXBITS_SPECIES = IntVector.SPECIES_PREFERRED;
+
+ private final VectorBitPackerKernels kernel;
+
+ /** Packs at this machine's preferred vector lane width. */
+ public VectorBinaryPacking() {
+ this(LaneWidth.PREFERRED);
+ }
+
+ /** Pins the lane width so a heterogeneous cluster can decode on its narrowest node. */
+ public VectorBinaryPacking(LaneWidth laneWidth) {
+ this.kernel = laneWidth.kernel;
+ }
+
+ @Override
+ public void compress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) {
+ inlength = Util.greatestMultiple(inlength, BLOCK_SIZE);
+ if (inlength == 0)
+ return;
+ out[outpos.get()] = inlength;
+ outpos.increment();
+ headlessCompress(in, inpos, inlength, out, outpos);
+ }
+
+ @Override
+ public void headlessCompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) {
+ inlength = Util.greatestMultiple(inlength, BLOCK_SIZE);
+ int tmpoutpos = outpos.get();
+ int s = inpos.get();
+ for (; s + BLOCK_SIZE * 4 - 1 < inpos.get() + inlength; s += BLOCK_SIZE * 4) {
+ final int mbits1 = maxbits(in, s);
+ final int mbits2 = maxbits(in, s + BLOCK_SIZE);
+ final int mbits3 = maxbits(in, s + 2 * BLOCK_SIZE);
+ final int mbits4 = maxbits(in, s + 3 * BLOCK_SIZE);
+ out[tmpoutpos++] = (mbits1 << 24) | (mbits2 << 16) | (mbits3 << 8) | (mbits4);
+ kernel.fastpackNoMask(in, s, out, tmpoutpos, mbits1);
+ tmpoutpos += WORDS_PER_BLOCK_BIT * mbits1;
+ kernel.fastpackNoMask(in, s + BLOCK_SIZE, out, tmpoutpos, mbits2);
+ tmpoutpos += WORDS_PER_BLOCK_BIT * mbits2;
+ kernel.fastpackNoMask(in, s + 2 * BLOCK_SIZE, out, tmpoutpos, mbits3);
+ tmpoutpos += WORDS_PER_BLOCK_BIT * mbits3;
+ kernel.fastpackNoMask(in, s + 3 * BLOCK_SIZE, out, tmpoutpos, mbits4);
+ tmpoutpos += WORDS_PER_BLOCK_BIT * mbits4;
+ }
+ for (; s < inpos.get() + inlength; s += BLOCK_SIZE) {
+ final int mbits = maxbits(in, s);
+ out[tmpoutpos++] = mbits;
+ kernel.fastpackNoMask(in, s, out, tmpoutpos, mbits);
+ tmpoutpos += WORDS_PER_BLOCK_BIT * mbits;
+ }
+ inpos.add(inlength);
+ outpos.set(tmpoutpos);
+ }
+
+ @Override
+ public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) {
+ if (inlength == 0)
+ return;
+ final int outlength = in[inpos.get()];
+ inpos.increment();
+ headlessUncompress(in, inpos, inlength, out, outpos, outlength);
+ }
+
+ @Override
+ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos, int num) {
+ final int outlength = Util.greatestMultiple(num, BLOCK_SIZE);
+ int tmpinpos = inpos.get();
+ int s = outpos.get();
+ for (; s + BLOCK_SIZE * 4 - 1 < outpos.get() + outlength; s += BLOCK_SIZE * 4) {
+ final int mbits1 = (in[tmpinpos] >>> 24);
+ final int mbits2 = (in[tmpinpos] >>> 16) & 0xFF;
+ final int mbits3 = (in[tmpinpos] >>> 8) & 0xFF;
+ final int mbits4 = (in[tmpinpos]) & 0xFF;
+ ++tmpinpos;
+ kernel.fastunpack(in, tmpinpos, out, s, mbits1);
+ tmpinpos += WORDS_PER_BLOCK_BIT * mbits1;
+ kernel.fastunpack(in, tmpinpos, out, s + BLOCK_SIZE, mbits2);
+ tmpinpos += WORDS_PER_BLOCK_BIT * mbits2;
+ kernel.fastunpack(in, tmpinpos, out, s + 2 * BLOCK_SIZE, mbits3);
+ tmpinpos += WORDS_PER_BLOCK_BIT * mbits3;
+ kernel.fastunpack(in, tmpinpos, out, s + 3 * BLOCK_SIZE, mbits4);
+ tmpinpos += WORDS_PER_BLOCK_BIT * mbits4;
+ }
+ for (; s < outpos.get() + outlength; s += BLOCK_SIZE) {
+ final int mbits = in[tmpinpos];
+ ++tmpinpos;
+ kernel.fastunpack(in, tmpinpos, out, s, mbits);
+ tmpinpos += WORDS_PER_BLOCK_BIT * mbits;
+ }
+ outpos.add(outlength);
+ inpos.set(tmpinpos);
+ }
+
+ @Override
+ public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) {
+ int blockCount = inlength / BLOCK_SIZE;
+ int headersSizeInInts = blockCount / GROUP_SIZE_IN_BLOCKS + (blockCount % GROUP_SIZE_IN_BLOCKS);
+ int blocksSizeInInts = blockCount * MAX_BIT_WIDTH * WORDS_PER_BLOCK_BIT;
+ compressedPositions.add(blockCount * BLOCK_SIZE);
+ return headersSizeInInts + blocksSizeInInts;
+ }
+
+ // Maximum bit width needed for a BLOCK_SIZE-value block: OR-reduce the values, then count significant bits.
+ private static int maxbits(int[] in, int pos) {
+ IntVector accumulator = IntVector.zero(MAXBITS_SPECIES);
+ for (int offset = 0; offset < BLOCK_SIZE; offset += MAXBITS_SPECIES.length()) {
+ accumulator = accumulator.or(IntVector.fromArray(MAXBITS_SPECIES, in, pos + offset));
+ }
+ int mask = accumulator.reduceLanes(VectorOperators.OR);
+ return Integer.SIZE - Integer.numberOfLeadingZeros(mask);
+ }
+
+ @Override
+ public String toString() {
+ return this.getClass().getSimpleName() + "(" + kernel.getClass().getSimpleName() + ")";
+ }
+}
diff --git a/src/main/java/me/lemire/integercompression/vector/VectorBitPacker.java b/src/main/java/me/lemire/integercompression/vector/VectorBitPacker.java
new file mode 100644
index 0000000..1b0df04
--- /dev/null
+++ b/src/main/java/me/lemire/integercompression/vector/VectorBitPacker.java
@@ -0,0 +1,4289 @@
+// Copyright (C) 2022 Intel Corporation
+
+// SPDX-License-Identifier: Apache-2.0
+
+package me.lemire.integercompression.vector;
+
+import java.util.Arrays;
+import jdk.incubator.vector.*;
+
+/**
+ * Vectorized bitpacking routines. This class is a version of the
+ * VectorBitPackerTerse class that with less branch instructions.
+ *
+ * The code is machine generated from VectorBitPackerTerse.java using helper
+ * classes.
+ *
+ */
+public class VectorBitPacker implements VectorBitPackerKernels {
+ private static final VectorSpecies SPECIES_512 =
+ IntVector.SPECIES_512;
+ private static final int VLEN_512 = 16;
+ private static final int BLOCK_SIZE = 256;
+
+ private static final IntVector MASK_2 =
+ IntVector.broadcast(SPECIES_512, (1 << 2) - 1);
+ private static final IntVector MASK_4 =
+ IntVector.broadcast(SPECIES_512, (1 << 4) - 1);
+ private static final IntVector MASK_6 =
+ IntVector.broadcast(SPECIES_512, (1 << 6) - 1);
+ private static final IntVector MASK_8 =
+ IntVector.broadcast(SPECIES_512, (1 << 8) - 1);
+ private static final IntVector MASK_10 =
+ IntVector.broadcast(SPECIES_512, (1 << 10) - 1);
+ private static final IntVector MASK_12 =
+ IntVector.broadcast(SPECIES_512, (1 << 12) - 1);
+ private static final IntVector MASK_14 =
+ IntVector.broadcast(SPECIES_512, (1 << 14) - 1);
+ private static final IntVector MASK_16 =
+ IntVector.broadcast(SPECIES_512, (1 << 16) - 1);
+ private static final IntVector MASK_18 =
+ IntVector.broadcast(SPECIES_512, (1 << 18) - 1);
+ private static final IntVector MASK_20 =
+ IntVector.broadcast(SPECIES_512, (1 << 20) - 1);
+ private static final IntVector MASK_22 =
+ IntVector.broadcast(SPECIES_512, (1 << 22) - 1);
+ private static final IntVector MASK_24 =
+ IntVector.broadcast(SPECIES_512, (1 << 24) - 1);
+ private static final IntVector MASK_26 =
+ IntVector.broadcast(SPECIES_512, (1 << 26) - 1);
+ private static final IntVector MASK_28 =
+ IntVector.broadcast(SPECIES_512, (1 << 28) - 1);
+ private static final IntVector MASK_30 =
+ IntVector.broadcast(SPECIES_512, (1 << 30) - 1);
+
+ /**
+ * Pack 32 integers
+ *
+ * @param in
+ * source array
+ * @param inpos
+ * position in source array
+ * @param out
+ * output array
+ * @param outpos
+ * position in output array
+ * @param b
+ * number of bits to use per integer
+ */
+ @Override
+ public void fastpack(final int[] in, int inpos, final int[] out,
+ int outpos, int b) {
+ switch (b) {
+ case 0:
+ break;
+ case 1:
+ VectorBitPacker256.fastpack1(in, inpos, out, outpos);
+ break;
+ case 2:
+ fastpack2(in, inpos, out, outpos);
+ break;
+ case 3:
+ VectorBitPacker256.fastpack3(in, inpos, out, outpos);
+ break;
+ case 4:
+ fastpack4(in, inpos, out, outpos);
+ break;
+ case 5:
+ VectorBitPacker256.fastpack5(in, inpos, out, outpos);
+ break;
+ case 6:
+ fastpack6(in, inpos, out, outpos);
+ break;
+ case 7:
+ VectorBitPacker256.fastpack7(in, inpos, out, outpos);
+ break;
+ case 8:
+ fastpack8(in, inpos, out, outpos);
+ break;
+ case 9:
+ VectorBitPacker256.fastpack9(in, inpos, out, outpos);
+ break;
+ case 10:
+ fastpack10(in, inpos, out, outpos);
+ break;
+ case 11:
+ VectorBitPacker256.fastpack11(in, inpos, out, outpos);
+ break;
+ case 12:
+ fastpack12(in, inpos, out, outpos);
+ break;
+ case 13:
+ VectorBitPacker256.fastpack13(in, inpos, out, outpos);
+ break;
+ case 14:
+ fastpack14(in, inpos, out, outpos);
+ break;
+ case 15:
+ VectorBitPacker256.fastpack15(in, inpos, out, outpos);
+ break;
+ case 16:
+ fastpack16(in, inpos, out, outpos);
+ break;
+ case 17:
+ VectorBitPacker256.fastpack17(in, inpos, out, outpos);
+ break;
+ case 18:
+ fastpack18(in, inpos, out, outpos);
+ break;
+ case 19:
+ VectorBitPacker256.fastpack19(in, inpos, out, outpos);
+ break;
+ case 20:
+ fastpack20(in, inpos, out, outpos);
+ break;
+ case 21:
+ VectorBitPacker256.fastpack21(in, inpos, out, outpos);
+ break;
+ case 22:
+ fastpack22(in, inpos, out, outpos);
+ break;
+ case 23:
+ VectorBitPacker256.fastpack23(in, inpos, out, outpos);
+ break;
+ case 24:
+ fastpack24(in, inpos, out, outpos);
+ break;
+ case 25:
+ VectorBitPacker256.fastpack25(in, inpos, out, outpos);
+ break;
+ case 26:
+ fastpack26(in, inpos, out, outpos);
+ break;
+ case 27:
+ VectorBitPacker256.fastpack27(in, inpos, out, outpos);
+ break;
+ case 28:
+ fastpack28(in, inpos, out, outpos);
+ break;
+ case 29:
+ VectorBitPacker256.fastpack29(in, inpos, out, outpos);
+ break;
+ case 30:
+ fastpack30(in, inpos, out, outpos);
+ break;
+ case 31:
+ VectorBitPacker256.fastpack31(in, inpos, out, outpos);
+ break;
+ case 32:
+ System.arraycopy(in, inpos, out, outpos, BLOCK_SIZE);
+ break;
+ }
+ }
+
+ @Override
+ public void fastpackNoMask(final int[] in, int inpos, final int[] out,
+ int outpos, int b) {
+ switch (b) {
+ case 0:
+ break;
+ case 1:
+ VectorBitPacker256.fastpackNoMask1(in, inpos, out, outpos);
+ break;
+ case 2:
+ fastpackNoMask2(in, inpos, out, outpos);
+ break;
+ case 3:
+ VectorBitPacker256.fastpackNoMask3(in, inpos, out, outpos);
+ break;
+ case 4:
+ fastpackNoMask4(in, inpos, out, outpos);
+ break;
+ case 5:
+ VectorBitPacker256.fastpackNoMask5(in, inpos, out, outpos);
+ break;
+ case 6:
+ fastpackNoMask6(in, inpos, out, outpos);
+ break;
+ case 7:
+ VectorBitPacker256.fastpackNoMask7(in, inpos, out, outpos);
+ break;
+ case 8:
+ fastpackNoMask8(in, inpos, out, outpos);
+ break;
+ case 9:
+ VectorBitPacker256.fastpackNoMask9(in, inpos, out, outpos);
+ break;
+ case 10:
+ fastpackNoMask10(in, inpos, out, outpos);
+ break;
+ case 11:
+ VectorBitPacker256.fastpackNoMask11(in, inpos, out, outpos);
+ break;
+ case 12:
+ fastpackNoMask12(in, inpos, out, outpos);
+ break;
+ case 13:
+ VectorBitPacker256.fastpackNoMask13(in, inpos, out, outpos);
+ break;
+ case 14:
+ fastpackNoMask14(in, inpos, out, outpos);
+ break;
+ case 15:
+ VectorBitPacker256.fastpackNoMask15(in, inpos, out, outpos);
+ break;
+ case 16:
+ fastpackNoMask16(in, inpos, out, outpos);
+ break;
+ case 17:
+ VectorBitPacker256.fastpackNoMask17(in, inpos, out, outpos);
+ break;
+ case 18:
+ fastpackNoMask18(in, inpos, out, outpos);
+ break;
+ case 19:
+ VectorBitPacker256.fastpackNoMask19(in, inpos, out, outpos);
+ break;
+ case 20:
+ fastpackNoMask20(in, inpos, out, outpos);
+ break;
+ case 21:
+ VectorBitPacker256.fastpackNoMask21(in, inpos, out, outpos);
+ break;
+ case 22:
+ fastpackNoMask22(in, inpos, out, outpos);
+ break;
+ case 23:
+ VectorBitPacker256.fastpackNoMask23(in, inpos, out, outpos);
+ break;
+ case 24:
+ fastpackNoMask24(in, inpos, out, outpos);
+ break;
+ case 25:
+ VectorBitPacker256.fastpackNoMask25(in, inpos, out, outpos);
+ break;
+ case 26:
+ fastpackNoMask26(in, inpos, out, outpos);
+ break;
+ case 27:
+ VectorBitPacker256.fastpackNoMask27(in, inpos, out, outpos);
+ break;
+ case 28:
+ fastpackNoMask28(in, inpos, out, outpos);
+ break;
+ case 29:
+ VectorBitPacker256.fastpackNoMask29(in, inpos, out, outpos);
+ break;
+ case 30:
+ fastpackNoMask30(in, inpos, out, outpos);
+ break;
+ case 31:
+ VectorBitPacker256.fastpackNoMask31(in, inpos, out, outpos);
+ break;
+ case 32:
+ System.arraycopy(in, inpos, out, outpos, BLOCK_SIZE);
+ break;
+ }
+ }
+
+ /**
+ * Unpack 32 integers
+ *
+ * @param in
+ * source array
+ * @param inpos
+ * position in source array
+ * @param out
+ * output array
+ * @param outpos
+ * position in output array
+ * @param b
+ * number of bits to use per integer
+ */
+ @Override
+ public void fastunpack(final int[] in, int inpos, final int[] out,
+ int outpos, int b) {
+ switch (b) {
+ case 0:
+ Arrays.fill(out, outpos, outpos + 256, 0);
+ break;
+ case 1:
+ VectorBitPacker256.fastunpack1(in, inpos, out, outpos);
+ break;
+ case 2:
+ fastunpack2(in, inpos, out, outpos);
+ break;
+ case 3:
+ VectorBitPacker256.fastunpack3(in, inpos, out, outpos);
+ break;
+ case 4:
+ fastunpack4(in, inpos, out, outpos);
+ break;
+ case 5:
+ VectorBitPacker256.fastunpack5(in, inpos, out, outpos);
+ break;
+ case 6:
+ fastunpack6(in, inpos, out, outpos);
+ break;
+ case 7:
+ VectorBitPacker256.fastunpack7(in, inpos, out, outpos);
+ break;
+ case 8:
+ fastunpack8(in, inpos, out, outpos);
+ break;
+ case 9:
+ VectorBitPacker256.fastunpack9(in, inpos, out, outpos);
+ break;
+ case 10:
+ fastunpack10(in, inpos, out, outpos);
+ break;
+ case 11:
+ VectorBitPacker256.fastunpack11(in, inpos, out, outpos);
+ break;
+ case 12:
+ fastunpack12(in, inpos, out, outpos);
+ break;
+ case 13:
+ VectorBitPacker256.fastunpack13(in, inpos, out, outpos);
+ break;
+ case 14:
+ fastunpack14(in, inpos, out, outpos);
+ break;
+ case 15:
+ VectorBitPacker256.fastunpack15(in, inpos, out, outpos);
+ break;
+ case 16:
+ fastunpack16(in, inpos, out, outpos);
+ break;
+ case 17:
+ VectorBitPacker256.fastunpack17(in, inpos, out, outpos);
+ break;
+ case 18:
+ fastunpack18(in, inpos, out, outpos);
+ break;
+ case 19:
+ VectorBitPacker256.fastunpack19(in, inpos, out, outpos);
+ break;
+ case 20:
+ fastunpack20(in, inpos, out, outpos);
+ break;
+ case 21:
+ VectorBitPacker256.fastunpack21(in, inpos, out, outpos);
+ break;
+ case 22:
+ fastunpack22(in, inpos, out, outpos);
+ break;
+ case 23:
+ VectorBitPacker256.fastunpack23(in, inpos, out, outpos);
+ break;
+ case 24:
+ fastunpack24(in, inpos, out, outpos);
+ break;
+ case 25:
+ VectorBitPacker256.fastunpack25(in, inpos, out, outpos);
+ break;
+ case 26:
+ fastunpack26(in, inpos, out, outpos);
+ break;
+ case 27:
+ VectorBitPacker256.fastunpack27(in, inpos, out, outpos);
+ break;
+ case 28:
+ fastunpack28(in, inpos, out, outpos);
+ break;
+ case 29:
+ VectorBitPacker256.fastunpack29(in, inpos, out, outpos);
+ break;
+ case 30:
+ fastunpack30(in, inpos, out, outpos);
+ break;
+ case 31:
+ VectorBitPacker256.fastunpack31(in, inpos, out, outpos);
+ break;
+ case 32:
+ System.arraycopy(in, inpos, out, outpos, BLOCK_SIZE);
+ break;
+ }
+ }
+
+ private static void fastpack2(final int[] in, int inpos, final int[] out,
+ int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV.and(MASK_2);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpack4(final int[] in, int inpos, final int[] out,
+ int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV.and(MASK_4);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.and(MASK_4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpack6(final int[] in, int inpos, final int[] out,
+ int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV.and(MASK_6);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpack8(final int[] in, int inpos, final int[] out,
+ int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV.and(MASK_8);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.and(MASK_8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.and(MASK_8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.and(MASK_8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpack10(final int[] in, int inpos, final int[] out,
+ int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV.and(MASK_10);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpack12(final int[] in, int inpos, final int[] out,
+ int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV.and(MASK_12);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.and(MASK_12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpack14(final int[] in, int inpos, final int[] out,
+ int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV.and(MASK_14);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpack16(final int[] in, int inpos, final int[] out,
+ int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV.and(MASK_16);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.and(MASK_16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.and(MASK_16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.and(MASK_16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.and(MASK_16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.and(MASK_16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.and(MASK_16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.and(MASK_16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpack18(final int[] in, int inpos, final int[] out,
+ int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV.and(MASK_18);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpack20(final int[] in, int inpos, final int[] out,
+ int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV.and(MASK_20);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.and(MASK_20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpack22(final int[] in, int inpos, final int[] out,
+ int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV.and(MASK_22);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpack24(final int[] in, int inpos, final int[] out,
+ int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV.and(MASK_24);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.and(MASK_24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.and(MASK_24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.and(MASK_24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpack26(final int[] in, int inpos, final int[] out,
+ int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV.and(MASK_26);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpack28(final int[] in, int inpos, final int[] out,
+ int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV.and(MASK_28);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.and(MASK_28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpack30(final int[] in, int inpos, final int[] out,
+ int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV.and(MASK_30);
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask2(final int[] in, int inpos,
+ final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV;
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask4(final int[] in, int inpos,
+ final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV;
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask6(final int[] in, int inpos,
+ final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV;
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask8(final int[] in, int inpos,
+ final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV;
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask10(final int[] in, int inpos,
+ final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV;
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask12(final int[] in, int inpos,
+ final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV;
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask14(final int[] in, int inpos,
+ final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV;
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask16(final int[] in, int inpos,
+ final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV;
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask18(final int[] in, int inpos,
+ final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV;
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask20(final int[] in, int inpos,
+ final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV;
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask22(final int[] in, int inpos,
+ final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV;
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask24(final int[] in, int inpos,
+ final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV;
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask26(final int[] in, int inpos,
+ final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV;
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask28(final int[] in, int inpos,
+ final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV;
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.or(oV);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask30(final int[] in, int inpos,
+ final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV;
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack2(final int[] in, int inpos, final int[] out,
+ int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ iV.and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 30).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_512;
+ }
+
+ private static void fastunpack4(final int[] in, int inpos, final int[] out,
+ int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ iV.and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ var oV = iV.and(MASK_4);
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.and(0xf).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_512;
+ }
+
+ private static void fastunpack6(final int[] in, int inpos, final int[] out,
+ int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ iV.and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_6);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_6);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_512;
+ }
+
+ private static void fastunpack8(final int[] in, int inpos, final int[] out,
+ int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ var oV = iV.and(MASK_8);
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.and(0xff).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.and(0xff).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.and(0xff).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_512;
+ }
+
+ private static void fastunpack10(final int[] in, int inpos, final int[] out,
+ int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ iV.and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_512;
+ }
+
+ private static void fastunpack12(final int[] in, int inpos, final int[] out,
+ int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ iV.and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.and(0xfff).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_512;
+ }
+
+ private static void fastunpack14(final int[] in, int inpos, final int[] out,
+ int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ iV.and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.and(0x3ff).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.and(0xfff).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_512;
+ }
+
+ private static void fastunpack16(final int[] in, int inpos, final int[] out,
+ int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ var oV = iV.and(MASK_16);
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.and(0xffff).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.and(0xffff).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.and(0xffff).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.and(0xffff).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.and(0xffff).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.and(0xffff).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.and(0xffff).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_512;
+ }
+
+ private static void fastunpack18(final int[] in, int inpos, final int[] out,
+ int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ iV.and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.and(0xfff).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.and(0xffff).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.and(0x3ff).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.and(0x3fff).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_512;
+ }
+
+ private static void fastunpack20(final int[] in, int inpos, final int[] out,
+ int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ iV.and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.and(0xffff).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.and(0xfff).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.and(0xfffff).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.and(0xffff).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.and(0xfff).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_512;
+ }
+
+ private static void fastunpack22(final int[] in, int inpos, final int[] out,
+ int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ iV.and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.and(0xfff).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.and(0x3fff).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.and(0xffff).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.and(0x3ffff).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.and(0xfffff).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.and(0x3ff).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_512;
+ }
+
+ private static void fastunpack24(final int[] in, int inpos, final int[] out,
+ int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.and(0xffff).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.and(0xffffff).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.and(0xffff).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.and(0xffffff).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.and(0xffff).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.and(0xffffff).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.and(0xffff).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_512;
+ }
+
+ private static void fastunpack26(final int[] in, int inpos, final int[] out,
+ int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ iV.and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.and(0xfffff).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.and(0x3fff).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.and(0x3fffff).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.and(0xffff).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.and(0x3ff).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.and(0xffffff).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.and(0x3ffff).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.and(0xfff).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_512;
+ }
+
+ private static void fastunpack28(final int[] in, int inpos, final int[] out,
+ int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ iV.and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.and(0xffffff).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.and(0xfffff).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.and(0xffff).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.and(0xfff).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = oV.zero(SPECIES_512);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.and(0xfffffff).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.and(0xffffff).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.and(0xfffff).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.and(0xffff).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.and(0xfff).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_512;
+ }
+
+ private static void fastunpack30(final int[] in, int inpos, final int[] out,
+ int outpos) {
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ iV.and(MASK_30).intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 16);
+ oV = iV.and(0xfffffff).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 32);
+ oV = iV.and(0x3ffffff).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 48);
+ oV = iV.and(0xffffff).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 64);
+ oV = iV.and(0x3fffff).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 80);
+ oV = iV.and(0xfffff).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 96);
+ oV = iV.and(0x3ffff).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 112);
+ oV = iV.and(0xffff).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 128);
+ oV = iV.and(0x3fff).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 144);
+ oV = iV.and(0xfff).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 160);
+ oV = iV.and(0x3ff).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 176);
+ oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 192);
+ oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 208);
+ oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + 224);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_30).intoArray(out, outpos);
+ outpos += VLEN_512;
+ }
+
+}
diff --git a/src/main/java/me/lemire/integercompression/vector/VectorBitPacker128.java b/src/main/java/me/lemire/integercompression/vector/VectorBitPacker128.java
new file mode 100644
index 0000000..6e08546
--- /dev/null
+++ b/src/main/java/me/lemire/integercompression/vector/VectorBitPacker128.java
@@ -0,0 +1,31953 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+package me.lemire.integercompression.vector;
+
+import java.util.Arrays;
+import jdk.incubator.vector.*;
+
+/**
+ * Vectorized bit-packing routines using 128-bit (4 x int32) vectors.
+ *
+ * A 256-integer block is packed across 4 SIMD lanes, each lane packing 64
+ * values into 2*b 32-bit words. Selected at runtime by VectorBitPackerKernels
+ * when the preferred hardware vector width is 128 bits (e.g. Arm NEON, Graviton).
+ */
+public class VectorBitPacker128 implements VectorBitPackerKernels {
+ private static final VectorSpecies SPECIES_128 =
+ IntVector.SPECIES_128;
+ private static final int VLEN_128 = 4;
+ private static final int BLOCK_SIZE = 256;
+
+ private static final IntVector MASK_1 =
+ IntVector.broadcast(SPECIES_128, (1 << 1) - 1);
+ private static final IntVector MASK_2 =
+ IntVector.broadcast(SPECIES_128, (1 << 2) - 1);
+ private static final IntVector MASK_3 =
+ IntVector.broadcast(SPECIES_128, (1 << 3) - 1);
+ private static final IntVector MASK_4 =
+ IntVector.broadcast(SPECIES_128, (1 << 4) - 1);
+ private static final IntVector MASK_5 =
+ IntVector.broadcast(SPECIES_128, (1 << 5) - 1);
+ private static final IntVector MASK_6 =
+ IntVector.broadcast(SPECIES_128, (1 << 6) - 1);
+ private static final IntVector MASK_7 =
+ IntVector.broadcast(SPECIES_128, (1 << 7) - 1);
+ private static final IntVector MASK_8 =
+ IntVector.broadcast(SPECIES_128, (1 << 8) - 1);
+ private static final IntVector MASK_9 =
+ IntVector.broadcast(SPECIES_128, (1 << 9) - 1);
+ private static final IntVector MASK_10 =
+ IntVector.broadcast(SPECIES_128, (1 << 10) - 1);
+ private static final IntVector MASK_11 =
+ IntVector.broadcast(SPECIES_128, (1 << 11) - 1);
+ private static final IntVector MASK_12 =
+ IntVector.broadcast(SPECIES_128, (1 << 12) - 1);
+ private static final IntVector MASK_13 =
+ IntVector.broadcast(SPECIES_128, (1 << 13) - 1);
+ private static final IntVector MASK_14 =
+ IntVector.broadcast(SPECIES_128, (1 << 14) - 1);
+ private static final IntVector MASK_15 =
+ IntVector.broadcast(SPECIES_128, (1 << 15) - 1);
+ private static final IntVector MASK_16 =
+ IntVector.broadcast(SPECIES_128, (1 << 16) - 1);
+ private static final IntVector MASK_17 =
+ IntVector.broadcast(SPECIES_128, (1 << 17) - 1);
+ private static final IntVector MASK_18 =
+ IntVector.broadcast(SPECIES_128, (1 << 18) - 1);
+ private static final IntVector MASK_19 =
+ IntVector.broadcast(SPECIES_128, (1 << 19) - 1);
+ private static final IntVector MASK_20 =
+ IntVector.broadcast(SPECIES_128, (1 << 20) - 1);
+ private static final IntVector MASK_21 =
+ IntVector.broadcast(SPECIES_128, (1 << 21) - 1);
+ private static final IntVector MASK_22 =
+ IntVector.broadcast(SPECIES_128, (1 << 22) - 1);
+ private static final IntVector MASK_23 =
+ IntVector.broadcast(SPECIES_128, (1 << 23) - 1);
+ private static final IntVector MASK_24 =
+ IntVector.broadcast(SPECIES_128, (1 << 24) - 1);
+ private static final IntVector MASK_25 =
+ IntVector.broadcast(SPECIES_128, (1 << 25) - 1);
+ private static final IntVector MASK_26 =
+ IntVector.broadcast(SPECIES_128, (1 << 26) - 1);
+ private static final IntVector MASK_27 =
+ IntVector.broadcast(SPECIES_128, (1 << 27) - 1);
+ private static final IntVector MASK_28 =
+ IntVector.broadcast(SPECIES_128, (1 << 28) - 1);
+ private static final IntVector MASK_29 =
+ IntVector.broadcast(SPECIES_128, (1 << 29) - 1);
+ private static final IntVector MASK_30 =
+ IntVector.broadcast(SPECIES_128, (1 << 30) - 1);
+ private static final IntVector MASK_31 =
+ IntVector.broadcast(SPECIES_128, (1 << 31) - 1);
+
+ @Override
+ public void fastpack(final int[] in, int inpos, final int[] out,
+ int outpos, int b) {
+ switch (b) {
+ case 0:
+ break;
+ case 1:
+ fastpack1(in, inpos, out, outpos);
+ break;
+ case 2:
+ fastpack2(in, inpos, out, outpos);
+ break;
+ case 3:
+ fastpack3(in, inpos, out, outpos);
+ break;
+ case 4:
+ fastpack4(in, inpos, out, outpos);
+ break;
+ case 5:
+ fastpack5(in, inpos, out, outpos);
+ break;
+ case 6:
+ fastpack6(in, inpos, out, outpos);
+ break;
+ case 7:
+ fastpack7(in, inpos, out, outpos);
+ break;
+ case 8:
+ fastpack8(in, inpos, out, outpos);
+ break;
+ case 9:
+ fastpack9(in, inpos, out, outpos);
+ break;
+ case 10:
+ fastpack10(in, inpos, out, outpos);
+ break;
+ case 11:
+ fastpack11(in, inpos, out, outpos);
+ break;
+ case 12:
+ fastpack12(in, inpos, out, outpos);
+ break;
+ case 13:
+ fastpack13(in, inpos, out, outpos);
+ break;
+ case 14:
+ fastpack14(in, inpos, out, outpos);
+ break;
+ case 15:
+ fastpack15(in, inpos, out, outpos);
+ break;
+ case 16:
+ fastpack16(in, inpos, out, outpos);
+ break;
+ case 17:
+ fastpack17(in, inpos, out, outpos);
+ break;
+ case 18:
+ fastpack18(in, inpos, out, outpos);
+ break;
+ case 19:
+ fastpack19(in, inpos, out, outpos);
+ break;
+ case 20:
+ fastpack20(in, inpos, out, outpos);
+ break;
+ case 21:
+ fastpack21(in, inpos, out, outpos);
+ break;
+ case 22:
+ fastpack22(in, inpos, out, outpos);
+ break;
+ case 23:
+ fastpack23(in, inpos, out, outpos);
+ break;
+ case 24:
+ fastpack24(in, inpos, out, outpos);
+ break;
+ case 25:
+ fastpack25(in, inpos, out, outpos);
+ break;
+ case 26:
+ fastpack26(in, inpos, out, outpos);
+ break;
+ case 27:
+ fastpack27(in, inpos, out, outpos);
+ break;
+ case 28:
+ fastpack28(in, inpos, out, outpos);
+ break;
+ case 29:
+ fastpack29(in, inpos, out, outpos);
+ break;
+ case 30:
+ fastpack30(in, inpos, out, outpos);
+ break;
+ case 31:
+ fastpack31(in, inpos, out, outpos);
+ break;
+ case 32:
+ System.arraycopy(in, inpos, out, outpos, BLOCK_SIZE);
+ break;
+ }
+ }
+
+ @Override
+ public void fastpackNoMask(final int[] in, int inpos, final int[] out,
+ int outpos, int b) {
+ switch (b) {
+ case 0:
+ break;
+ case 1:
+ fastpackNoMask1(in, inpos, out, outpos);
+ break;
+ case 2:
+ fastpackNoMask2(in, inpos, out, outpos);
+ break;
+ case 3:
+ fastpackNoMask3(in, inpos, out, outpos);
+ break;
+ case 4:
+ fastpackNoMask4(in, inpos, out, outpos);
+ break;
+ case 5:
+ fastpackNoMask5(in, inpos, out, outpos);
+ break;
+ case 6:
+ fastpackNoMask6(in, inpos, out, outpos);
+ break;
+ case 7:
+ fastpackNoMask7(in, inpos, out, outpos);
+ break;
+ case 8:
+ fastpackNoMask8(in, inpos, out, outpos);
+ break;
+ case 9:
+ fastpackNoMask9(in, inpos, out, outpos);
+ break;
+ case 10:
+ fastpackNoMask10(in, inpos, out, outpos);
+ break;
+ case 11:
+ fastpackNoMask11(in, inpos, out, outpos);
+ break;
+ case 12:
+ fastpackNoMask12(in, inpos, out, outpos);
+ break;
+ case 13:
+ fastpackNoMask13(in, inpos, out, outpos);
+ break;
+ case 14:
+ fastpackNoMask14(in, inpos, out, outpos);
+ break;
+ case 15:
+ fastpackNoMask15(in, inpos, out, outpos);
+ break;
+ case 16:
+ fastpackNoMask16(in, inpos, out, outpos);
+ break;
+ case 17:
+ fastpackNoMask17(in, inpos, out, outpos);
+ break;
+ case 18:
+ fastpackNoMask18(in, inpos, out, outpos);
+ break;
+ case 19:
+ fastpackNoMask19(in, inpos, out, outpos);
+ break;
+ case 20:
+ fastpackNoMask20(in, inpos, out, outpos);
+ break;
+ case 21:
+ fastpackNoMask21(in, inpos, out, outpos);
+ break;
+ case 22:
+ fastpackNoMask22(in, inpos, out, outpos);
+ break;
+ case 23:
+ fastpackNoMask23(in, inpos, out, outpos);
+ break;
+ case 24:
+ fastpackNoMask24(in, inpos, out, outpos);
+ break;
+ case 25:
+ fastpackNoMask25(in, inpos, out, outpos);
+ break;
+ case 26:
+ fastpackNoMask26(in, inpos, out, outpos);
+ break;
+ case 27:
+ fastpackNoMask27(in, inpos, out, outpos);
+ break;
+ case 28:
+ fastpackNoMask28(in, inpos, out, outpos);
+ break;
+ case 29:
+ fastpackNoMask29(in, inpos, out, outpos);
+ break;
+ case 30:
+ fastpackNoMask30(in, inpos, out, outpos);
+ break;
+ case 31:
+ fastpackNoMask31(in, inpos, out, outpos);
+ break;
+ case 32:
+ System.arraycopy(in, inpos, out, outpos, BLOCK_SIZE);
+ break;
+ }
+ }
+
+ @Override
+ public void fastunpack(final int[] in, int inpos, final int[] out,
+ int outpos, int b) {
+ switch (b) {
+ case 0:
+ Arrays.fill(out, outpos, outpos + 256, 0);
+ break;
+ case 1:
+ fastunpack1(in, inpos, out, outpos);
+ break;
+ case 2:
+ fastunpack2(in, inpos, out, outpos);
+ break;
+ case 3:
+ fastunpack3(in, inpos, out, outpos);
+ break;
+ case 4:
+ fastunpack4(in, inpos, out, outpos);
+ break;
+ case 5:
+ fastunpack5(in, inpos, out, outpos);
+ break;
+ case 6:
+ fastunpack6(in, inpos, out, outpos);
+ break;
+ case 7:
+ fastunpack7(in, inpos, out, outpos);
+ break;
+ case 8:
+ fastunpack8(in, inpos, out, outpos);
+ break;
+ case 9:
+ fastunpack9(in, inpos, out, outpos);
+ break;
+ case 10:
+ fastunpack10(in, inpos, out, outpos);
+ break;
+ case 11:
+ fastunpack11(in, inpos, out, outpos);
+ break;
+ case 12:
+ fastunpack12(in, inpos, out, outpos);
+ break;
+ case 13:
+ fastunpack13(in, inpos, out, outpos);
+ break;
+ case 14:
+ fastunpack14(in, inpos, out, outpos);
+ break;
+ case 15:
+ fastunpack15(in, inpos, out, outpos);
+ break;
+ case 16:
+ fastunpack16(in, inpos, out, outpos);
+ break;
+ case 17:
+ fastunpack17(in, inpos, out, outpos);
+ break;
+ case 18:
+ fastunpack18(in, inpos, out, outpos);
+ break;
+ case 19:
+ fastunpack19(in, inpos, out, outpos);
+ break;
+ case 20:
+ fastunpack20(in, inpos, out, outpos);
+ break;
+ case 21:
+ fastunpack21(in, inpos, out, outpos);
+ break;
+ case 22:
+ fastunpack22(in, inpos, out, outpos);
+ break;
+ case 23:
+ fastunpack23(in, inpos, out, outpos);
+ break;
+ case 24:
+ fastunpack24(in, inpos, out, outpos);
+ break;
+ case 25:
+ fastunpack25(in, inpos, out, outpos);
+ break;
+ case 26:
+ fastunpack26(in, inpos, out, outpos);
+ break;
+ case 27:
+ fastunpack27(in, inpos, out, outpos);
+ break;
+ case 28:
+ fastunpack28(in, inpos, out, outpos);
+ break;
+ case 29:
+ fastunpack29(in, inpos, out, outpos);
+ break;
+ case 30:
+ fastunpack30(in, inpos, out, outpos);
+ break;
+ case 31:
+ fastunpack31(in, inpos, out, outpos);
+ break;
+ case 32:
+ System.arraycopy(in, inpos, out, outpos, BLOCK_SIZE);
+ break;
+ }
+ }
+
+ private static void fastpack1(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask1(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack1(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 19).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 21).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 23).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 25).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 27).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 29).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 30).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 31).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ iV.and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 19).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 21).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 23).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 25).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 27).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 29).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 30).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 31).and(MASK_1).intoArray(out, outpos);
+ }
+
+ private static void fastpack2(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask2(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack2(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 30).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ iV.and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 30).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ iV.and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 30).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ iV.and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 30).and(MASK_2).intoArray(out, outpos);
+ }
+
+ private static void fastpack3(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask3(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack3(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 21).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 27).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 19).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 25).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 23).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 29).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ iV.and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 21).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 27).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 19).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 25).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 23).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 29).and(MASK_3).intoArray(out, outpos);
+ }
+
+ private static void fastpack4(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask4(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack4(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ iV.and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ iV.and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ iV.and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ iV.and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ iV.and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ iV.and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ iV.and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_4).intoArray(out, outpos);
+ }
+
+ private static void fastpack5(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask5(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack5(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 25).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 23).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 21).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 19).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 27).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ iV.and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 25).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 23).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 21).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 19).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 27).and(MASK_5).intoArray(out, outpos);
+ }
+
+ private static void fastpack6(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask6(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack6(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ iV.and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ iV.and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ iV.and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_6).intoArray(out, outpos);
+ }
+
+ private static void fastpack7(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask7(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack7(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 21).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 23).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 19).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 25).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ iV.and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 21).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 23).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 19).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 25).and(MASK_7).intoArray(out, outpos);
+ }
+
+ private static void fastpack8(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask8(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack8(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ }
+
+ private static void fastpack9(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask9(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack9(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 21).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 19).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 23).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ iV.and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 21).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 19).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 23).and(MASK_9).intoArray(out, outpos);
+ }
+
+ private static void fastpack10(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask10(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack10(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ iV.and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ iV.and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ iV.and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_10).intoArray(out, outpos);
+ }
+
+ private static void fastpack11(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask11(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack11(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 19).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 21).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ iV.and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 19).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 21).and(MASK_11).intoArray(out, outpos);
+ }
+
+ private static void fastpack12(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask12(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack12(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ iV.and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ iV.and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ iV.and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ iV.and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ iV.and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ iV.and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ iV.and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_12).intoArray(out, outpos);
+ }
+
+ private static void fastpack13(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask13(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack13(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 19).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ iV.and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 19).and(MASK_13).intoArray(out, outpos);
+ }
+
+ private static void fastpack14(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask14(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack14(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ iV.and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ iV.and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ iV.and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_14).intoArray(out, outpos);
+ }
+
+ private static void fastpack15(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask15(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack15(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ iV.and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_15).intoArray(out, outpos);
+ }
+
+ private static void fastpack16(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask16(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack16(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ }
+
+ private static void fastpack17(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask17(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack17(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ iV.and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_17).intoArray(out, outpos);
+ }
+
+ private static void fastpack18(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask18(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack18(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ iV.and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ iV.and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ iV.and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_18).intoArray(out, outpos);
+ }
+
+ private static void fastpack19(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask19(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack19(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(131071).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ iV.and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(131071).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_19).intoArray(out, outpos);
+ }
+
+ private static void fastpack20(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask20(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack20(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ iV.and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ iV.and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ iV.and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ iV.and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ iV.and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ iV.and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ iV.and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_20).intoArray(out, outpos);
+ }
+
+ private static void fastpack21(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask21(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack21(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(524287).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(131071).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ iV.and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(524287).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(131071).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_21).intoArray(out, outpos);
+ }
+
+ private static void fastpack22(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask22(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack22(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ iV.and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ iV.and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ iV.and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_22).intoArray(out, outpos);
+ }
+
+ private static void fastpack23(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask23(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack23(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(524287).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(2097151).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(131071).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ iV.and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(524287).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(2097151).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(131071).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_23).intoArray(out, outpos);
+ }
+
+ private static void fastpack24(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask24(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack24(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ }
+
+ private static void fastpack25(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask25(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack25(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_25).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_25).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_25).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(524287).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_25).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(8388607).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_25).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_25).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(131071).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_25).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(2097151).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_25).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ iV.and(MASK_25).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_25).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_25).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(524287).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_25).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(8388607).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_25).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_25).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(131071).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_25).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(2097151).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_25).intoArray(out, outpos);
+ }
+
+ private static void fastpack26(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask26(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack26(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ iV.and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ iV.and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ iV.and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_26).intoArray(out, outpos);
+ }
+
+ private static void fastpack27(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask27(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack27(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_27).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(131071).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_27).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(524287).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_27).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(67108863).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(2097151).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_27).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(8388607).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_27).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(33554431).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_27).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ iV.and(MASK_27).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(131071).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_27).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(524287).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_27).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(67108863).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(2097151).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_27).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(8388607).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_27).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(33554431).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_27).intoArray(out, outpos);
+ }
+
+ private static void fastpack28(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask28(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack28(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ iV.and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ iV.and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ iV.and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ iV.and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ iV.and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ iV.and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ iV.and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_28).intoArray(out, outpos);
+ }
+
+ private static void fastpack29(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask29(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack29(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_29).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(67108863).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(8388607).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(131071).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_29).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(268435455).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(33554431).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(524287).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_29).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(134217727).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(2097151).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_29).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ iV.and(MASK_29).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(67108863).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(8388607).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(131071).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_29).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(268435455).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(33554431).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(524287).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_29).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(134217727).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(2097151).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_29).intoArray(out, outpos);
+ }
+
+ private static void fastpack30(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask30(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack30(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_30).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(268435455).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(67108863).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_30).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ iV.and(MASK_30).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(268435455).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(67108863).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_30).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ iV.and(MASK_30).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(268435455).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(67108863).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_30).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ iV.and(MASK_30).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(268435455).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(67108863).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_30).intoArray(out, outpos);
+ }
+
+ private static void fastpack31(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV.and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastpackNoMask31(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 252);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ private static void fastunpack31(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_128, in, inpos);
+ iV.and(MASK_31).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 4);
+ oV = iV.and(1073741823).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 8);
+ oV = iV.and(536870911).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 12);
+ oV = iV.and(268435455).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 16);
+ oV = iV.and(134217727).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 20);
+ oV = iV.and(67108863).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 24);
+ oV = iV.and(33554431).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 28);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 32);
+ oV = iV.and(8388607).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 36);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 40);
+ oV = iV.and(2097151).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 44);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 48);
+ oV = iV.and(524287).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 52);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 56);
+ oV = iV.and(131071).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 60);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 64);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 68);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 72);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 76);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 80);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 84);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 88);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 92);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 96);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 100);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 104);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 108);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 112);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 116);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 120);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_31).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 124);
+ iV.and(MASK_31).intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 128);
+ oV = iV.and(1073741823).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 132);
+ oV = iV.and(536870911).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 136);
+ oV = iV.and(268435455).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 140);
+ oV = iV.and(134217727).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 144);
+ oV = iV.and(67108863).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 148);
+ oV = iV.and(33554431).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 152);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 156);
+ oV = iV.and(8388607).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 160);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 164);
+ oV = iV.and(2097151).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 168);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 172);
+ oV = iV.and(524287).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 176);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 180);
+ oV = iV.and(131071).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 184);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 188);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 192);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 196);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 200);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 204);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 208);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 212);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 216);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 220);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 224);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 228);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 232);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 236);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 240);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_128, in, inpos + 244);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_128;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_31).intoArray(out, outpos);
+ }
+
+}
diff --git a/src/main/java/me/lemire/integercompression/vector/VectorBitPacker256.java b/src/main/java/me/lemire/integercompression/vector/VectorBitPacker256.java
new file mode 100644
index 0000000..02596f5
--- /dev/null
+++ b/src/main/java/me/lemire/integercompression/vector/VectorBitPacker256.java
@@ -0,0 +1,16226 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+package me.lemire.integercompression.vector;
+
+import java.util.Arrays;
+import jdk.incubator.vector.*;
+
+/**
+ * Vectorized bit-packing routines using 256-bit (8 x int32) vectors.
+ *
+ * A 256-integer block is packed across 8 SIMD lanes, each lane packing 32
+ * values into b 32-bit words. Selected at runtime by VectorBitPackerKernels
+ * when the preferred hardware vector width is 256 bits (e.g. AVX2, Graviton3),
+ * where the 512-bit paths of VectorBitPacker fall back to slow emulation.
+ */
+public class VectorBitPacker256 implements VectorBitPackerKernels {
+ private static final VectorSpecies SPECIES_256 =
+ IntVector.SPECIES_256;
+ private static final int VLEN_256 = 8;
+ private static final int BLOCK_SIZE = 256;
+
+ private static final IntVector MASK_1 =
+ IntVector.broadcast(SPECIES_256, (1 << 1) - 1);
+ private static final IntVector MASK_2 =
+ IntVector.broadcast(SPECIES_256, (1 << 2) - 1);
+ private static final IntVector MASK_3 =
+ IntVector.broadcast(SPECIES_256, (1 << 3) - 1);
+ private static final IntVector MASK_4 =
+ IntVector.broadcast(SPECIES_256, (1 << 4) - 1);
+ private static final IntVector MASK_5 =
+ IntVector.broadcast(SPECIES_256, (1 << 5) - 1);
+ private static final IntVector MASK_6 =
+ IntVector.broadcast(SPECIES_256, (1 << 6) - 1);
+ private static final IntVector MASK_7 =
+ IntVector.broadcast(SPECIES_256, (1 << 7) - 1);
+ private static final IntVector MASK_8 =
+ IntVector.broadcast(SPECIES_256, (1 << 8) - 1);
+ private static final IntVector MASK_9 =
+ IntVector.broadcast(SPECIES_256, (1 << 9) - 1);
+ private static final IntVector MASK_10 =
+ IntVector.broadcast(SPECIES_256, (1 << 10) - 1);
+ private static final IntVector MASK_11 =
+ IntVector.broadcast(SPECIES_256, (1 << 11) - 1);
+ private static final IntVector MASK_12 =
+ IntVector.broadcast(SPECIES_256, (1 << 12) - 1);
+ private static final IntVector MASK_13 =
+ IntVector.broadcast(SPECIES_256, (1 << 13) - 1);
+ private static final IntVector MASK_14 =
+ IntVector.broadcast(SPECIES_256, (1 << 14) - 1);
+ private static final IntVector MASK_15 =
+ IntVector.broadcast(SPECIES_256, (1 << 15) - 1);
+ private static final IntVector MASK_16 =
+ IntVector.broadcast(SPECIES_256, (1 << 16) - 1);
+ private static final IntVector MASK_17 =
+ IntVector.broadcast(SPECIES_256, (1 << 17) - 1);
+ private static final IntVector MASK_18 =
+ IntVector.broadcast(SPECIES_256, (1 << 18) - 1);
+ private static final IntVector MASK_19 =
+ IntVector.broadcast(SPECIES_256, (1 << 19) - 1);
+ private static final IntVector MASK_20 =
+ IntVector.broadcast(SPECIES_256, (1 << 20) - 1);
+ private static final IntVector MASK_21 =
+ IntVector.broadcast(SPECIES_256, (1 << 21) - 1);
+ private static final IntVector MASK_22 =
+ IntVector.broadcast(SPECIES_256, (1 << 22) - 1);
+ private static final IntVector MASK_23 =
+ IntVector.broadcast(SPECIES_256, (1 << 23) - 1);
+ private static final IntVector MASK_24 =
+ IntVector.broadcast(SPECIES_256, (1 << 24) - 1);
+ private static final IntVector MASK_25 =
+ IntVector.broadcast(SPECIES_256, (1 << 25) - 1);
+ private static final IntVector MASK_26 =
+ IntVector.broadcast(SPECIES_256, (1 << 26) - 1);
+ private static final IntVector MASK_27 =
+ IntVector.broadcast(SPECIES_256, (1 << 27) - 1);
+ private static final IntVector MASK_28 =
+ IntVector.broadcast(SPECIES_256, (1 << 28) - 1);
+ private static final IntVector MASK_29 =
+ IntVector.broadcast(SPECIES_256, (1 << 29) - 1);
+ private static final IntVector MASK_30 =
+ IntVector.broadcast(SPECIES_256, (1 << 30) - 1);
+ private static final IntVector MASK_31 =
+ IntVector.broadcast(SPECIES_256, (1 << 31) - 1);
+
+ @Override
+ public void fastpack(final int[] in, int inpos, final int[] out,
+ int outpos, int b) {
+ switch (b) {
+ case 0:
+ break;
+ case 1:
+ fastpack1(in, inpos, out, outpos);
+ break;
+ case 2:
+ fastpack2(in, inpos, out, outpos);
+ break;
+ case 3:
+ fastpack3(in, inpos, out, outpos);
+ break;
+ case 4:
+ fastpack4(in, inpos, out, outpos);
+ break;
+ case 5:
+ fastpack5(in, inpos, out, outpos);
+ break;
+ case 6:
+ fastpack6(in, inpos, out, outpos);
+ break;
+ case 7:
+ fastpack7(in, inpos, out, outpos);
+ break;
+ case 8:
+ fastpack8(in, inpos, out, outpos);
+ break;
+ case 9:
+ fastpack9(in, inpos, out, outpos);
+ break;
+ case 10:
+ fastpack10(in, inpos, out, outpos);
+ break;
+ case 11:
+ fastpack11(in, inpos, out, outpos);
+ break;
+ case 12:
+ fastpack12(in, inpos, out, outpos);
+ break;
+ case 13:
+ fastpack13(in, inpos, out, outpos);
+ break;
+ case 14:
+ fastpack14(in, inpos, out, outpos);
+ break;
+ case 15:
+ fastpack15(in, inpos, out, outpos);
+ break;
+ case 16:
+ fastpack16(in, inpos, out, outpos);
+ break;
+ case 17:
+ fastpack17(in, inpos, out, outpos);
+ break;
+ case 18:
+ fastpack18(in, inpos, out, outpos);
+ break;
+ case 19:
+ fastpack19(in, inpos, out, outpos);
+ break;
+ case 20:
+ fastpack20(in, inpos, out, outpos);
+ break;
+ case 21:
+ fastpack21(in, inpos, out, outpos);
+ break;
+ case 22:
+ fastpack22(in, inpos, out, outpos);
+ break;
+ case 23:
+ fastpack23(in, inpos, out, outpos);
+ break;
+ case 24:
+ fastpack24(in, inpos, out, outpos);
+ break;
+ case 25:
+ fastpack25(in, inpos, out, outpos);
+ break;
+ case 26:
+ fastpack26(in, inpos, out, outpos);
+ break;
+ case 27:
+ fastpack27(in, inpos, out, outpos);
+ break;
+ case 28:
+ fastpack28(in, inpos, out, outpos);
+ break;
+ case 29:
+ fastpack29(in, inpos, out, outpos);
+ break;
+ case 30:
+ fastpack30(in, inpos, out, outpos);
+ break;
+ case 31:
+ fastpack31(in, inpos, out, outpos);
+ break;
+ case 32:
+ System.arraycopy(in, inpos, out, outpos, BLOCK_SIZE);
+ break;
+ }
+ }
+
+ @Override
+ public void fastpackNoMask(final int[] in, int inpos, final int[] out,
+ int outpos, int b) {
+ switch (b) {
+ case 0:
+ break;
+ case 1:
+ fastpackNoMask1(in, inpos, out, outpos);
+ break;
+ case 2:
+ fastpackNoMask2(in, inpos, out, outpos);
+ break;
+ case 3:
+ fastpackNoMask3(in, inpos, out, outpos);
+ break;
+ case 4:
+ fastpackNoMask4(in, inpos, out, outpos);
+ break;
+ case 5:
+ fastpackNoMask5(in, inpos, out, outpos);
+ break;
+ case 6:
+ fastpackNoMask6(in, inpos, out, outpos);
+ break;
+ case 7:
+ fastpackNoMask7(in, inpos, out, outpos);
+ break;
+ case 8:
+ fastpackNoMask8(in, inpos, out, outpos);
+ break;
+ case 9:
+ fastpackNoMask9(in, inpos, out, outpos);
+ break;
+ case 10:
+ fastpackNoMask10(in, inpos, out, outpos);
+ break;
+ case 11:
+ fastpackNoMask11(in, inpos, out, outpos);
+ break;
+ case 12:
+ fastpackNoMask12(in, inpos, out, outpos);
+ break;
+ case 13:
+ fastpackNoMask13(in, inpos, out, outpos);
+ break;
+ case 14:
+ fastpackNoMask14(in, inpos, out, outpos);
+ break;
+ case 15:
+ fastpackNoMask15(in, inpos, out, outpos);
+ break;
+ case 16:
+ fastpackNoMask16(in, inpos, out, outpos);
+ break;
+ case 17:
+ fastpackNoMask17(in, inpos, out, outpos);
+ break;
+ case 18:
+ fastpackNoMask18(in, inpos, out, outpos);
+ break;
+ case 19:
+ fastpackNoMask19(in, inpos, out, outpos);
+ break;
+ case 20:
+ fastpackNoMask20(in, inpos, out, outpos);
+ break;
+ case 21:
+ fastpackNoMask21(in, inpos, out, outpos);
+ break;
+ case 22:
+ fastpackNoMask22(in, inpos, out, outpos);
+ break;
+ case 23:
+ fastpackNoMask23(in, inpos, out, outpos);
+ break;
+ case 24:
+ fastpackNoMask24(in, inpos, out, outpos);
+ break;
+ case 25:
+ fastpackNoMask25(in, inpos, out, outpos);
+ break;
+ case 26:
+ fastpackNoMask26(in, inpos, out, outpos);
+ break;
+ case 27:
+ fastpackNoMask27(in, inpos, out, outpos);
+ break;
+ case 28:
+ fastpackNoMask28(in, inpos, out, outpos);
+ break;
+ case 29:
+ fastpackNoMask29(in, inpos, out, outpos);
+ break;
+ case 30:
+ fastpackNoMask30(in, inpos, out, outpos);
+ break;
+ case 31:
+ fastpackNoMask31(in, inpos, out, outpos);
+ break;
+ case 32:
+ System.arraycopy(in, inpos, out, outpos, BLOCK_SIZE);
+ break;
+ }
+ }
+
+ @Override
+ public void fastunpack(final int[] in, int inpos, final int[] out,
+ int outpos, int b) {
+ switch (b) {
+ case 0:
+ Arrays.fill(out, outpos, outpos + 256, 0);
+ break;
+ case 1:
+ fastunpack1(in, inpos, out, outpos);
+ break;
+ case 2:
+ fastunpack2(in, inpos, out, outpos);
+ break;
+ case 3:
+ fastunpack3(in, inpos, out, outpos);
+ break;
+ case 4:
+ fastunpack4(in, inpos, out, outpos);
+ break;
+ case 5:
+ fastunpack5(in, inpos, out, outpos);
+ break;
+ case 6:
+ fastunpack6(in, inpos, out, outpos);
+ break;
+ case 7:
+ fastunpack7(in, inpos, out, outpos);
+ break;
+ case 8:
+ fastunpack8(in, inpos, out, outpos);
+ break;
+ case 9:
+ fastunpack9(in, inpos, out, outpos);
+ break;
+ case 10:
+ fastunpack10(in, inpos, out, outpos);
+ break;
+ case 11:
+ fastunpack11(in, inpos, out, outpos);
+ break;
+ case 12:
+ fastunpack12(in, inpos, out, outpos);
+ break;
+ case 13:
+ fastunpack13(in, inpos, out, outpos);
+ break;
+ case 14:
+ fastunpack14(in, inpos, out, outpos);
+ break;
+ case 15:
+ fastunpack15(in, inpos, out, outpos);
+ break;
+ case 16:
+ fastunpack16(in, inpos, out, outpos);
+ break;
+ case 17:
+ fastunpack17(in, inpos, out, outpos);
+ break;
+ case 18:
+ fastunpack18(in, inpos, out, outpos);
+ break;
+ case 19:
+ fastunpack19(in, inpos, out, outpos);
+ break;
+ case 20:
+ fastunpack20(in, inpos, out, outpos);
+ break;
+ case 21:
+ fastunpack21(in, inpos, out, outpos);
+ break;
+ case 22:
+ fastunpack22(in, inpos, out, outpos);
+ break;
+ case 23:
+ fastunpack23(in, inpos, out, outpos);
+ break;
+ case 24:
+ fastunpack24(in, inpos, out, outpos);
+ break;
+ case 25:
+ fastunpack25(in, inpos, out, outpos);
+ break;
+ case 26:
+ fastunpack26(in, inpos, out, outpos);
+ break;
+ case 27:
+ fastunpack27(in, inpos, out, outpos);
+ break;
+ case 28:
+ fastunpack28(in, inpos, out, outpos);
+ break;
+ case 29:
+ fastunpack29(in, inpos, out, outpos);
+ break;
+ case 30:
+ fastunpack30(in, inpos, out, outpos);
+ break;
+ case 31:
+ fastunpack31(in, inpos, out, outpos);
+ break;
+ case 32:
+ System.arraycopy(in, inpos, out, outpos, BLOCK_SIZE);
+ break;
+ }
+ }
+
+ static void fastpack1(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask1(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack1(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 19).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 21).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 23).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 25).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 27).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 29).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 30).and(MASK_1).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 31).and(MASK_1).intoArray(out, outpos);
+ }
+
+ static void fastpack2(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask2(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack2(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 30).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ iV.and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_2).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 30).and(MASK_2).intoArray(out, outpos);
+ }
+
+ static void fastpack3(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask3(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack3(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 21).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 27).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 19).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 25).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 23).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_3).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 29).and(MASK_3).intoArray(out, outpos);
+ }
+
+ static void fastpack4(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask4(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack4(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ iV.and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ iV.and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ iV.and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_4).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 28).and(MASK_4).intoArray(out, outpos);
+ }
+
+ static void fastpack5(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask5(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack5(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 25).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 23).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 21).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 19).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_5).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 27).and(MASK_5).intoArray(out, outpos);
+ }
+
+ static void fastpack6(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask6(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack6(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ iV.and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_6).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 26).and(MASK_6).intoArray(out, outpos);
+ }
+
+ static void fastpack7(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask7(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack7(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 21).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 23).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 19).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_7).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 25).and(MASK_7).intoArray(out, outpos);
+ }
+
+ static void fastpack8(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask8(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack8(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ iV.and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos);
+ }
+
+ static void fastpack9(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask9(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack9(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 21).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 19).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_9).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 23).and(MASK_9).intoArray(out, outpos);
+ }
+
+ static void fastpack10(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask10(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack10(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ iV.and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_10).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 22).and(MASK_10).intoArray(out, outpos);
+ }
+
+ static void fastpack11(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask11(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack11(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 19).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_11).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 21).and(MASK_11).intoArray(out, outpos);
+ }
+
+ static void fastpack12(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask12(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack12(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ iV.and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ iV.and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ iV.and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_12).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 20).and(MASK_12).intoArray(out, outpos);
+ }
+
+ static void fastpack13(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask13(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack13(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_13).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 19).and(MASK_13).intoArray(out, outpos);
+ }
+
+ static void fastpack14(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask14(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack14(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ iV.and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_14).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 18).and(MASK_14).intoArray(out, outpos);
+ }
+
+ static void fastpack15(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask15(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack15(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_15).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 17).and(MASK_15).intoArray(out, outpos);
+ }
+
+ static void fastpack16(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask16(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack16(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ iV.and(MASK_16).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos);
+ }
+
+ static void fastpack17(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask17(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack17(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_17).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 15).and(MASK_17).intoArray(out, outpos);
+ }
+
+ static void fastpack18(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask18(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack18(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ iV.and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_18).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 14).and(MASK_18).intoArray(out, outpos);
+ }
+
+ static void fastpack19(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask19(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack19(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(131071).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_19).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 13).and(MASK_19).intoArray(out, outpos);
+ }
+
+ static void fastpack20(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask20(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack20(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ iV.and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ iV.and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ iV.and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_20).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 12).and(MASK_20).intoArray(out, outpos);
+ }
+
+ static void fastpack21(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask21(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack21(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(524287).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(131071).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_21).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 11).and(MASK_21).intoArray(out, outpos);
+ }
+
+ static void fastpack22(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask22(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack22(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ iV.and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_22).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 10).and(MASK_22).intoArray(out, outpos);
+ }
+
+ static void fastpack23(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask23(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack23(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(524287).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(2097151).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(131071).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_23).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 9).and(MASK_23).intoArray(out, outpos);
+ }
+
+ static void fastpack24(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask24(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack24(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ iV.and(MASK_24).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos);
+ }
+
+ static void fastpack25(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask25(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack25(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_25).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_25).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_25).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(524287).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_25).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(8388607).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_25).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_25).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(131071).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_25).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(2097151).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 7).and(MASK_25).intoArray(out, outpos);
+ }
+
+ static void fastpack26(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask26(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack26(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ iV.and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_26).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 6).and(MASK_26).intoArray(out, outpos);
+ }
+
+ static void fastpack27(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask27(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack27(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_27).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(131071).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_27).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(524287).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_27).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(67108863).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(2097151).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_27).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(8388607).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_27).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(33554431).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 5).and(MASK_27).intoArray(out, outpos);
+ }
+
+ static void fastpack28(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask28(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack28(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ iV.and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ iV.and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ iV.and(MASK_28).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 4).and(MASK_28).intoArray(out, outpos);
+ }
+
+ static void fastpack29(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask29(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack29(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_29).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(67108863).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(8388607).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(131071).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_29).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(268435455).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(33554431).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(524287).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_29).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(134217727).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(2097151).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6).and(MASK_29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 3).and(MASK_29).intoArray(out, outpos);
+ }
+
+ static void fastpack30(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask30(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack30(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_30).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(268435455).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(67108863).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_30).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ iV.and(MASK_30).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(268435455).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(67108863).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4).and(MASK_30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 2).and(MASK_30).intoArray(out, outpos);
+ }
+
+ static void fastpack31(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastpackNoMask31(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 1);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 248);
+ oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ }
+
+ static void fastunpack31(final int[] in, int inpos, final int[] out, int outpos) {
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ iV.and(MASK_31).intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ var oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 8);
+ oV = iV.and(1073741823).lanewise(VectorOperators.LSHL, 1).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 16);
+ oV = iV.and(536870911).lanewise(VectorOperators.LSHL, 2).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 24);
+ oV = iV.and(268435455).lanewise(VectorOperators.LSHL, 3).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 32);
+ oV = iV.and(134217727).lanewise(VectorOperators.LSHL, 4).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 40);
+ oV = iV.and(67108863).lanewise(VectorOperators.LSHL, 5).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 48);
+ oV = iV.and(33554431).lanewise(VectorOperators.LSHL, 6).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 56);
+ oV = iV.and(16777215).lanewise(VectorOperators.LSHL, 7).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 64);
+ oV = iV.and(8388607).lanewise(VectorOperators.LSHL, 8).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 72);
+ oV = iV.and(4194303).lanewise(VectorOperators.LSHL, 9).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 80);
+ oV = iV.and(2097151).lanewise(VectorOperators.LSHL, 10).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 88);
+ oV = iV.and(1048575).lanewise(VectorOperators.LSHL, 11).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 96);
+ oV = iV.and(524287).lanewise(VectorOperators.LSHL, 12).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 104);
+ oV = iV.and(262143).lanewise(VectorOperators.LSHL, 13).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 112);
+ oV = iV.and(131071).lanewise(VectorOperators.LSHL, 14).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 120);
+ oV = iV.and(65535).lanewise(VectorOperators.LSHL, 15).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 128);
+ oV = iV.and(32767).lanewise(VectorOperators.LSHL, 16).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 136);
+ oV = iV.and(16383).lanewise(VectorOperators.LSHL, 17).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 144);
+ oV = iV.and(8191).lanewise(VectorOperators.LSHL, 18).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 152);
+ oV = iV.and(4095).lanewise(VectorOperators.LSHL, 19).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 160);
+ oV = iV.and(2047).lanewise(VectorOperators.LSHL, 20).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 11).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 168);
+ oV = iV.and(1023).lanewise(VectorOperators.LSHL, 21).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 176);
+ oV = iV.and(511).lanewise(VectorOperators.LSHL, 22).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 9).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 184);
+ oV = iV.and(255).lanewise(VectorOperators.LSHL, 23).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 192);
+ oV = iV.and(127).lanewise(VectorOperators.LSHL, 24).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 7).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 200);
+ oV = iV.and(63).lanewise(VectorOperators.LSHL, 25).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 6).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 208);
+ oV = iV.and(31).lanewise(VectorOperators.LSHL, 26).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 5).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 216);
+ oV = iV.and(15).lanewise(VectorOperators.LSHL, 27).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 4).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 224);
+ oV = iV.and(7).lanewise(VectorOperators.LSHL, 28).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 3).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 232);
+ oV = iV.and(3).lanewise(VectorOperators.LSHL, 29).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ oV = iV.lanewise(VectorOperators.LSHR, 2).and(MASK_31);
+
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + 240);
+ oV = iV.and(1).lanewise(VectorOperators.LSHL, 30).or(oV);
+
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ iV.lanewise(VectorOperators.LSHR, 1).and(MASK_31).intoArray(out, outpos);
+ }
+
+}
diff --git a/src/main/java/me/lemire/integercompression/vector/VectorBitPackerKernels.java b/src/main/java/me/lemire/integercompression/vector/VectorBitPackerKernels.java
new file mode 100644
index 0000000..9179827
--- /dev/null
+++ b/src/main/java/me/lemire/integercompression/vector/VectorBitPackerKernels.java
@@ -0,0 +1,78 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+package me.lemire.integercompression.vector;
+
+import jdk.incubator.vector.IntVector;
+
+/**
+ * Width-specific vectorized bit-packing kernels for a 256-integer block.
+ * Implemented by VectorBitPacker (512-bit lanes), VectorBitPacker256 (256-bit
+ * lanes) and VectorBitPacker128 (128-bit lanes). The packed layout differs per
+ * width, so a stream is decoded by the same kernel that packed it.
+ */
+public interface VectorBitPackerKernels {
+
+ void fastpack(int[] in, int inpos, int[] out, int outpos, int b);
+
+ void fastpackNoMask(int[] in, int inpos, int[] out, int outpos, int b);
+
+ void fastunpack(int[] in, int inpos, int[] out, int outpos, int b);
+
+ /**
+ * Hardware vector lane width a stream was packed for. The packed byte layout
+ * differs per width and is not interchangeable across widths, so the stream
+ * carries its width (as {@link #code}) and is decoded by {@link #kernel}.
+ */
+ enum LaneWidth {
+ BITS_128(0, 128, new VectorBitPacker128()),
+ BITS_256(1, 256, new VectorBitPacker256()),
+ BITS_512(2, 512, new VectorBitPacker());
+
+ /** Compact wire tag stored in the stream (fits in 2 bits). */
+ public final int code;
+ /** Native vector lane width in bits. */
+ public final int bits;
+ /** Kernel that packs and unpacks at this width. */
+ public final VectorBitPackerKernels kernel;
+
+ LaneWidth(int code, int bits, VectorBitPackerKernels kernel) {
+ this.code = code;
+ this.bits = bits;
+ this.kernel = kernel;
+ }
+
+ /** Width whose kernel runs natively on this machine (encode default). */
+ public static final LaneWidth PREFERRED =
+ forHost(IntVector.SPECIES_PREFERRED.vectorBitSize());
+
+ /** Largest kernel width that runs natively on a machine of {@code hostBits}. */
+ public static LaneWidth forHost(int hostBits) {
+ LaneWidth best = null;
+ for (LaneWidth width : values()) {
+ if (width.bits <= hostBits && (best == null || width.bits > best.bits)) {
+ best = width;
+ }
+ }
+ if (best == null) {
+ throw new IllegalStateException(
+ "no vector bit-packing kernel fits this machine's preferred vector width of "
+ + hostBits + " bits");
+ }
+ return best;
+ }
+
+ /** Maps a stream wire tag back to its width. */
+ public static LaneWidth fromCode(int code) {
+ for (LaneWidth width : values()) {
+ if (width.code == code) {
+ return width;
+ }
+ }
+ throw new IllegalArgumentException("unknown vector lane-width tag " + code);
+ }
+ }
+}
diff --git a/src/main/java/me/lemire/integercompression/vector/VectorBitPackerTerse.java b/src/main/java/me/lemire/integercompression/vector/VectorBitPackerTerse.java
new file mode 100644
index 0000000..62a8cc7
--- /dev/null
+++ b/src/main/java/me/lemire/integercompression/vector/VectorBitPackerTerse.java
@@ -0,0 +1,963 @@
+// Copyright (C) 2022 Intel Corporation
+
+// SPDX-License-Identifier: Apache-2.0
+
+package me.lemire.integercompression.vector;
+
+import java.util.Arrays;
+import jdk.incubator.vector.*;
+
+/**
+ * This is a readable but less efficient version of the VectorBitPacker class.
+ *
+ */
+public class VectorBitPackerTerse {
+ static final VectorSpecies SPECIES_512 = IntVector.SPECIES_512;
+ static final VectorSpecies SPECIES_256 = IntVector.SPECIES_256;
+ static final int VLEN_512 = 16;
+ static final int VLEN_256 = 8;
+ static final int BLOCK_SIZE = 256;
+
+ private static void fastpackOddBit(final int[] in, int inpos, final int[] out,
+ int outpos, int b, final int[] ho,
+ final int[] lc) {
+ final int mask = (1 << b) - 1;
+ final int N = 31 / b;
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV.and(mask);
+ int n = 1;
+ for (; n <= N; n++) {
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + n * VLEN_256);
+ oV = iV.and(mask).lanewise(VectorOperators.LSHL, b * n).or(oV);
+ }
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ final int L = b - 1;
+ for (int i = 0; i < L; i++) {
+ oV = iV.and(mask).lanewise(VectorOperators.LSHR, ho[i]);
+ for (int j = 0; j < lc[i]; j++) {
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + n * VLEN_256);
+ oV = iV.and(mask)
+ .lanewise(VectorOperators.LSHL, b * j + (b - ho[i]))
+ .or(oV);
+ n++;
+ }
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+ }
+ }
+
+ private static void fastpackOddBitNoMask(final int[] in, int inpos,
+ final int[] out, int outpos, int b,
+ final int[] ho, final int[] lc) {
+ final int N = 31 / b;
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ var oV = iV;
+ int n = 1;
+ for (; n <= N; n++) {
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + n * VLEN_256);
+ oV = iV.lanewise(VectorOperators.LSHL, b * n).or(oV);
+ }
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+
+ final int L = b - 1;
+ for (int i = 0; i < L; i++) {
+ oV = iV.lanewise(VectorOperators.LSHR, ho[i]);
+ for (int j = 0; j < lc[i]; j++) {
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + n * VLEN_256);
+ oV = iV.lanewise(VectorOperators.LSHL, b * j + (b - ho[i])).or(oV);
+ n++;
+ }
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+ }
+ }
+
+ private static void fastUnpackOddBit(final int[] in, int inpos,
+ final int[] out, int outpos, int b,
+ final int[] lo, int[] masks, int[] lc) {
+ final int mask = (1 << b) - 1;
+ final int N = 32 / b;
+ var iV = IntVector.fromArray(SPECIES_256, in, inpos);
+ int n = 0;
+ for (; n < N; n++) {
+ iV.lanewise(VectorOperators.LSHR, b * n).and(mask).intoArray(out, outpos);
+ outpos += VLEN_256;
+ }
+ var oV = iV.lanewise(VectorOperators.LSHR, b * n).and(mask);
+
+ final int L = b - 1;
+ for (int i = 0; i < L; i++) {
+ iV = IntVector.fromArray(SPECIES_256, in, inpos + (i + 1) * VLEN_256);
+ oV = iV.and(masks[i]).lanewise(VectorOperators.LSHL, b - lo[i]).or(oV);
+ oV.intoArray(out, outpos);
+ outpos += VLEN_256;
+ int j = 0;
+ for (; j < lc[i]; j++) {
+ iV.lanewise(VectorOperators.LSHR, b * j + lo[i])
+ .and(mask)
+ .intoArray(out, outpos);
+ outpos += VLEN_256;
+ n++;
+ }
+ oV = iV.lanewise(VectorOperators.LSHR, b * j + lo[i]).and(mask);
+ }
+ }
+
+ private static void fastpackEvenBit(final int[] in, int inpos,
+ final int[] out, int outpos, int b,
+ final int[] ho, final int[] lc) {
+ final int mask = (1 << b) - 1;
+ final int N = 32 % b == 0 ? (32 / b) - 1 : 32 / b;
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV.and(mask);
+ int n = 1;
+ for (; n <= N; n++) {
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + n * VLEN_512);
+ oV = iV.and(mask).lanewise(VectorOperators.LSHL, b * n).or(oV);
+ }
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ final int L = (b >>> 1) - 1;
+ for (int i = 0; i < L; i++) {
+ if (ho[i] != b)
+ oV = iV.and(mask).lanewise(VectorOperators.LSHR, ho[i]);
+ else
+ oV = oV.zero(SPECIES_512);
+ for (int j = 0; j < lc[i]; j++) {
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + n * VLEN_512);
+ oV = iV.and(mask)
+ .lanewise(VectorOperators.LSHL, b * j + (b - ho[i]))
+ .or(oV);
+ n++;
+ }
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+ }
+ }
+
+ private static void fastpackEvenBitNoMask(final int[] in, int inpos,
+ final int[] out, int outpos, int b,
+ final int[] ho, final int[] lc) {
+ final int N = 32 % b == 0 ? (32 / b) - 1 : 32 / b;
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ var oV = iV;
+ int n = 1;
+ for (; n <= N; n++) {
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + n * VLEN_512);
+ oV = iV.lanewise(VectorOperators.LSHL, b * n).or(oV);
+ }
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+
+ final int L = (b >>> 1) - 1;
+ for (int i = 0; i < L; i++) {
+ if (ho[i] != b)
+ oV = iV.lanewise(VectorOperators.LSHR, ho[i]);
+ else
+ oV = oV.zero(SPECIES_512);
+ for (int j = 0; j < lc[i]; j++) {
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + n * VLEN_512);
+ oV = iV.lanewise(VectorOperators.LSHL, b * j + (b - ho[i])).or(oV);
+ n++;
+ }
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+ }
+ }
+
+ private static void fastUnpackEventBit(final int[] in, int inpos,
+ final int[] out, int outpos, int b,
+ final int[] lo, int[] masks,
+ int[] lc) {
+ final int mask = (1 << b) - 1;
+ final int N = 32 / b;
+ var iV = IntVector.fromArray(SPECIES_512, in, inpos);
+ int n = 0;
+ for (; n < N; n++) {
+ iV.lanewise(VectorOperators.LSHR, b * n).and(mask).intoArray(out, outpos);
+ outpos += VLEN_512;
+ }
+ var oV = iV.lanewise(VectorOperators.LSHR, b * n).and(mask);
+ if ((b & (b - 1)) == 0)
+ oV = oV.zero(SPECIES_512);
+
+ final int L = (b >>> 1) - 1;
+ for (int i = 0; i < L; i++) {
+ iV = IntVector.fromArray(SPECIES_512, in, inpos + (i + 1) * VLEN_512);
+ oV = iV.and(masks[i]).lanewise(VectorOperators.LSHL, b - lo[i]).or(oV);
+ oV.intoArray(out, outpos);
+ outpos += VLEN_512;
+ int j = 0;
+ for (; j < lc[i]; j++) {
+ iV.lanewise(VectorOperators.LSHR, b * j + lo[i])
+ .and(mask)
+ .intoArray(out, outpos);
+ outpos += VLEN_512;
+ n++;
+ }
+ if ((32 - lo[i]) % b != 0)
+ oV = iV.lanewise(VectorOperators.LSHR, b * j + lo[i]).and(mask);
+ else
+ oV = oV.zero(SPECIES_512);
+ }
+ }
+
+ public static int slowpack(final int[] in, int inpos, int inlen,
+ final int[] out, int outpos, int b) {
+ if (inlen == 0)
+ return outpos;
+ if (b == 32) {
+ System.arraycopy(in, inpos, out, outpos, inlen);
+ return outpos + inlen;
+ }
+ int mask = (1 << b) - 1;
+ int c = 0;
+ int l = 0;
+ int r = 0;
+ int val = 0;
+ for (int i = 0; i < inlen; i++) {
+ val = in[inpos + i] & mask;
+ out[outpos] |= val << (c + r);
+ c += b;
+ l = (32 - r) % b;
+ if (c + r >= 32) {
+ if (i < inlen - 1 || l != 0)
+ outpos++;
+ r = l == 0 ? 0 : b - l;
+ if (l != 0)
+ out[outpos] = val >> (b - r);
+ c = 0;
+ }
+ }
+ return outpos;
+ }
+
+ public static int slowunpack(final int[] in, int inpos, final int[] out,
+ int outpos, int outlen, int b) {
+ if (outlen == 0) {
+ return inpos;
+ }
+ if (b == 32) {
+ System.arraycopy(in, inpos, out, outpos, outlen);
+ return inpos + outlen;
+ }
+ int mask = (1 << b) - 1;
+ int limit = outpos + outlen;
+ int r = 0;
+ int val = 0;
+ int i = 0;
+ for (; outpos < limit; i++) {
+ if (r > 0)
+ out[outpos++] =
+ (val >>> (32 - (b - r))) | ((in[inpos + i] << (b - r)) & mask);
+ val = in[inpos + i];
+ int j = 0;
+ int l = 32 - r;
+ int ll = l % b == 0 ? l : l - b;
+ while (j < ll && outpos < limit) {
+ out[outpos++] = (val >> (j + r)) & mask;
+ j += b;
+ }
+ r = l % b == 0 ? 0 : b - (l % b);
+ }
+ return inpos + i;
+ }
+
+ public static int numCompressedInts(int n, int b) {
+ int width = b % 2 == 0 ? VLEN_512 : VLEN_256;
+ if (n <= width)
+ return n;
+ int intsPerVec = (32 / b) * width;
+ int q = (n + intsPerVec - 1) / intsPerVec;
+ return q * width;
+ }
+
+ public static void fastpack(final int[] in, int inpos, final int[] out,
+ int outpos, int b) {
+ switch (b) {
+ case 0:
+ break;
+ case 1:
+ fastpackOddBit(in, inpos, out, outpos, 1, new int[] {}, new int[] {});
+ break;
+ case 2:
+ fastpackEvenBit(in, inpos, out, outpos, 2, new int[] {}, new int[] {});
+ break;
+ case 3:
+ fastpackOddBit(in, inpos, out, outpos, 3, new int[] {0x2, 0x1},
+ new int[] {0xb, 0xa});
+ break;
+ case 4:
+ fastpackEvenBit(in, inpos, out, outpos, 4, new int[] {0x4},
+ new int[] {0x8});
+ break;
+ case 5:
+ fastpackOddBit(in, inpos, out, outpos, 5, new int[] {0x2, 0x4, 0x1, 0x3},
+ new int[] {0x6, 0x7, 0x6, 0x6});
+ break;
+ case 6:
+ fastpackEvenBit(in, inpos, out, outpos, 6, new int[] {0x2, 0x4},
+ new int[] {0x5, 0x5});
+ break;
+ case 7:
+ fastpackOddBit(in, inpos, out, outpos, 7,
+ new int[] {0x4, 0x1, 0x5, 0x2, 0x6, 0x3},
+ new int[] {0x5, 0x4, 0x5, 0x4, 0x5, 0x4});
+ break;
+ case 8:
+ fastpackEvenBit(in, inpos, out, outpos, 8, new int[] {0x8, 0x8, 0x8},
+ new int[] {0x4, 0x4, 0x4});
+ break;
+ case 9:
+ fastpackOddBit(in, inpos, out, outpos, 9,
+ new int[] {0x5, 0x1, 0x6, 0x2, 0x7, 0x3, 0x8, 0x4},
+ new int[] {0x4, 0x3, 0x4, 0x3, 0x4, 0x3, 0x4, 0x3});
+ break;
+ case 10:
+ fastpackEvenBit(in, inpos, out, outpos, 10,
+ new int[] {0x2, 0x4, 0x6, 0x8},
+ new int[] {0x3, 0x3, 0x3, 0x3});
+ break;
+ case 11:
+ fastpackOddBit(
+ in, inpos, out, outpos, 11,
+ new int[] {0xa, 0x9, 0x8, 0x7, 0x6, 0x5, 0x4, 0x3, 0x2, 0x1},
+ new int[] {0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x2});
+ break;
+ case 12:
+ fastpackEvenBit(in, inpos, out, outpos, 12,
+ new int[] {0x8, 0x4, 0xc, 0x8, 0x4},
+ new int[] {0x3, 0x2, 0x3, 0x3, 0x2});
+ break;
+ case 13:
+ fastpackOddBit(in, inpos, out, outpos, 13,
+ new int[] {0x6, 0xc, 0x5, 0xb, 0x4, 0xa, 0x3, 0x9, 0x2,
+ 0x8, 0x1, 0x7},
+ new int[] {0x2, 0x3, 0x2, 0x3, 0x2, 0x3, 0x2, 0x3, 0x2,
+ 0x3, 0x2, 0x2});
+ break;
+ case 14:
+ fastpackEvenBit(in, inpos, out, outpos, 14,
+ new int[] {0x4, 0x8, 0xc, 0x2, 0x6, 0xa},
+ new int[] {0x2, 0x2, 0x3, 0x2, 0x2, 0x2});
+ break;
+ case 15:
+ fastpackOddBit(in, inpos, out, outpos, 15,
+ new int[] {0x2, 0x4, 0x6, 0x8, 0xa, 0xc, 0xe, 0x1, 0x3,
+ 0x5, 0x7, 0x9, 0xb, 0xd},
+ new int[] {0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x3, 0x2, 0x2,
+ 0x2, 0x2, 0x2, 0x2, 0x2});
+ break;
+ case 16:
+ fastpackEvenBit(in, inpos, out, outpos, 16,
+ new int[] {0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10},
+ new int[] {0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2});
+ break;
+ case 17:
+ fastpackOddBit(in, inpos, out, outpos, 17,
+ new int[] {0xf, 0xd, 0xb, 0x9, 0x7, 0x5, 0x3, 0x1, 0x10,
+ 0xe, 0xc, 0xa, 0x8, 0x6, 0x4, 0x2},
+ new int[] {0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x2,
+ 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1});
+ break;
+ case 18:
+ fastpackEvenBit(in, inpos, out, outpos, 18,
+ new int[] {0xe, 0xa, 0x6, 0x2, 0x10, 0xc, 0x8, 0x4},
+ new int[] {0x2, 0x2, 0x2, 0x1, 0x2, 0x2, 0x2, 0x1});
+ break;
+ case 19:
+ fastpackOddBit(in, inpos, out, outpos, 19,
+ new int[] {0xd, 0x7, 0x1, 0xe, 0x8, 0x2, 0xf, 0x9, 0x3,
+ 0x10, 0xa, 0x4, 0x11, 0xb, 0x5, 0x12, 0xc, 0x6},
+ new int[] {0x2, 0x2, 0x1, 0x2, 0x2, 0x1, 0x2, 0x2, 0x1,
+ 0x2, 0x2, 0x1, 0x2, 0x2, 0x1, 0x2, 0x2, 0x1});
+ break;
+ case 20:
+ fastpackEvenBit(
+ in, inpos, out, outpos, 20,
+ new int[] {0xc, 0x4, 0x10, 0x8, 0x14, 0xc, 0x4, 0x10, 0x8},
+ new int[] {0x2, 0x1, 0x2, 0x1, 0x2, 0x2, 0x1, 0x2, 0x1});
+ break;
+ case 21:
+ fastpackOddBit(
+ in, inpos, out, outpos, 21,
+ new int[] {0xb, 0x1, 0xc, 0x2, 0xd, 0x3, 0xe, 0x4, 0xf, 0x5,
+ 0x10, 0x6, 0x11, 0x7, 0x12, 0x8, 0x13, 0x9, 0x14, 0xa},
+ new int[] {0x2, 0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x1,
+ 0x2, 0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x1});
+ break;
+ case 22:
+ fastpackEvenBit(
+ in, inpos, out, outpos, 22,
+ new int[] {0xa, 0x14, 0x8, 0x12, 0x6, 0x10, 0x4, 0xe, 0x2, 0xc},
+ new int[] {0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x1, 0x1});
+ break;
+ case 23:
+ fastpackOddBit(in, inpos, out, outpos, 23,
+ new int[] {0x9, 0x12, 0x4, 0xd, 0x16, 0x8, 0x11, 0x3,
+ 0xc, 0x15, 0x7, 0x10, 0x2, 0xb, 0x14, 0x6,
+ 0xf, 0x1, 0xa, 0x13, 0x5, 0xe},
+ new int[] {0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x2, 0x1,
+ 0x1, 0x2, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1,
+ 0x2, 0x1, 0x1, 0x2, 0x1, 0x1});
+ break;
+ case 24:
+ fastpackEvenBit(
+ in, inpos, out, outpos, 24,
+ new int[] {0x8, 0x10, 0x18, 0x8, 0x10, 0x18, 0x8, 0x10, 0x18, 0x8,
+ 0x10},
+ new int[] {0x1, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x1});
+ break;
+ case 25:
+ fastpackOddBit(in, inpos, out, outpos, 25,
+ new int[] {0x7, 0xe, 0x15, 0x3, 0xa, 0x11, 0x18, 0x6,
+ 0xd, 0x14, 0x2, 0x9, 0x10, 0x17, 0x5, 0xc,
+ 0x13, 0x1, 0x8, 0xf, 0x16, 0x4, 0xb, 0x12},
+ new int[] {0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x2, 0x1,
+ 0x1, 0x2, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1,
+ 0x2, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1});
+ break;
+ case 26:
+ fastpackEvenBit(in, inpos, out, outpos, 26,
+ new int[] {0x6, 0xc, 0x12, 0x18, 0x4, 0xa, 0x10, 0x16,
+ 0x2, 0x8, 0xe, 0x14},
+ new int[] {0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x2, 0x1,
+ 0x1, 0x1, 0x1});
+ break;
+ case 27:
+ fastpackOddBit(in, inpos, out, outpos, 27,
+ new int[] {0x5, 0xa, 0xf, 0x14, 0x19, 0x3, 0x8,
+ 0xd, 0x12, 0x17, 0x1, 0x6, 0xb, 0x10,
+ 0x15, 0x1a, 0x4, 0x9, 0xe, 0x13, 0x18,
+ 0x2, 0x7, 0xc, 0x11, 0x16},
+ new int[] {0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1,
+ 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1,
+ 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1});
+ break;
+ case 28:
+ fastpackEvenBit(in, inpos, out, outpos, 28,
+ new int[] {0x4, 0x8, 0xc, 0x10, 0x14, 0x18, 0x1c, 0x4,
+ 0x8, 0xc, 0x10, 0x14, 0x18},
+ new int[] {0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1,
+ 0x1, 0x1, 0x1, 0x1});
+ break;
+ case 29:
+ fastpackOddBit(
+ in, inpos, out, outpos, 29,
+ new int[] {0x3, 0x6, 0x9, 0xc, 0xf, 0x12, 0x15, 0x18, 0x1b, 0x1,
+ 0x4, 0x7, 0xa, 0xd, 0x10, 0x13, 0x16, 0x19, 0x1c, 0x2,
+ 0x5, 0x8, 0xb, 0xe, 0x11, 0x14, 0x17, 0x1a},
+ new int[] {0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1,
+ 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1,
+ 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1});
+ break;
+ case 30:
+ fastpackEvenBit(in, inpos, out, outpos, 30,
+ new int[] {0x2, 0x4, 0x6, 0x8, 0xa, 0xc, 0xe, 0x10, 0x12,
+ 0x14, 0x16, 0x18, 0x1a, 0x1c},
+ new int[] {0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1,
+ 0x1, 0x1, 0x1, 0x1, 0x1});
+ break;
+ case 31:
+ fastpackOddBit(in, inpos, out, outpos, 31,
+ new int[] {0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8,
+ 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf, 0x10,
+ 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
+ 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e},
+ new int[] {0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1,
+ 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1,
+ 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1,
+ 0x1, 0x1, 0x1, 0x1, 0x1, 0x1});
+ break;
+ case 32:
+ System.arraycopy(in, inpos, out, outpos, 256);
+ break;
+ }
+ }
+
+ public static void fastpackNoMask(final int[] in, int inpos, final int[] out,
+ int outpos, int b) {
+ switch (b) {
+ case 0:
+ break;
+ case 1:
+ fastpackOddBitNoMask(in, inpos, out, outpos, 1, new int[] {},
+ new int[] {});
+ break;
+ case 2:
+ fastpackEvenBitNoMask(in, inpos, out, outpos, 2, new int[] {},
+ new int[] {});
+ break;
+ case 3:
+ fastpackOddBitNoMask(in, inpos, out, outpos, 3, new int[] {0x2, 0x1},
+ new int[] {0xb, 0xa});
+ break;
+ case 4:
+ fastpackEvenBitNoMask(in, inpos, out, outpos, 4, new int[] {0x4},
+ new int[] {0x8});
+ break;
+ case 5:
+ fastpackOddBitNoMask(in, inpos, out, outpos, 5,
+ new int[] {0x2, 0x4, 0x1, 0x3},
+ new int[] {0x6, 0x7, 0x6, 0x6});
+ break;
+ case 6:
+ fastpackEvenBitNoMask(in, inpos, out, outpos, 6, new int[] {0x2, 0x4},
+ new int[] {0x5, 0x5});
+ break;
+ case 7:
+ fastpackOddBitNoMask(in, inpos, out, outpos, 7,
+ new int[] {0x4, 0x1, 0x5, 0x2, 0x6, 0x3},
+ new int[] {0x5, 0x4, 0x5, 0x4, 0x5, 0x4});
+ break;
+ case 8:
+ fastpackEvenBitNoMask(in, inpos, out, outpos, 8,
+ new int[] {0x8, 0x8, 0x8},
+ new int[] {0x4, 0x4, 0x4});
+ break;
+ case 9:
+ fastpackOddBitNoMask(in, inpos, out, outpos, 9,
+ new int[] {0x5, 0x1, 0x6, 0x2, 0x7, 0x3, 0x8, 0x4},
+ new int[] {0x4, 0x3, 0x4, 0x3, 0x4, 0x3, 0x4, 0x3});
+ break;
+ case 10:
+ fastpackEvenBitNoMask(in, inpos, out, outpos, 10,
+ new int[] {0x2, 0x4, 0x6, 0x8},
+ new int[] {0x3, 0x3, 0x3, 0x3});
+ break;
+ case 11:
+ fastpackOddBitNoMask(
+ in, inpos, out, outpos, 11,
+ new int[] {0xa, 0x9, 0x8, 0x7, 0x6, 0x5, 0x4, 0x3, 0x2, 0x1},
+ new int[] {0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x2});
+ break;
+ case 12:
+ fastpackEvenBitNoMask(in, inpos, out, outpos, 12,
+ new int[] {0x8, 0x4, 0xc, 0x8, 0x4},
+ new int[] {0x3, 0x2, 0x3, 0x3, 0x2});
+ break;
+ case 13:
+ fastpackOddBitNoMask(in, inpos, out, outpos, 13,
+ new int[] {0x6, 0xc, 0x5, 0xb, 0x4, 0xa, 0x3, 0x9,
+ 0x2, 0x8, 0x1, 0x7},
+ new int[] {0x2, 0x3, 0x2, 0x3, 0x2, 0x3, 0x2, 0x3,
+ 0x2, 0x3, 0x2, 0x2});
+ break;
+ case 14:
+ fastpackEvenBitNoMask(in, inpos, out, outpos, 14,
+ new int[] {0x4, 0x8, 0xc, 0x2, 0x6, 0xa},
+ new int[] {0x2, 0x2, 0x3, 0x2, 0x2, 0x2});
+ break;
+ case 15:
+ fastpackOddBitNoMask(in, inpos, out, outpos, 15,
+ new int[] {0x2, 0x4, 0x6, 0x8, 0xa, 0xc, 0xe, 0x1,
+ 0x3, 0x5, 0x7, 0x9, 0xb, 0xd},
+ new int[] {0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x3, 0x2,
+ 0x2, 0x2, 0x2, 0x2, 0x2, 0x2});
+ break;
+ case 16:
+ fastpackEvenBitNoMask(
+ in, inpos, out, outpos, 16,
+ new int[] {0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10},
+ new int[] {0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2});
+ break;
+ case 17:
+ fastpackOddBitNoMask(in, inpos, out, outpos, 17,
+ new int[] {0xf, 0xd, 0xb, 0x9, 0x7, 0x5, 0x3, 0x1,
+ 0x10, 0xe, 0xc, 0xa, 0x8, 0x6, 0x4, 0x2},
+ new int[] {0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1,
+ 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1});
+ break;
+ case 18:
+ fastpackEvenBitNoMask(in, inpos, out, outpos, 18,
+ new int[] {0xe, 0xa, 0x6, 0x2, 0x10, 0xc, 0x8, 0x4},
+ new int[] {0x2, 0x2, 0x2, 0x1, 0x2, 0x2, 0x2, 0x1});
+ break;
+ case 19:
+ fastpackOddBitNoMask(
+ in, inpos, out, outpos, 19,
+ new int[] {0xd, 0x7, 0x1, 0xe, 0x8, 0x2, 0xf, 0x9, 0x3, 0x10, 0xa,
+ 0x4, 0x11, 0xb, 0x5, 0x12, 0xc, 0x6},
+ new int[] {0x2, 0x2, 0x1, 0x2, 0x2, 0x1, 0x2, 0x2, 0x1, 0x2, 0x2, 0x1,
+ 0x2, 0x2, 0x1, 0x2, 0x2, 0x1});
+ break;
+ case 20:
+ fastpackEvenBitNoMask(
+ in, inpos, out, outpos, 20,
+ new int[] {0xc, 0x4, 0x10, 0x8, 0x14, 0xc, 0x4, 0x10, 0x8},
+ new int[] {0x2, 0x1, 0x2, 0x1, 0x2, 0x2, 0x1, 0x2, 0x1});
+ break;
+ case 21:
+ fastpackOddBitNoMask(
+ in, inpos, out, outpos, 21,
+ new int[] {0xb, 0x1, 0xc, 0x2, 0xd, 0x3, 0xe, 0x4, 0xf, 0x5,
+ 0x10, 0x6, 0x11, 0x7, 0x12, 0x8, 0x13, 0x9, 0x14, 0xa},
+ new int[] {0x2, 0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x1,
+ 0x2, 0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x1});
+ break;
+ case 22:
+ fastpackEvenBitNoMask(
+ in, inpos, out, outpos, 22,
+ new int[] {0xa, 0x14, 0x8, 0x12, 0x6, 0x10, 0x4, 0xe, 0x2, 0xc},
+ new int[] {0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x1, 0x1});
+ break;
+ case 23:
+ fastpackOddBitNoMask(
+ in, inpos, out, outpos, 23,
+ new int[] {0x9, 0x12, 0x4, 0xd, 0x16, 0x8, 0x11, 0x3,
+ 0xc, 0x15, 0x7, 0x10, 0x2, 0xb, 0x14, 0x6,
+ 0xf, 0x1, 0xa, 0x13, 0x5, 0xe},
+ new int[] {0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1,
+ 0x2, 0x1, 0x1, 0x2, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x1});
+ break;
+ case 24:
+ fastpackEvenBitNoMask(
+ in, inpos, out, outpos, 24,
+ new int[] {0x8, 0x10, 0x18, 0x8, 0x10, 0x18, 0x8, 0x10, 0x18, 0x8,
+ 0x10},
+ new int[] {0x1, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x1});
+ break;
+ case 25:
+ fastpackOddBitNoMask(in, inpos, out, outpos, 25,
+ new int[] {0x7, 0xe, 0x15, 0x3, 0xa, 0x11,
+ 0x18, 0x6, 0xd, 0x14, 0x2, 0x9,
+ 0x10, 0x17, 0x5, 0xc, 0x13, 0x1,
+ 0x8, 0xf, 0x16, 0x4, 0xb, 0x12},
+ new int[] {0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x2, 0x1,
+ 0x1, 0x2, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1,
+ 0x2, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1});
+ break;
+ case 26:
+ fastpackEvenBitNoMask(in, inpos, out, outpos, 26,
+ new int[] {0x6, 0xc, 0x12, 0x18, 0x4, 0xa, 0x10,
+ 0x16, 0x2, 0x8, 0xe, 0x14},
+ new int[] {0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x2,
+ 0x1, 0x1, 0x1, 0x1});
+ break;
+ case 27:
+ fastpackOddBitNoMask(
+ in, inpos, out, outpos, 27,
+ new int[] {0x5, 0xa, 0xf, 0x14, 0x19, 0x3, 0x8, 0xd, 0x12,
+ 0x17, 0x1, 0x6, 0xb, 0x10, 0x15, 0x1a, 0x4, 0x9,
+ 0xe, 0x13, 0x18, 0x2, 0x7, 0xc, 0x11, 0x16},
+ new int[] {0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1,
+ 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1,
+ 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1});
+ break;
+ case 28:
+ fastpackEvenBitNoMask(in, inpos, out, outpos, 28,
+ new int[] {0x4, 0x8, 0xc, 0x10, 0x14, 0x18, 0x1c,
+ 0x4, 0x8, 0xc, 0x10, 0x14, 0x18},
+ new int[] {0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1,
+ 0x1, 0x1, 0x1, 0x1, 0x1});
+ break;
+ case 29:
+ fastpackOddBitNoMask(
+ in, inpos, out, outpos, 29,
+ new int[] {0x3, 0x6, 0x9, 0xc, 0xf, 0x12, 0x15, 0x18, 0x1b, 0x1,
+ 0x4, 0x7, 0xa, 0xd, 0x10, 0x13, 0x16, 0x19, 0x1c, 0x2,
+ 0x5, 0x8, 0xb, 0xe, 0x11, 0x14, 0x17, 0x1a},
+ new int[] {0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1,
+ 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1,
+ 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1});
+ break;
+ case 30:
+ fastpackEvenBitNoMask(in, inpos, out, outpos, 30,
+ new int[] {0x2, 0x4, 0x6, 0x8, 0xa, 0xc, 0xe, 0x10,
+ 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c},
+ new int[] {0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1,
+ 0x1, 0x1, 0x1, 0x1, 0x1, 0x1});
+ break;
+ case 31:
+ fastpackOddBitNoMask(
+ in, inpos, out, outpos, 31,
+ new int[] {0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8,
+ 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf, 0x10,
+ 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
+ 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e},
+ new int[] {0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1,
+ 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1,
+ 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1});
+ break;
+ case 32:
+ System.arraycopy(in, inpos, out, outpos, 256);
+ break;
+ }
+ }
+
+ public static void fastunpack(final int[] in, int inpos, final int[] out,
+ int outpos, int b) {
+ switch (b) {
+ case 0:
+ Arrays.fill(out, outpos, outpos + 256, 0);
+ break;
+ case 1:
+ fastUnpackOddBit(in, inpos, out, outpos, 1, new int[] {}, new int[] {},
+ new int[] {});
+ break;
+ case 2:
+ fastUnpackEventBit(in, inpos, out, outpos, 2, new int[] {}, new int[] {},
+ new int[] {});
+ break;
+ case 3:
+ fastUnpackOddBit(in, inpos, out, outpos, 3, new int[] {0x1, 0x2},
+ new int[] {0x1, 0x3}, new int[] {0xa, 0xa});
+ break;
+ case 4:
+ fastUnpackEventBit(in, inpos, out, outpos, 4, new int[] {0x4},
+ new int[] {0xf}, new int[] {0x7});
+ break;
+ case 5:
+ fastUnpackOddBit(
+ in, inpos, out, outpos, 5, new int[] {0x3, 0x1, 0x4, 0x2},
+ new int[] {0x7, 0x1, 0xf, 0x3}, new int[] {0x5, 0x6, 0x5, 0x6});
+ break;
+ case 6:
+ fastUnpackEventBit(in, inpos, out, outpos, 6, new int[] {0x4, 0x2},
+ new int[] {0xf, 0x3}, new int[] {0x4, 0x5});
+ break;
+ case 7:
+ fastUnpackOddBit(in, inpos, out, outpos, 7,
+ new int[] {0x3, 0x6, 0x2, 0x5, 0x1, 0x4},
+ new int[] {0x7, 0x3f, 0x3, 0x1f, 0x1, 0xf},
+ new int[] {0x4, 0x3, 0x4, 0x3, 0x4, 0x4});
+ break;
+ case 8:
+ fastUnpackEventBit(in, inpos, out, outpos, 8, new int[] {0x8, 0x8, 0x8},
+ new int[] {0xff, 0xff, 0xff},
+ new int[] {0x3, 0x3, 0x3});
+ break;
+ case 9:
+ fastUnpackOddBit(in, inpos, out, outpos, 9,
+ new int[] {0x4, 0x8, 0x3, 0x7, 0x2, 0x6, 0x1, 0x5},
+ new int[] {0xf, 0xff, 0x7, 0x7f, 0x3, 0x3f, 0x1, 0x1f},
+ new int[] {0x3, 0x2, 0x3, 0x2, 0x3, 0x2, 0x3, 0x3});
+ break;
+ case 10:
+ fastUnpackEventBit(
+ in, inpos, out, outpos, 10, new int[] {0x8, 0x6, 0x4, 0x2},
+ new int[] {0xff, 0x3f, 0xf, 0x3}, new int[] {0x2, 0x2, 0x2, 0x3});
+ break;
+ case 11:
+ fastUnpackOddBit(
+ in, inpos, out, outpos, 11,
+ new int[] {0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa},
+ new int[] {0x1, 0x3, 0x7, 0xf, 0x1f, 0x3f, 0x7f, 0xff, 0x1ff, 0x3ff},
+ new int[] {0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2});
+ break;
+ case 12:
+ fastUnpackEventBit(in, inpos, out, outpos, 12,
+ new int[] {0x4, 0x8, 0xc, 0x4, 0x8},
+ new int[] {0xf, 0xff, 0xfff, 0xf, 0xff},
+ new int[] {0x2, 0x2, 0x1, 0x2, 0x2});
+ break;
+ case 13:
+ fastUnpackOddBit(in, inpos, out, outpos, 13,
+ new int[] {0x7, 0x1, 0x8, 0x2, 0x9, 0x3, 0xa, 0x4, 0xb,
+ 0x5, 0xc, 0x6},
+ new int[] {0x7f, 0x1, 0xff, 0x3, 0x1ff, 0x7, 0x3ff, 0xf,
+ 0x7ff, 0x1f, 0xfff, 0x3f},
+ new int[] {0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x1,
+ 0x2, 0x1, 0x2});
+ break;
+ case 14:
+ fastUnpackEventBit(in, inpos, out, outpos, 14,
+ new int[] {0xa, 0x6, 0x2, 0xc, 0x8, 0x4},
+ new int[] {0x3ff, 0x3f, 0x3, 0xfff, 0xff, 0xf},
+ new int[] {0x1, 0x1, 0x2, 0x1, 0x1, 0x2});
+ break;
+ case 15:
+ fastUnpackOddBit(in, inpos, out, outpos, 15,
+ new int[] {0xd, 0xb, 0x9, 0x7, 0x5, 0x3, 0x1, 0xe, 0xc,
+ 0xa, 0x8, 0x6, 0x4, 0x2},
+ new int[] {0x1fff, 0x7ff, 0x1ff, 0x7f, 0x1f, 0x7, 0x1,
+ 0x3fff, 0xfff, 0x3ff, 0xff, 0x3f, 0xf, 0x3},
+ new int[] {0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1,
+ 0x1, 0x1, 0x1, 0x1, 0x2});
+ break;
+ case 16:
+ fastUnpackEventBit(
+ in, inpos, out, outpos, 16,
+ new int[] {0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10},
+ new int[] {0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff},
+ new int[] {0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1});
+ break;
+ case 17:
+ fastUnpackOddBit(in, inpos, out, outpos, 17,
+ new int[] {0x2, 0x4, 0x6, 0x8, 0xa, 0xc, 0xe, 0x10, 0x1,
+ 0x3, 0x5, 0x7, 0x9, 0xb, 0xd, 0xf},
+ new int[] {0x3, 0xf, 0x3f, 0xff, 0x3ff, 0xfff, 0x3fff,
+ 0xffff, 0x1, 0x7, 0x1f, 0x7f, 0x1ff, 0x7ff,
+ 0x1fff, 0x7fff},
+ new int[] {0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x1,
+ 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1});
+ break;
+ case 18:
+ fastUnpackEventBit(
+ in, inpos, out, outpos, 18,
+ new int[] {0x4, 0x8, 0xc, 0x10, 0x2, 0x6, 0xa, 0xe},
+ new int[] {0xf, 0xff, 0xfff, 0xffff, 0x3, 0x3f, 0x3ff, 0x3fff},
+ new int[] {0x1, 0x1, 0x1, 0x0, 0x1, 0x1, 0x1, 0x1});
+ break;
+ case 19:
+ fastUnpackOddBit(in, inpos, out, outpos, 19,
+ new int[] {0x6, 0xc, 0x12, 0x5, 0xb, 0x11, 0x4, 0xa,
+ 0x10, 0x3, 0x9, 0xf, 0x2, 0x8, 0xe, 0x1, 0x7,
+ 0xd},
+ new int[] {0x3f, 0xfff, 0x3ffff, 0x1f, 0x7ff, 0x1ffff,
+ 0xf, 0x3ff, 0xffff, 0x7, 0x1ff, 0x7fff, 0x3,
+ 0xff, 0x3fff, 0x1, 0x7f, 0x1fff},
+ new int[] {0x1, 0x1, 0x0, 0x1, 0x1, 0x0, 0x1, 0x1, 0x0,
+ 0x1, 0x1, 0x0, 0x1, 0x1, 0x0, 0x1, 0x1, 0x1});
+ break;
+ case 20:
+ fastUnpackEventBit(
+ in, inpos, out, outpos, 20,
+ new int[] {0x8, 0x10, 0x4, 0xc, 0x14, 0x8, 0x10, 0x4, 0xc},
+ new int[] {0xff, 0xffff, 0xf, 0xfff, 0xfffff, 0xff, 0xffff, 0xf,
+ 0xfff},
+ new int[] {0x1, 0x0, 0x1, 0x1, 0x0, 0x1, 0x0, 0x1, 0x1});
+ break;
+ case 21:
+ fastUnpackOddBit(
+ in, inpos, out, outpos, 21,
+ new int[] {0xa, 0x14, 0x9, 0x13, 0x8, 0x12, 0x7, 0x11, 0x6, 0x10,
+ 0x5, 0xf, 0x4, 0xe, 0x3, 0xd, 0x2, 0xc, 0x1, 0xb},
+ new int[] {0x3ff, 0xfffff, 0x1ff, 0x7ffff, 0xff, 0x3ffff, 0x7f,
+ 0x1ffff, 0x3f, 0xffff, 0x1f, 0x7fff, 0xf, 0x3fff,
+ 0x7, 0x1fff, 0x3, 0xfff, 0x1, 0x7ff},
+ new int[] {0x1, 0x0, 0x1, 0x0, 0x1, 0x0, 0x1, 0x0, 0x1, 0x0,
+ 0x1, 0x0, 0x1, 0x0, 0x1, 0x0, 0x1, 0x0, 0x1, 0x1});
+ break;
+ case 22:
+ fastUnpackEventBit(
+ in, inpos, out, outpos, 22,
+ new int[] {0xc, 0x2, 0xe, 0x4, 0x10, 0x6, 0x12, 0x8, 0x14, 0xa},
+ new int[] {0xfff, 0x3, 0x3fff, 0xf, 0xffff, 0x3f, 0x3ffff, 0xff,
+ 0xfffff, 0x3ff},
+ new int[] {0x0, 0x1, 0x0, 0x1, 0x0, 0x1, 0x0, 0x1, 0x0, 0x1});
+ break;
+ case 23:
+ fastUnpackOddBit(
+ in, inpos, out, outpos, 23,
+ new int[] {0xe, 0x5, 0x13, 0xa, 0x1, 0xf, 0x6, 0x14,
+ 0xb, 0x2, 0x10, 0x7, 0x15, 0xc, 0x3, 0x11,
+ 0x8, 0x16, 0xd, 0x4, 0x12, 0x9},
+ new int[] {0x3fff, 0x1f, 0x7ffff, 0x3ff, 0x1, 0x7fff,
+ 0x3f, 0xfffff, 0x7ff, 0x3, 0xffff, 0x7f,
+ 0x1fffff, 0xfff, 0x7, 0x1ffff, 0xff, 0x3fffff,
+ 0x1fff, 0xf, 0x3ffff, 0x1ff},
+ new int[] {0x0, 0x1, 0x0, 0x0, 0x1, 0x0, 0x1, 0x0, 0x0, 0x1, 0x0,
+ 0x1, 0x0, 0x0, 0x1, 0x0, 0x1, 0x0, 0x0, 0x1, 0x0, 0x1});
+ break;
+ case 24:
+ fastUnpackEventBit(
+ in, inpos, out, outpos, 24,
+ new int[] {0x10, 0x8, 0x18, 0x10, 0x8, 0x18, 0x10, 0x8, 0x18, 0x10,
+ 0x8},
+ new int[] {0xffff, 0xff, 0xffffff, 0xffff, 0xff, 0xffffff, 0xffff,
+ 0xff, 0xffffff, 0xffff, 0xff},
+ new int[] {0x0, 0x1, 0x0, 0x0, 0x1, 0x0, 0x0, 0x1, 0x0, 0x0, 0x1});
+ break;
+ case 25:
+ fastUnpackOddBit(
+ in, inpos, out, outpos, 25,
+ new int[] {0x12, 0xb, 0x4, 0x16, 0xf, 0x8, 0x1, 0x13,
+ 0xc, 0x5, 0x17, 0x10, 0x9, 0x2, 0x14, 0xd,
+ 0x6, 0x18, 0x11, 0xa, 0x3, 0x15, 0xe, 0x7},
+ new int[] {0x3ffff, 0x7ff, 0xf, 0x3fffff, 0x7fff, 0xff,
+ 0x1, 0x7ffff, 0xfff, 0x1f, 0x7fffff, 0xffff,
+ 0x1ff, 0x3, 0xfffff, 0x1fff, 0x3f, 0xffffff,
+ 0x1ffff, 0x3ff, 0x7, 0x1fffff, 0x3fff, 0x7f},
+ new int[] {0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0,
+ 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0,
+ 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x1});
+ break;
+ case 26:
+ fastUnpackEventBit(in, inpos, out, outpos, 26,
+ new int[] {0x14, 0xe, 0x8, 0x2, 0x16, 0x10, 0xa, 0x4,
+ 0x18, 0x12, 0xc, 0x6},
+ new int[] {0xfffff, 0x3fff, 0xff, 0x3, 0x3fffff,
+ 0xffff, 0x3ff, 0xf, 0xffffff, 0x3ffff,
+ 0xfff, 0x3f},
+ new int[] {0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0,
+ 0x0, 0x0, 0x1});
+ break;
+ case 27:
+ fastUnpackOddBit(
+ in, inpos, out, outpos, 27,
+ new int[] {0x16, 0x11, 0xc, 0x7, 0x2, 0x18, 0x13, 0xe, 0x9,
+ 0x4, 0x1a, 0x15, 0x10, 0xb, 0x6, 0x1, 0x17, 0x12,
+ 0xd, 0x8, 0x3, 0x19, 0x14, 0xf, 0xa, 0x5},
+ new int[] {0x3fffff, 0x1ffff, 0xfff, 0x7f, 0x3, 0xffffff,
+ 0x7ffff, 0x3fff, 0x1ff, 0xf, 0x3ffffff, 0x1fffff,
+ 0xffff, 0x7ff, 0x3f, 0x1, 0x7fffff, 0x3ffff,
+ 0x1fff, 0xff, 0x7, 0x1ffffff, 0xfffff, 0x7fff,
+ 0x3ff, 0x1f},
+ new int[] {0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0,
+ 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0,
+ 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x1});
+ break;
+ case 28:
+ fastUnpackEventBit(in, inpos, out, outpos, 28,
+ new int[] {0x18, 0x14, 0x10, 0xc, 0x8, 0x4, 0x1c, 0x18,
+ 0x14, 0x10, 0xc, 0x8, 0x4},
+ new int[] {0xffffff, 0xfffff, 0xffff, 0xfff, 0xff, 0xf,
+ 0xfffffff, 0xffffff, 0xfffff, 0xffff, 0xfff,
+ 0xff, 0xf},
+ new int[] {0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x1});
+ break;
+ case 29:
+ fastUnpackOddBit(
+ in, inpos, out, outpos, 29,
+ new int[] {0x1a, 0x17, 0x14, 0x11, 0xe, 0xb, 0x8, 0x5, 0x2, 0x1c,
+ 0x19, 0x16, 0x13, 0x10, 0xd, 0xa, 0x7, 0x4, 0x1, 0x1b,
+ 0x18, 0x15, 0x12, 0xf, 0xc, 0x9, 0x6, 0x3},
+ new int[] {0x3ffffff, 0x7fffff, 0xfffff, 0x1ffff, 0x3fff,
+ 0x7ff, 0xff, 0x1f, 0x3, 0xfffffff,
+ 0x1ffffff, 0x3fffff, 0x7ffff, 0xffff, 0x1fff,
+ 0x3ff, 0x7f, 0xf, 0x1, 0x7ffffff,
+ 0xffffff, 0x1fffff, 0x3ffff, 0x7fff, 0xfff,
+ 0x1ff, 0x3f, 0x7},
+ new int[] {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1});
+ break;
+ case 30:
+ fastUnpackEventBit(in, inpos, out, outpos, 30,
+ new int[] {0x1c, 0x1a, 0x18, 0x16, 0x14, 0x12, 0x10,
+ 0xe, 0xc, 0xa, 0x8, 0x6, 0x4, 0x2},
+ new int[] {0xfffffff, 0x3ffffff, 0xffffff, 0x3fffff,
+ 0xfffff, 0x3ffff, 0xffff, 0x3fff, 0xfff,
+ 0x3ff, 0xff, 0x3f, 0xf, 0x3},
+ new int[] {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x1});
+ break;
+ case 31:
+ fastUnpackOddBit(
+ in, inpos, out, outpos, 31,
+ new int[] {0x1e, 0x1d, 0x1c, 0x1b, 0x1a, 0x19, 0x18, 0x17, 0x16, 0x15,
+ 0x14, 0x13, 0x12, 0x11, 0x10, 0xf, 0xe, 0xd, 0xc, 0xb,
+ 0xa, 0x9, 0x8, 0x7, 0x6, 0x5, 0x4, 0x3, 0x2, 0x1},
+ new int[] {0x3fffffff, 0x1fffffff, 0xfffffff, 0x7ffffff, 0x3ffffff,
+ 0x1ffffff, 0xffffff, 0x7fffff, 0x3fffff, 0x1fffff,
+ 0xfffff, 0x7ffff, 0x3ffff, 0x1ffff, 0xffff,
+ 0x7fff, 0x3fff, 0x1fff, 0xfff, 0x7ff,
+ 0x3ff, 0x1ff, 0xff, 0x7f, 0x3f,
+ 0x1f, 0xf, 0x7, 0x3, 0x1},
+ new int[] {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1});
+ break;
+
+ case 32:
+ System.arraycopy(in, inpos, out, outpos, 256);
+ break;
+ }
+ }
+}
diff --git a/src/main/java/me/lemire/integercompression/vector/VectorFastPFOR.java b/src/main/java/me/lemire/integercompression/vector/VectorFastPFOR.java
new file mode 100644
index 0000000..cc755c8
--- /dev/null
+++ b/src/main/java/me/lemire/integercompression/vector/VectorFastPFOR.java
@@ -0,0 +1,486 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ * (c) Intel Corp. (for Vector implementation)
+ */
+package me.lemire.integercompression.vector;
+
+import java.nio.ByteBuffer;
+import java.util.Arrays;
+import me.lemire.integercompression.IntegerCODEC;
+import me.lemire.integercompression.SkippableIntegerCODEC;
+import me.lemire.integercompression.IntWrapper;
+import me.lemire.integercompression.vector.VectorBitPackerKernels.LaneWidth;
+
+/**
+ * This is a patching scheme designed for speed.
+ * It encodes integers in blocks of integers within pages of
+ * up to 65536 integers. Note that it is important, to get good
+ * compression and good performance, to use sizeable arrays (greater than 1024
+ * integers). For arrays containing a number of integers that is not divisible
+ * by BLOCK_SIZE, you should use it in conjunction with another CODEC:
+ *
+ * IntegerCODEC ic = new Composition(new VectorFastPFOR(), new VariableByte()).
+ *
+ * For details, please see:
+ *
+ * Daniel Lemire and Leonid Boytsov, Decoding billions of integers per second
+ * through vectorization Software: Practice & Experience
+ * http://onlinelibrary.wiley.com/doi/10.1002/spe.2203/abstract
+ * http://arxiv.org/abs/1209.2137
+ *
+ * For sufficiently compressible and long arrays, it is faster and better
+ * than other PFOR schemes.
+ *
+ * Note that this does not use differential coding: if you are working on sorted
+ * lists, you should first compute deltas, @see
+ * me.lemire.integercompression.differential.Delta#delta.
+ *
+ * For multi-threaded applications, each thread should use its own FastPFOR
+ * object.
+ *
+ * Blocks are packed in a vectorized layout that differs by hardware vector
+ * lane width, so each stream is tagged with the width it was packed for and is
+ * decoded by the matching kernel. Decoding requires a machine whose preferred
+ * vector width is at least the stream's; a narrower machine fails fast rather
+ * than emulating. The default constructor packs at this machine's preferred
+ * width; the {@code (int, LaneWidth)} constructor pins a width so a
+ * heterogeneous cluster can decode on its narrowest node.
+ *
+ * @author Daniel Lemire
+ */
+public class VectorFastPFOR implements IntegerCODEC, SkippableIntegerCODEC {
+ private final static int OVERHEAD_OF_EACH_EXCEPT = 8;
+ private static final int OVERHEAD_OF_EACH_PAGE_IN_INTS = 36;
+ private static final int OVERHEAD_OF_EACH_BLOCK_IN_INTS = 1;
+ public final static int DEFAULT_PAGE_SIZE = 64 << 10;
+
+ public final static int BLOCK_SIZE = 256;
+ private final static int INTS_PER_BLOCK = BLOCK_SIZE >>> 5;
+
+ // The page header word holds the metadata offset in its low 30 bits and the
+ // packing lane-width tag in its top 2 bits.
+ private final static int WIDTH_SHIFT = 30;
+ private final static int WHEREMETA_MASK = (1 << WIDTH_SHIFT) - 1;
+
+ private final int pageSize;
+ private final LaneWidth encodeWidth;
+ private final VectorBitPackerKernels encoder;
+ private final int[][] dataTobePacked = new int[33][];
+ private int[] exceptData = null;
+
+ // Working area for compress and uncompress.
+ private final int[] dataPointers = new int[33];
+ private final int[] freqs = new int[33];
+ private final byte[] bem;
+ /**
+ * Construct the FastPFOR CODEC.
+ *
+ * @param pagesize
+ * the desired page size (recommended value is
+ * FastPFOR.DEFAULT_PAGE_SIZE)
+ * @param encodeWidth
+ * the vector lane width to pack with. Use
+ * {@link LaneWidth#PREFERRED} for this machine's fastest layout, or pin a
+ * cluster to its narrowest node's width so every node can decode the stream.
+ */
+ public VectorFastPFOR(int pagesize, LaneWidth encodeWidth) {
+ if (pagesize >= (1 << WIDTH_SHIFT))
+ throw new IllegalArgumentException("page size must be smaller than "
+ + (1 << WIDTH_SHIFT));
+ pageSize = pagesize;
+ this.encodeWidth = encodeWidth;
+ this.encoder = encodeWidth.kernel;
+ // Initiate arrrays.
+ bem = new byte[3 * pageSize / BLOCK_SIZE + pagesize];
+ for (int k = 1; k < dataTobePacked.length; ++k)
+ dataTobePacked[k] = new int[pageSize / 32 * 4]; // heuristic
+ exceptData = new int[pageSize * 4];
+ }
+
+ /**
+ * Construct the fastPFOR CODEC with default parameters, packing with this
+ * machine's preferred vector lane width.
+ */
+ public VectorFastPFOR() { this(DEFAULT_PAGE_SIZE, LaneWidth.PREFERRED); }
+
+ /**
+ * Compress data in blocks of BLOCK_SIZE integers (if fewer than BLOCK_SIZE
+ * integers are provided, nothing is done).
+ *
+ * @see IntegerCODEC#compress(int[], IntWrapper, int, int[], IntWrapper)
+ */
+ @Override
+ public void headlessCompress(int[] in, IntWrapper inpos, int inlength,
+ int[] out, IntWrapper outpos) {
+ inlength = inlength - inlength % BLOCK_SIZE;
+ // Allocate memory for working area.
+
+ final int finalinpos = inpos.get() + inlength;
+ while (inpos.get() != finalinpos) {
+ int thissize = Math.min(pageSize, finalinpos - inpos.get());
+ encodePage(in, inpos, thissize, out, outpos);
+ }
+ }
+
+ private void getBestBitSize(int[] in, int pos, int index) {
+ Arrays.fill(freqs, 0);
+ for (int i = pos, limit = pos + BLOCK_SIZE; i < limit; i++) {
+ freqs[32 - Integer.numberOfLeadingZeros(in[i])]++;
+ }
+ bem[index] = 32;
+ while (freqs[bem[index]] == 0)
+ bem[index]--;
+ bem[index + 2] = bem[index];
+ int maxb = bem[index + 2];
+ int bestcost = bem[index] * BLOCK_SIZE;
+ int cexcept = 0;
+ bem[index + 1] = 0;
+ for (int b = bem[index] - 1; b >= 0; --b) {
+ cexcept += freqs[b + 1];
+ if (cexcept == BLOCK_SIZE)
+ break;
+ // the extra 8 is the cost of storing maxbits
+ int thiscost = cexcept * OVERHEAD_OF_EACH_EXCEPT + cexcept * (maxb - b) +
+ b * BLOCK_SIZE + 8;
+ if (maxb - b == 1)
+ thiscost -= cexcept;
+ if (thiscost < bestcost) {
+ bestcost = thiscost;
+ bem[index] = (byte)b;
+ bem[index + 1] = (byte)cexcept;
+ }
+ }
+ }
+
+ private void encodePage(int[] in, IntWrapper inpos, int thissize, int[] out,
+ IntWrapper outpos) {
+ final int headerpos = outpos.get();
+ outpos.increment();
+ int tmpoutpos = outpos.get();
+
+ // Clear working area.
+ Arrays.fill(dataPointers, 0);
+ Arrays.fill(bem, (byte)0);
+
+ int tmpinpos = inpos.get();
+ final int finalinpos = tmpinpos + thissize - BLOCK_SIZE;
+ int bindex = 0;
+ for (; tmpinpos <= finalinpos; tmpinpos += BLOCK_SIZE) {
+ getBestBitSize(in, tmpinpos, bindex);
+ final int tmpexcept = bem[bindex + 1] & 0xFF;
+ final int tmpbestb = bem[bindex];
+ if (tmpexcept > 0) {
+ final int index = bem[bindex + 2] - tmpbestb;
+ if (dataPointers[index] + tmpexcept >= dataTobePacked[index].length) {
+ int newsize = 2 * (dataPointers[index] + tmpexcept);
+ int val = newsize + BLOCK_SIZE - 1;
+ newsize = val - val % BLOCK_SIZE;
+ dataTobePacked[index] = Arrays.copyOf(dataTobePacked[index], newsize);
+ }
+ bindex += 3;
+ for (int k = 0; k < BLOCK_SIZE; ++k) {
+ if ((in[k + tmpinpos] >>> tmpbestb) != 0) {
+ // we have an exception
+ bem[bindex++] = (byte)k;
+ dataTobePacked[index][dataPointers[index]++] =
+ in[k + tmpinpos] >>> tmpbestb;
+ }
+ }
+ } else {
+ bindex += 2;
+ }
+ encoder.fastpack(in, tmpinpos, out, tmpoutpos, tmpbestb);
+ tmpoutpos += INTS_PER_BLOCK * tmpbestb;
+ }
+ inpos.set(tmpinpos);
+ out[headerpos] = (tmpoutpos - headerpos) | (encodeWidth.code << WIDTH_SHIFT);
+
+ int bytesize = bindex;
+ out[tmpoutpos++] = bytesize;
+
+ bytesize = bytesize % 4 == 0 ? bytesize : (bytesize / 4) * 4 + 4;
+ for (int i = 0; i <= bytesize - 4; i += 4) {
+ out[tmpoutpos] = bem[i] & 0xFF;
+ out[tmpoutpos] |= (bem[i + 1] & 0xFF) << 8;
+ out[tmpoutpos] |= (bem[i + 2] & 0xFF) << 16;
+ out[tmpoutpos] |= (bem[i + 3] & 0xFF) << 24;
+ tmpoutpos++;
+ }
+
+ int bitmap = 0;
+ for (int k = 2; k <= 32; ++k) {
+ if (dataPointers[k] != 0)
+ bitmap |= (1 << (k - 1));
+ }
+ out[tmpoutpos++] = bitmap;
+
+ for (int k = 2; k <= 32; ++k) {
+ if (dataPointers[k] != 0) {
+ out[tmpoutpos++] = dataPointers[k]; // size
+ int j = 0;
+ int n = (dataPointers[k] / BLOCK_SIZE) * BLOCK_SIZE;
+ for (; j < n; j += BLOCK_SIZE) {
+ encoder.fastpackNoMask(dataTobePacked[k], j, out, tmpoutpos,
+ k);
+ tmpoutpos += INTS_PER_BLOCK * k;
+ }
+ int r = dataPointers[k] % BLOCK_SIZE;
+ if (r != 0) {
+ tmpoutpos = slowpack(dataTobePacked[k], j, r, out,
+ tmpoutpos, k);
+ tmpoutpos++;
+ }
+ }
+ }
+ outpos.set(tmpoutpos);
+ }
+
+ /**
+ * Uncompress data in blocks of integers. In this particular case,
+ * the inlength parameter is ignored: it is deduced from the compressed
+ * data.
+ *
+ * @see IntegerCODEC#compress(int[], IntWrapper, int, int[], IntWrapper)
+ */
+ @Override
+ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength,
+ int[] out, IntWrapper outpos, int mynvalue) {
+ mynvalue = mynvalue - mynvalue % BLOCK_SIZE;
+ int finalout = outpos.get() + mynvalue;
+ while (outpos.get() != finalout) {
+ int thissize = Math.min(pageSize, finalout - outpos.get());
+ decodePage(in, inpos, out, outpos, thissize);
+ }
+ }
+
+ @Override
+ public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) {
+ inlength = inlength - inlength % BLOCK_SIZE;
+ int pageCount = (inlength + pageSize - 1) / pageSize;
+ int blockCount = inlength / BLOCK_SIZE;
+ int blockSizeInInts = OVERHEAD_OF_EACH_BLOCK_IN_INTS + BLOCK_SIZE;
+ return OVERHEAD_OF_EACH_PAGE_IN_INTS * pageCount + blockSizeInInts * blockCount + 24;
+ }
+
+ private void loadMetaData(int[] in, int inexcept, int bytesize) {
+ // Arrays.fill(bem, (byte)0);
+ int len = (bytesize + 3) / 4;
+ int lc = 0;
+ for (int i = 0; i < len; i++) {
+ bem[lc++] = (byte)(in[inexcept + i]);
+ bem[lc++] = (byte)(in[inexcept + i] >>> 8);
+ bem[lc++] = (byte)(in[inexcept + i] >>> 16);
+ bem[lc++] = (byte)(in[inexcept + i] >>> 24);
+ }
+ }
+
+ /**
+ * Rejects a stream packed for wider lanes than this machine runs natively.
+ * Decoding it would silently fall back to scalar emulation; failing loud lets
+ * the caller re-encode the cluster at a lower width instead.
+ */
+ static void checkDecodable(LaneWidth streamWidth, LaneWidth hostWidth) {
+ if (streamWidth.bits > hostWidth.bits) {
+ throw new IllegalStateException(
+ "VectorFastPFOR stream was packed for " + streamWidth.bits
+ + "-bit vector lanes, but this machine runs at most " + hostWidth.bits
+ + "-bit lanes natively. Re-encode with lanes <= " + hostWidth.bits
+ + " bits.");
+ }
+ }
+
+ private void decodePage(int[] in, IntWrapper inpos, int[] out,
+ IntWrapper outpos, int thissize) {
+ final int initpos = inpos.get();
+ final int header = in[inpos.get()];
+ final int wheremeta = header & WHEREMETA_MASK;
+ final LaneWidth streamWidth = LaneWidth.fromCode(header >>> WIDTH_SHIFT);
+ checkDecodable(streamWidth, LaneWidth.PREFERRED);
+ final VectorBitPackerKernels decoder = streamWidth.kernel;
+ inpos.increment();
+ int inexcept = initpos + wheremeta;
+
+ final int bytesize = in[inexcept++];
+ loadMetaData(in, inexcept, bytesize);
+ inexcept += (bytesize + 3) / 4;
+ final int bitmap = in[inexcept++];
+ for (int k = 2; k <= 32; ++k) {
+ if ((bitmap & (1 << (k - 1))) != 0) {
+ int size = in[inexcept++];
+ int val = size + BLOCK_SIZE - 1;
+ int roundedup = val - val % BLOCK_SIZE;
+ if (dataTobePacked[k].length < roundedup)
+ dataTobePacked[k] = new int[roundedup];
+ if (inexcept + roundedup / 32 * k <= in.length) {
+ int j = 0;
+ int len = (size / BLOCK_SIZE) * BLOCK_SIZE;
+ for (; j < len; j += BLOCK_SIZE) {
+ decoder.fastunpack(in, inexcept, dataTobePacked[k], j, k);
+ inexcept += INTS_PER_BLOCK * k;
+ }
+ int r = size % BLOCK_SIZE;
+ inexcept = slowunpack(in, inexcept, dataTobePacked[k],
+ j, r, k);
+ } else {
+ int j = 0;
+ val = roundedup / 32 * k + BLOCK_SIZE - 1;
+ int[] buf = new int[val - val % BLOCK_SIZE];
+ int initinexcept = inexcept;
+ System.arraycopy(in, inexcept, buf, 0, in.length - inexcept);
+ int l = (size / BLOCK_SIZE) * BLOCK_SIZE;
+ for (; j < l; j += BLOCK_SIZE) {
+ decoder.fastunpack(buf, inexcept - initinexcept,
+ dataTobePacked[k], j, k);
+ inexcept += INTS_PER_BLOCK * k;
+ }
+ int r = size % BLOCK_SIZE;
+ inexcept = slowunpack(in, inexcept, dataTobePacked[k],
+ j, r, k);
+ }
+ }
+ }
+ Arrays.fill(dataPointers, 0);
+ int tmpoutpos = outpos.get();
+ int tmpinpos = inpos.get();
+ int idx = 0;
+ for (int run = 0, run_end = thissize / BLOCK_SIZE; run < run_end;
+ ++run, tmpoutpos += BLOCK_SIZE) {
+ final int b = bem[idx]; // byteContainer.get();
+ final int cexcept = bem[idx + 1] & 0xFF; // byteContainer.get() & 0xFF;
+ decoder.fastunpack(in, tmpinpos, out, tmpoutpos, b);
+ tmpinpos += INTS_PER_BLOCK * b;
+ if (cexcept > 0) {
+ final int maxbits = bem[idx + 2]; // byteContainer.get();
+ idx += 3;
+ final int index = maxbits - b;
+ if (index == 1) {
+ for (int k = 0; k < cexcept; ++k) {
+ final int pos = bem[idx++] & 0xFF; // byteContainer.get() & 0xFF;
+ out[pos + tmpoutpos] |= 1 << b;
+ }
+ } else {
+ for (int k = 0; k < cexcept; ++k) {
+ final int pos = bem[idx++] & 0xFF; // byteContainer.get() & 0xFF;
+ final int exceptvalue =
+ dataTobePacked[index][dataPointers[index]++];
+ out[pos + tmpoutpos] |= exceptvalue << b;
+ }
+ }
+ } else {
+ idx += 2;
+ }
+ }
+ outpos.set(tmpoutpos);
+ inpos.set(inexcept);
+ }
+
+ @Override
+ public void compress(int[] in, IntWrapper inpos, int inlength, int[] out,
+ IntWrapper outpos) {
+ inlength = inlength - inlength % BLOCK_SIZE;
+ if (inlength == 0)
+ return;
+ out[outpos.get()] = inlength;
+ outpos.increment();
+ headlessCompress(in, inpos, inlength, out, outpos);
+ }
+
+ @Override
+ public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out,
+ IntWrapper outpos) {
+ if (inlength == 0)
+ return;
+ final int outlength = in[inpos.get()];
+ inpos.increment();
+ headlessUncompress(in, inpos, inlength, out, outpos, outlength);
+ }
+ @Override
+ public String toString() {
+ return this.getClass().getSimpleName();
+ }
+
+ /**
+ * Creates a new buffer of the requested size.
+ *
+ * In case you need a different way to allocate buffers, you can override this
+ * method with a custom behavior. The default implementation allocates a new
+ * Java direct
+ * {@link ByteBuffer} on each invocation.
+ */
+ protected ByteBuffer makeBuffer(int sizeInBytes) {
+ return ByteBuffer.allocateDirect(sizeInBytes);
+ }
+
+ /**
+ * Packs the sub-block exception remainder, which is not a multiple of the
+ * vector block size, into the sequential scalar layout read back by
+ * {@link #slowunpack}. Zeroes its target words first, then OR-accumulates the
+ * packed bits, so a reused output buffer carries no stale bits.
+ */
+ private static int slowpack(final int[] in, int inpos, int inlen,
+ final int[] out, int outpos, int b) {
+ if (inlen == 0)
+ return outpos;
+ if (b == 32) {
+ System.arraycopy(in, inpos, out, outpos, inlen);
+ return outpos + inlen;
+ }
+ int mask = (1 << b) - 1;
+ Arrays.fill(out, outpos, outpos + (inlen * b + 31) / 32, 0);
+ int c = 0;
+ int l = 0;
+ int r = 0;
+ int val = 0;
+ for (int i = 0; i < inlen; i++) {
+ val = in[inpos + i] & mask;
+ out[outpos] |= val << (c + r);
+ c += b;
+ l = (32 - r) % b;
+ if (c + r >= 32) {
+ if (i < inlen - 1 || l != 0)
+ outpos++;
+ r = l == 0 ? 0 : b - l;
+ if (l != 0)
+ out[outpos] = val >> (b - r);
+ c = 0;
+ }
+ }
+ return outpos;
+ }
+
+ /** Reverses {@link #slowpack}. */
+ private static int slowunpack(final int[] in, int inpos, final int[] out,
+ int outpos, int outlen, int b) {
+ if (outlen == 0) {
+ return inpos;
+ }
+ if (b == 32) {
+ System.arraycopy(in, inpos, out, outpos, outlen);
+ return inpos + outlen;
+ }
+ int mask = (1 << b) - 1;
+ int limit = outpos + outlen;
+ int r = 0;
+ int val = 0;
+ int i = 0;
+ for (; outpos < limit; i++) {
+ if (r > 0)
+ out[outpos++] =
+ (val >>> (32 - (b - r))) | ((in[inpos + i] << (b - r)) & mask);
+ val = in[inpos + i];
+ int j = 0;
+ int l = 32 - r;
+ int ll = l % b == 0 ? l : l - b;
+ while (j < ll && outpos < limit) {
+ out[outpos++] = (val >> (j + r)) & mask;
+ j += b;
+ }
+ r = l % b == 0 ? 0 : b - (l % b);
+ }
+ return inpos + i;
+ }
+}
diff --git a/src/main/java/me/lemire/integercompression/vector/VectorIntBitPackBenchmark.java b/src/main/java/me/lemire/integercompression/vector/VectorIntBitPackBenchmark.java
new file mode 100644
index 0000000..ee69c74
--- /dev/null
+++ b/src/main/java/me/lemire/integercompression/vector/VectorIntBitPackBenchmark.java
@@ -0,0 +1,103 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+package me.lemire.integercompression.vector;
+
+import java.text.DecimalFormat;
+import java.util.Random;
+
+import me.lemire.integercompression.BitPacking;
+
+/**
+ * Benchmarks the vectorized int bit-packing kernels against the scalar
+ * unrolled {@link BitPacking}, packing 256-integer blocks of each width.
+ * Speeds are millions of integers per second. (For expert use; requires
+ * --add-modules jdk.incubator.vector.)
+ */
+public class VectorIntBitPackBenchmark {
+
+ private static final int BLOCK = 256;
+ private static final int SUBBLOCKS = BLOCK / 32;
+
+ private static void scalarPack(int[] in, int[] out, int bit) {
+ for (int blk = 0; blk < SUBBLOCKS; blk++) {
+ BitPacking.fastpackwithoutmask(in, blk * 32, out, blk * bit, bit);
+ }
+ }
+
+ private static void scalarUnpack(int[] in, int[] out, int bit) {
+ for (int blk = 0; blk < SUBBLOCKS; blk++) {
+ BitPacking.fastunpack(in, blk * bit, out, blk * 32, bit);
+ }
+ }
+
+ private static void test(boolean verbose) {
+ DecimalFormat df = new DecimalFormat("0");
+ final int times = 100000;
+ Random r = new Random(0);
+ int[] data = new int[BLOCK];
+ int[] compressed = new int[8 * 32];
+ int[] uncompressed = new int[BLOCK];
+ VectorBitPacker256 vec256 = new VectorBitPacker256();
+ VectorBitPacker vec = new VectorBitPacker();
+
+ for (int bit = 1; bit <= 32; ++bit) {
+ int mask = bit == 32 ? -1 : (1 << bit) - 1;
+ long scalarComp = 0;
+ long scalarDecomp = 0;
+ long vec256Comp = 0;
+ long vec256Decomp = 0;
+ long vecComp = 0;
+ long vecDecomp = 0;
+ for (int t = 0; t < times; ++t) {
+ for (int k = 0; k < BLOCK; ++k) {
+ data[k] = r.nextInt() & mask;
+ }
+ long time1 = System.nanoTime();
+ scalarPack(data, compressed, bit);
+ long time2 = System.nanoTime();
+ scalarUnpack(compressed, uncompressed, bit);
+ long time3 = System.nanoTime();
+ vec256.fastpackNoMask(data, 0, compressed, 0, bit);
+ long time4 = System.nanoTime();
+ vec256.fastunpack(compressed, 0, uncompressed, 0, bit);
+ long time5 = System.nanoTime();
+ vec.fastpackNoMask(data, 0, compressed, 0, bit);
+ long time6 = System.nanoTime();
+ vec.fastunpack(compressed, 0, uncompressed, 0, bit);
+ long time7 = System.nanoTime();
+ scalarComp += time2 - time1;
+ scalarDecomp += time3 - time2;
+ vec256Comp += time4 - time3;
+ vec256Decomp += time5 - time4;
+ vecComp += time6 - time5;
+ vecDecomp += time7 - time6;
+ }
+ if (verbose) {
+ double sc = BLOCK * times * 1000.0;
+ System.out.println("bit = " + bit
+ + " | scalar comp = " + df.format(sc / scalarComp)
+ + " vec256 comp = " + df.format(sc / vec256Comp)
+ + " vec comp = " + df.format(sc / vecComp)
+ + " | scalar decomp = " + df.format(sc / scalarDecomp)
+ + " vec256 decomp = " + df.format(sc / vec256Decomp)
+ + " vec decomp = " + df.format(sc / vecDecomp));
+ }
+ }
+ }
+
+ /**
+ * Main method.
+ *
+ * @param args command-line arguments
+ */
+ public static void main(String[] args) {
+ System.out.println("Testing int packing (scalar vs VectorBitPacker256 vs "
+ + "VectorBitPacker), 256-int blocks, speeds in millions of ints/s");
+ test(false);
+ test(true);
+ }
+}
diff --git a/src/main/java/me/lemire/longcompression/BenchmarkLongBitPacking.java b/src/main/java/me/lemire/longcompression/BenchmarkLongBitPacking.java
new file mode 100644
index 0000000..d0486a8
--- /dev/null
+++ b/src/main/java/me/lemire/longcompression/BenchmarkLongBitPacking.java
@@ -0,0 +1,87 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+package me.lemire.longcompression;
+
+import java.text.DecimalFormat;
+import java.util.Random;
+
+/**
+ * Class used to benchmark the speed of long bit packing, comparing the
+ * generic and unrolled {@link LongBitPacking} kernels. (For expert use.)
+ *
+ * @author Daniel Lemire
+ *
+ */
+public class BenchmarkLongBitPacking {
+
+ private static void test(boolean verbose) {
+ DecimalFormat dfspeed = new DecimalFormat("0");
+ final int N = 64;
+ final int times = 100000;
+ Random r = new Random(0);
+ long[] data = new long[N];
+ long[] compressed = new long[N];
+ long[] uncompressed = new long[N];
+ for (int bit = 1; bit < 64; ++bit) {
+ long mask = (1L << bit) - 1;
+ long slowcomp = 0;
+ long slowdecomp = 0;
+ long fastcomp = 0;
+ long fastdecomp = 0;
+ for (int t = 0; t < times; ++t) {
+ for (int k = 0; k < N; ++k) {
+ data[k] = r.nextLong() & mask;
+ }
+ long time1 = System.nanoTime();
+ LongBitPacking.slowpackwithoutmask(data, 0,
+ compressed, 0, bit);
+ long time2 = System.nanoTime();
+ LongBitPacking.slowunpack(compressed, 0,
+ uncompressed, 0, bit);
+ long time3 = System.nanoTime();
+ LongBitPacking.fastpackwithoutmask(data, 0,
+ compressed, 0, bit);
+ long time4 = System.nanoTime();
+ LongBitPacking.fastunpack(compressed, 0,
+ uncompressed, 0, bit);
+ long time5 = System.nanoTime();
+ slowcomp += time2 - time1;
+ slowdecomp += time3 - time2;
+ fastcomp += time4 - time3;
+ fastdecomp += time5 - time4;
+ }
+ if (verbose)
+ System.out.println("bit = "
+ + bit
+ + " slow comp. speed = "
+ + dfspeed.format(N * times * 1000.0
+ / (slowcomp))
+ + " slow decomp. speed = "
+ + dfspeed.format(N * times * 1000.0
+ / (slowdecomp))
+ + " unrolled comp. speed = "
+ + dfspeed.format(N * times * 1000.0
+ / (fastcomp))
+ + " unrolled decomp. speed = "
+ + dfspeed.format(N * times * 1000.0
+ / (fastdecomp)));
+ }
+ }
+
+ /**
+ * Main method
+ *
+ * @param args
+ * command-line arguments
+ */
+ public static void main(String[] args) {
+ System.out.println("Testing long packing (slow vs unrolled) ");
+ test(false);
+ test(true);
+ }
+
+}
diff --git a/src/main/java/me/lemire/longcompression/ByteLongCODEC.java b/src/main/java/me/lemire/longcompression/ByteLongCODEC.java
new file mode 100644
index 0000000..dbc6864
--- /dev/null
+++ b/src/main/java/me/lemire/longcompression/ByteLongCODEC.java
@@ -0,0 +1,62 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+
+package me.lemire.longcompression;
+
+import me.lemire.integercompression.IntWrapper;
+
+/**
+ * Interface describing a CODEC to compress longs to bytes.
+ *
+ * @author Benoit Lacelle
+ *
+ */
+public interface ByteLongCODEC {
+ /**
+ * Compress data from an array to another array.
+ *
+ * Both inpos and outpos are modified to represent how much data was
+ * read and written to. If 12 longs (inlength = 12) are compressed to 3
+ * bytes, then inpos will be incremented by 12 while outpos will be
+ * incremented by 3. We use IntWrapper to pass the values by reference.
+ *
+ * @param in
+ * input array
+ * @param inpos
+ * location in the input array
+ * @param inlength
+ * how many longs to compress
+ * @param out
+ * output array
+ * @param outpos
+ * where to write in the output array
+ */
+ public void compress(long[] in, IntWrapper inpos, int inlength,
+ byte[] out, IntWrapper outpos);
+
+ /**
+ * Uncompress data from an array to another array.
+ *
+ * Both inpos and outpos parameters are modified to indicate new
+ * positions after read/write.
+ *
+ * @param in
+ * array containing data in compressed form
+ * @param inpos
+ * where to start reading in the array
+ * @param inlength
+ * length of the compressed data (ignored by some
+ * schemes)
+ * @param out
+ * array where to write the compressed output
+ * @param outpos
+ * where to write the compressed output in out
+ */
+ public void uncompress(byte[] in, IntWrapper inpos, int inlength,
+ long[] out, IntWrapper outpos);
+
+}
diff --git a/src/main/java/me/lemire/longcompression/IntegratedLongCODEC.java b/src/main/java/me/lemire/longcompression/IntegratedLongCODEC.java
new file mode 100644
index 0000000..b21ef68
--- /dev/null
+++ b/src/main/java/me/lemire/longcompression/IntegratedLongCODEC.java
@@ -0,0 +1,11 @@
+package me.lemire.longcompression;
+
+/**
+ * This is just like LongCODEC, except that it indicates that delta coding is
+ * "integrated", so that you don't need a separate step for delta coding.
+ *
+ * @author Benoit Lacelle
+ */
+public interface IntegratedLongCODEC extends LongCODEC {
+
+}
diff --git a/src/main/java/me/lemire/longcompression/LongAs2IntsCodec.java b/src/main/java/me/lemire/longcompression/LongAs2IntsCodec.java
new file mode 100644
index 0000000..35c1166
--- /dev/null
+++ b/src/main/java/me/lemire/longcompression/LongAs2IntsCodec.java
@@ -0,0 +1,189 @@
+package me.lemire.longcompression;
+
+import java.util.Arrays;
+
+import me.lemire.integercompression.BinaryPacking;
+import me.lemire.integercompression.Composition;
+import me.lemire.integercompression.IntCompressor;
+import me.lemire.integercompression.IntWrapper;
+import me.lemire.integercompression.IntegerCODEC;
+import me.lemire.integercompression.VariableByte;
+
+/**
+ * A {@link LongCODEC} which split each long in a highpart (32 first bits) and a low part (32 last bits).
+ *
+ * @author Benoit Lacelle
+ *
+ */
+public class LongAs2IntsCodec implements LongCODEC {
+ final IntegerCODEC highPartsCodec;
+ final IntegerCODEC lowPartsCodec;
+
+ public LongAs2IntsCodec(IntegerCODEC highPartsCodec, IntegerCODEC lowPartsCodec) {
+ this.highPartsCodec = highPartsCodec;
+ this.lowPartsCodec = lowPartsCodec;
+ }
+
+ /**
+ * By default, we expect longs to be slightly above Integer.MAX_VALUE. Hence highParts to be small and positive
+ * integers. For lowParts, we rely on {@link IntCompressor} default IntegerCODEC
+ */
+ public LongAs2IntsCodec() {
+ this(new VariableByte(), new Composition(new BinaryPacking(), new VariableByte()));
+ }
+
+ @Override
+ public void compress(long[] in, IntWrapper inpos, int inlength, long[] out, IntWrapper outpos) {
+ if (inlength == 0) {
+ return;
+ }
+
+ int[] highParts = new int[inlength];
+ int[] lowParts = new int[inlength];
+
+ for (int i = 0; i < inlength; i++) {
+ int inPosition = inpos.get() + i;
+
+ highParts[i] = RoaringIntPacking.high(in[inPosition]);
+ lowParts[i] = RoaringIntPacking.low(in[inPosition]);
+ }
+
+ // TODO What would be a relevant buffer size?
+ int[] buffer = new int[inlength * 16];
+
+ int outPosition = outpos.get();
+
+ boolean hasLeftover;
+ {
+ // The first integer is reserved to hold the number of compressed ints
+ IntWrapper highPartsOutPosition = new IntWrapper(1);
+
+ highPartsCodec.compress(highParts, new IntWrapper(), inlength, buffer, highPartsOutPosition);
+
+ // Record the compressedHighparts length
+ buffer[0] = highPartsOutPosition.get() - 1;
+
+ for (int i = 0; i < highPartsOutPosition.get() / 2; i++) {
+ long pack = RoaringIntPacking.pack(buffer[i * 2], buffer[i * 2 + 1]);
+ out[outPosition++] = pack;
+ }
+
+ if (1 == highPartsOutPosition.get() % 2) {
+ // Shift the trailing integer as first in the buffer
+ hasLeftover = true;
+ buffer[0] = buffer[highPartsOutPosition.get() - 1];
+ } else {
+ hasLeftover = false;
+ }
+ }
+
+ {
+ // The first integer is reserved to hold the number of compressed ints
+ IntWrapper lowPartsOutPosition = new IntWrapper(1);
+ if (hasLeftover) {
+ // Keep the trailing int from highParts before the reserved int from lowParts compressed length
+ lowPartsOutPosition.set(2);
+ }
+
+ lowPartsCodec.compress(lowParts, new IntWrapper(0), inlength, buffer, lowPartsOutPosition);
+
+ // Record the compressedHighparts length
+ buffer[hasLeftover ? 1 : 0] = lowPartsOutPosition.get() - (hasLeftover ? 2 : 1);
+
+ for (int i = 0; i < lowPartsOutPosition.get() / 2; i++) {
+ long pack = RoaringIntPacking.pack(buffer[i * 2], buffer[i * 2 + 1]);
+ out[outPosition++] = pack;
+ }
+
+ if (1 == lowPartsOutPosition.get() % 2) {
+ // The trailing integer is packed with a 0
+ long pack = RoaringIntPacking.pack(buffer[lowPartsOutPosition.get() - 1], 0);
+ out[outPosition++] = pack;
+ }
+ }
+
+ inpos.add(inlength);
+ outpos.set(outPosition);
+ }
+
+ /**
+ * inlength is ignored by this codec. We may rely on it instead of storing the compressedLowPart length
+ */
+ @Override
+ public void uncompress(long[] in, IntWrapper inpos, int inlength, long[] out, IntWrapper outpos) {
+ if (inlength == 0) {
+ return;
+ }
+
+ int longIndex = inpos.get();
+
+ int nbCompressedHighParts = RoaringIntPacking.high(in[longIndex]);
+ int[] compressedHighParts = new int[nbCompressedHighParts];
+
+ // !highPart as we just read the highPart for nbCompressedHighParts
+ boolean highPart = false;
+ for (int i = 0; i < nbCompressedHighParts; i++) {
+ int nextInt;
+ if (highPart) {
+ nextInt = RoaringIntPacking.high(in[longIndex + (i + 1) / 2]);
+ } else {
+ nextInt = RoaringIntPacking.low(in[longIndex + (i + 1) / 2]);
+ }
+ compressedHighParts[i] = nextInt;
+
+ highPart = !highPart;
+ }
+
+ // TODO What would be a relevant buffer size?
+ int[] buffer = new int[inlength * 16];
+
+ IntWrapper highPartsOutPosition = new IntWrapper();
+ highPartsCodec.uncompress(compressedHighParts,
+ new IntWrapper(),
+ compressedHighParts.length,
+ buffer,
+ highPartsOutPosition);
+ int[] highParts = Arrays.copyOf(buffer, highPartsOutPosition.get());
+
+ // +1 as we initially read nbCompressedHighParts
+ int intIndexNbCompressedLowParts = longIndex * 2 + 1 + nbCompressedHighParts;
+ int nbCompressedLowParts;
+ if (highPart) {
+ nbCompressedLowParts = RoaringIntPacking.high(in[intIndexNbCompressedLowParts / 2]);
+ } else {
+ nbCompressedLowParts = RoaringIntPacking.low(in[intIndexNbCompressedLowParts / 2]);
+ }
+ highPart = !highPart;
+
+ int[] compressedLowParts = new int[nbCompressedLowParts];
+ for (int i = 0; i < nbCompressedLowParts; i++) {
+ int nextInt;
+ if (highPart) {
+ nextInt = RoaringIntPacking.high(in[(intIndexNbCompressedLowParts + 1 + i) / 2]);
+ } else {
+ nextInt = RoaringIntPacking.low(in[(intIndexNbCompressedLowParts + 1 + i) / 2]);
+ }
+ compressedLowParts[i] = nextInt;
+
+ highPart = !highPart;
+ }
+
+ IntWrapper lowPartsOutPosition = new IntWrapper();
+ lowPartsCodec.uncompress(compressedLowParts,
+ new IntWrapper(),
+ compressedLowParts.length,
+ buffer,
+ lowPartsOutPosition);
+ int[] lowParts = Arrays.copyOf(buffer, lowPartsOutPosition.get());
+ assert highParts.length == lowParts.length;
+
+ int outposition = outpos.get();
+ for (int i = 0; i < highParts.length; i++) {
+ out[outposition++] = RoaringIntPacking.pack(highParts[i], lowParts[i]);
+ }
+
+ inpos.add(inlength);
+ outpos.set(outposition);
+ }
+
+}
diff --git a/src/main/java/me/lemire/longcompression/LongBinaryPacking.java b/src/main/java/me/lemire/longcompression/LongBinaryPacking.java
new file mode 100644
index 0000000..b6ea58f
--- /dev/null
+++ b/src/main/java/me/lemire/longcompression/LongBinaryPacking.java
@@ -0,0 +1,153 @@
+package me.lemire.longcompression;
+
+import me.lemire.integercompression.BinaryPacking;
+import me.lemire.integercompression.IntWrapper;
+import me.lemire.integercompression.Util;
+
+/**
+ * Scheme based on a commonly used idea: can be extremely fast.
+ * It encodes integers in blocks of 64 longs. For arrays containing
+ * an arbitrary number of longs, you should use it in conjunction
+ * with another CODEC:
+ *
+ * LongCODEC ic =
+ * new Composition(new LongBinaryPacking(), new LongVariableByte()).
+ *
+ * Note that this does not use differential coding: if you are working on sorted
+ * lists, you must compute the deltas separately.
+ *
+ *
+ * For details, please see {@link BinaryPacking}
+ *
+ *
+ * @author Benoit Lacelle
+ */
+public final class LongBinaryPacking implements LongCODEC, SkippableLongCODEC {
+ public final static int BLOCK_SIZE = 64;
+ private static final int MAX_BIT_WIDTH = Long.SIZE;
+
+ @Override
+ public void compress(long[] in, IntWrapper inpos, int inlength,
+ long[] out, IntWrapper outpos) {
+ inlength = Util.greatestMultiple(inlength, BLOCK_SIZE);
+ if (inlength == 0)
+ return;
+ out[outpos.get()] = inlength;
+ outpos.increment();
+ headlessCompress(in, inpos, inlength, out, outpos);
+ }
+
+ @Override
+ public void headlessCompress(long[] in, IntWrapper inpos, int inlength,
+ long[] out, IntWrapper outpos) {
+ inlength = Util.greatestMultiple(inlength, BLOCK_SIZE);
+ int tmpoutpos = outpos.get();
+ int s = inpos.get();
+ // Compress by block of 8 * 64 longs as much as possible
+ for (; s + BLOCK_SIZE * 8 - 1 < inpos.get() + inlength; s += BLOCK_SIZE * 8) {
+ // maxbits can be anything between 0 and 64 included: expressed within a byte (1 << 6)
+ final int mbits1 = LongUtil.maxbits(in, s + 0 * BLOCK_SIZE, BLOCK_SIZE);
+ final int mbits2 = LongUtil.maxbits(in, s + 1 * BLOCK_SIZE, BLOCK_SIZE);
+ final int mbits3 = LongUtil.maxbits(in, s + 2 * BLOCK_SIZE, BLOCK_SIZE);
+ final int mbits4 = LongUtil.maxbits(in, s + 3 * BLOCK_SIZE, BLOCK_SIZE);
+ final int mbits5 = LongUtil.maxbits(in, s + 4 * BLOCK_SIZE, BLOCK_SIZE);
+ final int mbits6 = LongUtil.maxbits(in, s + 5 * BLOCK_SIZE, BLOCK_SIZE);
+ final int mbits7 = LongUtil.maxbits(in, s + 6 * BLOCK_SIZE, BLOCK_SIZE);
+ final int mbits8 = LongUtil.maxbits(in, s + 7 * BLOCK_SIZE, BLOCK_SIZE);
+ // The first long expressed the maxbits for the 8 buckets
+ out[tmpoutpos++] = ((long) mbits1 << 56) | ((long) mbits2 << 48) | ((long) mbits3 << 40) | ((long) mbits4 << 32) | (mbits5 << 24) | (mbits6 << 16) | (mbits7 << 8) | (mbits8);
+ LongBitPacking.fastpackwithoutmask(in, s + 0 * BLOCK_SIZE, out, tmpoutpos, (int) mbits1);
+ tmpoutpos += mbits1;
+ LongBitPacking.fastpackwithoutmask(in, s + 1 * BLOCK_SIZE, out, tmpoutpos, (int) mbits2);
+ tmpoutpos += mbits2;
+ LongBitPacking.fastpackwithoutmask(in, s + 2 * BLOCK_SIZE, out, tmpoutpos, (int) mbits3);
+ tmpoutpos += mbits3;
+ LongBitPacking.fastpackwithoutmask(in, s + 3 * BLOCK_SIZE, out, tmpoutpos, (int) mbits4);
+ tmpoutpos += mbits4;
+ LongBitPacking.fastpackwithoutmask(in, s + 4 * BLOCK_SIZE, out, tmpoutpos, (int) mbits5);
+ tmpoutpos += mbits5;
+ LongBitPacking.fastpackwithoutmask(in, s + 5 * BLOCK_SIZE, out, tmpoutpos, (int) mbits6);
+ tmpoutpos += mbits6;
+ LongBitPacking.fastpackwithoutmask(in, s + 6 * BLOCK_SIZE, out, tmpoutpos, (int) mbits7);
+ tmpoutpos += mbits7;
+ LongBitPacking.fastpackwithoutmask(in, s + 7 * BLOCK_SIZE, out, tmpoutpos, (int) mbits8);
+ tmpoutpos += mbits8;
+ }
+ // Then we compress up to 7 blocks of 64 longs
+ for (; s < inpos.get() + inlength; s += BLOCK_SIZE ) {
+ final int mbits = LongUtil.maxbits(in, s, BLOCK_SIZE);
+ out[tmpoutpos++] = mbits;
+ LongBitPacking.fastpackwithoutmask(in, s, out, tmpoutpos, mbits);
+ tmpoutpos += mbits;
+ }
+ inpos.add(inlength);
+ outpos.set(tmpoutpos);
+ }
+
+ @Override
+ public void uncompress(long[] in, IntWrapper inpos, int inlength,
+ long[] out, IntWrapper outpos) {
+ if (inlength == 0)
+ return;
+ final int outlength = (int) in[inpos.get()];
+ inpos.increment();
+ headlessUncompress(in,inpos, inlength,out,outpos,outlength);
+ }
+
+ @Override
+ public void headlessUncompress(long[] in, IntWrapper inpos, int inlength,
+ long[] out, IntWrapper outpos, int num) {
+ final int outlength = Util.greatestMultiple(num, BLOCK_SIZE);
+ int tmpinpos = inpos.get();
+ int s = outpos.get();
+ for (; s + BLOCK_SIZE * 8 - 1 < outpos.get() + outlength; s += BLOCK_SIZE * 8) {
+ final int mbits1 = (int) ((in[tmpinpos] >>> 56));
+ final int mbits2 = (int) ((in[tmpinpos] >>> 48) & 0xFF);
+ final int mbits3 = (int) ((in[tmpinpos] >>> 40) & 0xFF);
+ final int mbits4 = (int) ((in[tmpinpos] >>> 32) & 0xFF);
+ final int mbits5 = (int) ((in[tmpinpos] >>> 24) & 0xFF);
+ final int mbits6 = (int) ((in[tmpinpos] >>> 16) & 0xFF);
+ final int mbits7 = (int) ((in[tmpinpos] >>> 8) & 0xFF);
+ final int mbits8 = (int) ((in[tmpinpos]) & 0xFF);
+ ++tmpinpos;
+ LongBitPacking.fastunpack(in, tmpinpos, out, s + 0 * BLOCK_SIZE, mbits1);
+ tmpinpos += mbits1;
+ LongBitPacking.fastunpack(in, tmpinpos, out, s + 1 * BLOCK_SIZE, mbits2);
+ tmpinpos += mbits2;
+ LongBitPacking.fastunpack(in, tmpinpos, out, s + 2 * BLOCK_SIZE, mbits3);
+ tmpinpos += mbits3;
+ LongBitPacking.fastunpack(in, tmpinpos, out, s + 3 * BLOCK_SIZE, mbits4);
+ tmpinpos += mbits4;
+ LongBitPacking.fastunpack(in, tmpinpos, out, s + 4 * BLOCK_SIZE, mbits5);
+ tmpinpos += mbits5;
+ LongBitPacking.fastunpack(in, tmpinpos, out, s + 5 * BLOCK_SIZE, mbits6);
+ tmpinpos += mbits6;
+ LongBitPacking.fastunpack(in, tmpinpos, out, s + 6 * BLOCK_SIZE, mbits7);
+ tmpinpos += mbits7;
+ LongBitPacking.fastunpack(in, tmpinpos, out, s + 7 * BLOCK_SIZE, mbits8);
+ tmpinpos += mbits8;
+ }
+ for (; s < outpos.get() + outlength; s += BLOCK_SIZE ) {
+ final int mbits = (int) in[tmpinpos];
+ ++tmpinpos;
+ LongBitPacking.fastunpack(in, tmpinpos, out, s, mbits);
+ tmpinpos += mbits;
+ }
+ outpos.add(outlength);
+ inpos.set(tmpinpos);
+ }
+
+ @Override
+ public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) {
+ int blockCount = inlength / BLOCK_SIZE;
+ int headersSizeInLongs = blockCount / Long.BYTES + (blockCount % Long.BYTES);
+ int blocksSizeInLongs = blockCount * MAX_BIT_WIDTH;
+ compressedPositions.add(blockCount * BLOCK_SIZE);
+ return headersSizeInLongs + blocksSizeInLongs;
+ }
+
+ @Override
+ public String toString() {
+ return this.getClass().getSimpleName();
+ }
+}
diff --git a/src/main/java/me/lemire/longcompression/LongBitPacking.java b/src/main/java/me/lemire/longcompression/LongBitPacking.java
new file mode 100644
index 0000000..4b5426f
--- /dev/null
+++ b/src/main/java/me/lemire/longcompression/LongBitPacking.java
@@ -0,0 +1,12678 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+
+package me.lemire.longcompression;
+
+import java.util.Arrays;
+
+/**
+ * Bitpacking routines
+ *
+ * For details, please see
+ *
+ * Daniel Lemire and Leonid Boytsov, Decoding billions of integers per second
+ * through vectorization Software: Practice & Experience
+ * http://onlinelibrary.wiley.com/doi/10.1002/spe.2203/abstract
+ * http://arxiv.org/abs/1209.2137
+ *
+ *
+ * @author Benoit Lacelle
+ *
+ */
+public final class LongBitPacking {
+
+ /**
+ * Pack 64 longs
+ *
+ * @param in
+ * source array
+ * @param inpos
+ * position in source array
+ * @param out
+ * output array
+ * @param outpos
+ * position in output array
+ * @param bit
+ * number of bits to use per long
+ */
+ public static void fastpackwithoutmask(final long[] in, final int inpos,
+ final long[] out, final int outpos, final int bit) {
+ switch (bit) {
+ case 0:
+ fastpackwithoutmask0(in, inpos, out, outpos);
+ break;
+ case 1:
+ fastpackwithoutmask1(in, inpos, out, outpos);
+ break;
+ case 2:
+ fastpackwithoutmask2(in, inpos, out, outpos);
+ break;
+ case 3:
+ fastpackwithoutmask3(in, inpos, out, outpos);
+ break;
+ case 4:
+ fastpackwithoutmask4(in, inpos, out, outpos);
+ break;
+ case 5:
+ fastpackwithoutmask5(in, inpos, out, outpos);
+ break;
+ case 6:
+ fastpackwithoutmask6(in, inpos, out, outpos);
+ break;
+ case 7:
+ fastpackwithoutmask7(in, inpos, out, outpos);
+ break;
+ case 8:
+ fastpackwithoutmask8(in, inpos, out, outpos);
+ break;
+ case 9:
+ fastpackwithoutmask9(in, inpos, out, outpos);
+ break;
+ case 10:
+ fastpackwithoutmask10(in, inpos, out, outpos);
+ break;
+ case 11:
+ fastpackwithoutmask11(in, inpos, out, outpos);
+ break;
+ case 12:
+ fastpackwithoutmask12(in, inpos, out, outpos);
+ break;
+ case 13:
+ fastpackwithoutmask13(in, inpos, out, outpos);
+ break;
+ case 14:
+ fastpackwithoutmask14(in, inpos, out, outpos);
+ break;
+ case 15:
+ fastpackwithoutmask15(in, inpos, out, outpos);
+ break;
+ case 16:
+ fastpackwithoutmask16(in, inpos, out, outpos);
+ break;
+ case 17:
+ fastpackwithoutmask17(in, inpos, out, outpos);
+ break;
+ case 18:
+ fastpackwithoutmask18(in, inpos, out, outpos);
+ break;
+ case 19:
+ fastpackwithoutmask19(in, inpos, out, outpos);
+ break;
+ case 20:
+ fastpackwithoutmask20(in, inpos, out, outpos);
+ break;
+ case 21:
+ fastpackwithoutmask21(in, inpos, out, outpos);
+ break;
+ case 22:
+ fastpackwithoutmask22(in, inpos, out, outpos);
+ break;
+ case 23:
+ fastpackwithoutmask23(in, inpos, out, outpos);
+ break;
+ case 24:
+ fastpackwithoutmask24(in, inpos, out, outpos);
+ break;
+ case 25:
+ fastpackwithoutmask25(in, inpos, out, outpos);
+ break;
+ case 26:
+ fastpackwithoutmask26(in, inpos, out, outpos);
+ break;
+ case 27:
+ fastpackwithoutmask27(in, inpos, out, outpos);
+ break;
+ case 28:
+ fastpackwithoutmask28(in, inpos, out, outpos);
+ break;
+ case 29:
+ fastpackwithoutmask29(in, inpos, out, outpos);
+ break;
+ case 30:
+ fastpackwithoutmask30(in, inpos, out, outpos);
+ break;
+ case 31:
+ fastpackwithoutmask31(in, inpos, out, outpos);
+ break;
+ case 32:
+ fastpackwithoutmask32(in, inpos, out, outpos);
+ break;
+ case 33:
+ fastpackwithoutmask33(in, inpos, out, outpos);
+ break;
+ case 34:
+ fastpackwithoutmask34(in, inpos, out, outpos);
+ break;
+ case 35:
+ fastpackwithoutmask35(in, inpos, out, outpos);
+ break;
+ case 36:
+ fastpackwithoutmask36(in, inpos, out, outpos);
+ break;
+ case 37:
+ fastpackwithoutmask37(in, inpos, out, outpos);
+ break;
+ case 38:
+ fastpackwithoutmask38(in, inpos, out, outpos);
+ break;
+ case 39:
+ fastpackwithoutmask39(in, inpos, out, outpos);
+ break;
+ case 40:
+ fastpackwithoutmask40(in, inpos, out, outpos);
+ break;
+ case 41:
+ fastpackwithoutmask41(in, inpos, out, outpos);
+ break;
+ case 42:
+ fastpackwithoutmask42(in, inpos, out, outpos);
+ break;
+ case 43:
+ fastpackwithoutmask43(in, inpos, out, outpos);
+ break;
+ case 44:
+ fastpackwithoutmask44(in, inpos, out, outpos);
+ break;
+ case 45:
+ fastpackwithoutmask45(in, inpos, out, outpos);
+ break;
+ case 46:
+ fastpackwithoutmask46(in, inpos, out, outpos);
+ break;
+ case 47:
+ fastpackwithoutmask47(in, inpos, out, outpos);
+ break;
+ case 48:
+ fastpackwithoutmask48(in, inpos, out, outpos);
+ break;
+ case 49:
+ fastpackwithoutmask49(in, inpos, out, outpos);
+ break;
+ case 50:
+ fastpackwithoutmask50(in, inpos, out, outpos);
+ break;
+ case 51:
+ fastpackwithoutmask51(in, inpos, out, outpos);
+ break;
+ case 52:
+ fastpackwithoutmask52(in, inpos, out, outpos);
+ break;
+ case 53:
+ fastpackwithoutmask53(in, inpos, out, outpos);
+ break;
+ case 54:
+ fastpackwithoutmask54(in, inpos, out, outpos);
+ break;
+ case 55:
+ fastpackwithoutmask55(in, inpos, out, outpos);
+ break;
+ case 56:
+ fastpackwithoutmask56(in, inpos, out, outpos);
+ break;
+ case 57:
+ fastpackwithoutmask57(in, inpos, out, outpos);
+ break;
+ case 58:
+ fastpackwithoutmask58(in, inpos, out, outpos);
+ break;
+ case 59:
+ fastpackwithoutmask59(in, inpos, out, outpos);
+ break;
+ case 60:
+ fastpackwithoutmask60(in, inpos, out, outpos);
+ break;
+ case 61:
+ fastpackwithoutmask61(in, inpos, out, outpos);
+ break;
+ case 62:
+ fastpackwithoutmask62(in, inpos, out, outpos);
+ break;
+ case 63:
+ fastpackwithoutmask63(in, inpos, out, outpos);
+ break;
+ case 64:
+ fastpackwithoutmask64(in, inpos, out, outpos);
+ break;
+ default:
+ throw new IllegalArgumentException("Unsupported bit width: " + bit);
+ }
+ }
+
+ protected static void fastpackwithoutmask0(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ // nothing
+ }
+
+ protected static void fastpackwithoutmask1(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 1)
+ | ((in[2 + inpos]) << 2)
+ | ((in[3 + inpos]) << 3)
+ | ((in[4 + inpos]) << 4)
+ | ((in[5 + inpos]) << 5)
+ | ((in[6 + inpos]) << 6)
+ | ((in[7 + inpos]) << 7)
+ | ((in[8 + inpos]) << 8)
+ | ((in[9 + inpos]) << 9)
+ | ((in[10 + inpos]) << 10)
+ | ((in[11 + inpos]) << 11)
+ | ((in[12 + inpos]) << 12)
+ | ((in[13 + inpos]) << 13)
+ | ((in[14 + inpos]) << 14)
+ | ((in[15 + inpos]) << 15)
+ | ((in[16 + inpos]) << 16)
+ | ((in[17 + inpos]) << 17)
+ | ((in[18 + inpos]) << 18)
+ | ((in[19 + inpos]) << 19)
+ | ((in[20 + inpos]) << 20)
+ | ((in[21 + inpos]) << 21)
+ | ((in[22 + inpos]) << 22)
+ | ((in[23 + inpos]) << 23)
+ | ((in[24 + inpos]) << 24)
+ | ((in[25 + inpos]) << 25)
+ | ((in[26 + inpos]) << 26)
+ | ((in[27 + inpos]) << 27)
+ | ((in[28 + inpos]) << 28)
+ | ((in[29 + inpos]) << 29)
+ | ((in[30 + inpos]) << 30)
+ | ((in[31 + inpos]) << 31)
+ | ((in[32 + inpos]) << 32)
+ | ((in[33 + inpos]) << 33)
+ | ((in[34 + inpos]) << 34)
+ | ((in[35 + inpos]) << 35)
+ | ((in[36 + inpos]) << 36)
+ | ((in[37 + inpos]) << 37)
+ | ((in[38 + inpos]) << 38)
+ | ((in[39 + inpos]) << 39)
+ | ((in[40 + inpos]) << 40)
+ | ((in[41 + inpos]) << 41)
+ | ((in[42 + inpos]) << 42)
+ | ((in[43 + inpos]) << 43)
+ | ((in[44 + inpos]) << 44)
+ | ((in[45 + inpos]) << 45)
+ | ((in[46 + inpos]) << 46)
+ | ((in[47 + inpos]) << 47)
+ | ((in[48 + inpos]) << 48)
+ | ((in[49 + inpos]) << 49)
+ | ((in[50 + inpos]) << 50)
+ | ((in[51 + inpos]) << 51)
+ | ((in[52 + inpos]) << 52)
+ | ((in[53 + inpos]) << 53)
+ | ((in[54 + inpos]) << 54)
+ | ((in[55 + inpos]) << 55)
+ | ((in[56 + inpos]) << 56)
+ | ((in[57 + inpos]) << 57)
+ | ((in[58 + inpos]) << 58)
+ | ((in[59 + inpos]) << 59)
+ | ((in[60 + inpos]) << 60)
+ | ((in[61 + inpos]) << 61)
+ | ((in[62 + inpos]) << 62)
+ | ((in[63 + inpos]) << 63);
+ }
+
+ protected static void fastpackwithoutmask2(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 2)
+ | ((in[2 + inpos]) << 4)
+ | ((in[3 + inpos]) << 6)
+ | ((in[4 + inpos]) << 8)
+ | ((in[5 + inpos]) << 10)
+ | ((in[6 + inpos]) << 12)
+ | ((in[7 + inpos]) << 14)
+ | ((in[8 + inpos]) << 16)
+ | ((in[9 + inpos]) << 18)
+ | ((in[10 + inpos]) << 20)
+ | ((in[11 + inpos]) << 22)
+ | ((in[12 + inpos]) << 24)
+ | ((in[13 + inpos]) << 26)
+ | ((in[14 + inpos]) << 28)
+ | ((in[15 + inpos]) << 30)
+ | ((in[16 + inpos]) << 32)
+ | ((in[17 + inpos]) << 34)
+ | ((in[18 + inpos]) << 36)
+ | ((in[19 + inpos]) << 38)
+ | ((in[20 + inpos]) << 40)
+ | ((in[21 + inpos]) << 42)
+ | ((in[22 + inpos]) << 44)
+ | ((in[23 + inpos]) << 46)
+ | ((in[24 + inpos]) << 48)
+ | ((in[25 + inpos]) << 50)
+ | ((in[26 + inpos]) << 52)
+ | ((in[27 + inpos]) << 54)
+ | ((in[28 + inpos]) << 56)
+ | ((in[29 + inpos]) << 58)
+ | ((in[30 + inpos]) << 60)
+ | ((in[31 + inpos]) << 62);
+ out[1 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 2)
+ | ((in[34 + inpos]) << 4)
+ | ((in[35 + inpos]) << 6)
+ | ((in[36 + inpos]) << 8)
+ | ((in[37 + inpos]) << 10)
+ | ((in[38 + inpos]) << 12)
+ | ((in[39 + inpos]) << 14)
+ | ((in[40 + inpos]) << 16)
+ | ((in[41 + inpos]) << 18)
+ | ((in[42 + inpos]) << 20)
+ | ((in[43 + inpos]) << 22)
+ | ((in[44 + inpos]) << 24)
+ | ((in[45 + inpos]) << 26)
+ | ((in[46 + inpos]) << 28)
+ | ((in[47 + inpos]) << 30)
+ | ((in[48 + inpos]) << 32)
+ | ((in[49 + inpos]) << 34)
+ | ((in[50 + inpos]) << 36)
+ | ((in[51 + inpos]) << 38)
+ | ((in[52 + inpos]) << 40)
+ | ((in[53 + inpos]) << 42)
+ | ((in[54 + inpos]) << 44)
+ | ((in[55 + inpos]) << 46)
+ | ((in[56 + inpos]) << 48)
+ | ((in[57 + inpos]) << 50)
+ | ((in[58 + inpos]) << 52)
+ | ((in[59 + inpos]) << 54)
+ | ((in[60 + inpos]) << 56)
+ | ((in[61 + inpos]) << 58)
+ | ((in[62 + inpos]) << 60)
+ | ((in[63 + inpos]) << 62);
+ }
+
+ protected static void fastpackwithoutmask3(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 3)
+ | ((in[2 + inpos]) << 6)
+ | ((in[3 + inpos]) << 9)
+ | ((in[4 + inpos]) << 12)
+ | ((in[5 + inpos]) << 15)
+ | ((in[6 + inpos]) << 18)
+ | ((in[7 + inpos]) << 21)
+ | ((in[8 + inpos]) << 24)
+ | ((in[9 + inpos]) << 27)
+ | ((in[10 + inpos]) << 30)
+ | ((in[11 + inpos]) << 33)
+ | ((in[12 + inpos]) << 36)
+ | ((in[13 + inpos]) << 39)
+ | ((in[14 + inpos]) << 42)
+ | ((in[15 + inpos]) << 45)
+ | ((in[16 + inpos]) << 48)
+ | ((in[17 + inpos]) << 51)
+ | ((in[18 + inpos]) << 54)
+ | ((in[19 + inpos]) << 57)
+ | ((in[20 + inpos]) << 60)
+ | ((in[21 + inpos]) << 63);
+ out[1 + outpos] = ((in[21 + inpos]) >>> (3 - 2))
+ | ((in[22 + inpos]) << 2)
+ | ((in[23 + inpos]) << 5)
+ | ((in[24 + inpos]) << 8)
+ | ((in[25 + inpos]) << 11)
+ | ((in[26 + inpos]) << 14)
+ | ((in[27 + inpos]) << 17)
+ | ((in[28 + inpos]) << 20)
+ | ((in[29 + inpos]) << 23)
+ | ((in[30 + inpos]) << 26)
+ | ((in[31 + inpos]) << 29)
+ | ((in[32 + inpos]) << 32)
+ | ((in[33 + inpos]) << 35)
+ | ((in[34 + inpos]) << 38)
+ | ((in[35 + inpos]) << 41)
+ | ((in[36 + inpos]) << 44)
+ | ((in[37 + inpos]) << 47)
+ | ((in[38 + inpos]) << 50)
+ | ((in[39 + inpos]) << 53)
+ | ((in[40 + inpos]) << 56)
+ | ((in[41 + inpos]) << 59)
+ | ((in[42 + inpos]) << 62);
+ out[2 + outpos] = ((in[42 + inpos]) >>> (3 - 1))
+ | ((in[43 + inpos]) << 1)
+ | ((in[44 + inpos]) << 4)
+ | ((in[45 + inpos]) << 7)
+ | ((in[46 + inpos]) << 10)
+ | ((in[47 + inpos]) << 13)
+ | ((in[48 + inpos]) << 16)
+ | ((in[49 + inpos]) << 19)
+ | ((in[50 + inpos]) << 22)
+ | ((in[51 + inpos]) << 25)
+ | ((in[52 + inpos]) << 28)
+ | ((in[53 + inpos]) << 31)
+ | ((in[54 + inpos]) << 34)
+ | ((in[55 + inpos]) << 37)
+ | ((in[56 + inpos]) << 40)
+ | ((in[57 + inpos]) << 43)
+ | ((in[58 + inpos]) << 46)
+ | ((in[59 + inpos]) << 49)
+ | ((in[60 + inpos]) << 52)
+ | ((in[61 + inpos]) << 55)
+ | ((in[62 + inpos]) << 58)
+ | ((in[63 + inpos]) << 61);
+ }
+
+ protected static void fastpackwithoutmask4(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 4)
+ | ((in[2 + inpos]) << 8)
+ | ((in[3 + inpos]) << 12)
+ | ((in[4 + inpos]) << 16)
+ | ((in[5 + inpos]) << 20)
+ | ((in[6 + inpos]) << 24)
+ | ((in[7 + inpos]) << 28)
+ | ((in[8 + inpos]) << 32)
+ | ((in[9 + inpos]) << 36)
+ | ((in[10 + inpos]) << 40)
+ | ((in[11 + inpos]) << 44)
+ | ((in[12 + inpos]) << 48)
+ | ((in[13 + inpos]) << 52)
+ | ((in[14 + inpos]) << 56)
+ | ((in[15 + inpos]) << 60);
+ out[1 + outpos] = in[16 + inpos]
+ | ((in[17 + inpos]) << 4)
+ | ((in[18 + inpos]) << 8)
+ | ((in[19 + inpos]) << 12)
+ | ((in[20 + inpos]) << 16)
+ | ((in[21 + inpos]) << 20)
+ | ((in[22 + inpos]) << 24)
+ | ((in[23 + inpos]) << 28)
+ | ((in[24 + inpos]) << 32)
+ | ((in[25 + inpos]) << 36)
+ | ((in[26 + inpos]) << 40)
+ | ((in[27 + inpos]) << 44)
+ | ((in[28 + inpos]) << 48)
+ | ((in[29 + inpos]) << 52)
+ | ((in[30 + inpos]) << 56)
+ | ((in[31 + inpos]) << 60);
+ out[2 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 4)
+ | ((in[34 + inpos]) << 8)
+ | ((in[35 + inpos]) << 12)
+ | ((in[36 + inpos]) << 16)
+ | ((in[37 + inpos]) << 20)
+ | ((in[38 + inpos]) << 24)
+ | ((in[39 + inpos]) << 28)
+ | ((in[40 + inpos]) << 32)
+ | ((in[41 + inpos]) << 36)
+ | ((in[42 + inpos]) << 40)
+ | ((in[43 + inpos]) << 44)
+ | ((in[44 + inpos]) << 48)
+ | ((in[45 + inpos]) << 52)
+ | ((in[46 + inpos]) << 56)
+ | ((in[47 + inpos]) << 60);
+ out[3 + outpos] = in[48 + inpos]
+ | ((in[49 + inpos]) << 4)
+ | ((in[50 + inpos]) << 8)
+ | ((in[51 + inpos]) << 12)
+ | ((in[52 + inpos]) << 16)
+ | ((in[53 + inpos]) << 20)
+ | ((in[54 + inpos]) << 24)
+ | ((in[55 + inpos]) << 28)
+ | ((in[56 + inpos]) << 32)
+ | ((in[57 + inpos]) << 36)
+ | ((in[58 + inpos]) << 40)
+ | ((in[59 + inpos]) << 44)
+ | ((in[60 + inpos]) << 48)
+ | ((in[61 + inpos]) << 52)
+ | ((in[62 + inpos]) << 56)
+ | ((in[63 + inpos]) << 60);
+ }
+
+ protected static void fastpackwithoutmask5(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 5)
+ | ((in[2 + inpos]) << 10)
+ | ((in[3 + inpos]) << 15)
+ | ((in[4 + inpos]) << 20)
+ | ((in[5 + inpos]) << 25)
+ | ((in[6 + inpos]) << 30)
+ | ((in[7 + inpos]) << 35)
+ | ((in[8 + inpos]) << 40)
+ | ((in[9 + inpos]) << 45)
+ | ((in[10 + inpos]) << 50)
+ | ((in[11 + inpos]) << 55)
+ | ((in[12 + inpos]) << 60);
+ out[1 + outpos] = ((in[12 + inpos]) >>> (5 - 1))
+ | ((in[13 + inpos]) << 1)
+ | ((in[14 + inpos]) << 6)
+ | ((in[15 + inpos]) << 11)
+ | ((in[16 + inpos]) << 16)
+ | ((in[17 + inpos]) << 21)
+ | ((in[18 + inpos]) << 26)
+ | ((in[19 + inpos]) << 31)
+ | ((in[20 + inpos]) << 36)
+ | ((in[21 + inpos]) << 41)
+ | ((in[22 + inpos]) << 46)
+ | ((in[23 + inpos]) << 51)
+ | ((in[24 + inpos]) << 56)
+ | ((in[25 + inpos]) << 61);
+ out[2 + outpos] = ((in[25 + inpos]) >>> (5 - 2))
+ | ((in[26 + inpos]) << 2)
+ | ((in[27 + inpos]) << 7)
+ | ((in[28 + inpos]) << 12)
+ | ((in[29 + inpos]) << 17)
+ | ((in[30 + inpos]) << 22)
+ | ((in[31 + inpos]) << 27)
+ | ((in[32 + inpos]) << 32)
+ | ((in[33 + inpos]) << 37)
+ | ((in[34 + inpos]) << 42)
+ | ((in[35 + inpos]) << 47)
+ | ((in[36 + inpos]) << 52)
+ | ((in[37 + inpos]) << 57)
+ | ((in[38 + inpos]) << 62);
+ out[3 + outpos] = ((in[38 + inpos]) >>> (5 - 3))
+ | ((in[39 + inpos]) << 3)
+ | ((in[40 + inpos]) << 8)
+ | ((in[41 + inpos]) << 13)
+ | ((in[42 + inpos]) << 18)
+ | ((in[43 + inpos]) << 23)
+ | ((in[44 + inpos]) << 28)
+ | ((in[45 + inpos]) << 33)
+ | ((in[46 + inpos]) << 38)
+ | ((in[47 + inpos]) << 43)
+ | ((in[48 + inpos]) << 48)
+ | ((in[49 + inpos]) << 53)
+ | ((in[50 + inpos]) << 58)
+ | ((in[51 + inpos]) << 63);
+ out[4 + outpos] = ((in[51 + inpos]) >>> (5 - 4))
+ | ((in[52 + inpos]) << 4)
+ | ((in[53 + inpos]) << 9)
+ | ((in[54 + inpos]) << 14)
+ | ((in[55 + inpos]) << 19)
+ | ((in[56 + inpos]) << 24)
+ | ((in[57 + inpos]) << 29)
+ | ((in[58 + inpos]) << 34)
+ | ((in[59 + inpos]) << 39)
+ | ((in[60 + inpos]) << 44)
+ | ((in[61 + inpos]) << 49)
+ | ((in[62 + inpos]) << 54)
+ | ((in[63 + inpos]) << 59);
+ }
+
+ protected static void fastpackwithoutmask6(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 6)
+ | ((in[2 + inpos]) << 12)
+ | ((in[3 + inpos]) << 18)
+ | ((in[4 + inpos]) << 24)
+ | ((in[5 + inpos]) << 30)
+ | ((in[6 + inpos]) << 36)
+ | ((in[7 + inpos]) << 42)
+ | ((in[8 + inpos]) << 48)
+ | ((in[9 + inpos]) << 54)
+ | ((in[10 + inpos]) << 60);
+ out[1 + outpos] = ((in[10 + inpos]) >>> (6 - 2))
+ | ((in[11 + inpos]) << 2)
+ | ((in[12 + inpos]) << 8)
+ | ((in[13 + inpos]) << 14)
+ | ((in[14 + inpos]) << 20)
+ | ((in[15 + inpos]) << 26)
+ | ((in[16 + inpos]) << 32)
+ | ((in[17 + inpos]) << 38)
+ | ((in[18 + inpos]) << 44)
+ | ((in[19 + inpos]) << 50)
+ | ((in[20 + inpos]) << 56)
+ | ((in[21 + inpos]) << 62);
+ out[2 + outpos] = ((in[21 + inpos]) >>> (6 - 4))
+ | ((in[22 + inpos]) << 4)
+ | ((in[23 + inpos]) << 10)
+ | ((in[24 + inpos]) << 16)
+ | ((in[25 + inpos]) << 22)
+ | ((in[26 + inpos]) << 28)
+ | ((in[27 + inpos]) << 34)
+ | ((in[28 + inpos]) << 40)
+ | ((in[29 + inpos]) << 46)
+ | ((in[30 + inpos]) << 52)
+ | ((in[31 + inpos]) << 58);
+ out[3 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 6)
+ | ((in[34 + inpos]) << 12)
+ | ((in[35 + inpos]) << 18)
+ | ((in[36 + inpos]) << 24)
+ | ((in[37 + inpos]) << 30)
+ | ((in[38 + inpos]) << 36)
+ | ((in[39 + inpos]) << 42)
+ | ((in[40 + inpos]) << 48)
+ | ((in[41 + inpos]) << 54)
+ | ((in[42 + inpos]) << 60);
+ out[4 + outpos] = ((in[42 + inpos]) >>> (6 - 2))
+ | ((in[43 + inpos]) << 2)
+ | ((in[44 + inpos]) << 8)
+ | ((in[45 + inpos]) << 14)
+ | ((in[46 + inpos]) << 20)
+ | ((in[47 + inpos]) << 26)
+ | ((in[48 + inpos]) << 32)
+ | ((in[49 + inpos]) << 38)
+ | ((in[50 + inpos]) << 44)
+ | ((in[51 + inpos]) << 50)
+ | ((in[52 + inpos]) << 56)
+ | ((in[53 + inpos]) << 62);
+ out[5 + outpos] = ((in[53 + inpos]) >>> (6 - 4))
+ | ((in[54 + inpos]) << 4)
+ | ((in[55 + inpos]) << 10)
+ | ((in[56 + inpos]) << 16)
+ | ((in[57 + inpos]) << 22)
+ | ((in[58 + inpos]) << 28)
+ | ((in[59 + inpos]) << 34)
+ | ((in[60 + inpos]) << 40)
+ | ((in[61 + inpos]) << 46)
+ | ((in[62 + inpos]) << 52)
+ | ((in[63 + inpos]) << 58);
+ }
+
+ protected static void fastpackwithoutmask7(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 7)
+ | ((in[2 + inpos]) << 14)
+ | ((in[3 + inpos]) << 21)
+ | ((in[4 + inpos]) << 28)
+ | ((in[5 + inpos]) << 35)
+ | ((in[6 + inpos]) << 42)
+ | ((in[7 + inpos]) << 49)
+ | ((in[8 + inpos]) << 56)
+ | ((in[9 + inpos]) << 63);
+ out[1 + outpos] = ((in[9 + inpos]) >>> (7 - 6))
+ | ((in[10 + inpos]) << 6)
+ | ((in[11 + inpos]) << 13)
+ | ((in[12 + inpos]) << 20)
+ | ((in[13 + inpos]) << 27)
+ | ((in[14 + inpos]) << 34)
+ | ((in[15 + inpos]) << 41)
+ | ((in[16 + inpos]) << 48)
+ | ((in[17 + inpos]) << 55)
+ | ((in[18 + inpos]) << 62);
+ out[2 + outpos] = ((in[18 + inpos]) >>> (7 - 5))
+ | ((in[19 + inpos]) << 5)
+ | ((in[20 + inpos]) << 12)
+ | ((in[21 + inpos]) << 19)
+ | ((in[22 + inpos]) << 26)
+ | ((in[23 + inpos]) << 33)
+ | ((in[24 + inpos]) << 40)
+ | ((in[25 + inpos]) << 47)
+ | ((in[26 + inpos]) << 54)
+ | ((in[27 + inpos]) << 61);
+ out[3 + outpos] = ((in[27 + inpos]) >>> (7 - 4))
+ | ((in[28 + inpos]) << 4)
+ | ((in[29 + inpos]) << 11)
+ | ((in[30 + inpos]) << 18)
+ | ((in[31 + inpos]) << 25)
+ | ((in[32 + inpos]) << 32)
+ | ((in[33 + inpos]) << 39)
+ | ((in[34 + inpos]) << 46)
+ | ((in[35 + inpos]) << 53)
+ | ((in[36 + inpos]) << 60);
+ out[4 + outpos] = ((in[36 + inpos]) >>> (7 - 3))
+ | ((in[37 + inpos]) << 3)
+ | ((in[38 + inpos]) << 10)
+ | ((in[39 + inpos]) << 17)
+ | ((in[40 + inpos]) << 24)
+ | ((in[41 + inpos]) << 31)
+ | ((in[42 + inpos]) << 38)
+ | ((in[43 + inpos]) << 45)
+ | ((in[44 + inpos]) << 52)
+ | ((in[45 + inpos]) << 59);
+ out[5 + outpos] = ((in[45 + inpos]) >>> (7 - 2))
+ | ((in[46 + inpos]) << 2)
+ | ((in[47 + inpos]) << 9)
+ | ((in[48 + inpos]) << 16)
+ | ((in[49 + inpos]) << 23)
+ | ((in[50 + inpos]) << 30)
+ | ((in[51 + inpos]) << 37)
+ | ((in[52 + inpos]) << 44)
+ | ((in[53 + inpos]) << 51)
+ | ((in[54 + inpos]) << 58);
+ out[6 + outpos] = ((in[54 + inpos]) >>> (7 - 1))
+ | ((in[55 + inpos]) << 1)
+ | ((in[56 + inpos]) << 8)
+ | ((in[57 + inpos]) << 15)
+ | ((in[58 + inpos]) << 22)
+ | ((in[59 + inpos]) << 29)
+ | ((in[60 + inpos]) << 36)
+ | ((in[61 + inpos]) << 43)
+ | ((in[62 + inpos]) << 50)
+ | ((in[63 + inpos]) << 57);
+ }
+
+ protected static void fastpackwithoutmask8(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 8)
+ | ((in[2 + inpos]) << 16)
+ | ((in[3 + inpos]) << 24)
+ | ((in[4 + inpos]) << 32)
+ | ((in[5 + inpos]) << 40)
+ | ((in[6 + inpos]) << 48)
+ | ((in[7 + inpos]) << 56);
+ out[1 + outpos] = in[8 + inpos] | ((in[9 + inpos]) << 8)
+ | ((in[10 + inpos]) << 16)
+ | ((in[11 + inpos]) << 24)
+ | ((in[12 + inpos]) << 32)
+ | ((in[13 + inpos]) << 40)
+ | ((in[14 + inpos]) << 48)
+ | ((in[15 + inpos]) << 56);
+ out[2 + outpos] = in[16 + inpos]
+ | ((in[17 + inpos]) << 8)
+ | ((in[18 + inpos]) << 16)
+ | ((in[19 + inpos]) << 24)
+ | ((in[20 + inpos]) << 32)
+ | ((in[21 + inpos]) << 40)
+ | ((in[22 + inpos]) << 48)
+ | ((in[23 + inpos]) << 56);
+ out[3 + outpos] = in[24 + inpos]
+ | ((in[25 + inpos]) << 8)
+ | ((in[26 + inpos]) << 16)
+ | ((in[27 + inpos]) << 24)
+ | ((in[28 + inpos]) << 32)
+ | ((in[29 + inpos]) << 40)
+ | ((in[30 + inpos]) << 48)
+ | ((in[31 + inpos]) << 56);
+ out[4 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 8)
+ | ((in[34 + inpos]) << 16)
+ | ((in[35 + inpos]) << 24)
+ | ((in[36 + inpos]) << 32)
+ | ((in[37 + inpos]) << 40)
+ | ((in[38 + inpos]) << 48)
+ | ((in[39 + inpos]) << 56);
+ out[5 + outpos] = in[40 + inpos]
+ | ((in[41 + inpos]) << 8)
+ | ((in[42 + inpos]) << 16)
+ | ((in[43 + inpos]) << 24)
+ | ((in[44 + inpos]) << 32)
+ | ((in[45 + inpos]) << 40)
+ | ((in[46 + inpos]) << 48)
+ | ((in[47 + inpos]) << 56);
+ out[6 + outpos] = in[48 + inpos]
+ | ((in[49 + inpos]) << 8)
+ | ((in[50 + inpos]) << 16)
+ | ((in[51 + inpos]) << 24)
+ | ((in[52 + inpos]) << 32)
+ | ((in[53 + inpos]) << 40)
+ | ((in[54 + inpos]) << 48)
+ | ((in[55 + inpos]) << 56);
+ out[7 + outpos] = in[56 + inpos]
+ | ((in[57 + inpos]) << 8)
+ | ((in[58 + inpos]) << 16)
+ | ((in[59 + inpos]) << 24)
+ | ((in[60 + inpos]) << 32)
+ | ((in[61 + inpos]) << 40)
+ | ((in[62 + inpos]) << 48)
+ | ((in[63 + inpos]) << 56);
+ }
+
+ protected static void fastpackwithoutmask9(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 9)
+ | ((in[2 + inpos]) << 18)
+ | ((in[3 + inpos]) << 27)
+ | ((in[4 + inpos]) << 36)
+ | ((in[5 + inpos]) << 45)
+ | ((in[6 + inpos]) << 54)
+ | ((in[7 + inpos]) << 63);
+ out[1 + outpos] = ((in[7 + inpos]) >>> (9 - 8))
+ | ((in[8 + inpos]) << 8)
+ | ((in[9 + inpos]) << 17)
+ | ((in[10 + inpos]) << 26)
+ | ((in[11 + inpos]) << 35)
+ | ((in[12 + inpos]) << 44)
+ | ((in[13 + inpos]) << 53)
+ | ((in[14 + inpos]) << 62);
+ out[2 + outpos] = ((in[14 + inpos]) >>> (9 - 7))
+ | ((in[15 + inpos]) << 7)
+ | ((in[16 + inpos]) << 16)
+ | ((in[17 + inpos]) << 25)
+ | ((in[18 + inpos]) << 34)
+ | ((in[19 + inpos]) << 43)
+ | ((in[20 + inpos]) << 52)
+ | ((in[21 + inpos]) << 61);
+ out[3 + outpos] = ((in[21 + inpos]) >>> (9 - 6))
+ | ((in[22 + inpos]) << 6)
+ | ((in[23 + inpos]) << 15)
+ | ((in[24 + inpos]) << 24)
+ | ((in[25 + inpos]) << 33)
+ | ((in[26 + inpos]) << 42)
+ | ((in[27 + inpos]) << 51)
+ | ((in[28 + inpos]) << 60);
+ out[4 + outpos] = ((in[28 + inpos]) >>> (9 - 5))
+ | ((in[29 + inpos]) << 5)
+ | ((in[30 + inpos]) << 14)
+ | ((in[31 + inpos]) << 23)
+ | ((in[32 + inpos]) << 32)
+ | ((in[33 + inpos]) << 41)
+ | ((in[34 + inpos]) << 50)
+ | ((in[35 + inpos]) << 59);
+ out[5 + outpos] = ((in[35 + inpos]) >>> (9 - 4))
+ | ((in[36 + inpos]) << 4)
+ | ((in[37 + inpos]) << 13)
+ | ((in[38 + inpos]) << 22)
+ | ((in[39 + inpos]) << 31)
+ | ((in[40 + inpos]) << 40)
+ | ((in[41 + inpos]) << 49)
+ | ((in[42 + inpos]) << 58);
+ out[6 + outpos] = ((in[42 + inpos]) >>> (9 - 3))
+ | ((in[43 + inpos]) << 3)
+ | ((in[44 + inpos]) << 12)
+ | ((in[45 + inpos]) << 21)
+ | ((in[46 + inpos]) << 30)
+ | ((in[47 + inpos]) << 39)
+ | ((in[48 + inpos]) << 48)
+ | ((in[49 + inpos]) << 57);
+ out[7 + outpos] = ((in[49 + inpos]) >>> (9 - 2))
+ | ((in[50 + inpos]) << 2)
+ | ((in[51 + inpos]) << 11)
+ | ((in[52 + inpos]) << 20)
+ | ((in[53 + inpos]) << 29)
+ | ((in[54 + inpos]) << 38)
+ | ((in[55 + inpos]) << 47)
+ | ((in[56 + inpos]) << 56);
+ out[8 + outpos] = ((in[56 + inpos]) >>> (9 - 1))
+ | ((in[57 + inpos]) << 1)
+ | ((in[58 + inpos]) << 10)
+ | ((in[59 + inpos]) << 19)
+ | ((in[60 + inpos]) << 28)
+ | ((in[61 + inpos]) << 37)
+ | ((in[62 + inpos]) << 46)
+ | ((in[63 + inpos]) << 55);
+ }
+
+ protected static void fastpackwithoutmask10(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 10)
+ | ((in[2 + inpos]) << 20)
+ | ((in[3 + inpos]) << 30)
+ | ((in[4 + inpos]) << 40)
+ | ((in[5 + inpos]) << 50)
+ | ((in[6 + inpos]) << 60);
+ out[1 + outpos] = ((in[6 + inpos]) >>> (10 - 6))
+ | ((in[7 + inpos]) << 6)
+ | ((in[8 + inpos]) << 16)
+ | ((in[9 + inpos]) << 26)
+ | ((in[10 + inpos]) << 36)
+ | ((in[11 + inpos]) << 46)
+ | ((in[12 + inpos]) << 56);
+ out[2 + outpos] = ((in[12 + inpos]) >>> (10 - 2))
+ | ((in[13 + inpos]) << 2)
+ | ((in[14 + inpos]) << 12)
+ | ((in[15 + inpos]) << 22)
+ | ((in[16 + inpos]) << 32)
+ | ((in[17 + inpos]) << 42)
+ | ((in[18 + inpos]) << 52)
+ | ((in[19 + inpos]) << 62);
+ out[3 + outpos] = ((in[19 + inpos]) >>> (10 - 8))
+ | ((in[20 + inpos]) << 8)
+ | ((in[21 + inpos]) << 18)
+ | ((in[22 + inpos]) << 28)
+ | ((in[23 + inpos]) << 38)
+ | ((in[24 + inpos]) << 48)
+ | ((in[25 + inpos]) << 58);
+ out[4 + outpos] = ((in[25 + inpos]) >>> (10 - 4))
+ | ((in[26 + inpos]) << 4)
+ | ((in[27 + inpos]) << 14)
+ | ((in[28 + inpos]) << 24)
+ | ((in[29 + inpos]) << 34)
+ | ((in[30 + inpos]) << 44)
+ | ((in[31 + inpos]) << 54);
+ out[5 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 10)
+ | ((in[34 + inpos]) << 20)
+ | ((in[35 + inpos]) << 30)
+ | ((in[36 + inpos]) << 40)
+ | ((in[37 + inpos]) << 50)
+ | ((in[38 + inpos]) << 60);
+ out[6 + outpos] = ((in[38 + inpos]) >>> (10 - 6))
+ | ((in[39 + inpos]) << 6)
+ | ((in[40 + inpos]) << 16)
+ | ((in[41 + inpos]) << 26)
+ | ((in[42 + inpos]) << 36)
+ | ((in[43 + inpos]) << 46)
+ | ((in[44 + inpos]) << 56);
+ out[7 + outpos] = ((in[44 + inpos]) >>> (10 - 2))
+ | ((in[45 + inpos]) << 2)
+ | ((in[46 + inpos]) << 12)
+ | ((in[47 + inpos]) << 22)
+ | ((in[48 + inpos]) << 32)
+ | ((in[49 + inpos]) << 42)
+ | ((in[50 + inpos]) << 52)
+ | ((in[51 + inpos]) << 62);
+ out[8 + outpos] = ((in[51 + inpos]) >>> (10 - 8))
+ | ((in[52 + inpos]) << 8)
+ | ((in[53 + inpos]) << 18)
+ | ((in[54 + inpos]) << 28)
+ | ((in[55 + inpos]) << 38)
+ | ((in[56 + inpos]) << 48)
+ | ((in[57 + inpos]) << 58);
+ out[9 + outpos] = ((in[57 + inpos]) >>> (10 - 4))
+ | ((in[58 + inpos]) << 4)
+ | ((in[59 + inpos]) << 14)
+ | ((in[60 + inpos]) << 24)
+ | ((in[61 + inpos]) << 34)
+ | ((in[62 + inpos]) << 44)
+ | ((in[63 + inpos]) << 54);
+ }
+
+ protected static void fastpackwithoutmask11(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 11)
+ | ((in[2 + inpos]) << 22)
+ | ((in[3 + inpos]) << 33)
+ | ((in[4 + inpos]) << 44)
+ | ((in[5 + inpos]) << 55);
+ out[1 + outpos] = ((in[5 + inpos]) >>> (11 - 2))
+ | ((in[6 + inpos]) << 2)
+ | ((in[7 + inpos]) << 13)
+ | ((in[8 + inpos]) << 24)
+ | ((in[9 + inpos]) << 35)
+ | ((in[10 + inpos]) << 46)
+ | ((in[11 + inpos]) << 57);
+ out[2 + outpos] = ((in[11 + inpos]) >>> (11 - 4))
+ | ((in[12 + inpos]) << 4)
+ | ((in[13 + inpos]) << 15)
+ | ((in[14 + inpos]) << 26)
+ | ((in[15 + inpos]) << 37)
+ | ((in[16 + inpos]) << 48)
+ | ((in[17 + inpos]) << 59);
+ out[3 + outpos] = ((in[17 + inpos]) >>> (11 - 6))
+ | ((in[18 + inpos]) << 6)
+ | ((in[19 + inpos]) << 17)
+ | ((in[20 + inpos]) << 28)
+ | ((in[21 + inpos]) << 39)
+ | ((in[22 + inpos]) << 50)
+ | ((in[23 + inpos]) << 61);
+ out[4 + outpos] = ((in[23 + inpos]) >>> (11 - 8))
+ | ((in[24 + inpos]) << 8)
+ | ((in[25 + inpos]) << 19)
+ | ((in[26 + inpos]) << 30)
+ | ((in[27 + inpos]) << 41)
+ | ((in[28 + inpos]) << 52)
+ | ((in[29 + inpos]) << 63);
+ out[5 + outpos] = ((in[29 + inpos]) >>> (11 - 10))
+ | ((in[30 + inpos]) << 10)
+ | ((in[31 + inpos]) << 21)
+ | ((in[32 + inpos]) << 32)
+ | ((in[33 + inpos]) << 43)
+ | ((in[34 + inpos]) << 54);
+ out[6 + outpos] = ((in[34 + inpos]) >>> (11 - 1))
+ | ((in[35 + inpos]) << 1)
+ | ((in[36 + inpos]) << 12)
+ | ((in[37 + inpos]) << 23)
+ | ((in[38 + inpos]) << 34)
+ | ((in[39 + inpos]) << 45)
+ | ((in[40 + inpos]) << 56);
+ out[7 + outpos] = ((in[40 + inpos]) >>> (11 - 3))
+ | ((in[41 + inpos]) << 3)
+ | ((in[42 + inpos]) << 14)
+ | ((in[43 + inpos]) << 25)
+ | ((in[44 + inpos]) << 36)
+ | ((in[45 + inpos]) << 47)
+ | ((in[46 + inpos]) << 58);
+ out[8 + outpos] = ((in[46 + inpos]) >>> (11 - 5))
+ | ((in[47 + inpos]) << 5)
+ | ((in[48 + inpos]) << 16)
+ | ((in[49 + inpos]) << 27)
+ | ((in[50 + inpos]) << 38)
+ | ((in[51 + inpos]) << 49)
+ | ((in[52 + inpos]) << 60);
+ out[9 + outpos] = ((in[52 + inpos]) >>> (11 - 7))
+ | ((in[53 + inpos]) << 7)
+ | ((in[54 + inpos]) << 18)
+ | ((in[55 + inpos]) << 29)
+ | ((in[56 + inpos]) << 40)
+ | ((in[57 + inpos]) << 51)
+ | ((in[58 + inpos]) << 62);
+ out[10 + outpos] = ((in[58 + inpos]) >>> (11 - 9))
+ | ((in[59 + inpos]) << 9)
+ | ((in[60 + inpos]) << 20)
+ | ((in[61 + inpos]) << 31)
+ | ((in[62 + inpos]) << 42)
+ | ((in[63 + inpos]) << 53);
+ }
+
+ protected static void fastpackwithoutmask12(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 12)
+ | ((in[2 + inpos]) << 24)
+ | ((in[3 + inpos]) << 36)
+ | ((in[4 + inpos]) << 48)
+ | ((in[5 + inpos]) << 60);
+ out[1 + outpos] = ((in[5 + inpos]) >>> (12 - 8))
+ | ((in[6 + inpos]) << 8)
+ | ((in[7 + inpos]) << 20)
+ | ((in[8 + inpos]) << 32)
+ | ((in[9 + inpos]) << 44)
+ | ((in[10 + inpos]) << 56);
+ out[2 + outpos] = ((in[10 + inpos]) >>> (12 - 4))
+ | ((in[11 + inpos]) << 4)
+ | ((in[12 + inpos]) << 16)
+ | ((in[13 + inpos]) << 28)
+ | ((in[14 + inpos]) << 40)
+ | ((in[15 + inpos]) << 52);
+ out[3 + outpos] = in[16 + inpos]
+ | ((in[17 + inpos]) << 12)
+ | ((in[18 + inpos]) << 24)
+ | ((in[19 + inpos]) << 36)
+ | ((in[20 + inpos]) << 48)
+ | ((in[21 + inpos]) << 60);
+ out[4 + outpos] = ((in[21 + inpos]) >>> (12 - 8))
+ | ((in[22 + inpos]) << 8)
+ | ((in[23 + inpos]) << 20)
+ | ((in[24 + inpos]) << 32)
+ | ((in[25 + inpos]) << 44)
+ | ((in[26 + inpos]) << 56);
+ out[5 + outpos] = ((in[26 + inpos]) >>> (12 - 4))
+ | ((in[27 + inpos]) << 4)
+ | ((in[28 + inpos]) << 16)
+ | ((in[29 + inpos]) << 28)
+ | ((in[30 + inpos]) << 40)
+ | ((in[31 + inpos]) << 52);
+ out[6 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 12)
+ | ((in[34 + inpos]) << 24)
+ | ((in[35 + inpos]) << 36)
+ | ((in[36 + inpos]) << 48)
+ | ((in[37 + inpos]) << 60);
+ out[7 + outpos] = ((in[37 + inpos]) >>> (12 - 8))
+ | ((in[38 + inpos]) << 8)
+ | ((in[39 + inpos]) << 20)
+ | ((in[40 + inpos]) << 32)
+ | ((in[41 + inpos]) << 44)
+ | ((in[42 + inpos]) << 56);
+ out[8 + outpos] = ((in[42 + inpos]) >>> (12 - 4))
+ | ((in[43 + inpos]) << 4)
+ | ((in[44 + inpos]) << 16)
+ | ((in[45 + inpos]) << 28)
+ | ((in[46 + inpos]) << 40)
+ | ((in[47 + inpos]) << 52);
+ out[9 + outpos] = in[48 + inpos]
+ | ((in[49 + inpos]) << 12)
+ | ((in[50 + inpos]) << 24)
+ | ((in[51 + inpos]) << 36)
+ | ((in[52 + inpos]) << 48)
+ | ((in[53 + inpos]) << 60);
+ out[10 + outpos] = ((in[53 + inpos]) >>> (12 - 8))
+ | ((in[54 + inpos]) << 8)
+ | ((in[55 + inpos]) << 20)
+ | ((in[56 + inpos]) << 32)
+ | ((in[57 + inpos]) << 44)
+ | ((in[58 + inpos]) << 56);
+ out[11 + outpos] = ((in[58 + inpos]) >>> (12 - 4))
+ | ((in[59 + inpos]) << 4)
+ | ((in[60 + inpos]) << 16)
+ | ((in[61 + inpos]) << 28)
+ | ((in[62 + inpos]) << 40)
+ | ((in[63 + inpos]) << 52);
+ }
+
+ protected static void fastpackwithoutmask13(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 13)
+ | ((in[2 + inpos]) << 26)
+ | ((in[3 + inpos]) << 39)
+ | ((in[4 + inpos]) << 52);
+ out[1 + outpos] = ((in[4 + inpos]) >>> (13 - 1))
+ | ((in[5 + inpos]) << 1)
+ | ((in[6 + inpos]) << 14)
+ | ((in[7 + inpos]) << 27)
+ | ((in[8 + inpos]) << 40)
+ | ((in[9 + inpos]) << 53);
+ out[2 + outpos] = ((in[9 + inpos]) >>> (13 - 2))
+ | ((in[10 + inpos]) << 2)
+ | ((in[11 + inpos]) << 15)
+ | ((in[12 + inpos]) << 28)
+ | ((in[13 + inpos]) << 41)
+ | ((in[14 + inpos]) << 54);
+ out[3 + outpos] = ((in[14 + inpos]) >>> (13 - 3))
+ | ((in[15 + inpos]) << 3)
+ | ((in[16 + inpos]) << 16)
+ | ((in[17 + inpos]) << 29)
+ | ((in[18 + inpos]) << 42)
+ | ((in[19 + inpos]) << 55);
+ out[4 + outpos] = ((in[19 + inpos]) >>> (13 - 4))
+ | ((in[20 + inpos]) << 4)
+ | ((in[21 + inpos]) << 17)
+ | ((in[22 + inpos]) << 30)
+ | ((in[23 + inpos]) << 43)
+ | ((in[24 + inpos]) << 56);
+ out[5 + outpos] = ((in[24 + inpos]) >>> (13 - 5))
+ | ((in[25 + inpos]) << 5)
+ | ((in[26 + inpos]) << 18)
+ | ((in[27 + inpos]) << 31)
+ | ((in[28 + inpos]) << 44)
+ | ((in[29 + inpos]) << 57);
+ out[6 + outpos] = ((in[29 + inpos]) >>> (13 - 6))
+ | ((in[30 + inpos]) << 6)
+ | ((in[31 + inpos]) << 19)
+ | ((in[32 + inpos]) << 32)
+ | ((in[33 + inpos]) << 45)
+ | ((in[34 + inpos]) << 58);
+ out[7 + outpos] = ((in[34 + inpos]) >>> (13 - 7))
+ | ((in[35 + inpos]) << 7)
+ | ((in[36 + inpos]) << 20)
+ | ((in[37 + inpos]) << 33)
+ | ((in[38 + inpos]) << 46)
+ | ((in[39 + inpos]) << 59);
+ out[8 + outpos] = ((in[39 + inpos]) >>> (13 - 8))
+ | ((in[40 + inpos]) << 8)
+ | ((in[41 + inpos]) << 21)
+ | ((in[42 + inpos]) << 34)
+ | ((in[43 + inpos]) << 47)
+ | ((in[44 + inpos]) << 60);
+ out[9 + outpos] = ((in[44 + inpos]) >>> (13 - 9))
+ | ((in[45 + inpos]) << 9)
+ | ((in[46 + inpos]) << 22)
+ | ((in[47 + inpos]) << 35)
+ | ((in[48 + inpos]) << 48)
+ | ((in[49 + inpos]) << 61);
+ out[10 + outpos] = ((in[49 + inpos]) >>> (13 - 10))
+ | ((in[50 + inpos]) << 10)
+ | ((in[51 + inpos]) << 23)
+ | ((in[52 + inpos]) << 36)
+ | ((in[53 + inpos]) << 49)
+ | ((in[54 + inpos]) << 62);
+ out[11 + outpos] = ((in[54 + inpos]) >>> (13 - 11))
+ | ((in[55 + inpos]) << 11)
+ | ((in[56 + inpos]) << 24)
+ | ((in[57 + inpos]) << 37)
+ | ((in[58 + inpos]) << 50)
+ | ((in[59 + inpos]) << 63);
+ out[12 + outpos] = ((in[59 + inpos]) >>> (13 - 12))
+ | ((in[60 + inpos]) << 12)
+ | ((in[61 + inpos]) << 25)
+ | ((in[62 + inpos]) << 38)
+ | ((in[63 + inpos]) << 51);
+ }
+
+ protected static void fastpackwithoutmask14(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 14)
+ | ((in[2 + inpos]) << 28)
+ | ((in[3 + inpos]) << 42)
+ | ((in[4 + inpos]) << 56);
+ out[1 + outpos] = ((in[4 + inpos]) >>> (14 - 6))
+ | ((in[5 + inpos]) << 6)
+ | ((in[6 + inpos]) << 20)
+ | ((in[7 + inpos]) << 34)
+ | ((in[8 + inpos]) << 48)
+ | ((in[9 + inpos]) << 62);
+ out[2 + outpos] = ((in[9 + inpos]) >>> (14 - 12))
+ | ((in[10 + inpos]) << 12)
+ | ((in[11 + inpos]) << 26)
+ | ((in[12 + inpos]) << 40)
+ | ((in[13 + inpos]) << 54);
+ out[3 + outpos] = ((in[13 + inpos]) >>> (14 - 4))
+ | ((in[14 + inpos]) << 4)
+ | ((in[15 + inpos]) << 18)
+ | ((in[16 + inpos]) << 32)
+ | ((in[17 + inpos]) << 46)
+ | ((in[18 + inpos]) << 60);
+ out[4 + outpos] = ((in[18 + inpos]) >>> (14 - 10))
+ | ((in[19 + inpos]) << 10)
+ | ((in[20 + inpos]) << 24)
+ | ((in[21 + inpos]) << 38)
+ | ((in[22 + inpos]) << 52);
+ out[5 + outpos] = ((in[22 + inpos]) >>> (14 - 2))
+ | ((in[23 + inpos]) << 2)
+ | ((in[24 + inpos]) << 16)
+ | ((in[25 + inpos]) << 30)
+ | ((in[26 + inpos]) << 44)
+ | ((in[27 + inpos]) << 58);
+ out[6 + outpos] = ((in[27 + inpos]) >>> (14 - 8))
+ | ((in[28 + inpos]) << 8)
+ | ((in[29 + inpos]) << 22)
+ | ((in[30 + inpos]) << 36)
+ | ((in[31 + inpos]) << 50);
+ out[7 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 14)
+ | ((in[34 + inpos]) << 28)
+ | ((in[35 + inpos]) << 42)
+ | ((in[36 + inpos]) << 56);
+ out[8 + outpos] = ((in[36 + inpos]) >>> (14 - 6))
+ | ((in[37 + inpos]) << 6)
+ | ((in[38 + inpos]) << 20)
+ | ((in[39 + inpos]) << 34)
+ | ((in[40 + inpos]) << 48)
+ | ((in[41 + inpos]) << 62);
+ out[9 + outpos] = ((in[41 + inpos]) >>> (14 - 12))
+ | ((in[42 + inpos]) << 12)
+ | ((in[43 + inpos]) << 26)
+ | ((in[44 + inpos]) << 40)
+ | ((in[45 + inpos]) << 54);
+ out[10 + outpos] = ((in[45 + inpos]) >>> (14 - 4))
+ | ((in[46 + inpos]) << 4)
+ | ((in[47 + inpos]) << 18)
+ | ((in[48 + inpos]) << 32)
+ | ((in[49 + inpos]) << 46)
+ | ((in[50 + inpos]) << 60);
+ out[11 + outpos] = ((in[50 + inpos]) >>> (14 - 10))
+ | ((in[51 + inpos]) << 10)
+ | ((in[52 + inpos]) << 24)
+ | ((in[53 + inpos]) << 38)
+ | ((in[54 + inpos]) << 52);
+ out[12 + outpos] = ((in[54 + inpos]) >>> (14 - 2))
+ | ((in[55 + inpos]) << 2)
+ | ((in[56 + inpos]) << 16)
+ | ((in[57 + inpos]) << 30)
+ | ((in[58 + inpos]) << 44)
+ | ((in[59 + inpos]) << 58);
+ out[13 + outpos] = ((in[59 + inpos]) >>> (14 - 8))
+ | ((in[60 + inpos]) << 8)
+ | ((in[61 + inpos]) << 22)
+ | ((in[62 + inpos]) << 36)
+ | ((in[63 + inpos]) << 50);
+ }
+
+ protected static void fastpackwithoutmask15(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 15)
+ | ((in[2 + inpos]) << 30)
+ | ((in[3 + inpos]) << 45)
+ | ((in[4 + inpos]) << 60);
+ out[1 + outpos] = ((in[4 + inpos]) >>> (15 - 11))
+ | ((in[5 + inpos]) << 11)
+ | ((in[6 + inpos]) << 26)
+ | ((in[7 + inpos]) << 41)
+ | ((in[8 + inpos]) << 56);
+ out[2 + outpos] = ((in[8 + inpos]) >>> (15 - 7))
+ | ((in[9 + inpos]) << 7)
+ | ((in[10 + inpos]) << 22)
+ | ((in[11 + inpos]) << 37)
+ | ((in[12 + inpos]) << 52);
+ out[3 + outpos] = ((in[12 + inpos]) >>> (15 - 3))
+ | ((in[13 + inpos]) << 3)
+ | ((in[14 + inpos]) << 18)
+ | ((in[15 + inpos]) << 33)
+ | ((in[16 + inpos]) << 48)
+ | ((in[17 + inpos]) << 63);
+ out[4 + outpos] = ((in[17 + inpos]) >>> (15 - 14))
+ | ((in[18 + inpos]) << 14)
+ | ((in[19 + inpos]) << 29)
+ | ((in[20 + inpos]) << 44)
+ | ((in[21 + inpos]) << 59);
+ out[5 + outpos] = ((in[21 + inpos]) >>> (15 - 10))
+ | ((in[22 + inpos]) << 10)
+ | ((in[23 + inpos]) << 25)
+ | ((in[24 + inpos]) << 40)
+ | ((in[25 + inpos]) << 55);
+ out[6 + outpos] = ((in[25 + inpos]) >>> (15 - 6))
+ | ((in[26 + inpos]) << 6)
+ | ((in[27 + inpos]) << 21)
+ | ((in[28 + inpos]) << 36)
+ | ((in[29 + inpos]) << 51);
+ out[7 + outpos] = ((in[29 + inpos]) >>> (15 - 2))
+ | ((in[30 + inpos]) << 2)
+ | ((in[31 + inpos]) << 17)
+ | ((in[32 + inpos]) << 32)
+ | ((in[33 + inpos]) << 47)
+ | ((in[34 + inpos]) << 62);
+ out[8 + outpos] = ((in[34 + inpos]) >>> (15 - 13))
+ | ((in[35 + inpos]) << 13)
+ | ((in[36 + inpos]) << 28)
+ | ((in[37 + inpos]) << 43)
+ | ((in[38 + inpos]) << 58);
+ out[9 + outpos] = ((in[38 + inpos]) >>> (15 - 9))
+ | ((in[39 + inpos]) << 9)
+ | ((in[40 + inpos]) << 24)
+ | ((in[41 + inpos]) << 39)
+ | ((in[42 + inpos]) << 54);
+ out[10 + outpos] = ((in[42 + inpos]) >>> (15 - 5))
+ | ((in[43 + inpos]) << 5)
+ | ((in[44 + inpos]) << 20)
+ | ((in[45 + inpos]) << 35)
+ | ((in[46 + inpos]) << 50);
+ out[11 + outpos] = ((in[46 + inpos]) >>> (15 - 1))
+ | ((in[47 + inpos]) << 1)
+ | ((in[48 + inpos]) << 16)
+ | ((in[49 + inpos]) << 31)
+ | ((in[50 + inpos]) << 46)
+ | ((in[51 + inpos]) << 61);
+ out[12 + outpos] = ((in[51 + inpos]) >>> (15 - 12))
+ | ((in[52 + inpos]) << 12)
+ | ((in[53 + inpos]) << 27)
+ | ((in[54 + inpos]) << 42)
+ | ((in[55 + inpos]) << 57);
+ out[13 + outpos] = ((in[55 + inpos]) >>> (15 - 8))
+ | ((in[56 + inpos]) << 8)
+ | ((in[57 + inpos]) << 23)
+ | ((in[58 + inpos]) << 38)
+ | ((in[59 + inpos]) << 53);
+ out[14 + outpos] = ((in[59 + inpos]) >>> (15 - 4))
+ | ((in[60 + inpos]) << 4)
+ | ((in[61 + inpos]) << 19)
+ | ((in[62 + inpos]) << 34)
+ | ((in[63 + inpos]) << 49);
+ }
+
+ protected static void fastpackwithoutmask16(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 16)
+ | ((in[2 + inpos]) << 32)
+ | ((in[3 + inpos]) << 48);
+ out[1 + outpos] = in[4 + inpos]
+ | ((in[5 + inpos]) << 16)
+ | ((in[6 + inpos]) << 32)
+ | ((in[7 + inpos]) << 48);
+ out[2 + outpos] = in[8 + inpos]
+ | ((in[9 + inpos]) << 16)
+ | ((in[10 + inpos]) << 32)
+ | ((in[11 + inpos]) << 48);
+ out[3 + outpos] = in[12 + inpos]
+ | ((in[13 + inpos]) << 16)
+ | ((in[14 + inpos]) << 32)
+ | ((in[15 + inpos]) << 48);
+ out[4 + outpos] = in[16 + inpos]
+ | ((in[17 + inpos]) << 16)
+ | ((in[18 + inpos]) << 32)
+ | ((in[19 + inpos]) << 48);
+ out[5 + outpos] = in[20 + inpos]
+ | ((in[21 + inpos]) << 16)
+ | ((in[22 + inpos]) << 32)
+ | ((in[23 + inpos]) << 48);
+ out[6 + outpos] = in[24 + inpos]
+ | ((in[25 + inpos]) << 16)
+ | ((in[26 + inpos]) << 32)
+ | ((in[27 + inpos]) << 48);
+ out[7 + outpos] = in[28 + inpos]
+ | ((in[29 + inpos]) << 16)
+ | ((in[30 + inpos]) << 32)
+ | ((in[31 + inpos]) << 48);
+ out[8 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 16)
+ | ((in[34 + inpos]) << 32)
+ | ((in[35 + inpos]) << 48);
+ out[9 + outpos] = in[36 + inpos]
+ | ((in[37 + inpos]) << 16)
+ | ((in[38 + inpos]) << 32)
+ | ((in[39 + inpos]) << 48);
+ out[10 + outpos] = in[40 + inpos]
+ | ((in[41 + inpos]) << 16)
+ | ((in[42 + inpos]) << 32)
+ | ((in[43 + inpos]) << 48);
+ out[11 + outpos] = in[44 + inpos]
+ | ((in[45 + inpos]) << 16)
+ | ((in[46 + inpos]) << 32)
+ | ((in[47 + inpos]) << 48);
+ out[12 + outpos] = in[48 + inpos]
+ | ((in[49 + inpos]) << 16)
+ | ((in[50 + inpos]) << 32)
+ | ((in[51 + inpos]) << 48);
+ out[13 + outpos] = in[52 + inpos]
+ | ((in[53 + inpos]) << 16)
+ | ((in[54 + inpos]) << 32)
+ | ((in[55 + inpos]) << 48);
+ out[14 + outpos] = in[56 + inpos]
+ | ((in[57 + inpos]) << 16)
+ | ((in[58 + inpos]) << 32)
+ | ((in[59 + inpos]) << 48);
+ out[15 + outpos] = in[60 + inpos]
+ | ((in[61 + inpos]) << 16)
+ | ((in[62 + inpos]) << 32)
+ | ((in[63 + inpos]) << 48);
+ }
+
+ protected static void fastpackwithoutmask17(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 17)
+ | ((in[2 + inpos]) << 34)
+ | ((in[3 + inpos]) << 51);
+ out[1 + outpos] = ((in[3 + inpos]) >>> (17 - 4))
+ | ((in[4 + inpos]) << 4)
+ | ((in[5 + inpos]) << 21)
+ | ((in[6 + inpos]) << 38)
+ | ((in[7 + inpos]) << 55);
+ out[2 + outpos] = ((in[7 + inpos]) >>> (17 - 8))
+ | ((in[8 + inpos]) << 8)
+ | ((in[9 + inpos]) << 25)
+ | ((in[10 + inpos]) << 42)
+ | ((in[11 + inpos]) << 59);
+ out[3 + outpos] = ((in[11 + inpos]) >>> (17 - 12))
+ | ((in[12 + inpos]) << 12)
+ | ((in[13 + inpos]) << 29)
+ | ((in[14 + inpos]) << 46)
+ | ((in[15 + inpos]) << 63);
+ out[4 + outpos] = ((in[15 + inpos]) >>> (17 - 16))
+ | ((in[16 + inpos]) << 16)
+ | ((in[17 + inpos]) << 33)
+ | ((in[18 + inpos]) << 50);
+ out[5 + outpos] = ((in[18 + inpos]) >>> (17 - 3))
+ | ((in[19 + inpos]) << 3)
+ | ((in[20 + inpos]) << 20)
+ | ((in[21 + inpos]) << 37)
+ | ((in[22 + inpos]) << 54);
+ out[6 + outpos] = ((in[22 + inpos]) >>> (17 - 7))
+ | ((in[23 + inpos]) << 7)
+ | ((in[24 + inpos]) << 24)
+ | ((in[25 + inpos]) << 41)
+ | ((in[26 + inpos]) << 58);
+ out[7 + outpos] = ((in[26 + inpos]) >>> (17 - 11))
+ | ((in[27 + inpos]) << 11)
+ | ((in[28 + inpos]) << 28)
+ | ((in[29 + inpos]) << 45)
+ | ((in[30 + inpos]) << 62);
+ out[8 + outpos] = ((in[30 + inpos]) >>> (17 - 15))
+ | ((in[31 + inpos]) << 15)
+ | ((in[32 + inpos]) << 32)
+ | ((in[33 + inpos]) << 49);
+ out[9 + outpos] = ((in[33 + inpos]) >>> (17 - 2))
+ | ((in[34 + inpos]) << 2)
+ | ((in[35 + inpos]) << 19)
+ | ((in[36 + inpos]) << 36)
+ | ((in[37 + inpos]) << 53);
+ out[10 + outpos] = ((in[37 + inpos]) >>> (17 - 6))
+ | ((in[38 + inpos]) << 6)
+ | ((in[39 + inpos]) << 23)
+ | ((in[40 + inpos]) << 40)
+ | ((in[41 + inpos]) << 57);
+ out[11 + outpos] = ((in[41 + inpos]) >>> (17 - 10))
+ | ((in[42 + inpos]) << 10)
+ | ((in[43 + inpos]) << 27)
+ | ((in[44 + inpos]) << 44)
+ | ((in[45 + inpos]) << 61);
+ out[12 + outpos] = ((in[45 + inpos]) >>> (17 - 14))
+ | ((in[46 + inpos]) << 14)
+ | ((in[47 + inpos]) << 31)
+ | ((in[48 + inpos]) << 48);
+ out[13 + outpos] = ((in[48 + inpos]) >>> (17 - 1))
+ | ((in[49 + inpos]) << 1)
+ | ((in[50 + inpos]) << 18)
+ | ((in[51 + inpos]) << 35)
+ | ((in[52 + inpos]) << 52);
+ out[14 + outpos] = ((in[52 + inpos]) >>> (17 - 5))
+ | ((in[53 + inpos]) << 5)
+ | ((in[54 + inpos]) << 22)
+ | ((in[55 + inpos]) << 39)
+ | ((in[56 + inpos]) << 56);
+ out[15 + outpos] = ((in[56 + inpos]) >>> (17 - 9))
+ | ((in[57 + inpos]) << 9)
+ | ((in[58 + inpos]) << 26)
+ | ((in[59 + inpos]) << 43)
+ | ((in[60 + inpos]) << 60);
+ out[16 + outpos] = ((in[60 + inpos]) >>> (17 - 13))
+ | ((in[61 + inpos]) << 13)
+ | ((in[62 + inpos]) << 30)
+ | ((in[63 + inpos]) << 47);
+ }
+
+ protected static void fastpackwithoutmask18(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 18)
+ | ((in[2 + inpos]) << 36)
+ | ((in[3 + inpos]) << 54);
+ out[1 + outpos] = ((in[3 + inpos]) >>> (18 - 8))
+ | ((in[4 + inpos]) << 8)
+ | ((in[5 + inpos]) << 26)
+ | ((in[6 + inpos]) << 44)
+ | ((in[7 + inpos]) << 62);
+ out[2 + outpos] = ((in[7 + inpos]) >>> (18 - 16))
+ | ((in[8 + inpos]) << 16)
+ | ((in[9 + inpos]) << 34)
+ | ((in[10 + inpos]) << 52);
+ out[3 + outpos] = ((in[10 + inpos]) >>> (18 - 6))
+ | ((in[11 + inpos]) << 6)
+ | ((in[12 + inpos]) << 24)
+ | ((in[13 + inpos]) << 42)
+ | ((in[14 + inpos]) << 60);
+ out[4 + outpos] = ((in[14 + inpos]) >>> (18 - 14))
+ | ((in[15 + inpos]) << 14)
+ | ((in[16 + inpos]) << 32)
+ | ((in[17 + inpos]) << 50);
+ out[5 + outpos] = ((in[17 + inpos]) >>> (18 - 4))
+ | ((in[18 + inpos]) << 4)
+ | ((in[19 + inpos]) << 22)
+ | ((in[20 + inpos]) << 40)
+ | ((in[21 + inpos]) << 58);
+ out[6 + outpos] = ((in[21 + inpos]) >>> (18 - 12))
+ | ((in[22 + inpos]) << 12)
+ | ((in[23 + inpos]) << 30)
+ | ((in[24 + inpos]) << 48);
+ out[7 + outpos] = ((in[24 + inpos]) >>> (18 - 2))
+ | ((in[25 + inpos]) << 2)
+ | ((in[26 + inpos]) << 20)
+ | ((in[27 + inpos]) << 38)
+ | ((in[28 + inpos]) << 56);
+ out[8 + outpos] = ((in[28 + inpos]) >>> (18 - 10))
+ | ((in[29 + inpos]) << 10)
+ | ((in[30 + inpos]) << 28)
+ | ((in[31 + inpos]) << 46);
+ out[9 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 18)
+ | ((in[34 + inpos]) << 36)
+ | ((in[35 + inpos]) << 54);
+ out[10 + outpos] = ((in[35 + inpos]) >>> (18 - 8))
+ | ((in[36 + inpos]) << 8)
+ | ((in[37 + inpos]) << 26)
+ | ((in[38 + inpos]) << 44)
+ | ((in[39 + inpos]) << 62);
+ out[11 + outpos] = ((in[39 + inpos]) >>> (18 - 16))
+ | ((in[40 + inpos]) << 16)
+ | ((in[41 + inpos]) << 34)
+ | ((in[42 + inpos]) << 52);
+ out[12 + outpos] = ((in[42 + inpos]) >>> (18 - 6))
+ | ((in[43 + inpos]) << 6)
+ | ((in[44 + inpos]) << 24)
+ | ((in[45 + inpos]) << 42)
+ | ((in[46 + inpos]) << 60);
+ out[13 + outpos] = ((in[46 + inpos]) >>> (18 - 14))
+ | ((in[47 + inpos]) << 14)
+ | ((in[48 + inpos]) << 32)
+ | ((in[49 + inpos]) << 50);
+ out[14 + outpos] = ((in[49 + inpos]) >>> (18 - 4))
+ | ((in[50 + inpos]) << 4)
+ | ((in[51 + inpos]) << 22)
+ | ((in[52 + inpos]) << 40)
+ | ((in[53 + inpos]) << 58);
+ out[15 + outpos] = ((in[53 + inpos]) >>> (18 - 12))
+ | ((in[54 + inpos]) << 12)
+ | ((in[55 + inpos]) << 30)
+ | ((in[56 + inpos]) << 48);
+ out[16 + outpos] = ((in[56 + inpos]) >>> (18 - 2))
+ | ((in[57 + inpos]) << 2)
+ | ((in[58 + inpos]) << 20)
+ | ((in[59 + inpos]) << 38)
+ | ((in[60 + inpos]) << 56);
+ out[17 + outpos] = ((in[60 + inpos]) >>> (18 - 10))
+ | ((in[61 + inpos]) << 10)
+ | ((in[62 + inpos]) << 28)
+ | ((in[63 + inpos]) << 46);
+ }
+
+ protected static void fastpackwithoutmask19(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 19)
+ | ((in[2 + inpos]) << 38)
+ | ((in[3 + inpos]) << 57);
+ out[1 + outpos] = ((in[3 + inpos]) >>> (19 - 12))
+ | ((in[4 + inpos]) << 12)
+ | ((in[5 + inpos]) << 31)
+ | ((in[6 + inpos]) << 50);
+ out[2 + outpos] = ((in[6 + inpos]) >>> (19 - 5))
+ | ((in[7 + inpos]) << 5)
+ | ((in[8 + inpos]) << 24)
+ | ((in[9 + inpos]) << 43)
+ | ((in[10 + inpos]) << 62);
+ out[3 + outpos] = ((in[10 + inpos]) >>> (19 - 17))
+ | ((in[11 + inpos]) << 17)
+ | ((in[12 + inpos]) << 36)
+ | ((in[13 + inpos]) << 55);
+ out[4 + outpos] = ((in[13 + inpos]) >>> (19 - 10))
+ | ((in[14 + inpos]) << 10)
+ | ((in[15 + inpos]) << 29)
+ | ((in[16 + inpos]) << 48);
+ out[5 + outpos] = ((in[16 + inpos]) >>> (19 - 3))
+ | ((in[17 + inpos]) << 3)
+ | ((in[18 + inpos]) << 22)
+ | ((in[19 + inpos]) << 41)
+ | ((in[20 + inpos]) << 60);
+ out[6 + outpos] = ((in[20 + inpos]) >>> (19 - 15))
+ | ((in[21 + inpos]) << 15)
+ | ((in[22 + inpos]) << 34)
+ | ((in[23 + inpos]) << 53);
+ out[7 + outpos] = ((in[23 + inpos]) >>> (19 - 8))
+ | ((in[24 + inpos]) << 8)
+ | ((in[25 + inpos]) << 27)
+ | ((in[26 + inpos]) << 46);
+ out[8 + outpos] = ((in[26 + inpos]) >>> (19 - 1))
+ | ((in[27 + inpos]) << 1)
+ | ((in[28 + inpos]) << 20)
+ | ((in[29 + inpos]) << 39)
+ | ((in[30 + inpos]) << 58);
+ out[9 + outpos] = ((in[30 + inpos]) >>> (19 - 13))
+ | ((in[31 + inpos]) << 13)
+ | ((in[32 + inpos]) << 32)
+ | ((in[33 + inpos]) << 51);
+ out[10 + outpos] = ((in[33 + inpos]) >>> (19 - 6))
+ | ((in[34 + inpos]) << 6)
+ | ((in[35 + inpos]) << 25)
+ | ((in[36 + inpos]) << 44)
+ | ((in[37 + inpos]) << 63);
+ out[11 + outpos] = ((in[37 + inpos]) >>> (19 - 18))
+ | ((in[38 + inpos]) << 18)
+ | ((in[39 + inpos]) << 37)
+ | ((in[40 + inpos]) << 56);
+ out[12 + outpos] = ((in[40 + inpos]) >>> (19 - 11))
+ | ((in[41 + inpos]) << 11)
+ | ((in[42 + inpos]) << 30)
+ | ((in[43 + inpos]) << 49);
+ out[13 + outpos] = ((in[43 + inpos]) >>> (19 - 4))
+ | ((in[44 + inpos]) << 4)
+ | ((in[45 + inpos]) << 23)
+ | ((in[46 + inpos]) << 42)
+ | ((in[47 + inpos]) << 61);
+ out[14 + outpos] = ((in[47 + inpos]) >>> (19 - 16))
+ | ((in[48 + inpos]) << 16)
+ | ((in[49 + inpos]) << 35)
+ | ((in[50 + inpos]) << 54);
+ out[15 + outpos] = ((in[50 + inpos]) >>> (19 - 9))
+ | ((in[51 + inpos]) << 9)
+ | ((in[52 + inpos]) << 28)
+ | ((in[53 + inpos]) << 47);
+ out[16 + outpos] = ((in[53 + inpos]) >>> (19 - 2))
+ | ((in[54 + inpos]) << 2)
+ | ((in[55 + inpos]) << 21)
+ | ((in[56 + inpos]) << 40)
+ | ((in[57 + inpos]) << 59);
+ out[17 + outpos] = ((in[57 + inpos]) >>> (19 - 14))
+ | ((in[58 + inpos]) << 14)
+ | ((in[59 + inpos]) << 33)
+ | ((in[60 + inpos]) << 52);
+ out[18 + outpos] = ((in[60 + inpos]) >>> (19 - 7))
+ | ((in[61 + inpos]) << 7)
+ | ((in[62 + inpos]) << 26)
+ | ((in[63 + inpos]) << 45);
+ }
+
+ protected static void fastpackwithoutmask20(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 20)
+ | ((in[2 + inpos]) << 40)
+ | ((in[3 + inpos]) << 60);
+ out[1 + outpos] = ((in[3 + inpos]) >>> (20 - 16))
+ | ((in[4 + inpos]) << 16)
+ | ((in[5 + inpos]) << 36)
+ | ((in[6 + inpos]) << 56);
+ out[2 + outpos] = ((in[6 + inpos]) >>> (20 - 12))
+ | ((in[7 + inpos]) << 12)
+ | ((in[8 + inpos]) << 32)
+ | ((in[9 + inpos]) << 52);
+ out[3 + outpos] = ((in[9 + inpos]) >>> (20 - 8))
+ | ((in[10 + inpos]) << 8)
+ | ((in[11 + inpos]) << 28)
+ | ((in[12 + inpos]) << 48);
+ out[4 + outpos] = ((in[12 + inpos]) >>> (20 - 4))
+ | ((in[13 + inpos]) << 4)
+ | ((in[14 + inpos]) << 24)
+ | ((in[15 + inpos]) << 44);
+ out[5 + outpos] = in[16 + inpos]
+ | ((in[17 + inpos]) << 20)
+ | ((in[18 + inpos]) << 40)
+ | ((in[19 + inpos]) << 60);
+ out[6 + outpos] = ((in[19 + inpos]) >>> (20 - 16))
+ | ((in[20 + inpos]) << 16)
+ | ((in[21 + inpos]) << 36)
+ | ((in[22 + inpos]) << 56);
+ out[7 + outpos] = ((in[22 + inpos]) >>> (20 - 12))
+ | ((in[23 + inpos]) << 12)
+ | ((in[24 + inpos]) << 32)
+ | ((in[25 + inpos]) << 52);
+ out[8 + outpos] = ((in[25 + inpos]) >>> (20 - 8))
+ | ((in[26 + inpos]) << 8)
+ | ((in[27 + inpos]) << 28)
+ | ((in[28 + inpos]) << 48);
+ out[9 + outpos] = ((in[28 + inpos]) >>> (20 - 4))
+ | ((in[29 + inpos]) << 4)
+ | ((in[30 + inpos]) << 24)
+ | ((in[31 + inpos]) << 44);
+ out[10 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 20)
+ | ((in[34 + inpos]) << 40)
+ | ((in[35 + inpos]) << 60);
+ out[11 + outpos] = ((in[35 + inpos]) >>> (20 - 16))
+ | ((in[36 + inpos]) << 16)
+ | ((in[37 + inpos]) << 36)
+ | ((in[38 + inpos]) << 56);
+ out[12 + outpos] = ((in[38 + inpos]) >>> (20 - 12))
+ | ((in[39 + inpos]) << 12)
+ | ((in[40 + inpos]) << 32)
+ | ((in[41 + inpos]) << 52);
+ out[13 + outpos] = ((in[41 + inpos]) >>> (20 - 8))
+ | ((in[42 + inpos]) << 8)
+ | ((in[43 + inpos]) << 28)
+ | ((in[44 + inpos]) << 48);
+ out[14 + outpos] = ((in[44 + inpos]) >>> (20 - 4))
+ | ((in[45 + inpos]) << 4)
+ | ((in[46 + inpos]) << 24)
+ | ((in[47 + inpos]) << 44);
+ out[15 + outpos] = in[48 + inpos]
+ | ((in[49 + inpos]) << 20)
+ | ((in[50 + inpos]) << 40)
+ | ((in[51 + inpos]) << 60);
+ out[16 + outpos] = ((in[51 + inpos]) >>> (20 - 16))
+ | ((in[52 + inpos]) << 16)
+ | ((in[53 + inpos]) << 36)
+ | ((in[54 + inpos]) << 56);
+ out[17 + outpos] = ((in[54 + inpos]) >>> (20 - 12))
+ | ((in[55 + inpos]) << 12)
+ | ((in[56 + inpos]) << 32)
+ | ((in[57 + inpos]) << 52);
+ out[18 + outpos] = ((in[57 + inpos]) >>> (20 - 8))
+ | ((in[58 + inpos]) << 8)
+ | ((in[59 + inpos]) << 28)
+ | ((in[60 + inpos]) << 48);
+ out[19 + outpos] = ((in[60 + inpos]) >>> (20 - 4))
+ | ((in[61 + inpos]) << 4)
+ | ((in[62 + inpos]) << 24)
+ | ((in[63 + inpos]) << 44);
+ }
+
+ protected static void fastpackwithoutmask21(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 21)
+ | ((in[2 + inpos]) << 42)
+ | ((in[3 + inpos]) << 63);
+ out[1 + outpos] = ((in[3 + inpos]) >>> (21 - 20))
+ | ((in[4 + inpos]) << 20)
+ | ((in[5 + inpos]) << 41)
+ | ((in[6 + inpos]) << 62);
+ out[2 + outpos] = ((in[6 + inpos]) >>> (21 - 19))
+ | ((in[7 + inpos]) << 19)
+ | ((in[8 + inpos]) << 40)
+ | ((in[9 + inpos]) << 61);
+ out[3 + outpos] = ((in[9 + inpos]) >>> (21 - 18))
+ | ((in[10 + inpos]) << 18)
+ | ((in[11 + inpos]) << 39)
+ | ((in[12 + inpos]) << 60);
+ out[4 + outpos] = ((in[12 + inpos]) >>> (21 - 17))
+ | ((in[13 + inpos]) << 17)
+ | ((in[14 + inpos]) << 38)
+ | ((in[15 + inpos]) << 59);
+ out[5 + outpos] = ((in[15 + inpos]) >>> (21 - 16))
+ | ((in[16 + inpos]) << 16)
+ | ((in[17 + inpos]) << 37)
+ | ((in[18 + inpos]) << 58);
+ out[6 + outpos] = ((in[18 + inpos]) >>> (21 - 15))
+ | ((in[19 + inpos]) << 15)
+ | ((in[20 + inpos]) << 36)
+ | ((in[21 + inpos]) << 57);
+ out[7 + outpos] = ((in[21 + inpos]) >>> (21 - 14))
+ | ((in[22 + inpos]) << 14)
+ | ((in[23 + inpos]) << 35)
+ | ((in[24 + inpos]) << 56);
+ out[8 + outpos] = ((in[24 + inpos]) >>> (21 - 13))
+ | ((in[25 + inpos]) << 13)
+ | ((in[26 + inpos]) << 34)
+ | ((in[27 + inpos]) << 55);
+ out[9 + outpos] = ((in[27 + inpos]) >>> (21 - 12))
+ | ((in[28 + inpos]) << 12)
+ | ((in[29 + inpos]) << 33)
+ | ((in[30 + inpos]) << 54);
+ out[10 + outpos] = ((in[30 + inpos]) >>> (21 - 11))
+ | ((in[31 + inpos]) << 11)
+ | ((in[32 + inpos]) << 32)
+ | ((in[33 + inpos]) << 53);
+ out[11 + outpos] = ((in[33 + inpos]) >>> (21 - 10))
+ | ((in[34 + inpos]) << 10)
+ | ((in[35 + inpos]) << 31)
+ | ((in[36 + inpos]) << 52);
+ out[12 + outpos] = ((in[36 + inpos]) >>> (21 - 9))
+ | ((in[37 + inpos]) << 9)
+ | ((in[38 + inpos]) << 30)
+ | ((in[39 + inpos]) << 51);
+ out[13 + outpos] = ((in[39 + inpos]) >>> (21 - 8))
+ | ((in[40 + inpos]) << 8)
+ | ((in[41 + inpos]) << 29)
+ | ((in[42 + inpos]) << 50);
+ out[14 + outpos] = ((in[42 + inpos]) >>> (21 - 7))
+ | ((in[43 + inpos]) << 7)
+ | ((in[44 + inpos]) << 28)
+ | ((in[45 + inpos]) << 49);
+ out[15 + outpos] = ((in[45 + inpos]) >>> (21 - 6))
+ | ((in[46 + inpos]) << 6)
+ | ((in[47 + inpos]) << 27)
+ | ((in[48 + inpos]) << 48);
+ out[16 + outpos] = ((in[48 + inpos]) >>> (21 - 5))
+ | ((in[49 + inpos]) << 5)
+ | ((in[50 + inpos]) << 26)
+ | ((in[51 + inpos]) << 47);
+ out[17 + outpos] = ((in[51 + inpos]) >>> (21 - 4))
+ | ((in[52 + inpos]) << 4)
+ | ((in[53 + inpos]) << 25)
+ | ((in[54 + inpos]) << 46);
+ out[18 + outpos] = ((in[54 + inpos]) >>> (21 - 3))
+ | ((in[55 + inpos]) << 3)
+ | ((in[56 + inpos]) << 24)
+ | ((in[57 + inpos]) << 45);
+ out[19 + outpos] = ((in[57 + inpos]) >>> (21 - 2))
+ | ((in[58 + inpos]) << 2)
+ | ((in[59 + inpos]) << 23)
+ | ((in[60 + inpos]) << 44);
+ out[20 + outpos] = ((in[60 + inpos]) >>> (21 - 1))
+ | ((in[61 + inpos]) << 1)
+ | ((in[62 + inpos]) << 22)
+ | ((in[63 + inpos]) << 43);
+ }
+
+ protected static void fastpackwithoutmask22(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 22)
+ | ((in[2 + inpos]) << 44);
+ out[1 + outpos] = ((in[2 + inpos]) >>> (22 - 2))
+ | ((in[3 + inpos]) << 2)
+ | ((in[4 + inpos]) << 24)
+ | ((in[5 + inpos]) << 46);
+ out[2 + outpos] = ((in[5 + inpos]) >>> (22 - 4))
+ | ((in[6 + inpos]) << 4)
+ | ((in[7 + inpos]) << 26)
+ | ((in[8 + inpos]) << 48);
+ out[3 + outpos] = ((in[8 + inpos]) >>> (22 - 6))
+ | ((in[9 + inpos]) << 6)
+ | ((in[10 + inpos]) << 28)
+ | ((in[11 + inpos]) << 50);
+ out[4 + outpos] = ((in[11 + inpos]) >>> (22 - 8))
+ | ((in[12 + inpos]) << 8)
+ | ((in[13 + inpos]) << 30)
+ | ((in[14 + inpos]) << 52);
+ out[5 + outpos] = ((in[14 + inpos]) >>> (22 - 10))
+ | ((in[15 + inpos]) << 10)
+ | ((in[16 + inpos]) << 32)
+ | ((in[17 + inpos]) << 54);
+ out[6 + outpos] = ((in[17 + inpos]) >>> (22 - 12))
+ | ((in[18 + inpos]) << 12)
+ | ((in[19 + inpos]) << 34)
+ | ((in[20 + inpos]) << 56);
+ out[7 + outpos] = ((in[20 + inpos]) >>> (22 - 14))
+ | ((in[21 + inpos]) << 14)
+ | ((in[22 + inpos]) << 36)
+ | ((in[23 + inpos]) << 58);
+ out[8 + outpos] = ((in[23 + inpos]) >>> (22 - 16))
+ | ((in[24 + inpos]) << 16)
+ | ((in[25 + inpos]) << 38)
+ | ((in[26 + inpos]) << 60);
+ out[9 + outpos] = ((in[26 + inpos]) >>> (22 - 18))
+ | ((in[27 + inpos]) << 18)
+ | ((in[28 + inpos]) << 40)
+ | ((in[29 + inpos]) << 62);
+ out[10 + outpos] = ((in[29 + inpos]) >>> (22 - 20))
+ | ((in[30 + inpos]) << 20)
+ | ((in[31 + inpos]) << 42);
+ out[11 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 22)
+ | ((in[34 + inpos]) << 44);
+ out[12 + outpos] = ((in[34 + inpos]) >>> (22 - 2))
+ | ((in[35 + inpos]) << 2)
+ | ((in[36 + inpos]) << 24)
+ | ((in[37 + inpos]) << 46);
+ out[13 + outpos] = ((in[37 + inpos]) >>> (22 - 4))
+ | ((in[38 + inpos]) << 4)
+ | ((in[39 + inpos]) << 26)
+ | ((in[40 + inpos]) << 48);
+ out[14 + outpos] = ((in[40 + inpos]) >>> (22 - 6))
+ | ((in[41 + inpos]) << 6)
+ | ((in[42 + inpos]) << 28)
+ | ((in[43 + inpos]) << 50);
+ out[15 + outpos] = ((in[43 + inpos]) >>> (22 - 8))
+ | ((in[44 + inpos]) << 8)
+ | ((in[45 + inpos]) << 30)
+ | ((in[46 + inpos]) << 52);
+ out[16 + outpos] = ((in[46 + inpos]) >>> (22 - 10))
+ | ((in[47 + inpos]) << 10)
+ | ((in[48 + inpos]) << 32)
+ | ((in[49 + inpos]) << 54);
+ out[17 + outpos] = ((in[49 + inpos]) >>> (22 - 12))
+ | ((in[50 + inpos]) << 12)
+ | ((in[51 + inpos]) << 34)
+ | ((in[52 + inpos]) << 56);
+ out[18 + outpos] = ((in[52 + inpos]) >>> (22 - 14))
+ | ((in[53 + inpos]) << 14)
+ | ((in[54 + inpos]) << 36)
+ | ((in[55 + inpos]) << 58);
+ out[19 + outpos] = ((in[55 + inpos]) >>> (22 - 16))
+ | ((in[56 + inpos]) << 16)
+ | ((in[57 + inpos]) << 38)
+ | ((in[58 + inpos]) << 60);
+ out[20 + outpos] = ((in[58 + inpos]) >>> (22 - 18))
+ | ((in[59 + inpos]) << 18)
+ | ((in[60 + inpos]) << 40)
+ | ((in[61 + inpos]) << 62);
+ out[21 + outpos] = ((in[61 + inpos]) >>> (22 - 20))
+ | ((in[62 + inpos]) << 20)
+ | ((in[63 + inpos]) << 42);
+ }
+
+ protected static void fastpackwithoutmask23(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 23)
+ | ((in[2 + inpos]) << 46);
+ out[1 + outpos] = ((in[2 + inpos]) >>> (23 - 5))
+ | ((in[3 + inpos]) << 5)
+ | ((in[4 + inpos]) << 28)
+ | ((in[5 + inpos]) << 51);
+ out[2 + outpos] = ((in[5 + inpos]) >>> (23 - 10))
+ | ((in[6 + inpos]) << 10)
+ | ((in[7 + inpos]) << 33)
+ | ((in[8 + inpos]) << 56);
+ out[3 + outpos] = ((in[8 + inpos]) >>> (23 - 15))
+ | ((in[9 + inpos]) << 15)
+ | ((in[10 + inpos]) << 38)
+ | ((in[11 + inpos]) << 61);
+ out[4 + outpos] = ((in[11 + inpos]) >>> (23 - 20))
+ | ((in[12 + inpos]) << 20)
+ | ((in[13 + inpos]) << 43);
+ out[5 + outpos] = ((in[13 + inpos]) >>> (23 - 2))
+ | ((in[14 + inpos]) << 2)
+ | ((in[15 + inpos]) << 25)
+ | ((in[16 + inpos]) << 48);
+ out[6 + outpos] = ((in[16 + inpos]) >>> (23 - 7))
+ | ((in[17 + inpos]) << 7)
+ | ((in[18 + inpos]) << 30)
+ | ((in[19 + inpos]) << 53);
+ out[7 + outpos] = ((in[19 + inpos]) >>> (23 - 12))
+ | ((in[20 + inpos]) << 12)
+ | ((in[21 + inpos]) << 35)
+ | ((in[22 + inpos]) << 58);
+ out[8 + outpos] = ((in[22 + inpos]) >>> (23 - 17))
+ | ((in[23 + inpos]) << 17)
+ | ((in[24 + inpos]) << 40)
+ | ((in[25 + inpos]) << 63);
+ out[9 + outpos] = ((in[25 + inpos]) >>> (23 - 22))
+ | ((in[26 + inpos]) << 22)
+ | ((in[27 + inpos]) << 45);
+ out[10 + outpos] = ((in[27 + inpos]) >>> (23 - 4))
+ | ((in[28 + inpos]) << 4)
+ | ((in[29 + inpos]) << 27)
+ | ((in[30 + inpos]) << 50);
+ out[11 + outpos] = ((in[30 + inpos]) >>> (23 - 9))
+ | ((in[31 + inpos]) << 9)
+ | ((in[32 + inpos]) << 32)
+ | ((in[33 + inpos]) << 55);
+ out[12 + outpos] = ((in[33 + inpos]) >>> (23 - 14))
+ | ((in[34 + inpos]) << 14)
+ | ((in[35 + inpos]) << 37)
+ | ((in[36 + inpos]) << 60);
+ out[13 + outpos] = ((in[36 + inpos]) >>> (23 - 19))
+ | ((in[37 + inpos]) << 19)
+ | ((in[38 + inpos]) << 42);
+ out[14 + outpos] = ((in[38 + inpos]) >>> (23 - 1))
+ | ((in[39 + inpos]) << 1)
+ | ((in[40 + inpos]) << 24)
+ | ((in[41 + inpos]) << 47);
+ out[15 + outpos] = ((in[41 + inpos]) >>> (23 - 6))
+ | ((in[42 + inpos]) << 6)
+ | ((in[43 + inpos]) << 29)
+ | ((in[44 + inpos]) << 52);
+ out[16 + outpos] = ((in[44 + inpos]) >>> (23 - 11))
+ | ((in[45 + inpos]) << 11)
+ | ((in[46 + inpos]) << 34)
+ | ((in[47 + inpos]) << 57);
+ out[17 + outpos] = ((in[47 + inpos]) >>> (23 - 16))
+ | ((in[48 + inpos]) << 16)
+ | ((in[49 + inpos]) << 39)
+ | ((in[50 + inpos]) << 62);
+ out[18 + outpos] = ((in[50 + inpos]) >>> (23 - 21))
+ | ((in[51 + inpos]) << 21)
+ | ((in[52 + inpos]) << 44);
+ out[19 + outpos] = ((in[52 + inpos]) >>> (23 - 3))
+ | ((in[53 + inpos]) << 3)
+ | ((in[54 + inpos]) << 26)
+ | ((in[55 + inpos]) << 49);
+ out[20 + outpos] = ((in[55 + inpos]) >>> (23 - 8))
+ | ((in[56 + inpos]) << 8)
+ | ((in[57 + inpos]) << 31)
+ | ((in[58 + inpos]) << 54);
+ out[21 + outpos] = ((in[58 + inpos]) >>> (23 - 13))
+ | ((in[59 + inpos]) << 13)
+ | ((in[60 + inpos]) << 36)
+ | ((in[61 + inpos]) << 59);
+ out[22 + outpos] = ((in[61 + inpos]) >>> (23 - 18))
+ | ((in[62 + inpos]) << 18)
+ | ((in[63 + inpos]) << 41);
+ }
+
+ protected static void fastpackwithoutmask24(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 24)
+ | ((in[2 + inpos]) << 48);
+ out[1 + outpos] = ((in[2 + inpos]) >>> (24 - 8))
+ | ((in[3 + inpos]) << 8)
+ | ((in[4 + inpos]) << 32)
+ | ((in[5 + inpos]) << 56);
+ out[2 + outpos] = ((in[5 + inpos]) >>> (24 - 16))
+ | ((in[6 + inpos]) << 16)
+ | ((in[7 + inpos]) << 40);
+ out[3 + outpos] = in[8 + inpos]
+ | ((in[9 + inpos]) << 24)
+ | ((in[10 + inpos]) << 48);
+ out[4 + outpos] = ((in[10 + inpos]) >>> (24 - 8))
+ | ((in[11 + inpos]) << 8)
+ | ((in[12 + inpos]) << 32)
+ | ((in[13 + inpos]) << 56);
+ out[5 + outpos] = ((in[13 + inpos]) >>> (24 - 16))
+ | ((in[14 + inpos]) << 16)
+ | ((in[15 + inpos]) << 40);
+ out[6 + outpos] = in[16 + inpos]
+ | ((in[17 + inpos]) << 24)
+ | ((in[18 + inpos]) << 48);
+ out[7 + outpos] = ((in[18 + inpos]) >>> (24 - 8))
+ | ((in[19 + inpos]) << 8)
+ | ((in[20 + inpos]) << 32)
+ | ((in[21 + inpos]) << 56);
+ out[8 + outpos] = ((in[21 + inpos]) >>> (24 - 16))
+ | ((in[22 + inpos]) << 16)
+ | ((in[23 + inpos]) << 40);
+ out[9 + outpos] = in[24 + inpos]
+ | ((in[25 + inpos]) << 24)
+ | ((in[26 + inpos]) << 48);
+ out[10 + outpos] = ((in[26 + inpos]) >>> (24 - 8))
+ | ((in[27 + inpos]) << 8)
+ | ((in[28 + inpos]) << 32)
+ | ((in[29 + inpos]) << 56);
+ out[11 + outpos] = ((in[29 + inpos]) >>> (24 - 16))
+ | ((in[30 + inpos]) << 16)
+ | ((in[31 + inpos]) << 40);
+ out[12 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 24)
+ | ((in[34 + inpos]) << 48);
+ out[13 + outpos] = ((in[34 + inpos]) >>> (24 - 8))
+ | ((in[35 + inpos]) << 8)
+ | ((in[36 + inpos]) << 32)
+ | ((in[37 + inpos]) << 56);
+ out[14 + outpos] = ((in[37 + inpos]) >>> (24 - 16))
+ | ((in[38 + inpos]) << 16)
+ | ((in[39 + inpos]) << 40);
+ out[15 + outpos] = in[40 + inpos]
+ | ((in[41 + inpos]) << 24)
+ | ((in[42 + inpos]) << 48);
+ out[16 + outpos] = ((in[42 + inpos]) >>> (24 - 8))
+ | ((in[43 + inpos]) << 8)
+ | ((in[44 + inpos]) << 32)
+ | ((in[45 + inpos]) << 56);
+ out[17 + outpos] = ((in[45 + inpos]) >>> (24 - 16))
+ | ((in[46 + inpos]) << 16)
+ | ((in[47 + inpos]) << 40);
+ out[18 + outpos] = in[48 + inpos]
+ | ((in[49 + inpos]) << 24)
+ | ((in[50 + inpos]) << 48);
+ out[19 + outpos] = ((in[50 + inpos]) >>> (24 - 8))
+ | ((in[51 + inpos]) << 8)
+ | ((in[52 + inpos]) << 32)
+ | ((in[53 + inpos]) << 56);
+ out[20 + outpos] = ((in[53 + inpos]) >>> (24 - 16))
+ | ((in[54 + inpos]) << 16)
+ | ((in[55 + inpos]) << 40);
+ out[21 + outpos] = in[56 + inpos]
+ | ((in[57 + inpos]) << 24)
+ | ((in[58 + inpos]) << 48);
+ out[22 + outpos] = ((in[58 + inpos]) >>> (24 - 8))
+ | ((in[59 + inpos]) << 8)
+ | ((in[60 + inpos]) << 32)
+ | ((in[61 + inpos]) << 56);
+ out[23 + outpos] = ((in[61 + inpos]) >>> (24 - 16))
+ | ((in[62 + inpos]) << 16)
+ | ((in[63 + inpos]) << 40);
+ }
+
+ protected static void fastpackwithoutmask25(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 25)
+ | ((in[2 + inpos]) << 50);
+ out[1 + outpos] = ((in[2 + inpos]) >>> (25 - 11))
+ | ((in[3 + inpos]) << 11)
+ | ((in[4 + inpos]) << 36)
+ | ((in[5 + inpos]) << 61);
+ out[2 + outpos] = ((in[5 + inpos]) >>> (25 - 22))
+ | ((in[6 + inpos]) << 22)
+ | ((in[7 + inpos]) << 47);
+ out[3 + outpos] = ((in[7 + inpos]) >>> (25 - 8))
+ | ((in[8 + inpos]) << 8)
+ | ((in[9 + inpos]) << 33)
+ | ((in[10 + inpos]) << 58);
+ out[4 + outpos] = ((in[10 + inpos]) >>> (25 - 19))
+ | ((in[11 + inpos]) << 19)
+ | ((in[12 + inpos]) << 44);
+ out[5 + outpos] = ((in[12 + inpos]) >>> (25 - 5))
+ | ((in[13 + inpos]) << 5)
+ | ((in[14 + inpos]) << 30)
+ | ((in[15 + inpos]) << 55);
+ out[6 + outpos] = ((in[15 + inpos]) >>> (25 - 16))
+ | ((in[16 + inpos]) << 16)
+ | ((in[17 + inpos]) << 41);
+ out[7 + outpos] = ((in[17 + inpos]) >>> (25 - 2))
+ | ((in[18 + inpos]) << 2)
+ | ((in[19 + inpos]) << 27)
+ | ((in[20 + inpos]) << 52);
+ out[8 + outpos] = ((in[20 + inpos]) >>> (25 - 13))
+ | ((in[21 + inpos]) << 13)
+ | ((in[22 + inpos]) << 38)
+ | ((in[23 + inpos]) << 63);
+ out[9 + outpos] = ((in[23 + inpos]) >>> (25 - 24))
+ | ((in[24 + inpos]) << 24)
+ | ((in[25 + inpos]) << 49);
+ out[10 + outpos] = ((in[25 + inpos]) >>> (25 - 10))
+ | ((in[26 + inpos]) << 10)
+ | ((in[27 + inpos]) << 35)
+ | ((in[28 + inpos]) << 60);
+ out[11 + outpos] = ((in[28 + inpos]) >>> (25 - 21))
+ | ((in[29 + inpos]) << 21)
+ | ((in[30 + inpos]) << 46);
+ out[12 + outpos] = ((in[30 + inpos]) >>> (25 - 7))
+ | ((in[31 + inpos]) << 7)
+ | ((in[32 + inpos]) << 32)
+ | ((in[33 + inpos]) << 57);
+ out[13 + outpos] = ((in[33 + inpos]) >>> (25 - 18))
+ | ((in[34 + inpos]) << 18)
+ | ((in[35 + inpos]) << 43);
+ out[14 + outpos] = ((in[35 + inpos]) >>> (25 - 4))
+ | ((in[36 + inpos]) << 4)
+ | ((in[37 + inpos]) << 29)
+ | ((in[38 + inpos]) << 54);
+ out[15 + outpos] = ((in[38 + inpos]) >>> (25 - 15))
+ | ((in[39 + inpos]) << 15)
+ | ((in[40 + inpos]) << 40);
+ out[16 + outpos] = ((in[40 + inpos]) >>> (25 - 1))
+ | ((in[41 + inpos]) << 1)
+ | ((in[42 + inpos]) << 26)
+ | ((in[43 + inpos]) << 51);
+ out[17 + outpos] = ((in[43 + inpos]) >>> (25 - 12))
+ | ((in[44 + inpos]) << 12)
+ | ((in[45 + inpos]) << 37)
+ | ((in[46 + inpos]) << 62);
+ out[18 + outpos] = ((in[46 + inpos]) >>> (25 - 23))
+ | ((in[47 + inpos]) << 23)
+ | ((in[48 + inpos]) << 48);
+ out[19 + outpos] = ((in[48 + inpos]) >>> (25 - 9))
+ | ((in[49 + inpos]) << 9)
+ | ((in[50 + inpos]) << 34)
+ | ((in[51 + inpos]) << 59);
+ out[20 + outpos] = ((in[51 + inpos]) >>> (25 - 20))
+ | ((in[52 + inpos]) << 20)
+ | ((in[53 + inpos]) << 45);
+ out[21 + outpos] = ((in[53 + inpos]) >>> (25 - 6))
+ | ((in[54 + inpos]) << 6)
+ | ((in[55 + inpos]) << 31)
+ | ((in[56 + inpos]) << 56);
+ out[22 + outpos] = ((in[56 + inpos]) >>> (25 - 17))
+ | ((in[57 + inpos]) << 17)
+ | ((in[58 + inpos]) << 42);
+ out[23 + outpos] = ((in[58 + inpos]) >>> (25 - 3))
+ | ((in[59 + inpos]) << 3)
+ | ((in[60 + inpos]) << 28)
+ | ((in[61 + inpos]) << 53);
+ out[24 + outpos] = ((in[61 + inpos]) >>> (25 - 14))
+ | ((in[62 + inpos]) << 14)
+ | ((in[63 + inpos]) << 39);
+ }
+
+ protected static void fastpackwithoutmask26(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 26)
+ | ((in[2 + inpos]) << 52);
+ out[1 + outpos] = ((in[2 + inpos]) >>> (26 - 14))
+ | ((in[3 + inpos]) << 14)
+ | ((in[4 + inpos]) << 40);
+ out[2 + outpos] = ((in[4 + inpos]) >>> (26 - 2))
+ | ((in[5 + inpos]) << 2)
+ | ((in[6 + inpos]) << 28)
+ | ((in[7 + inpos]) << 54);
+ out[3 + outpos] = ((in[7 + inpos]) >>> (26 - 16))
+ | ((in[8 + inpos]) << 16)
+ | ((in[9 + inpos]) << 42);
+ out[4 + outpos] = ((in[9 + inpos]) >>> (26 - 4))
+ | ((in[10 + inpos]) << 4)
+ | ((in[11 + inpos]) << 30)
+ | ((in[12 + inpos]) << 56);
+ out[5 + outpos] = ((in[12 + inpos]) >>> (26 - 18))
+ | ((in[13 + inpos]) << 18)
+ | ((in[14 + inpos]) << 44);
+ out[6 + outpos] = ((in[14 + inpos]) >>> (26 - 6))
+ | ((in[15 + inpos]) << 6)
+ | ((in[16 + inpos]) << 32)
+ | ((in[17 + inpos]) << 58);
+ out[7 + outpos] = ((in[17 + inpos]) >>> (26 - 20))
+ | ((in[18 + inpos]) << 20)
+ | ((in[19 + inpos]) << 46);
+ out[8 + outpos] = ((in[19 + inpos]) >>> (26 - 8))
+ | ((in[20 + inpos]) << 8)
+ | ((in[21 + inpos]) << 34)
+ | ((in[22 + inpos]) << 60);
+ out[9 + outpos] = ((in[22 + inpos]) >>> (26 - 22))
+ | ((in[23 + inpos]) << 22)
+ | ((in[24 + inpos]) << 48);
+ out[10 + outpos] = ((in[24 + inpos]) >>> (26 - 10))
+ | ((in[25 + inpos]) << 10)
+ | ((in[26 + inpos]) << 36)
+ | ((in[27 + inpos]) << 62);
+ out[11 + outpos] = ((in[27 + inpos]) >>> (26 - 24))
+ | ((in[28 + inpos]) << 24)
+ | ((in[29 + inpos]) << 50);
+ out[12 + outpos] = ((in[29 + inpos]) >>> (26 - 12))
+ | ((in[30 + inpos]) << 12)
+ | ((in[31 + inpos]) << 38);
+ out[13 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 26)
+ | ((in[34 + inpos]) << 52);
+ out[14 + outpos] = ((in[34 + inpos]) >>> (26 - 14))
+ | ((in[35 + inpos]) << 14)
+ | ((in[36 + inpos]) << 40);
+ out[15 + outpos] = ((in[36 + inpos]) >>> (26 - 2))
+ | ((in[37 + inpos]) << 2)
+ | ((in[38 + inpos]) << 28)
+ | ((in[39 + inpos]) << 54);
+ out[16 + outpos] = ((in[39 + inpos]) >>> (26 - 16))
+ | ((in[40 + inpos]) << 16)
+ | ((in[41 + inpos]) << 42);
+ out[17 + outpos] = ((in[41 + inpos]) >>> (26 - 4))
+ | ((in[42 + inpos]) << 4)
+ | ((in[43 + inpos]) << 30)
+ | ((in[44 + inpos]) << 56);
+ out[18 + outpos] = ((in[44 + inpos]) >>> (26 - 18))
+ | ((in[45 + inpos]) << 18)
+ | ((in[46 + inpos]) << 44);
+ out[19 + outpos] = ((in[46 + inpos]) >>> (26 - 6))
+ | ((in[47 + inpos]) << 6)
+ | ((in[48 + inpos]) << 32)
+ | ((in[49 + inpos]) << 58);
+ out[20 + outpos] = ((in[49 + inpos]) >>> (26 - 20))
+ | ((in[50 + inpos]) << 20)
+ | ((in[51 + inpos]) << 46);
+ out[21 + outpos] = ((in[51 + inpos]) >>> (26 - 8))
+ | ((in[52 + inpos]) << 8)
+ | ((in[53 + inpos]) << 34)
+ | ((in[54 + inpos]) << 60);
+ out[22 + outpos] = ((in[54 + inpos]) >>> (26 - 22))
+ | ((in[55 + inpos]) << 22)
+ | ((in[56 + inpos]) << 48);
+ out[23 + outpos] = ((in[56 + inpos]) >>> (26 - 10))
+ | ((in[57 + inpos]) << 10)
+ | ((in[58 + inpos]) << 36)
+ | ((in[59 + inpos]) << 62);
+ out[24 + outpos] = ((in[59 + inpos]) >>> (26 - 24))
+ | ((in[60 + inpos]) << 24)
+ | ((in[61 + inpos]) << 50);
+ out[25 + outpos] = ((in[61 + inpos]) >>> (26 - 12))
+ | ((in[62 + inpos]) << 12)
+ | ((in[63 + inpos]) << 38);
+ }
+
+ protected static void fastpackwithoutmask27(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 27)
+ | ((in[2 + inpos]) << 54);
+ out[1 + outpos] = ((in[2 + inpos]) >>> (27 - 17))
+ | ((in[3 + inpos]) << 17)
+ | ((in[4 + inpos]) << 44);
+ out[2 + outpos] = ((in[4 + inpos]) >>> (27 - 7))
+ | ((in[5 + inpos]) << 7)
+ | ((in[6 + inpos]) << 34)
+ | ((in[7 + inpos]) << 61);
+ out[3 + outpos] = ((in[7 + inpos]) >>> (27 - 24))
+ | ((in[8 + inpos]) << 24)
+ | ((in[9 + inpos]) << 51);
+ out[4 + outpos] = ((in[9 + inpos]) >>> (27 - 14))
+ | ((in[10 + inpos]) << 14)
+ | ((in[11 + inpos]) << 41);
+ out[5 + outpos] = ((in[11 + inpos]) >>> (27 - 4))
+ | ((in[12 + inpos]) << 4)
+ | ((in[13 + inpos]) << 31)
+ | ((in[14 + inpos]) << 58);
+ out[6 + outpos] = ((in[14 + inpos]) >>> (27 - 21))
+ | ((in[15 + inpos]) << 21)
+ | ((in[16 + inpos]) << 48);
+ out[7 + outpos] = ((in[16 + inpos]) >>> (27 - 11))
+ | ((in[17 + inpos]) << 11)
+ | ((in[18 + inpos]) << 38);
+ out[8 + outpos] = ((in[18 + inpos]) >>> (27 - 1))
+ | ((in[19 + inpos]) << 1)
+ | ((in[20 + inpos]) << 28)
+ | ((in[21 + inpos]) << 55);
+ out[9 + outpos] = ((in[21 + inpos]) >>> (27 - 18))
+ | ((in[22 + inpos]) << 18)
+ | ((in[23 + inpos]) << 45);
+ out[10 + outpos] = ((in[23 + inpos]) >>> (27 - 8))
+ | ((in[24 + inpos]) << 8)
+ | ((in[25 + inpos]) << 35)
+ | ((in[26 + inpos]) << 62);
+ out[11 + outpos] = ((in[26 + inpos]) >>> (27 - 25))
+ | ((in[27 + inpos]) << 25)
+ | ((in[28 + inpos]) << 52);
+ out[12 + outpos] = ((in[28 + inpos]) >>> (27 - 15))
+ | ((in[29 + inpos]) << 15)
+ | ((in[30 + inpos]) << 42);
+ out[13 + outpos] = ((in[30 + inpos]) >>> (27 - 5))
+ | ((in[31 + inpos]) << 5)
+ | ((in[32 + inpos]) << 32)
+ | ((in[33 + inpos]) << 59);
+ out[14 + outpos] = ((in[33 + inpos]) >>> (27 - 22))
+ | ((in[34 + inpos]) << 22)
+ | ((in[35 + inpos]) << 49);
+ out[15 + outpos] = ((in[35 + inpos]) >>> (27 - 12))
+ | ((in[36 + inpos]) << 12)
+ | ((in[37 + inpos]) << 39);
+ out[16 + outpos] = ((in[37 + inpos]) >>> (27 - 2))
+ | ((in[38 + inpos]) << 2)
+ | ((in[39 + inpos]) << 29)
+ | ((in[40 + inpos]) << 56);
+ out[17 + outpos] = ((in[40 + inpos]) >>> (27 - 19))
+ | ((in[41 + inpos]) << 19)
+ | ((in[42 + inpos]) << 46);
+ out[18 + outpos] = ((in[42 + inpos]) >>> (27 - 9))
+ | ((in[43 + inpos]) << 9)
+ | ((in[44 + inpos]) << 36)
+ | ((in[45 + inpos]) << 63);
+ out[19 + outpos] = ((in[45 + inpos]) >>> (27 - 26))
+ | ((in[46 + inpos]) << 26)
+ | ((in[47 + inpos]) << 53);
+ out[20 + outpos] = ((in[47 + inpos]) >>> (27 - 16))
+ | ((in[48 + inpos]) << 16)
+ | ((in[49 + inpos]) << 43);
+ out[21 + outpos] = ((in[49 + inpos]) >>> (27 - 6))
+ | ((in[50 + inpos]) << 6)
+ | ((in[51 + inpos]) << 33)
+ | ((in[52 + inpos]) << 60);
+ out[22 + outpos] = ((in[52 + inpos]) >>> (27 - 23))
+ | ((in[53 + inpos]) << 23)
+ | ((in[54 + inpos]) << 50);
+ out[23 + outpos] = ((in[54 + inpos]) >>> (27 - 13))
+ | ((in[55 + inpos]) << 13)
+ | ((in[56 + inpos]) << 40);
+ out[24 + outpos] = ((in[56 + inpos]) >>> (27 - 3))
+ | ((in[57 + inpos]) << 3)
+ | ((in[58 + inpos]) << 30)
+ | ((in[59 + inpos]) << 57);
+ out[25 + outpos] = ((in[59 + inpos]) >>> (27 - 20))
+ | ((in[60 + inpos]) << 20)
+ | ((in[61 + inpos]) << 47);
+ out[26 + outpos] = ((in[61 + inpos]) >>> (27 - 10))
+ | ((in[62 + inpos]) << 10)
+ | ((in[63 + inpos]) << 37);
+ }
+
+ protected static void fastpackwithoutmask28(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 28)
+ | ((in[2 + inpos]) << 56);
+ out[1 + outpos] = ((in[2 + inpos]) >>> (28 - 20))
+ | ((in[3 + inpos]) << 20)
+ | ((in[4 + inpos]) << 48);
+ out[2 + outpos] = ((in[4 + inpos]) >>> (28 - 12))
+ | ((in[5 + inpos]) << 12)
+ | ((in[6 + inpos]) << 40);
+ out[3 + outpos] = ((in[6 + inpos]) >>> (28 - 4))
+ | ((in[7 + inpos]) << 4)
+ | ((in[8 + inpos]) << 32)
+ | ((in[9 + inpos]) << 60);
+ out[4 + outpos] = ((in[9 + inpos]) >>> (28 - 24))
+ | ((in[10 + inpos]) << 24)
+ | ((in[11 + inpos]) << 52);
+ out[5 + outpos] = ((in[11 + inpos]) >>> (28 - 16))
+ | ((in[12 + inpos]) << 16)
+ | ((in[13 + inpos]) << 44);
+ out[6 + outpos] = ((in[13 + inpos]) >>> (28 - 8))
+ | ((in[14 + inpos]) << 8)
+ | ((in[15 + inpos]) << 36);
+ out[7 + outpos] = in[16 + inpos]
+ | ((in[17 + inpos]) << 28)
+ | ((in[18 + inpos]) << 56);
+ out[8 + outpos] = ((in[18 + inpos]) >>> (28 - 20))
+ | ((in[19 + inpos]) << 20)
+ | ((in[20 + inpos]) << 48);
+ out[9 + outpos] = ((in[20 + inpos]) >>> (28 - 12))
+ | ((in[21 + inpos]) << 12)
+ | ((in[22 + inpos]) << 40);
+ out[10 + outpos] = ((in[22 + inpos]) >>> (28 - 4))
+ | ((in[23 + inpos]) << 4)
+ | ((in[24 + inpos]) << 32)
+ | ((in[25 + inpos]) << 60);
+ out[11 + outpos] = ((in[25 + inpos]) >>> (28 - 24))
+ | ((in[26 + inpos]) << 24)
+ | ((in[27 + inpos]) << 52);
+ out[12 + outpos] = ((in[27 + inpos]) >>> (28 - 16))
+ | ((in[28 + inpos]) << 16)
+ | ((in[29 + inpos]) << 44);
+ out[13 + outpos] = ((in[29 + inpos]) >>> (28 - 8))
+ | ((in[30 + inpos]) << 8)
+ | ((in[31 + inpos]) << 36);
+ out[14 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 28)
+ | ((in[34 + inpos]) << 56);
+ out[15 + outpos] = ((in[34 + inpos]) >>> (28 - 20))
+ | ((in[35 + inpos]) << 20)
+ | ((in[36 + inpos]) << 48);
+ out[16 + outpos] = ((in[36 + inpos]) >>> (28 - 12))
+ | ((in[37 + inpos]) << 12)
+ | ((in[38 + inpos]) << 40);
+ out[17 + outpos] = ((in[38 + inpos]) >>> (28 - 4))
+ | ((in[39 + inpos]) << 4)
+ | ((in[40 + inpos]) << 32)
+ | ((in[41 + inpos]) << 60);
+ out[18 + outpos] = ((in[41 + inpos]) >>> (28 - 24))
+ | ((in[42 + inpos]) << 24)
+ | ((in[43 + inpos]) << 52);
+ out[19 + outpos] = ((in[43 + inpos]) >>> (28 - 16))
+ | ((in[44 + inpos]) << 16)
+ | ((in[45 + inpos]) << 44);
+ out[20 + outpos] = ((in[45 + inpos]) >>> (28 - 8))
+ | ((in[46 + inpos]) << 8)
+ | ((in[47 + inpos]) << 36);
+ out[21 + outpos] = in[48 + inpos]
+ | ((in[49 + inpos]) << 28)
+ | ((in[50 + inpos]) << 56);
+ out[22 + outpos] = ((in[50 + inpos]) >>> (28 - 20))
+ | ((in[51 + inpos]) << 20)
+ | ((in[52 + inpos]) << 48);
+ out[23 + outpos] = ((in[52 + inpos]) >>> (28 - 12))
+ | ((in[53 + inpos]) << 12)
+ | ((in[54 + inpos]) << 40);
+ out[24 + outpos] = ((in[54 + inpos]) >>> (28 - 4))
+ | ((in[55 + inpos]) << 4)
+ | ((in[56 + inpos]) << 32)
+ | ((in[57 + inpos]) << 60);
+ out[25 + outpos] = ((in[57 + inpos]) >>> (28 - 24))
+ | ((in[58 + inpos]) << 24)
+ | ((in[59 + inpos]) << 52);
+ out[26 + outpos] = ((in[59 + inpos]) >>> (28 - 16))
+ | ((in[60 + inpos]) << 16)
+ | ((in[61 + inpos]) << 44);
+ out[27 + outpos] = ((in[61 + inpos]) >>> (28 - 8))
+ | ((in[62 + inpos]) << 8)
+ | ((in[63 + inpos]) << 36);
+ }
+
+ protected static void fastpackwithoutmask29(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 29)
+ | ((in[2 + inpos]) << 58);
+ out[1 + outpos] = ((in[2 + inpos]) >>> (29 - 23))
+ | ((in[3 + inpos]) << 23)
+ | ((in[4 + inpos]) << 52);
+ out[2 + outpos] = ((in[4 + inpos]) >>> (29 - 17))
+ | ((in[5 + inpos]) << 17)
+ | ((in[6 + inpos]) << 46);
+ out[3 + outpos] = ((in[6 + inpos]) >>> (29 - 11))
+ | ((in[7 + inpos]) << 11)
+ | ((in[8 + inpos]) << 40);
+ out[4 + outpos] = ((in[8 + inpos]) >>> (29 - 5))
+ | ((in[9 + inpos]) << 5)
+ | ((in[10 + inpos]) << 34)
+ | ((in[11 + inpos]) << 63);
+ out[5 + outpos] = ((in[11 + inpos]) >>> (29 - 28))
+ | ((in[12 + inpos]) << 28)
+ | ((in[13 + inpos]) << 57);
+ out[6 + outpos] = ((in[13 + inpos]) >>> (29 - 22))
+ | ((in[14 + inpos]) << 22)
+ | ((in[15 + inpos]) << 51);
+ out[7 + outpos] = ((in[15 + inpos]) >>> (29 - 16))
+ | ((in[16 + inpos]) << 16)
+ | ((in[17 + inpos]) << 45);
+ out[8 + outpos] = ((in[17 + inpos]) >>> (29 - 10))
+ | ((in[18 + inpos]) << 10)
+ | ((in[19 + inpos]) << 39);
+ out[9 + outpos] = ((in[19 + inpos]) >>> (29 - 4))
+ | ((in[20 + inpos]) << 4)
+ | ((in[21 + inpos]) << 33)
+ | ((in[22 + inpos]) << 62);
+ out[10 + outpos] = ((in[22 + inpos]) >>> (29 - 27))
+ | ((in[23 + inpos]) << 27)
+ | ((in[24 + inpos]) << 56);
+ out[11 + outpos] = ((in[24 + inpos]) >>> (29 - 21))
+ | ((in[25 + inpos]) << 21)
+ | ((in[26 + inpos]) << 50);
+ out[12 + outpos] = ((in[26 + inpos]) >>> (29 - 15))
+ | ((in[27 + inpos]) << 15)
+ | ((in[28 + inpos]) << 44);
+ out[13 + outpos] = ((in[28 + inpos]) >>> (29 - 9))
+ | ((in[29 + inpos]) << 9)
+ | ((in[30 + inpos]) << 38);
+ out[14 + outpos] = ((in[30 + inpos]) >>> (29 - 3))
+ | ((in[31 + inpos]) << 3)
+ | ((in[32 + inpos]) << 32)
+ | ((in[33 + inpos]) << 61);
+ out[15 + outpos] = ((in[33 + inpos]) >>> (29 - 26))
+ | ((in[34 + inpos]) << 26)
+ | ((in[35 + inpos]) << 55);
+ out[16 + outpos] = ((in[35 + inpos]) >>> (29 - 20))
+ | ((in[36 + inpos]) << 20)
+ | ((in[37 + inpos]) << 49);
+ out[17 + outpos] = ((in[37 + inpos]) >>> (29 - 14))
+ | ((in[38 + inpos]) << 14)
+ | ((in[39 + inpos]) << 43);
+ out[18 + outpos] = ((in[39 + inpos]) >>> (29 - 8))
+ | ((in[40 + inpos]) << 8)
+ | ((in[41 + inpos]) << 37);
+ out[19 + outpos] = ((in[41 + inpos]) >>> (29 - 2))
+ | ((in[42 + inpos]) << 2)
+ | ((in[43 + inpos]) << 31)
+ | ((in[44 + inpos]) << 60);
+ out[20 + outpos] = ((in[44 + inpos]) >>> (29 - 25))
+ | ((in[45 + inpos]) << 25)
+ | ((in[46 + inpos]) << 54);
+ out[21 + outpos] = ((in[46 + inpos]) >>> (29 - 19))
+ | ((in[47 + inpos]) << 19)
+ | ((in[48 + inpos]) << 48);
+ out[22 + outpos] = ((in[48 + inpos]) >>> (29 - 13))
+ | ((in[49 + inpos]) << 13)
+ | ((in[50 + inpos]) << 42);
+ out[23 + outpos] = ((in[50 + inpos]) >>> (29 - 7))
+ | ((in[51 + inpos]) << 7)
+ | ((in[52 + inpos]) << 36);
+ out[24 + outpos] = ((in[52 + inpos]) >>> (29 - 1))
+ | ((in[53 + inpos]) << 1)
+ | ((in[54 + inpos]) << 30)
+ | ((in[55 + inpos]) << 59);
+ out[25 + outpos] = ((in[55 + inpos]) >>> (29 - 24))
+ | ((in[56 + inpos]) << 24)
+ | ((in[57 + inpos]) << 53);
+ out[26 + outpos] = ((in[57 + inpos]) >>> (29 - 18))
+ | ((in[58 + inpos]) << 18)
+ | ((in[59 + inpos]) << 47);
+ out[27 + outpos] = ((in[59 + inpos]) >>> (29 - 12))
+ | ((in[60 + inpos]) << 12)
+ | ((in[61 + inpos]) << 41);
+ out[28 + outpos] = ((in[61 + inpos]) >>> (29 - 6))
+ | ((in[62 + inpos]) << 6)
+ | ((in[63 + inpos]) << 35);
+ }
+
+ protected static void fastpackwithoutmask30(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 30)
+ | ((in[2 + inpos]) << 60);
+ out[1 + outpos] = ((in[2 + inpos]) >>> (30 - 26))
+ | ((in[3 + inpos]) << 26)
+ | ((in[4 + inpos]) << 56);
+ out[2 + outpos] = ((in[4 + inpos]) >>> (30 - 22))
+ | ((in[5 + inpos]) << 22)
+ | ((in[6 + inpos]) << 52);
+ out[3 + outpos] = ((in[6 + inpos]) >>> (30 - 18))
+ | ((in[7 + inpos]) << 18)
+ | ((in[8 + inpos]) << 48);
+ out[4 + outpos] = ((in[8 + inpos]) >>> (30 - 14))
+ | ((in[9 + inpos]) << 14)
+ | ((in[10 + inpos]) << 44);
+ out[5 + outpos] = ((in[10 + inpos]) >>> (30 - 10))
+ | ((in[11 + inpos]) << 10)
+ | ((in[12 + inpos]) << 40);
+ out[6 + outpos] = ((in[12 + inpos]) >>> (30 - 6))
+ | ((in[13 + inpos]) << 6)
+ | ((in[14 + inpos]) << 36);
+ out[7 + outpos] = ((in[14 + inpos]) >>> (30 - 2))
+ | ((in[15 + inpos]) << 2)
+ | ((in[16 + inpos]) << 32)
+ | ((in[17 + inpos]) << 62);
+ out[8 + outpos] = ((in[17 + inpos]) >>> (30 - 28))
+ | ((in[18 + inpos]) << 28)
+ | ((in[19 + inpos]) << 58);
+ out[9 + outpos] = ((in[19 + inpos]) >>> (30 - 24))
+ | ((in[20 + inpos]) << 24)
+ | ((in[21 + inpos]) << 54);
+ out[10 + outpos] = ((in[21 + inpos]) >>> (30 - 20))
+ | ((in[22 + inpos]) << 20)
+ | ((in[23 + inpos]) << 50);
+ out[11 + outpos] = ((in[23 + inpos]) >>> (30 - 16))
+ | ((in[24 + inpos]) << 16)
+ | ((in[25 + inpos]) << 46);
+ out[12 + outpos] = ((in[25 + inpos]) >>> (30 - 12))
+ | ((in[26 + inpos]) << 12)
+ | ((in[27 + inpos]) << 42);
+ out[13 + outpos] = ((in[27 + inpos]) >>> (30 - 8))
+ | ((in[28 + inpos]) << 8)
+ | ((in[29 + inpos]) << 38);
+ out[14 + outpos] = ((in[29 + inpos]) >>> (30 - 4))
+ | ((in[30 + inpos]) << 4)
+ | ((in[31 + inpos]) << 34);
+ out[15 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 30)
+ | ((in[34 + inpos]) << 60);
+ out[16 + outpos] = ((in[34 + inpos]) >>> (30 - 26))
+ | ((in[35 + inpos]) << 26)
+ | ((in[36 + inpos]) << 56);
+ out[17 + outpos] = ((in[36 + inpos]) >>> (30 - 22))
+ | ((in[37 + inpos]) << 22)
+ | ((in[38 + inpos]) << 52);
+ out[18 + outpos] = ((in[38 + inpos]) >>> (30 - 18))
+ | ((in[39 + inpos]) << 18)
+ | ((in[40 + inpos]) << 48);
+ out[19 + outpos] = ((in[40 + inpos]) >>> (30 - 14))
+ | ((in[41 + inpos]) << 14)
+ | ((in[42 + inpos]) << 44);
+ out[20 + outpos] = ((in[42 + inpos]) >>> (30 - 10))
+ | ((in[43 + inpos]) << 10)
+ | ((in[44 + inpos]) << 40);
+ out[21 + outpos] = ((in[44 + inpos]) >>> (30 - 6))
+ | ((in[45 + inpos]) << 6)
+ | ((in[46 + inpos]) << 36);
+ out[22 + outpos] = ((in[46 + inpos]) >>> (30 - 2))
+ | ((in[47 + inpos]) << 2)
+ | ((in[48 + inpos]) << 32)
+ | ((in[49 + inpos]) << 62);
+ out[23 + outpos] = ((in[49 + inpos]) >>> (30 - 28))
+ | ((in[50 + inpos]) << 28)
+ | ((in[51 + inpos]) << 58);
+ out[24 + outpos] = ((in[51 + inpos]) >>> (30 - 24))
+ | ((in[52 + inpos]) << 24)
+ | ((in[53 + inpos]) << 54);
+ out[25 + outpos] = ((in[53 + inpos]) >>> (30 - 20))
+ | ((in[54 + inpos]) << 20)
+ | ((in[55 + inpos]) << 50);
+ out[26 + outpos] = ((in[55 + inpos]) >>> (30 - 16))
+ | ((in[56 + inpos]) << 16)
+ | ((in[57 + inpos]) << 46);
+ out[27 + outpos] = ((in[57 + inpos]) >>> (30 - 12))
+ | ((in[58 + inpos]) << 12)
+ | ((in[59 + inpos]) << 42);
+ out[28 + outpos] = ((in[59 + inpos]) >>> (30 - 8))
+ | ((in[60 + inpos]) << 8)
+ | ((in[61 + inpos]) << 38);
+ out[29 + outpos] = ((in[61 + inpos]) >>> (30 - 4))
+ | ((in[62 + inpos]) << 4)
+ | ((in[63 + inpos]) << 34);
+ }
+
+ protected static void fastpackwithoutmask31(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 31)
+ | ((in[2 + inpos]) << 62);
+ out[1 + outpos] = ((in[2 + inpos]) >>> (31 - 29))
+ | ((in[3 + inpos]) << 29)
+ | ((in[4 + inpos]) << 60);
+ out[2 + outpos] = ((in[4 + inpos]) >>> (31 - 27))
+ | ((in[5 + inpos]) << 27)
+ | ((in[6 + inpos]) << 58);
+ out[3 + outpos] = ((in[6 + inpos]) >>> (31 - 25))
+ | ((in[7 + inpos]) << 25)
+ | ((in[8 + inpos]) << 56);
+ out[4 + outpos] = ((in[8 + inpos]) >>> (31 - 23))
+ | ((in[9 + inpos]) << 23)
+ | ((in[10 + inpos]) << 54);
+ out[5 + outpos] = ((in[10 + inpos]) >>> (31 - 21))
+ | ((in[11 + inpos]) << 21)
+ | ((in[12 + inpos]) << 52);
+ out[6 + outpos] = ((in[12 + inpos]) >>> (31 - 19))
+ | ((in[13 + inpos]) << 19)
+ | ((in[14 + inpos]) << 50);
+ out[7 + outpos] = ((in[14 + inpos]) >>> (31 - 17))
+ | ((in[15 + inpos]) << 17)
+ | ((in[16 + inpos]) << 48);
+ out[8 + outpos] = ((in[16 + inpos]) >>> (31 - 15))
+ | ((in[17 + inpos]) << 15)
+ | ((in[18 + inpos]) << 46);
+ out[9 + outpos] = ((in[18 + inpos]) >>> (31 - 13))
+ | ((in[19 + inpos]) << 13)
+ | ((in[20 + inpos]) << 44);
+ out[10 + outpos] = ((in[20 + inpos]) >>> (31 - 11))
+ | ((in[21 + inpos]) << 11)
+ | ((in[22 + inpos]) << 42);
+ out[11 + outpos] = ((in[22 + inpos]) >>> (31 - 9))
+ | ((in[23 + inpos]) << 9)
+ | ((in[24 + inpos]) << 40);
+ out[12 + outpos] = ((in[24 + inpos]) >>> (31 - 7))
+ | ((in[25 + inpos]) << 7)
+ | ((in[26 + inpos]) << 38);
+ out[13 + outpos] = ((in[26 + inpos]) >>> (31 - 5))
+ | ((in[27 + inpos]) << 5)
+ | ((in[28 + inpos]) << 36);
+ out[14 + outpos] = ((in[28 + inpos]) >>> (31 - 3))
+ | ((in[29 + inpos]) << 3)
+ | ((in[30 + inpos]) << 34);
+ out[15 + outpos] = ((in[30 + inpos]) >>> (31 - 1))
+ | ((in[31 + inpos]) << 1)
+ | ((in[32 + inpos]) << 32)
+ | ((in[33 + inpos]) << 63);
+ out[16 + outpos] = ((in[33 + inpos]) >>> (31 - 30))
+ | ((in[34 + inpos]) << 30)
+ | ((in[35 + inpos]) << 61);
+ out[17 + outpos] = ((in[35 + inpos]) >>> (31 - 28))
+ | ((in[36 + inpos]) << 28)
+ | ((in[37 + inpos]) << 59);
+ out[18 + outpos] = ((in[37 + inpos]) >>> (31 - 26))
+ | ((in[38 + inpos]) << 26)
+ | ((in[39 + inpos]) << 57);
+ out[19 + outpos] = ((in[39 + inpos]) >>> (31 - 24))
+ | ((in[40 + inpos]) << 24)
+ | ((in[41 + inpos]) << 55);
+ out[20 + outpos] = ((in[41 + inpos]) >>> (31 - 22))
+ | ((in[42 + inpos]) << 22)
+ | ((in[43 + inpos]) << 53);
+ out[21 + outpos] = ((in[43 + inpos]) >>> (31 - 20))
+ | ((in[44 + inpos]) << 20)
+ | ((in[45 + inpos]) << 51);
+ out[22 + outpos] = ((in[45 + inpos]) >>> (31 - 18))
+ | ((in[46 + inpos]) << 18)
+ | ((in[47 + inpos]) << 49);
+ out[23 + outpos] = ((in[47 + inpos]) >>> (31 - 16))
+ | ((in[48 + inpos]) << 16)
+ | ((in[49 + inpos]) << 47);
+ out[24 + outpos] = ((in[49 + inpos]) >>> (31 - 14))
+ | ((in[50 + inpos]) << 14)
+ | ((in[51 + inpos]) << 45);
+ out[25 + outpos] = ((in[51 + inpos]) >>> (31 - 12))
+ | ((in[52 + inpos]) << 12)
+ | ((in[53 + inpos]) << 43);
+ out[26 + outpos] = ((in[53 + inpos]) >>> (31 - 10))
+ | ((in[54 + inpos]) << 10)
+ | ((in[55 + inpos]) << 41);
+ out[27 + outpos] = ((in[55 + inpos]) >>> (31 - 8))
+ | ((in[56 + inpos]) << 8)
+ | ((in[57 + inpos]) << 39);
+ out[28 + outpos] = ((in[57 + inpos]) >>> (31 - 6))
+ | ((in[58 + inpos]) << 6)
+ | ((in[59 + inpos]) << 37);
+ out[29 + outpos] = ((in[59 + inpos]) >>> (31 - 4))
+ | ((in[60 + inpos]) << 4)
+ | ((in[61 + inpos]) << 35);
+ out[30 + outpos] = ((in[61 + inpos]) >>> (31 - 2))
+ | ((in[62 + inpos]) << 2)
+ | ((in[63 + inpos]) << 33);
+ }
+
+ protected static void fastpackwithoutmask32(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 32);
+ out[1 + outpos] = in[2 + inpos]
+ | ((in[3 + inpos]) << 32);
+ out[2 + outpos] = in[4 + inpos]
+ | ((in[5 + inpos]) << 32);
+ out[3 + outpos] = in[6 + inpos]
+ | ((in[7 + inpos]) << 32);
+ out[4 + outpos] = in[8 + inpos]
+ | ((in[9 + inpos]) << 32);
+ out[5 + outpos] = in[10 + inpos]
+ | ((in[11 + inpos]) << 32);
+ out[6 + outpos] = in[12 + inpos]
+ | ((in[13 + inpos]) << 32);
+ out[7 + outpos] = in[14 + inpos]
+ | ((in[15 + inpos]) << 32);
+ out[8 + outpos] = in[16 + inpos]
+ | ((in[17 + inpos]) << 32);
+ out[9 + outpos] = in[18 + inpos]
+ | ((in[19 + inpos]) << 32);
+ out[10 + outpos] = in[20 + inpos]
+ | ((in[21 + inpos]) << 32);
+ out[11 + outpos] = in[22 + inpos]
+ | ((in[23 + inpos]) << 32);
+ out[12 + outpos] = in[24 + inpos]
+ | ((in[25 + inpos]) << 32);
+ out[13 + outpos] = in[26 + inpos]
+ | ((in[27 + inpos]) << 32);
+ out[14 + outpos] = in[28 + inpos]
+ | ((in[29 + inpos]) << 32);
+ out[15 + outpos] = in[30 + inpos]
+ | ((in[31 + inpos]) << 32);
+ out[16 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 32);
+ out[17 + outpos] = in[34 + inpos]
+ | ((in[35 + inpos]) << 32);
+ out[18 + outpos] = in[36 + inpos]
+ | ((in[37 + inpos]) << 32);
+ out[19 + outpos] = in[38 + inpos]
+ | ((in[39 + inpos]) << 32);
+ out[20 + outpos] = in[40 + inpos]
+ | ((in[41 + inpos]) << 32);
+ out[21 + outpos] = in[42 + inpos]
+ | ((in[43 + inpos]) << 32);
+ out[22 + outpos] = in[44 + inpos]
+ | ((in[45 + inpos]) << 32);
+ out[23 + outpos] = in[46 + inpos]
+ | ((in[47 + inpos]) << 32);
+ out[24 + outpos] = in[48 + inpos]
+ | ((in[49 + inpos]) << 32);
+ out[25 + outpos] = in[50 + inpos]
+ | ((in[51 + inpos]) << 32);
+ out[26 + outpos] = in[52 + inpos]
+ | ((in[53 + inpos]) << 32);
+ out[27 + outpos] = in[54 + inpos]
+ | ((in[55 + inpos]) << 32);
+ out[28 + outpos] = in[56 + inpos]
+ | ((in[57 + inpos]) << 32);
+ out[29 + outpos] = in[58 + inpos]
+ | ((in[59 + inpos]) << 32);
+ out[30 + outpos] = in[60 + inpos]
+ | ((in[61 + inpos]) << 32);
+ out[31 + outpos] = in[62 + inpos]
+ | ((in[63 + inpos]) << 32);
+ }
+
+ protected static void fastpackwithoutmask33(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 33);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (33 - 2))
+ | ((in[2 + inpos]) << 2)
+ | ((in[3 + inpos]) << 35);
+ out[2 + outpos] = ((in[3 + inpos]) >>> (33 - 4))
+ | ((in[4 + inpos]) << 4)
+ | ((in[5 + inpos]) << 37);
+ out[3 + outpos] = ((in[5 + inpos]) >>> (33 - 6))
+ | ((in[6 + inpos]) << 6)
+ | ((in[7 + inpos]) << 39);
+ out[4 + outpos] = ((in[7 + inpos]) >>> (33 - 8))
+ | ((in[8 + inpos]) << 8)
+ | ((in[9 + inpos]) << 41);
+ out[5 + outpos] = ((in[9 + inpos]) >>> (33 - 10))
+ | ((in[10 + inpos]) << 10)
+ | ((in[11 + inpos]) << 43);
+ out[6 + outpos] = ((in[11 + inpos]) >>> (33 - 12))
+ | ((in[12 + inpos]) << 12)
+ | ((in[13 + inpos]) << 45);
+ out[7 + outpos] = ((in[13 + inpos]) >>> (33 - 14))
+ | ((in[14 + inpos]) << 14)
+ | ((in[15 + inpos]) << 47);
+ out[8 + outpos] = ((in[15 + inpos]) >>> (33 - 16))
+ | ((in[16 + inpos]) << 16)
+ | ((in[17 + inpos]) << 49);
+ out[9 + outpos] = ((in[17 + inpos]) >>> (33 - 18))
+ | ((in[18 + inpos]) << 18)
+ | ((in[19 + inpos]) << 51);
+ out[10 + outpos] = ((in[19 + inpos]) >>> (33 - 20))
+ | ((in[20 + inpos]) << 20)
+ | ((in[21 + inpos]) << 53);
+ out[11 + outpos] = ((in[21 + inpos]) >>> (33 - 22))
+ | ((in[22 + inpos]) << 22)
+ | ((in[23 + inpos]) << 55);
+ out[12 + outpos] = ((in[23 + inpos]) >>> (33 - 24))
+ | ((in[24 + inpos]) << 24)
+ | ((in[25 + inpos]) << 57);
+ out[13 + outpos] = ((in[25 + inpos]) >>> (33 - 26))
+ | ((in[26 + inpos]) << 26)
+ | ((in[27 + inpos]) << 59);
+ out[14 + outpos] = ((in[27 + inpos]) >>> (33 - 28))
+ | ((in[28 + inpos]) << 28)
+ | ((in[29 + inpos]) << 61);
+ out[15 + outpos] = ((in[29 + inpos]) >>> (33 - 30))
+ | ((in[30 + inpos]) << 30)
+ | ((in[31 + inpos]) << 63);
+ out[16 + outpos] = ((in[31 + inpos]) >>> (33 - 32))
+ | ((in[32 + inpos]) << 32);
+ out[17 + outpos] = ((in[32 + inpos]) >>> (33 - 1))
+ | ((in[33 + inpos]) << 1)
+ | ((in[34 + inpos]) << 34);
+ out[18 + outpos] = ((in[34 + inpos]) >>> (33 - 3))
+ | ((in[35 + inpos]) << 3)
+ | ((in[36 + inpos]) << 36);
+ out[19 + outpos] = ((in[36 + inpos]) >>> (33 - 5))
+ | ((in[37 + inpos]) << 5)
+ | ((in[38 + inpos]) << 38);
+ out[20 + outpos] = ((in[38 + inpos]) >>> (33 - 7))
+ | ((in[39 + inpos]) << 7)
+ | ((in[40 + inpos]) << 40);
+ out[21 + outpos] = ((in[40 + inpos]) >>> (33 - 9))
+ | ((in[41 + inpos]) << 9)
+ | ((in[42 + inpos]) << 42);
+ out[22 + outpos] = ((in[42 + inpos]) >>> (33 - 11))
+ | ((in[43 + inpos]) << 11)
+ | ((in[44 + inpos]) << 44);
+ out[23 + outpos] = ((in[44 + inpos]) >>> (33 - 13))
+ | ((in[45 + inpos]) << 13)
+ | ((in[46 + inpos]) << 46);
+ out[24 + outpos] = ((in[46 + inpos]) >>> (33 - 15))
+ | ((in[47 + inpos]) << 15)
+ | ((in[48 + inpos]) << 48);
+ out[25 + outpos] = ((in[48 + inpos]) >>> (33 - 17))
+ | ((in[49 + inpos]) << 17)
+ | ((in[50 + inpos]) << 50);
+ out[26 + outpos] = ((in[50 + inpos]) >>> (33 - 19))
+ | ((in[51 + inpos]) << 19)
+ | ((in[52 + inpos]) << 52);
+ out[27 + outpos] = ((in[52 + inpos]) >>> (33 - 21))
+ | ((in[53 + inpos]) << 21)
+ | ((in[54 + inpos]) << 54);
+ out[28 + outpos] = ((in[54 + inpos]) >>> (33 - 23))
+ | ((in[55 + inpos]) << 23)
+ | ((in[56 + inpos]) << 56);
+ out[29 + outpos] = ((in[56 + inpos]) >>> (33 - 25))
+ | ((in[57 + inpos]) << 25)
+ | ((in[58 + inpos]) << 58);
+ out[30 + outpos] = ((in[58 + inpos]) >>> (33 - 27))
+ | ((in[59 + inpos]) << 27)
+ | ((in[60 + inpos]) << 60);
+ out[31 + outpos] = ((in[60 + inpos]) >>> (33 - 29))
+ | ((in[61 + inpos]) << 29)
+ | ((in[62 + inpos]) << 62);
+ out[32 + outpos] = ((in[62 + inpos]) >>> (33 - 31))
+ | ((in[63 + inpos]) << 31);
+ }
+
+ protected static void fastpackwithoutmask34(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 34);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (34 - 4))
+ | ((in[2 + inpos]) << 4)
+ | ((in[3 + inpos]) << 38);
+ out[2 + outpos] = ((in[3 + inpos]) >>> (34 - 8))
+ | ((in[4 + inpos]) << 8)
+ | ((in[5 + inpos]) << 42);
+ out[3 + outpos] = ((in[5 + inpos]) >>> (34 - 12))
+ | ((in[6 + inpos]) << 12)
+ | ((in[7 + inpos]) << 46);
+ out[4 + outpos] = ((in[7 + inpos]) >>> (34 - 16))
+ | ((in[8 + inpos]) << 16)
+ | ((in[9 + inpos]) << 50);
+ out[5 + outpos] = ((in[9 + inpos]) >>> (34 - 20))
+ | ((in[10 + inpos]) << 20)
+ | ((in[11 + inpos]) << 54);
+ out[6 + outpos] = ((in[11 + inpos]) >>> (34 - 24))
+ | ((in[12 + inpos]) << 24)
+ | ((in[13 + inpos]) << 58);
+ out[7 + outpos] = ((in[13 + inpos]) >>> (34 - 28))
+ | ((in[14 + inpos]) << 28)
+ | ((in[15 + inpos]) << 62);
+ out[8 + outpos] = ((in[15 + inpos]) >>> (34 - 32))
+ | ((in[16 + inpos]) << 32);
+ out[9 + outpos] = ((in[16 + inpos]) >>> (34 - 2))
+ | ((in[17 + inpos]) << 2)
+ | ((in[18 + inpos]) << 36);
+ out[10 + outpos] = ((in[18 + inpos]) >>> (34 - 6))
+ | ((in[19 + inpos]) << 6)
+ | ((in[20 + inpos]) << 40);
+ out[11 + outpos] = ((in[20 + inpos]) >>> (34 - 10))
+ | ((in[21 + inpos]) << 10)
+ | ((in[22 + inpos]) << 44);
+ out[12 + outpos] = ((in[22 + inpos]) >>> (34 - 14))
+ | ((in[23 + inpos]) << 14)
+ | ((in[24 + inpos]) << 48);
+ out[13 + outpos] = ((in[24 + inpos]) >>> (34 - 18))
+ | ((in[25 + inpos]) << 18)
+ | ((in[26 + inpos]) << 52);
+ out[14 + outpos] = ((in[26 + inpos]) >>> (34 - 22))
+ | ((in[27 + inpos]) << 22)
+ | ((in[28 + inpos]) << 56);
+ out[15 + outpos] = ((in[28 + inpos]) >>> (34 - 26))
+ | ((in[29 + inpos]) << 26)
+ | ((in[30 + inpos]) << 60);
+ out[16 + outpos] = ((in[30 + inpos]) >>> (34 - 30))
+ | ((in[31 + inpos]) << 30);
+ out[17 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 34);
+ out[18 + outpos] = ((in[33 + inpos]) >>> (34 - 4))
+ | ((in[34 + inpos]) << 4)
+ | ((in[35 + inpos]) << 38);
+ out[19 + outpos] = ((in[35 + inpos]) >>> (34 - 8))
+ | ((in[36 + inpos]) << 8)
+ | ((in[37 + inpos]) << 42);
+ out[20 + outpos] = ((in[37 + inpos]) >>> (34 - 12))
+ | ((in[38 + inpos]) << 12)
+ | ((in[39 + inpos]) << 46);
+ out[21 + outpos] = ((in[39 + inpos]) >>> (34 - 16))
+ | ((in[40 + inpos]) << 16)
+ | ((in[41 + inpos]) << 50);
+ out[22 + outpos] = ((in[41 + inpos]) >>> (34 - 20))
+ | ((in[42 + inpos]) << 20)
+ | ((in[43 + inpos]) << 54);
+ out[23 + outpos] = ((in[43 + inpos]) >>> (34 - 24))
+ | ((in[44 + inpos]) << 24)
+ | ((in[45 + inpos]) << 58);
+ out[24 + outpos] = ((in[45 + inpos]) >>> (34 - 28))
+ | ((in[46 + inpos]) << 28)
+ | ((in[47 + inpos]) << 62);
+ out[25 + outpos] = ((in[47 + inpos]) >>> (34 - 32))
+ | ((in[48 + inpos]) << 32);
+ out[26 + outpos] = ((in[48 + inpos]) >>> (34 - 2))
+ | ((in[49 + inpos]) << 2)
+ | ((in[50 + inpos]) << 36);
+ out[27 + outpos] = ((in[50 + inpos]) >>> (34 - 6))
+ | ((in[51 + inpos]) << 6)
+ | ((in[52 + inpos]) << 40);
+ out[28 + outpos] = ((in[52 + inpos]) >>> (34 - 10))
+ | ((in[53 + inpos]) << 10)
+ | ((in[54 + inpos]) << 44);
+ out[29 + outpos] = ((in[54 + inpos]) >>> (34 - 14))
+ | ((in[55 + inpos]) << 14)
+ | ((in[56 + inpos]) << 48);
+ out[30 + outpos] = ((in[56 + inpos]) >>> (34 - 18))
+ | ((in[57 + inpos]) << 18)
+ | ((in[58 + inpos]) << 52);
+ out[31 + outpos] = ((in[58 + inpos]) >>> (34 - 22))
+ | ((in[59 + inpos]) << 22)
+ | ((in[60 + inpos]) << 56);
+ out[32 + outpos] = ((in[60 + inpos]) >>> (34 - 26))
+ | ((in[61 + inpos]) << 26)
+ | ((in[62 + inpos]) << 60);
+ out[33 + outpos] = ((in[62 + inpos]) >>> (34 - 30))
+ | ((in[63 + inpos]) << 30);
+ }
+
+ protected static void fastpackwithoutmask35(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 35);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (35 - 6))
+ | ((in[2 + inpos]) << 6)
+ | ((in[3 + inpos]) << 41);
+ out[2 + outpos] = ((in[3 + inpos]) >>> (35 - 12))
+ | ((in[4 + inpos]) << 12)
+ | ((in[5 + inpos]) << 47);
+ out[3 + outpos] = ((in[5 + inpos]) >>> (35 - 18))
+ | ((in[6 + inpos]) << 18)
+ | ((in[7 + inpos]) << 53);
+ out[4 + outpos] = ((in[7 + inpos]) >>> (35 - 24))
+ | ((in[8 + inpos]) << 24)
+ | ((in[9 + inpos]) << 59);
+ out[5 + outpos] = ((in[9 + inpos]) >>> (35 - 30))
+ | ((in[10 + inpos]) << 30);
+ out[6 + outpos] = ((in[10 + inpos]) >>> (35 - 1))
+ | ((in[11 + inpos]) << 1)
+ | ((in[12 + inpos]) << 36);
+ out[7 + outpos] = ((in[12 + inpos]) >>> (35 - 7))
+ | ((in[13 + inpos]) << 7)
+ | ((in[14 + inpos]) << 42);
+ out[8 + outpos] = ((in[14 + inpos]) >>> (35 - 13))
+ | ((in[15 + inpos]) << 13)
+ | ((in[16 + inpos]) << 48);
+ out[9 + outpos] = ((in[16 + inpos]) >>> (35 - 19))
+ | ((in[17 + inpos]) << 19)
+ | ((in[18 + inpos]) << 54);
+ out[10 + outpos] = ((in[18 + inpos]) >>> (35 - 25))
+ | ((in[19 + inpos]) << 25)
+ | ((in[20 + inpos]) << 60);
+ out[11 + outpos] = ((in[20 + inpos]) >>> (35 - 31))
+ | ((in[21 + inpos]) << 31);
+ out[12 + outpos] = ((in[21 + inpos]) >>> (35 - 2))
+ | ((in[22 + inpos]) << 2)
+ | ((in[23 + inpos]) << 37);
+ out[13 + outpos] = ((in[23 + inpos]) >>> (35 - 8))
+ | ((in[24 + inpos]) << 8)
+ | ((in[25 + inpos]) << 43);
+ out[14 + outpos] = ((in[25 + inpos]) >>> (35 - 14))
+ | ((in[26 + inpos]) << 14)
+ | ((in[27 + inpos]) << 49);
+ out[15 + outpos] = ((in[27 + inpos]) >>> (35 - 20))
+ | ((in[28 + inpos]) << 20)
+ | ((in[29 + inpos]) << 55);
+ out[16 + outpos] = ((in[29 + inpos]) >>> (35 - 26))
+ | ((in[30 + inpos]) << 26)
+ | ((in[31 + inpos]) << 61);
+ out[17 + outpos] = ((in[31 + inpos]) >>> (35 - 32))
+ | ((in[32 + inpos]) << 32);
+ out[18 + outpos] = ((in[32 + inpos]) >>> (35 - 3))
+ | ((in[33 + inpos]) << 3)
+ | ((in[34 + inpos]) << 38);
+ out[19 + outpos] = ((in[34 + inpos]) >>> (35 - 9))
+ | ((in[35 + inpos]) << 9)
+ | ((in[36 + inpos]) << 44);
+ out[20 + outpos] = ((in[36 + inpos]) >>> (35 - 15))
+ | ((in[37 + inpos]) << 15)
+ | ((in[38 + inpos]) << 50);
+ out[21 + outpos] = ((in[38 + inpos]) >>> (35 - 21))
+ | ((in[39 + inpos]) << 21)
+ | ((in[40 + inpos]) << 56);
+ out[22 + outpos] = ((in[40 + inpos]) >>> (35 - 27))
+ | ((in[41 + inpos]) << 27)
+ | ((in[42 + inpos]) << 62);
+ out[23 + outpos] = ((in[42 + inpos]) >>> (35 - 33))
+ | ((in[43 + inpos]) << 33);
+ out[24 + outpos] = ((in[43 + inpos]) >>> (35 - 4))
+ | ((in[44 + inpos]) << 4)
+ | ((in[45 + inpos]) << 39);
+ out[25 + outpos] = ((in[45 + inpos]) >>> (35 - 10))
+ | ((in[46 + inpos]) << 10)
+ | ((in[47 + inpos]) << 45);
+ out[26 + outpos] = ((in[47 + inpos]) >>> (35 - 16))
+ | ((in[48 + inpos]) << 16)
+ | ((in[49 + inpos]) << 51);
+ out[27 + outpos] = ((in[49 + inpos]) >>> (35 - 22))
+ | ((in[50 + inpos]) << 22)
+ | ((in[51 + inpos]) << 57);
+ out[28 + outpos] = ((in[51 + inpos]) >>> (35 - 28))
+ | ((in[52 + inpos]) << 28)
+ | ((in[53 + inpos]) << 63);
+ out[29 + outpos] = ((in[53 + inpos]) >>> (35 - 34))
+ | ((in[54 + inpos]) << 34);
+ out[30 + outpos] = ((in[54 + inpos]) >>> (35 - 5))
+ | ((in[55 + inpos]) << 5)
+ | ((in[56 + inpos]) << 40);
+ out[31 + outpos] = ((in[56 + inpos]) >>> (35 - 11))
+ | ((in[57 + inpos]) << 11)
+ | ((in[58 + inpos]) << 46);
+ out[32 + outpos] = ((in[58 + inpos]) >>> (35 - 17))
+ | ((in[59 + inpos]) << 17)
+ | ((in[60 + inpos]) << 52);
+ out[33 + outpos] = ((in[60 + inpos]) >>> (35 - 23))
+ | ((in[61 + inpos]) << 23)
+ | ((in[62 + inpos]) << 58);
+ out[34 + outpos] = ((in[62 + inpos]) >>> (35 - 29))
+ | ((in[63 + inpos]) << 29);
+ }
+
+ protected static void fastpackwithoutmask36(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 36);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (36 - 8))
+ | ((in[2 + inpos]) << 8)
+ | ((in[3 + inpos]) << 44);
+ out[2 + outpos] = ((in[3 + inpos]) >>> (36 - 16))
+ | ((in[4 + inpos]) << 16)
+ | ((in[5 + inpos]) << 52);
+ out[3 + outpos] = ((in[5 + inpos]) >>> (36 - 24))
+ | ((in[6 + inpos]) << 24)
+ | ((in[7 + inpos]) << 60);
+ out[4 + outpos] = ((in[7 + inpos]) >>> (36 - 32))
+ | ((in[8 + inpos]) << 32);
+ out[5 + outpos] = ((in[8 + inpos]) >>> (36 - 4))
+ | ((in[9 + inpos]) << 4)
+ | ((in[10 + inpos]) << 40);
+ out[6 + outpos] = ((in[10 + inpos]) >>> (36 - 12))
+ | ((in[11 + inpos]) << 12)
+ | ((in[12 + inpos]) << 48);
+ out[7 + outpos] = ((in[12 + inpos]) >>> (36 - 20))
+ | ((in[13 + inpos]) << 20)
+ | ((in[14 + inpos]) << 56);
+ out[8 + outpos] = ((in[14 + inpos]) >>> (36 - 28))
+ | ((in[15 + inpos]) << 28);
+ out[9 + outpos] = in[16 + inpos]
+ | ((in[17 + inpos]) << 36);
+ out[10 + outpos] = ((in[17 + inpos]) >>> (36 - 8))
+ | ((in[18 + inpos]) << 8)
+ | ((in[19 + inpos]) << 44);
+ out[11 + outpos] = ((in[19 + inpos]) >>> (36 - 16))
+ | ((in[20 + inpos]) << 16)
+ | ((in[21 + inpos]) << 52);
+ out[12 + outpos] = ((in[21 + inpos]) >>> (36 - 24))
+ | ((in[22 + inpos]) << 24)
+ | ((in[23 + inpos]) << 60);
+ out[13 + outpos] = ((in[23 + inpos]) >>> (36 - 32))
+ | ((in[24 + inpos]) << 32);
+ out[14 + outpos] = ((in[24 + inpos]) >>> (36 - 4))
+ | ((in[25 + inpos]) << 4)
+ | ((in[26 + inpos]) << 40);
+ out[15 + outpos] = ((in[26 + inpos]) >>> (36 - 12))
+ | ((in[27 + inpos]) << 12)
+ | ((in[28 + inpos]) << 48);
+ out[16 + outpos] = ((in[28 + inpos]) >>> (36 - 20))
+ | ((in[29 + inpos]) << 20)
+ | ((in[30 + inpos]) << 56);
+ out[17 + outpos] = ((in[30 + inpos]) >>> (36 - 28))
+ | ((in[31 + inpos]) << 28);
+ out[18 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 36);
+ out[19 + outpos] = ((in[33 + inpos]) >>> (36 - 8))
+ | ((in[34 + inpos]) << 8)
+ | ((in[35 + inpos]) << 44);
+ out[20 + outpos] = ((in[35 + inpos]) >>> (36 - 16))
+ | ((in[36 + inpos]) << 16)
+ | ((in[37 + inpos]) << 52);
+ out[21 + outpos] = ((in[37 + inpos]) >>> (36 - 24))
+ | ((in[38 + inpos]) << 24)
+ | ((in[39 + inpos]) << 60);
+ out[22 + outpos] = ((in[39 + inpos]) >>> (36 - 32))
+ | ((in[40 + inpos]) << 32);
+ out[23 + outpos] = ((in[40 + inpos]) >>> (36 - 4))
+ | ((in[41 + inpos]) << 4)
+ | ((in[42 + inpos]) << 40);
+ out[24 + outpos] = ((in[42 + inpos]) >>> (36 - 12))
+ | ((in[43 + inpos]) << 12)
+ | ((in[44 + inpos]) << 48);
+ out[25 + outpos] = ((in[44 + inpos]) >>> (36 - 20))
+ | ((in[45 + inpos]) << 20)
+ | ((in[46 + inpos]) << 56);
+ out[26 + outpos] = ((in[46 + inpos]) >>> (36 - 28))
+ | ((in[47 + inpos]) << 28);
+ out[27 + outpos] = in[48 + inpos]
+ | ((in[49 + inpos]) << 36);
+ out[28 + outpos] = ((in[49 + inpos]) >>> (36 - 8))
+ | ((in[50 + inpos]) << 8)
+ | ((in[51 + inpos]) << 44);
+ out[29 + outpos] = ((in[51 + inpos]) >>> (36 - 16))
+ | ((in[52 + inpos]) << 16)
+ | ((in[53 + inpos]) << 52);
+ out[30 + outpos] = ((in[53 + inpos]) >>> (36 - 24))
+ | ((in[54 + inpos]) << 24)
+ | ((in[55 + inpos]) << 60);
+ out[31 + outpos] = ((in[55 + inpos]) >>> (36 - 32))
+ | ((in[56 + inpos]) << 32);
+ out[32 + outpos] = ((in[56 + inpos]) >>> (36 - 4))
+ | ((in[57 + inpos]) << 4)
+ | ((in[58 + inpos]) << 40);
+ out[33 + outpos] = ((in[58 + inpos]) >>> (36 - 12))
+ | ((in[59 + inpos]) << 12)
+ | ((in[60 + inpos]) << 48);
+ out[34 + outpos] = ((in[60 + inpos]) >>> (36 - 20))
+ | ((in[61 + inpos]) << 20)
+ | ((in[62 + inpos]) << 56);
+ out[35 + outpos] = ((in[62 + inpos]) >>> (36 - 28))
+ | ((in[63 + inpos]) << 28);
+ }
+
+ protected static void fastpackwithoutmask37(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 37);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (37 - 10))
+ | ((in[2 + inpos]) << 10)
+ | ((in[3 + inpos]) << 47);
+ out[2 + outpos] = ((in[3 + inpos]) >>> (37 - 20))
+ | ((in[4 + inpos]) << 20)
+ | ((in[5 + inpos]) << 57);
+ out[3 + outpos] = ((in[5 + inpos]) >>> (37 - 30))
+ | ((in[6 + inpos]) << 30);
+ out[4 + outpos] = ((in[6 + inpos]) >>> (37 - 3))
+ | ((in[7 + inpos]) << 3)
+ | ((in[8 + inpos]) << 40);
+ out[5 + outpos] = ((in[8 + inpos]) >>> (37 - 13))
+ | ((in[9 + inpos]) << 13)
+ | ((in[10 + inpos]) << 50);
+ out[6 + outpos] = ((in[10 + inpos]) >>> (37 - 23))
+ | ((in[11 + inpos]) << 23)
+ | ((in[12 + inpos]) << 60);
+ out[7 + outpos] = ((in[12 + inpos]) >>> (37 - 33))
+ | ((in[13 + inpos]) << 33);
+ out[8 + outpos] = ((in[13 + inpos]) >>> (37 - 6))
+ | ((in[14 + inpos]) << 6)
+ | ((in[15 + inpos]) << 43);
+ out[9 + outpos] = ((in[15 + inpos]) >>> (37 - 16))
+ | ((in[16 + inpos]) << 16)
+ | ((in[17 + inpos]) << 53);
+ out[10 + outpos] = ((in[17 + inpos]) >>> (37 - 26))
+ | ((in[18 + inpos]) << 26)
+ | ((in[19 + inpos]) << 63);
+ out[11 + outpos] = ((in[19 + inpos]) >>> (37 - 36))
+ | ((in[20 + inpos]) << 36);
+ out[12 + outpos] = ((in[20 + inpos]) >>> (37 - 9))
+ | ((in[21 + inpos]) << 9)
+ | ((in[22 + inpos]) << 46);
+ out[13 + outpos] = ((in[22 + inpos]) >>> (37 - 19))
+ | ((in[23 + inpos]) << 19)
+ | ((in[24 + inpos]) << 56);
+ out[14 + outpos] = ((in[24 + inpos]) >>> (37 - 29))
+ | ((in[25 + inpos]) << 29);
+ out[15 + outpos] = ((in[25 + inpos]) >>> (37 - 2))
+ | ((in[26 + inpos]) << 2)
+ | ((in[27 + inpos]) << 39);
+ out[16 + outpos] = ((in[27 + inpos]) >>> (37 - 12))
+ | ((in[28 + inpos]) << 12)
+ | ((in[29 + inpos]) << 49);
+ out[17 + outpos] = ((in[29 + inpos]) >>> (37 - 22))
+ | ((in[30 + inpos]) << 22)
+ | ((in[31 + inpos]) << 59);
+ out[18 + outpos] = ((in[31 + inpos]) >>> (37 - 32))
+ | ((in[32 + inpos]) << 32);
+ out[19 + outpos] = ((in[32 + inpos]) >>> (37 - 5))
+ | ((in[33 + inpos]) << 5)
+ | ((in[34 + inpos]) << 42);
+ out[20 + outpos] = ((in[34 + inpos]) >>> (37 - 15))
+ | ((in[35 + inpos]) << 15)
+ | ((in[36 + inpos]) << 52);
+ out[21 + outpos] = ((in[36 + inpos]) >>> (37 - 25))
+ | ((in[37 + inpos]) << 25)
+ | ((in[38 + inpos]) << 62);
+ out[22 + outpos] = ((in[38 + inpos]) >>> (37 - 35))
+ | ((in[39 + inpos]) << 35);
+ out[23 + outpos] = ((in[39 + inpos]) >>> (37 - 8))
+ | ((in[40 + inpos]) << 8)
+ | ((in[41 + inpos]) << 45);
+ out[24 + outpos] = ((in[41 + inpos]) >>> (37 - 18))
+ | ((in[42 + inpos]) << 18)
+ | ((in[43 + inpos]) << 55);
+ out[25 + outpos] = ((in[43 + inpos]) >>> (37 - 28))
+ | ((in[44 + inpos]) << 28);
+ out[26 + outpos] = ((in[44 + inpos]) >>> (37 - 1))
+ | ((in[45 + inpos]) << 1)
+ | ((in[46 + inpos]) << 38);
+ out[27 + outpos] = ((in[46 + inpos]) >>> (37 - 11))
+ | ((in[47 + inpos]) << 11)
+ | ((in[48 + inpos]) << 48);
+ out[28 + outpos] = ((in[48 + inpos]) >>> (37 - 21))
+ | ((in[49 + inpos]) << 21)
+ | ((in[50 + inpos]) << 58);
+ out[29 + outpos] = ((in[50 + inpos]) >>> (37 - 31))
+ | ((in[51 + inpos]) << 31);
+ out[30 + outpos] = ((in[51 + inpos]) >>> (37 - 4))
+ | ((in[52 + inpos]) << 4)
+ | ((in[53 + inpos]) << 41);
+ out[31 + outpos] = ((in[53 + inpos]) >>> (37 - 14))
+ | ((in[54 + inpos]) << 14)
+ | ((in[55 + inpos]) << 51);
+ out[32 + outpos] = ((in[55 + inpos]) >>> (37 - 24))
+ | ((in[56 + inpos]) << 24)
+ | ((in[57 + inpos]) << 61);
+ out[33 + outpos] = ((in[57 + inpos]) >>> (37 - 34))
+ | ((in[58 + inpos]) << 34);
+ out[34 + outpos] = ((in[58 + inpos]) >>> (37 - 7))
+ | ((in[59 + inpos]) << 7)
+ | ((in[60 + inpos]) << 44);
+ out[35 + outpos] = ((in[60 + inpos]) >>> (37 - 17))
+ | ((in[61 + inpos]) << 17)
+ | ((in[62 + inpos]) << 54);
+ out[36 + outpos] = ((in[62 + inpos]) >>> (37 - 27))
+ | ((in[63 + inpos]) << 27);
+ }
+
+ protected static void fastpackwithoutmask38(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 38);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (38 - 12))
+ | ((in[2 + inpos]) << 12)
+ | ((in[3 + inpos]) << 50);
+ out[2 + outpos] = ((in[3 + inpos]) >>> (38 - 24))
+ | ((in[4 + inpos]) << 24)
+ | ((in[5 + inpos]) << 62);
+ out[3 + outpos] = ((in[5 + inpos]) >>> (38 - 36))
+ | ((in[6 + inpos]) << 36);
+ out[4 + outpos] = ((in[6 + inpos]) >>> (38 - 10))
+ | ((in[7 + inpos]) << 10)
+ | ((in[8 + inpos]) << 48);
+ out[5 + outpos] = ((in[8 + inpos]) >>> (38 - 22))
+ | ((in[9 + inpos]) << 22)
+ | ((in[10 + inpos]) << 60);
+ out[6 + outpos] = ((in[10 + inpos]) >>> (38 - 34))
+ | ((in[11 + inpos]) << 34);
+ out[7 + outpos] = ((in[11 + inpos]) >>> (38 - 8))
+ | ((in[12 + inpos]) << 8)
+ | ((in[13 + inpos]) << 46);
+ out[8 + outpos] = ((in[13 + inpos]) >>> (38 - 20))
+ | ((in[14 + inpos]) << 20)
+ | ((in[15 + inpos]) << 58);
+ out[9 + outpos] = ((in[15 + inpos]) >>> (38 - 32))
+ | ((in[16 + inpos]) << 32);
+ out[10 + outpos] = ((in[16 + inpos]) >>> (38 - 6))
+ | ((in[17 + inpos]) << 6)
+ | ((in[18 + inpos]) << 44);
+ out[11 + outpos] = ((in[18 + inpos]) >>> (38 - 18))
+ | ((in[19 + inpos]) << 18)
+ | ((in[20 + inpos]) << 56);
+ out[12 + outpos] = ((in[20 + inpos]) >>> (38 - 30))
+ | ((in[21 + inpos]) << 30);
+ out[13 + outpos] = ((in[21 + inpos]) >>> (38 - 4))
+ | ((in[22 + inpos]) << 4)
+ | ((in[23 + inpos]) << 42);
+ out[14 + outpos] = ((in[23 + inpos]) >>> (38 - 16))
+ | ((in[24 + inpos]) << 16)
+ | ((in[25 + inpos]) << 54);
+ out[15 + outpos] = ((in[25 + inpos]) >>> (38 - 28))
+ | ((in[26 + inpos]) << 28);
+ out[16 + outpos] = ((in[26 + inpos]) >>> (38 - 2))
+ | ((in[27 + inpos]) << 2)
+ | ((in[28 + inpos]) << 40);
+ out[17 + outpos] = ((in[28 + inpos]) >>> (38 - 14))
+ | ((in[29 + inpos]) << 14)
+ | ((in[30 + inpos]) << 52);
+ out[18 + outpos] = ((in[30 + inpos]) >>> (38 - 26))
+ | ((in[31 + inpos]) << 26);
+ out[19 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 38);
+ out[20 + outpos] = ((in[33 + inpos]) >>> (38 - 12))
+ | ((in[34 + inpos]) << 12)
+ | ((in[35 + inpos]) << 50);
+ out[21 + outpos] = ((in[35 + inpos]) >>> (38 - 24))
+ | ((in[36 + inpos]) << 24)
+ | ((in[37 + inpos]) << 62);
+ out[22 + outpos] = ((in[37 + inpos]) >>> (38 - 36))
+ | ((in[38 + inpos]) << 36);
+ out[23 + outpos] = ((in[38 + inpos]) >>> (38 - 10))
+ | ((in[39 + inpos]) << 10)
+ | ((in[40 + inpos]) << 48);
+ out[24 + outpos] = ((in[40 + inpos]) >>> (38 - 22))
+ | ((in[41 + inpos]) << 22)
+ | ((in[42 + inpos]) << 60);
+ out[25 + outpos] = ((in[42 + inpos]) >>> (38 - 34))
+ | ((in[43 + inpos]) << 34);
+ out[26 + outpos] = ((in[43 + inpos]) >>> (38 - 8))
+ | ((in[44 + inpos]) << 8)
+ | ((in[45 + inpos]) << 46);
+ out[27 + outpos] = ((in[45 + inpos]) >>> (38 - 20))
+ | ((in[46 + inpos]) << 20)
+ | ((in[47 + inpos]) << 58);
+ out[28 + outpos] = ((in[47 + inpos]) >>> (38 - 32))
+ | ((in[48 + inpos]) << 32);
+ out[29 + outpos] = ((in[48 + inpos]) >>> (38 - 6))
+ | ((in[49 + inpos]) << 6)
+ | ((in[50 + inpos]) << 44);
+ out[30 + outpos] = ((in[50 + inpos]) >>> (38 - 18))
+ | ((in[51 + inpos]) << 18)
+ | ((in[52 + inpos]) << 56);
+ out[31 + outpos] = ((in[52 + inpos]) >>> (38 - 30))
+ | ((in[53 + inpos]) << 30);
+ out[32 + outpos] = ((in[53 + inpos]) >>> (38 - 4))
+ | ((in[54 + inpos]) << 4)
+ | ((in[55 + inpos]) << 42);
+ out[33 + outpos] = ((in[55 + inpos]) >>> (38 - 16))
+ | ((in[56 + inpos]) << 16)
+ | ((in[57 + inpos]) << 54);
+ out[34 + outpos] = ((in[57 + inpos]) >>> (38 - 28))
+ | ((in[58 + inpos]) << 28);
+ out[35 + outpos] = ((in[58 + inpos]) >>> (38 - 2))
+ | ((in[59 + inpos]) << 2)
+ | ((in[60 + inpos]) << 40);
+ out[36 + outpos] = ((in[60 + inpos]) >>> (38 - 14))
+ | ((in[61 + inpos]) << 14)
+ | ((in[62 + inpos]) << 52);
+ out[37 + outpos] = ((in[62 + inpos]) >>> (38 - 26))
+ | ((in[63 + inpos]) << 26);
+ }
+
+ protected static void fastpackwithoutmask39(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 39);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (39 - 14))
+ | ((in[2 + inpos]) << 14)
+ | ((in[3 + inpos]) << 53);
+ out[2 + outpos] = ((in[3 + inpos]) >>> (39 - 28))
+ | ((in[4 + inpos]) << 28);
+ out[3 + outpos] = ((in[4 + inpos]) >>> (39 - 3))
+ | ((in[5 + inpos]) << 3)
+ | ((in[6 + inpos]) << 42);
+ out[4 + outpos] = ((in[6 + inpos]) >>> (39 - 17))
+ | ((in[7 + inpos]) << 17)
+ | ((in[8 + inpos]) << 56);
+ out[5 + outpos] = ((in[8 + inpos]) >>> (39 - 31))
+ | ((in[9 + inpos]) << 31);
+ out[6 + outpos] = ((in[9 + inpos]) >>> (39 - 6))
+ | ((in[10 + inpos]) << 6)
+ | ((in[11 + inpos]) << 45);
+ out[7 + outpos] = ((in[11 + inpos]) >>> (39 - 20))
+ | ((in[12 + inpos]) << 20)
+ | ((in[13 + inpos]) << 59);
+ out[8 + outpos] = ((in[13 + inpos]) >>> (39 - 34))
+ | ((in[14 + inpos]) << 34);
+ out[9 + outpos] = ((in[14 + inpos]) >>> (39 - 9))
+ | ((in[15 + inpos]) << 9)
+ | ((in[16 + inpos]) << 48);
+ out[10 + outpos] = ((in[16 + inpos]) >>> (39 - 23))
+ | ((in[17 + inpos]) << 23)
+ | ((in[18 + inpos]) << 62);
+ out[11 + outpos] = ((in[18 + inpos]) >>> (39 - 37))
+ | ((in[19 + inpos]) << 37);
+ out[12 + outpos] = ((in[19 + inpos]) >>> (39 - 12))
+ | ((in[20 + inpos]) << 12)
+ | ((in[21 + inpos]) << 51);
+ out[13 + outpos] = ((in[21 + inpos]) >>> (39 - 26))
+ | ((in[22 + inpos]) << 26);
+ out[14 + outpos] = ((in[22 + inpos]) >>> (39 - 1))
+ | ((in[23 + inpos]) << 1)
+ | ((in[24 + inpos]) << 40);
+ out[15 + outpos] = ((in[24 + inpos]) >>> (39 - 15))
+ | ((in[25 + inpos]) << 15)
+ | ((in[26 + inpos]) << 54);
+ out[16 + outpos] = ((in[26 + inpos]) >>> (39 - 29))
+ | ((in[27 + inpos]) << 29);
+ out[17 + outpos] = ((in[27 + inpos]) >>> (39 - 4))
+ | ((in[28 + inpos]) << 4)
+ | ((in[29 + inpos]) << 43);
+ out[18 + outpos] = ((in[29 + inpos]) >>> (39 - 18))
+ | ((in[30 + inpos]) << 18)
+ | ((in[31 + inpos]) << 57);
+ out[19 + outpos] = ((in[31 + inpos]) >>> (39 - 32))
+ | ((in[32 + inpos]) << 32);
+ out[20 + outpos] = ((in[32 + inpos]) >>> (39 - 7))
+ | ((in[33 + inpos]) << 7)
+ | ((in[34 + inpos]) << 46);
+ out[21 + outpos] = ((in[34 + inpos]) >>> (39 - 21))
+ | ((in[35 + inpos]) << 21)
+ | ((in[36 + inpos]) << 60);
+ out[22 + outpos] = ((in[36 + inpos]) >>> (39 - 35))
+ | ((in[37 + inpos]) << 35);
+ out[23 + outpos] = ((in[37 + inpos]) >>> (39 - 10))
+ | ((in[38 + inpos]) << 10)
+ | ((in[39 + inpos]) << 49);
+ out[24 + outpos] = ((in[39 + inpos]) >>> (39 - 24))
+ | ((in[40 + inpos]) << 24)
+ | ((in[41 + inpos]) << 63);
+ out[25 + outpos] = ((in[41 + inpos]) >>> (39 - 38))
+ | ((in[42 + inpos]) << 38);
+ out[26 + outpos] = ((in[42 + inpos]) >>> (39 - 13))
+ | ((in[43 + inpos]) << 13)
+ | ((in[44 + inpos]) << 52);
+ out[27 + outpos] = ((in[44 + inpos]) >>> (39 - 27))
+ | ((in[45 + inpos]) << 27);
+ out[28 + outpos] = ((in[45 + inpos]) >>> (39 - 2))
+ | ((in[46 + inpos]) << 2)
+ | ((in[47 + inpos]) << 41);
+ out[29 + outpos] = ((in[47 + inpos]) >>> (39 - 16))
+ | ((in[48 + inpos]) << 16)
+ | ((in[49 + inpos]) << 55);
+ out[30 + outpos] = ((in[49 + inpos]) >>> (39 - 30))
+ | ((in[50 + inpos]) << 30);
+ out[31 + outpos] = ((in[50 + inpos]) >>> (39 - 5))
+ | ((in[51 + inpos]) << 5)
+ | ((in[52 + inpos]) << 44);
+ out[32 + outpos] = ((in[52 + inpos]) >>> (39 - 19))
+ | ((in[53 + inpos]) << 19)
+ | ((in[54 + inpos]) << 58);
+ out[33 + outpos] = ((in[54 + inpos]) >>> (39 - 33))
+ | ((in[55 + inpos]) << 33);
+ out[34 + outpos] = ((in[55 + inpos]) >>> (39 - 8))
+ | ((in[56 + inpos]) << 8)
+ | ((in[57 + inpos]) << 47);
+ out[35 + outpos] = ((in[57 + inpos]) >>> (39 - 22))
+ | ((in[58 + inpos]) << 22)
+ | ((in[59 + inpos]) << 61);
+ out[36 + outpos] = ((in[59 + inpos]) >>> (39 - 36))
+ | ((in[60 + inpos]) << 36);
+ out[37 + outpos] = ((in[60 + inpos]) >>> (39 - 11))
+ | ((in[61 + inpos]) << 11)
+ | ((in[62 + inpos]) << 50);
+ out[38 + outpos] = ((in[62 + inpos]) >>> (39 - 25))
+ | ((in[63 + inpos]) << 25);
+ }
+
+ protected static void fastpackwithoutmask40(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 40);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (40 - 16))
+ | ((in[2 + inpos]) << 16)
+ | ((in[3 + inpos]) << 56);
+ out[2 + outpos] = ((in[3 + inpos]) >>> (40 - 32))
+ | ((in[4 + inpos]) << 32);
+ out[3 + outpos] = ((in[4 + inpos]) >>> (40 - 8))
+ | ((in[5 + inpos]) << 8)
+ | ((in[6 + inpos]) << 48);
+ out[4 + outpos] = ((in[6 + inpos]) >>> (40 - 24))
+ | ((in[7 + inpos]) << 24);
+ out[5 + outpos] = in[8 + inpos]
+ | ((in[9 + inpos]) << 40);
+ out[6 + outpos] = ((in[9 + inpos]) >>> (40 - 16))
+ | ((in[10 + inpos]) << 16)
+ | ((in[11 + inpos]) << 56);
+ out[7 + outpos] = ((in[11 + inpos]) >>> (40 - 32))
+ | ((in[12 + inpos]) << 32);
+ out[8 + outpos] = ((in[12 + inpos]) >>> (40 - 8))
+ | ((in[13 + inpos]) << 8)
+ | ((in[14 + inpos]) << 48);
+ out[9 + outpos] = ((in[14 + inpos]) >>> (40 - 24))
+ | ((in[15 + inpos]) << 24);
+ out[10 + outpos] = in[16 + inpos]
+ | ((in[17 + inpos]) << 40);
+ out[11 + outpos] = ((in[17 + inpos]) >>> (40 - 16))
+ | ((in[18 + inpos]) << 16)
+ | ((in[19 + inpos]) << 56);
+ out[12 + outpos] = ((in[19 + inpos]) >>> (40 - 32))
+ | ((in[20 + inpos]) << 32);
+ out[13 + outpos] = ((in[20 + inpos]) >>> (40 - 8))
+ | ((in[21 + inpos]) << 8)
+ | ((in[22 + inpos]) << 48);
+ out[14 + outpos] = ((in[22 + inpos]) >>> (40 - 24))
+ | ((in[23 + inpos]) << 24);
+ out[15 + outpos] = in[24 + inpos]
+ | ((in[25 + inpos]) << 40);
+ out[16 + outpos] = ((in[25 + inpos]) >>> (40 - 16))
+ | ((in[26 + inpos]) << 16)
+ | ((in[27 + inpos]) << 56);
+ out[17 + outpos] = ((in[27 + inpos]) >>> (40 - 32))
+ | ((in[28 + inpos]) << 32);
+ out[18 + outpos] = ((in[28 + inpos]) >>> (40 - 8))
+ | ((in[29 + inpos]) << 8)
+ | ((in[30 + inpos]) << 48);
+ out[19 + outpos] = ((in[30 + inpos]) >>> (40 - 24))
+ | ((in[31 + inpos]) << 24);
+ out[20 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 40);
+ out[21 + outpos] = ((in[33 + inpos]) >>> (40 - 16))
+ | ((in[34 + inpos]) << 16)
+ | ((in[35 + inpos]) << 56);
+ out[22 + outpos] = ((in[35 + inpos]) >>> (40 - 32))
+ | ((in[36 + inpos]) << 32);
+ out[23 + outpos] = ((in[36 + inpos]) >>> (40 - 8))
+ | ((in[37 + inpos]) << 8)
+ | ((in[38 + inpos]) << 48);
+ out[24 + outpos] = ((in[38 + inpos]) >>> (40 - 24))
+ | ((in[39 + inpos]) << 24);
+ out[25 + outpos] = in[40 + inpos]
+ | ((in[41 + inpos]) << 40);
+ out[26 + outpos] = ((in[41 + inpos]) >>> (40 - 16))
+ | ((in[42 + inpos]) << 16)
+ | ((in[43 + inpos]) << 56);
+ out[27 + outpos] = ((in[43 + inpos]) >>> (40 - 32))
+ | ((in[44 + inpos]) << 32);
+ out[28 + outpos] = ((in[44 + inpos]) >>> (40 - 8))
+ | ((in[45 + inpos]) << 8)
+ | ((in[46 + inpos]) << 48);
+ out[29 + outpos] = ((in[46 + inpos]) >>> (40 - 24))
+ | ((in[47 + inpos]) << 24);
+ out[30 + outpos] = in[48 + inpos]
+ | ((in[49 + inpos]) << 40);
+ out[31 + outpos] = ((in[49 + inpos]) >>> (40 - 16))
+ | ((in[50 + inpos]) << 16)
+ | ((in[51 + inpos]) << 56);
+ out[32 + outpos] = ((in[51 + inpos]) >>> (40 - 32))
+ | ((in[52 + inpos]) << 32);
+ out[33 + outpos] = ((in[52 + inpos]) >>> (40 - 8))
+ | ((in[53 + inpos]) << 8)
+ | ((in[54 + inpos]) << 48);
+ out[34 + outpos] = ((in[54 + inpos]) >>> (40 - 24))
+ | ((in[55 + inpos]) << 24);
+ out[35 + outpos] = in[56 + inpos]
+ | ((in[57 + inpos]) << 40);
+ out[36 + outpos] = ((in[57 + inpos]) >>> (40 - 16))
+ | ((in[58 + inpos]) << 16)
+ | ((in[59 + inpos]) << 56);
+ out[37 + outpos] = ((in[59 + inpos]) >>> (40 - 32))
+ | ((in[60 + inpos]) << 32);
+ out[38 + outpos] = ((in[60 + inpos]) >>> (40 - 8))
+ | ((in[61 + inpos]) << 8)
+ | ((in[62 + inpos]) << 48);
+ out[39 + outpos] = ((in[62 + inpos]) >>> (40 - 24))
+ | ((in[63 + inpos]) << 24);
+ }
+
+ protected static void fastpackwithoutmask41(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 41);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (41 - 18))
+ | ((in[2 + inpos]) << 18)
+ | ((in[3 + inpos]) << 59);
+ out[2 + outpos] = ((in[3 + inpos]) >>> (41 - 36))
+ | ((in[4 + inpos]) << 36);
+ out[3 + outpos] = ((in[4 + inpos]) >>> (41 - 13))
+ | ((in[5 + inpos]) << 13)
+ | ((in[6 + inpos]) << 54);
+ out[4 + outpos] = ((in[6 + inpos]) >>> (41 - 31))
+ | ((in[7 + inpos]) << 31);
+ out[5 + outpos] = ((in[7 + inpos]) >>> (41 - 8))
+ | ((in[8 + inpos]) << 8)
+ | ((in[9 + inpos]) << 49);
+ out[6 + outpos] = ((in[9 + inpos]) >>> (41 - 26))
+ | ((in[10 + inpos]) << 26);
+ out[7 + outpos] = ((in[10 + inpos]) >>> (41 - 3))
+ | ((in[11 + inpos]) << 3)
+ | ((in[12 + inpos]) << 44);
+ out[8 + outpos] = ((in[12 + inpos]) >>> (41 - 21))
+ | ((in[13 + inpos]) << 21)
+ | ((in[14 + inpos]) << 62);
+ out[9 + outpos] = ((in[14 + inpos]) >>> (41 - 39))
+ | ((in[15 + inpos]) << 39);
+ out[10 + outpos] = ((in[15 + inpos]) >>> (41 - 16))
+ | ((in[16 + inpos]) << 16)
+ | ((in[17 + inpos]) << 57);
+ out[11 + outpos] = ((in[17 + inpos]) >>> (41 - 34))
+ | ((in[18 + inpos]) << 34);
+ out[12 + outpos] = ((in[18 + inpos]) >>> (41 - 11))
+ | ((in[19 + inpos]) << 11)
+ | ((in[20 + inpos]) << 52);
+ out[13 + outpos] = ((in[20 + inpos]) >>> (41 - 29))
+ | ((in[21 + inpos]) << 29);
+ out[14 + outpos] = ((in[21 + inpos]) >>> (41 - 6))
+ | ((in[22 + inpos]) << 6)
+ | ((in[23 + inpos]) << 47);
+ out[15 + outpos] = ((in[23 + inpos]) >>> (41 - 24))
+ | ((in[24 + inpos]) << 24);
+ out[16 + outpos] = ((in[24 + inpos]) >>> (41 - 1))
+ | ((in[25 + inpos]) << 1)
+ | ((in[26 + inpos]) << 42);
+ out[17 + outpos] = ((in[26 + inpos]) >>> (41 - 19))
+ | ((in[27 + inpos]) << 19)
+ | ((in[28 + inpos]) << 60);
+ out[18 + outpos] = ((in[28 + inpos]) >>> (41 - 37))
+ | ((in[29 + inpos]) << 37);
+ out[19 + outpos] = ((in[29 + inpos]) >>> (41 - 14))
+ | ((in[30 + inpos]) << 14)
+ | ((in[31 + inpos]) << 55);
+ out[20 + outpos] = ((in[31 + inpos]) >>> (41 - 32))
+ | ((in[32 + inpos]) << 32);
+ out[21 + outpos] = ((in[32 + inpos]) >>> (41 - 9))
+ | ((in[33 + inpos]) << 9)
+ | ((in[34 + inpos]) << 50);
+ out[22 + outpos] = ((in[34 + inpos]) >>> (41 - 27))
+ | ((in[35 + inpos]) << 27);
+ out[23 + outpos] = ((in[35 + inpos]) >>> (41 - 4))
+ | ((in[36 + inpos]) << 4)
+ | ((in[37 + inpos]) << 45);
+ out[24 + outpos] = ((in[37 + inpos]) >>> (41 - 22))
+ | ((in[38 + inpos]) << 22)
+ | ((in[39 + inpos]) << 63);
+ out[25 + outpos] = ((in[39 + inpos]) >>> (41 - 40))
+ | ((in[40 + inpos]) << 40);
+ out[26 + outpos] = ((in[40 + inpos]) >>> (41 - 17))
+ | ((in[41 + inpos]) << 17)
+ | ((in[42 + inpos]) << 58);
+ out[27 + outpos] = ((in[42 + inpos]) >>> (41 - 35))
+ | ((in[43 + inpos]) << 35);
+ out[28 + outpos] = ((in[43 + inpos]) >>> (41 - 12))
+ | ((in[44 + inpos]) << 12)
+ | ((in[45 + inpos]) << 53);
+ out[29 + outpos] = ((in[45 + inpos]) >>> (41 - 30))
+ | ((in[46 + inpos]) << 30);
+ out[30 + outpos] = ((in[46 + inpos]) >>> (41 - 7))
+ | ((in[47 + inpos]) << 7)
+ | ((in[48 + inpos]) << 48);
+ out[31 + outpos] = ((in[48 + inpos]) >>> (41 - 25))
+ | ((in[49 + inpos]) << 25);
+ out[32 + outpos] = ((in[49 + inpos]) >>> (41 - 2))
+ | ((in[50 + inpos]) << 2)
+ | ((in[51 + inpos]) << 43);
+ out[33 + outpos] = ((in[51 + inpos]) >>> (41 - 20))
+ | ((in[52 + inpos]) << 20)
+ | ((in[53 + inpos]) << 61);
+ out[34 + outpos] = ((in[53 + inpos]) >>> (41 - 38))
+ | ((in[54 + inpos]) << 38);
+ out[35 + outpos] = ((in[54 + inpos]) >>> (41 - 15))
+ | ((in[55 + inpos]) << 15)
+ | ((in[56 + inpos]) << 56);
+ out[36 + outpos] = ((in[56 + inpos]) >>> (41 - 33))
+ | ((in[57 + inpos]) << 33);
+ out[37 + outpos] = ((in[57 + inpos]) >>> (41 - 10))
+ | ((in[58 + inpos]) << 10)
+ | ((in[59 + inpos]) << 51);
+ out[38 + outpos] = ((in[59 + inpos]) >>> (41 - 28))
+ | ((in[60 + inpos]) << 28);
+ out[39 + outpos] = ((in[60 + inpos]) >>> (41 - 5))
+ | ((in[61 + inpos]) << 5)
+ | ((in[62 + inpos]) << 46);
+ out[40 + outpos] = ((in[62 + inpos]) >>> (41 - 23))
+ | ((in[63 + inpos]) << 23);
+ }
+
+ protected static void fastpackwithoutmask42(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 42);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (42 - 20))
+ | ((in[2 + inpos]) << 20)
+ | ((in[3 + inpos]) << 62);
+ out[2 + outpos] = ((in[3 + inpos]) >>> (42 - 40))
+ | ((in[4 + inpos]) << 40);
+ out[3 + outpos] = ((in[4 + inpos]) >>> (42 - 18))
+ | ((in[5 + inpos]) << 18)
+ | ((in[6 + inpos]) << 60);
+ out[4 + outpos] = ((in[6 + inpos]) >>> (42 - 38))
+ | ((in[7 + inpos]) << 38);
+ out[5 + outpos] = ((in[7 + inpos]) >>> (42 - 16))
+ | ((in[8 + inpos]) << 16)
+ | ((in[9 + inpos]) << 58);
+ out[6 + outpos] = ((in[9 + inpos]) >>> (42 - 36))
+ | ((in[10 + inpos]) << 36);
+ out[7 + outpos] = ((in[10 + inpos]) >>> (42 - 14))
+ | ((in[11 + inpos]) << 14)
+ | ((in[12 + inpos]) << 56);
+ out[8 + outpos] = ((in[12 + inpos]) >>> (42 - 34))
+ | ((in[13 + inpos]) << 34);
+ out[9 + outpos] = ((in[13 + inpos]) >>> (42 - 12))
+ | ((in[14 + inpos]) << 12)
+ | ((in[15 + inpos]) << 54);
+ out[10 + outpos] = ((in[15 + inpos]) >>> (42 - 32))
+ | ((in[16 + inpos]) << 32);
+ out[11 + outpos] = ((in[16 + inpos]) >>> (42 - 10))
+ | ((in[17 + inpos]) << 10)
+ | ((in[18 + inpos]) << 52);
+ out[12 + outpos] = ((in[18 + inpos]) >>> (42 - 30))
+ | ((in[19 + inpos]) << 30);
+ out[13 + outpos] = ((in[19 + inpos]) >>> (42 - 8))
+ | ((in[20 + inpos]) << 8)
+ | ((in[21 + inpos]) << 50);
+ out[14 + outpos] = ((in[21 + inpos]) >>> (42 - 28))
+ | ((in[22 + inpos]) << 28);
+ out[15 + outpos] = ((in[22 + inpos]) >>> (42 - 6))
+ | ((in[23 + inpos]) << 6)
+ | ((in[24 + inpos]) << 48);
+ out[16 + outpos] = ((in[24 + inpos]) >>> (42 - 26))
+ | ((in[25 + inpos]) << 26);
+ out[17 + outpos] = ((in[25 + inpos]) >>> (42 - 4))
+ | ((in[26 + inpos]) << 4)
+ | ((in[27 + inpos]) << 46);
+ out[18 + outpos] = ((in[27 + inpos]) >>> (42 - 24))
+ | ((in[28 + inpos]) << 24);
+ out[19 + outpos] = ((in[28 + inpos]) >>> (42 - 2))
+ | ((in[29 + inpos]) << 2)
+ | ((in[30 + inpos]) << 44);
+ out[20 + outpos] = ((in[30 + inpos]) >>> (42 - 22))
+ | ((in[31 + inpos]) << 22);
+ out[21 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 42);
+ out[22 + outpos] = ((in[33 + inpos]) >>> (42 - 20))
+ | ((in[34 + inpos]) << 20)
+ | ((in[35 + inpos]) << 62);
+ out[23 + outpos] = ((in[35 + inpos]) >>> (42 - 40))
+ | ((in[36 + inpos]) << 40);
+ out[24 + outpos] = ((in[36 + inpos]) >>> (42 - 18))
+ | ((in[37 + inpos]) << 18)
+ | ((in[38 + inpos]) << 60);
+ out[25 + outpos] = ((in[38 + inpos]) >>> (42 - 38))
+ | ((in[39 + inpos]) << 38);
+ out[26 + outpos] = ((in[39 + inpos]) >>> (42 - 16))
+ | ((in[40 + inpos]) << 16)
+ | ((in[41 + inpos]) << 58);
+ out[27 + outpos] = ((in[41 + inpos]) >>> (42 - 36))
+ | ((in[42 + inpos]) << 36);
+ out[28 + outpos] = ((in[42 + inpos]) >>> (42 - 14))
+ | ((in[43 + inpos]) << 14)
+ | ((in[44 + inpos]) << 56);
+ out[29 + outpos] = ((in[44 + inpos]) >>> (42 - 34))
+ | ((in[45 + inpos]) << 34);
+ out[30 + outpos] = ((in[45 + inpos]) >>> (42 - 12))
+ | ((in[46 + inpos]) << 12)
+ | ((in[47 + inpos]) << 54);
+ out[31 + outpos] = ((in[47 + inpos]) >>> (42 - 32))
+ | ((in[48 + inpos]) << 32);
+ out[32 + outpos] = ((in[48 + inpos]) >>> (42 - 10))
+ | ((in[49 + inpos]) << 10)
+ | ((in[50 + inpos]) << 52);
+ out[33 + outpos] = ((in[50 + inpos]) >>> (42 - 30))
+ | ((in[51 + inpos]) << 30);
+ out[34 + outpos] = ((in[51 + inpos]) >>> (42 - 8))
+ | ((in[52 + inpos]) << 8)
+ | ((in[53 + inpos]) << 50);
+ out[35 + outpos] = ((in[53 + inpos]) >>> (42 - 28))
+ | ((in[54 + inpos]) << 28);
+ out[36 + outpos] = ((in[54 + inpos]) >>> (42 - 6))
+ | ((in[55 + inpos]) << 6)
+ | ((in[56 + inpos]) << 48);
+ out[37 + outpos] = ((in[56 + inpos]) >>> (42 - 26))
+ | ((in[57 + inpos]) << 26);
+ out[38 + outpos] = ((in[57 + inpos]) >>> (42 - 4))
+ | ((in[58 + inpos]) << 4)
+ | ((in[59 + inpos]) << 46);
+ out[39 + outpos] = ((in[59 + inpos]) >>> (42 - 24))
+ | ((in[60 + inpos]) << 24);
+ out[40 + outpos] = ((in[60 + inpos]) >>> (42 - 2))
+ | ((in[61 + inpos]) << 2)
+ | ((in[62 + inpos]) << 44);
+ out[41 + outpos] = ((in[62 + inpos]) >>> (42 - 22))
+ | ((in[63 + inpos]) << 22);
+ }
+
+ protected static void fastpackwithoutmask43(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 43);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (43 - 22))
+ | ((in[2 + inpos]) << 22);
+ out[2 + outpos] = ((in[2 + inpos]) >>> (43 - 1))
+ | ((in[3 + inpos]) << 1)
+ | ((in[4 + inpos]) << 44);
+ out[3 + outpos] = ((in[4 + inpos]) >>> (43 - 23))
+ | ((in[5 + inpos]) << 23);
+ out[4 + outpos] = ((in[5 + inpos]) >>> (43 - 2))
+ | ((in[6 + inpos]) << 2)
+ | ((in[7 + inpos]) << 45);
+ out[5 + outpos] = ((in[7 + inpos]) >>> (43 - 24))
+ | ((in[8 + inpos]) << 24);
+ out[6 + outpos] = ((in[8 + inpos]) >>> (43 - 3))
+ | ((in[9 + inpos]) << 3)
+ | ((in[10 + inpos]) << 46);
+ out[7 + outpos] = ((in[10 + inpos]) >>> (43 - 25))
+ | ((in[11 + inpos]) << 25);
+ out[8 + outpos] = ((in[11 + inpos]) >>> (43 - 4))
+ | ((in[12 + inpos]) << 4)
+ | ((in[13 + inpos]) << 47);
+ out[9 + outpos] = ((in[13 + inpos]) >>> (43 - 26))
+ | ((in[14 + inpos]) << 26);
+ out[10 + outpos] = ((in[14 + inpos]) >>> (43 - 5))
+ | ((in[15 + inpos]) << 5)
+ | ((in[16 + inpos]) << 48);
+ out[11 + outpos] = ((in[16 + inpos]) >>> (43 - 27))
+ | ((in[17 + inpos]) << 27);
+ out[12 + outpos] = ((in[17 + inpos]) >>> (43 - 6))
+ | ((in[18 + inpos]) << 6)
+ | ((in[19 + inpos]) << 49);
+ out[13 + outpos] = ((in[19 + inpos]) >>> (43 - 28))
+ | ((in[20 + inpos]) << 28);
+ out[14 + outpos] = ((in[20 + inpos]) >>> (43 - 7))
+ | ((in[21 + inpos]) << 7)
+ | ((in[22 + inpos]) << 50);
+ out[15 + outpos] = ((in[22 + inpos]) >>> (43 - 29))
+ | ((in[23 + inpos]) << 29);
+ out[16 + outpos] = ((in[23 + inpos]) >>> (43 - 8))
+ | ((in[24 + inpos]) << 8)
+ | ((in[25 + inpos]) << 51);
+ out[17 + outpos] = ((in[25 + inpos]) >>> (43 - 30))
+ | ((in[26 + inpos]) << 30);
+ out[18 + outpos] = ((in[26 + inpos]) >>> (43 - 9))
+ | ((in[27 + inpos]) << 9)
+ | ((in[28 + inpos]) << 52);
+ out[19 + outpos] = ((in[28 + inpos]) >>> (43 - 31))
+ | ((in[29 + inpos]) << 31);
+ out[20 + outpos] = ((in[29 + inpos]) >>> (43 - 10))
+ | ((in[30 + inpos]) << 10)
+ | ((in[31 + inpos]) << 53);
+ out[21 + outpos] = ((in[31 + inpos]) >>> (43 - 32))
+ | ((in[32 + inpos]) << 32);
+ out[22 + outpos] = ((in[32 + inpos]) >>> (43 - 11))
+ | ((in[33 + inpos]) << 11)
+ | ((in[34 + inpos]) << 54);
+ out[23 + outpos] = ((in[34 + inpos]) >>> (43 - 33))
+ | ((in[35 + inpos]) << 33);
+ out[24 + outpos] = ((in[35 + inpos]) >>> (43 - 12))
+ | ((in[36 + inpos]) << 12)
+ | ((in[37 + inpos]) << 55);
+ out[25 + outpos] = ((in[37 + inpos]) >>> (43 - 34))
+ | ((in[38 + inpos]) << 34);
+ out[26 + outpos] = ((in[38 + inpos]) >>> (43 - 13))
+ | ((in[39 + inpos]) << 13)
+ | ((in[40 + inpos]) << 56);
+ out[27 + outpos] = ((in[40 + inpos]) >>> (43 - 35))
+ | ((in[41 + inpos]) << 35);
+ out[28 + outpos] = ((in[41 + inpos]) >>> (43 - 14))
+ | ((in[42 + inpos]) << 14)
+ | ((in[43 + inpos]) << 57);
+ out[29 + outpos] = ((in[43 + inpos]) >>> (43 - 36))
+ | ((in[44 + inpos]) << 36);
+ out[30 + outpos] = ((in[44 + inpos]) >>> (43 - 15))
+ | ((in[45 + inpos]) << 15)
+ | ((in[46 + inpos]) << 58);
+ out[31 + outpos] = ((in[46 + inpos]) >>> (43 - 37))
+ | ((in[47 + inpos]) << 37);
+ out[32 + outpos] = ((in[47 + inpos]) >>> (43 - 16))
+ | ((in[48 + inpos]) << 16)
+ | ((in[49 + inpos]) << 59);
+ out[33 + outpos] = ((in[49 + inpos]) >>> (43 - 38))
+ | ((in[50 + inpos]) << 38);
+ out[34 + outpos] = ((in[50 + inpos]) >>> (43 - 17))
+ | ((in[51 + inpos]) << 17)
+ | ((in[52 + inpos]) << 60);
+ out[35 + outpos] = ((in[52 + inpos]) >>> (43 - 39))
+ | ((in[53 + inpos]) << 39);
+ out[36 + outpos] = ((in[53 + inpos]) >>> (43 - 18))
+ | ((in[54 + inpos]) << 18)
+ | ((in[55 + inpos]) << 61);
+ out[37 + outpos] = ((in[55 + inpos]) >>> (43 - 40))
+ | ((in[56 + inpos]) << 40);
+ out[38 + outpos] = ((in[56 + inpos]) >>> (43 - 19))
+ | ((in[57 + inpos]) << 19)
+ | ((in[58 + inpos]) << 62);
+ out[39 + outpos] = ((in[58 + inpos]) >>> (43 - 41))
+ | ((in[59 + inpos]) << 41);
+ out[40 + outpos] = ((in[59 + inpos]) >>> (43 - 20))
+ | ((in[60 + inpos]) << 20)
+ | ((in[61 + inpos]) << 63);
+ out[41 + outpos] = ((in[61 + inpos]) >>> (43 - 42))
+ | ((in[62 + inpos]) << 42);
+ out[42 + outpos] = ((in[62 + inpos]) >>> (43 - 21))
+ | ((in[63 + inpos]) << 21);
+ }
+
+ protected static void fastpackwithoutmask44(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 44);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (44 - 24))
+ | ((in[2 + inpos]) << 24);
+ out[2 + outpos] = ((in[2 + inpos]) >>> (44 - 4))
+ | ((in[3 + inpos]) << 4)
+ | ((in[4 + inpos]) << 48);
+ out[3 + outpos] = ((in[4 + inpos]) >>> (44 - 28))
+ | ((in[5 + inpos]) << 28);
+ out[4 + outpos] = ((in[5 + inpos]) >>> (44 - 8))
+ | ((in[6 + inpos]) << 8)
+ | ((in[7 + inpos]) << 52);
+ out[5 + outpos] = ((in[7 + inpos]) >>> (44 - 32))
+ | ((in[8 + inpos]) << 32);
+ out[6 + outpos] = ((in[8 + inpos]) >>> (44 - 12))
+ | ((in[9 + inpos]) << 12)
+ | ((in[10 + inpos]) << 56);
+ out[7 + outpos] = ((in[10 + inpos]) >>> (44 - 36))
+ | ((in[11 + inpos]) << 36);
+ out[8 + outpos] = ((in[11 + inpos]) >>> (44 - 16))
+ | ((in[12 + inpos]) << 16)
+ | ((in[13 + inpos]) << 60);
+ out[9 + outpos] = ((in[13 + inpos]) >>> (44 - 40))
+ | ((in[14 + inpos]) << 40);
+ out[10 + outpos] = ((in[14 + inpos]) >>> (44 - 20))
+ | ((in[15 + inpos]) << 20);
+ out[11 + outpos] = in[16 + inpos]
+ | ((in[17 + inpos]) << 44);
+ out[12 + outpos] = ((in[17 + inpos]) >>> (44 - 24))
+ | ((in[18 + inpos]) << 24);
+ out[13 + outpos] = ((in[18 + inpos]) >>> (44 - 4))
+ | ((in[19 + inpos]) << 4)
+ | ((in[20 + inpos]) << 48);
+ out[14 + outpos] = ((in[20 + inpos]) >>> (44 - 28))
+ | ((in[21 + inpos]) << 28);
+ out[15 + outpos] = ((in[21 + inpos]) >>> (44 - 8))
+ | ((in[22 + inpos]) << 8)
+ | ((in[23 + inpos]) << 52);
+ out[16 + outpos] = ((in[23 + inpos]) >>> (44 - 32))
+ | ((in[24 + inpos]) << 32);
+ out[17 + outpos] = ((in[24 + inpos]) >>> (44 - 12))
+ | ((in[25 + inpos]) << 12)
+ | ((in[26 + inpos]) << 56);
+ out[18 + outpos] = ((in[26 + inpos]) >>> (44 - 36))
+ | ((in[27 + inpos]) << 36);
+ out[19 + outpos] = ((in[27 + inpos]) >>> (44 - 16))
+ | ((in[28 + inpos]) << 16)
+ | ((in[29 + inpos]) << 60);
+ out[20 + outpos] = ((in[29 + inpos]) >>> (44 - 40))
+ | ((in[30 + inpos]) << 40);
+ out[21 + outpos] = ((in[30 + inpos]) >>> (44 - 20))
+ | ((in[31 + inpos]) << 20);
+ out[22 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 44);
+ out[23 + outpos] = ((in[33 + inpos]) >>> (44 - 24))
+ | ((in[34 + inpos]) << 24);
+ out[24 + outpos] = ((in[34 + inpos]) >>> (44 - 4))
+ | ((in[35 + inpos]) << 4)
+ | ((in[36 + inpos]) << 48);
+ out[25 + outpos] = ((in[36 + inpos]) >>> (44 - 28))
+ | ((in[37 + inpos]) << 28);
+ out[26 + outpos] = ((in[37 + inpos]) >>> (44 - 8))
+ | ((in[38 + inpos]) << 8)
+ | ((in[39 + inpos]) << 52);
+ out[27 + outpos] = ((in[39 + inpos]) >>> (44 - 32))
+ | ((in[40 + inpos]) << 32);
+ out[28 + outpos] = ((in[40 + inpos]) >>> (44 - 12))
+ | ((in[41 + inpos]) << 12)
+ | ((in[42 + inpos]) << 56);
+ out[29 + outpos] = ((in[42 + inpos]) >>> (44 - 36))
+ | ((in[43 + inpos]) << 36);
+ out[30 + outpos] = ((in[43 + inpos]) >>> (44 - 16))
+ | ((in[44 + inpos]) << 16)
+ | ((in[45 + inpos]) << 60);
+ out[31 + outpos] = ((in[45 + inpos]) >>> (44 - 40))
+ | ((in[46 + inpos]) << 40);
+ out[32 + outpos] = ((in[46 + inpos]) >>> (44 - 20))
+ | ((in[47 + inpos]) << 20);
+ out[33 + outpos] = in[48 + inpos]
+ | ((in[49 + inpos]) << 44);
+ out[34 + outpos] = ((in[49 + inpos]) >>> (44 - 24))
+ | ((in[50 + inpos]) << 24);
+ out[35 + outpos] = ((in[50 + inpos]) >>> (44 - 4))
+ | ((in[51 + inpos]) << 4)
+ | ((in[52 + inpos]) << 48);
+ out[36 + outpos] = ((in[52 + inpos]) >>> (44 - 28))
+ | ((in[53 + inpos]) << 28);
+ out[37 + outpos] = ((in[53 + inpos]) >>> (44 - 8))
+ | ((in[54 + inpos]) << 8)
+ | ((in[55 + inpos]) << 52);
+ out[38 + outpos] = ((in[55 + inpos]) >>> (44 - 32))
+ | ((in[56 + inpos]) << 32);
+ out[39 + outpos] = ((in[56 + inpos]) >>> (44 - 12))
+ | ((in[57 + inpos]) << 12)
+ | ((in[58 + inpos]) << 56);
+ out[40 + outpos] = ((in[58 + inpos]) >>> (44 - 36))
+ | ((in[59 + inpos]) << 36);
+ out[41 + outpos] = ((in[59 + inpos]) >>> (44 - 16))
+ | ((in[60 + inpos]) << 16)
+ | ((in[61 + inpos]) << 60);
+ out[42 + outpos] = ((in[61 + inpos]) >>> (44 - 40))
+ | ((in[62 + inpos]) << 40);
+ out[43 + outpos] = ((in[62 + inpos]) >>> (44 - 20))
+ | ((in[63 + inpos]) << 20);
+ }
+
+ protected static void fastpackwithoutmask45(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 45);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (45 - 26))
+ | ((in[2 + inpos]) << 26);
+ out[2 + outpos] = ((in[2 + inpos]) >>> (45 - 7))
+ | ((in[3 + inpos]) << 7)
+ | ((in[4 + inpos]) << 52);
+ out[3 + outpos] = ((in[4 + inpos]) >>> (45 - 33))
+ | ((in[5 + inpos]) << 33);
+ out[4 + outpos] = ((in[5 + inpos]) >>> (45 - 14))
+ | ((in[6 + inpos]) << 14)
+ | ((in[7 + inpos]) << 59);
+ out[5 + outpos] = ((in[7 + inpos]) >>> (45 - 40))
+ | ((in[8 + inpos]) << 40);
+ out[6 + outpos] = ((in[8 + inpos]) >>> (45 - 21))
+ | ((in[9 + inpos]) << 21);
+ out[7 + outpos] = ((in[9 + inpos]) >>> (45 - 2))
+ | ((in[10 + inpos]) << 2)
+ | ((in[11 + inpos]) << 47);
+ out[8 + outpos] = ((in[11 + inpos]) >>> (45 - 28))
+ | ((in[12 + inpos]) << 28);
+ out[9 + outpos] = ((in[12 + inpos]) >>> (45 - 9))
+ | ((in[13 + inpos]) << 9)
+ | ((in[14 + inpos]) << 54);
+ out[10 + outpos] = ((in[14 + inpos]) >>> (45 - 35))
+ | ((in[15 + inpos]) << 35);
+ out[11 + outpos] = ((in[15 + inpos]) >>> (45 - 16))
+ | ((in[16 + inpos]) << 16)
+ | ((in[17 + inpos]) << 61);
+ out[12 + outpos] = ((in[17 + inpos]) >>> (45 - 42))
+ | ((in[18 + inpos]) << 42);
+ out[13 + outpos] = ((in[18 + inpos]) >>> (45 - 23))
+ | ((in[19 + inpos]) << 23);
+ out[14 + outpos] = ((in[19 + inpos]) >>> (45 - 4))
+ | ((in[20 + inpos]) << 4)
+ | ((in[21 + inpos]) << 49);
+ out[15 + outpos] = ((in[21 + inpos]) >>> (45 - 30))
+ | ((in[22 + inpos]) << 30);
+ out[16 + outpos] = ((in[22 + inpos]) >>> (45 - 11))
+ | ((in[23 + inpos]) << 11)
+ | ((in[24 + inpos]) << 56);
+ out[17 + outpos] = ((in[24 + inpos]) >>> (45 - 37))
+ | ((in[25 + inpos]) << 37);
+ out[18 + outpos] = ((in[25 + inpos]) >>> (45 - 18))
+ | ((in[26 + inpos]) << 18)
+ | ((in[27 + inpos]) << 63);
+ out[19 + outpos] = ((in[27 + inpos]) >>> (45 - 44))
+ | ((in[28 + inpos]) << 44);
+ out[20 + outpos] = ((in[28 + inpos]) >>> (45 - 25))
+ | ((in[29 + inpos]) << 25);
+ out[21 + outpos] = ((in[29 + inpos]) >>> (45 - 6))
+ | ((in[30 + inpos]) << 6)
+ | ((in[31 + inpos]) << 51);
+ out[22 + outpos] = ((in[31 + inpos]) >>> (45 - 32))
+ | ((in[32 + inpos]) << 32);
+ out[23 + outpos] = ((in[32 + inpos]) >>> (45 - 13))
+ | ((in[33 + inpos]) << 13)
+ | ((in[34 + inpos]) << 58);
+ out[24 + outpos] = ((in[34 + inpos]) >>> (45 - 39))
+ | ((in[35 + inpos]) << 39);
+ out[25 + outpos] = ((in[35 + inpos]) >>> (45 - 20))
+ | ((in[36 + inpos]) << 20);
+ out[26 + outpos] = ((in[36 + inpos]) >>> (45 - 1))
+ | ((in[37 + inpos]) << 1)
+ | ((in[38 + inpos]) << 46);
+ out[27 + outpos] = ((in[38 + inpos]) >>> (45 - 27))
+ | ((in[39 + inpos]) << 27);
+ out[28 + outpos] = ((in[39 + inpos]) >>> (45 - 8))
+ | ((in[40 + inpos]) << 8)
+ | ((in[41 + inpos]) << 53);
+ out[29 + outpos] = ((in[41 + inpos]) >>> (45 - 34))
+ | ((in[42 + inpos]) << 34);
+ out[30 + outpos] = ((in[42 + inpos]) >>> (45 - 15))
+ | ((in[43 + inpos]) << 15)
+ | ((in[44 + inpos]) << 60);
+ out[31 + outpos] = ((in[44 + inpos]) >>> (45 - 41))
+ | ((in[45 + inpos]) << 41);
+ out[32 + outpos] = ((in[45 + inpos]) >>> (45 - 22))
+ | ((in[46 + inpos]) << 22);
+ out[33 + outpos] = ((in[46 + inpos]) >>> (45 - 3))
+ | ((in[47 + inpos]) << 3)
+ | ((in[48 + inpos]) << 48);
+ out[34 + outpos] = ((in[48 + inpos]) >>> (45 - 29))
+ | ((in[49 + inpos]) << 29);
+ out[35 + outpos] = ((in[49 + inpos]) >>> (45 - 10))
+ | ((in[50 + inpos]) << 10)
+ | ((in[51 + inpos]) << 55);
+ out[36 + outpos] = ((in[51 + inpos]) >>> (45 - 36))
+ | ((in[52 + inpos]) << 36);
+ out[37 + outpos] = ((in[52 + inpos]) >>> (45 - 17))
+ | ((in[53 + inpos]) << 17)
+ | ((in[54 + inpos]) << 62);
+ out[38 + outpos] = ((in[54 + inpos]) >>> (45 - 43))
+ | ((in[55 + inpos]) << 43);
+ out[39 + outpos] = ((in[55 + inpos]) >>> (45 - 24))
+ | ((in[56 + inpos]) << 24);
+ out[40 + outpos] = ((in[56 + inpos]) >>> (45 - 5))
+ | ((in[57 + inpos]) << 5)
+ | ((in[58 + inpos]) << 50);
+ out[41 + outpos] = ((in[58 + inpos]) >>> (45 - 31))
+ | ((in[59 + inpos]) << 31);
+ out[42 + outpos] = ((in[59 + inpos]) >>> (45 - 12))
+ | ((in[60 + inpos]) << 12)
+ | ((in[61 + inpos]) << 57);
+ out[43 + outpos] = ((in[61 + inpos]) >>> (45 - 38))
+ | ((in[62 + inpos]) << 38);
+ out[44 + outpos] = ((in[62 + inpos]) >>> (45 - 19))
+ | ((in[63 + inpos]) << 19);
+ }
+
+ protected static void fastpackwithoutmask46(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 46);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (46 - 28))
+ | ((in[2 + inpos]) << 28);
+ out[2 + outpos] = ((in[2 + inpos]) >>> (46 - 10))
+ | ((in[3 + inpos]) << 10)
+ | ((in[4 + inpos]) << 56);
+ out[3 + outpos] = ((in[4 + inpos]) >>> (46 - 38))
+ | ((in[5 + inpos]) << 38);
+ out[4 + outpos] = ((in[5 + inpos]) >>> (46 - 20))
+ | ((in[6 + inpos]) << 20);
+ out[5 + outpos] = ((in[6 + inpos]) >>> (46 - 2))
+ | ((in[7 + inpos]) << 2)
+ | ((in[8 + inpos]) << 48);
+ out[6 + outpos] = ((in[8 + inpos]) >>> (46 - 30))
+ | ((in[9 + inpos]) << 30);
+ out[7 + outpos] = ((in[9 + inpos]) >>> (46 - 12))
+ | ((in[10 + inpos]) << 12)
+ | ((in[11 + inpos]) << 58);
+ out[8 + outpos] = ((in[11 + inpos]) >>> (46 - 40))
+ | ((in[12 + inpos]) << 40);
+ out[9 + outpos] = ((in[12 + inpos]) >>> (46 - 22))
+ | ((in[13 + inpos]) << 22);
+ out[10 + outpos] = ((in[13 + inpos]) >>> (46 - 4))
+ | ((in[14 + inpos]) << 4)
+ | ((in[15 + inpos]) << 50);
+ out[11 + outpos] = ((in[15 + inpos]) >>> (46 - 32))
+ | ((in[16 + inpos]) << 32);
+ out[12 + outpos] = ((in[16 + inpos]) >>> (46 - 14))
+ | ((in[17 + inpos]) << 14)
+ | ((in[18 + inpos]) << 60);
+ out[13 + outpos] = ((in[18 + inpos]) >>> (46 - 42))
+ | ((in[19 + inpos]) << 42);
+ out[14 + outpos] = ((in[19 + inpos]) >>> (46 - 24))
+ | ((in[20 + inpos]) << 24);
+ out[15 + outpos] = ((in[20 + inpos]) >>> (46 - 6))
+ | ((in[21 + inpos]) << 6)
+ | ((in[22 + inpos]) << 52);
+ out[16 + outpos] = ((in[22 + inpos]) >>> (46 - 34))
+ | ((in[23 + inpos]) << 34);
+ out[17 + outpos] = ((in[23 + inpos]) >>> (46 - 16))
+ | ((in[24 + inpos]) << 16)
+ | ((in[25 + inpos]) << 62);
+ out[18 + outpos] = ((in[25 + inpos]) >>> (46 - 44))
+ | ((in[26 + inpos]) << 44);
+ out[19 + outpos] = ((in[26 + inpos]) >>> (46 - 26))
+ | ((in[27 + inpos]) << 26);
+ out[20 + outpos] = ((in[27 + inpos]) >>> (46 - 8))
+ | ((in[28 + inpos]) << 8)
+ | ((in[29 + inpos]) << 54);
+ out[21 + outpos] = ((in[29 + inpos]) >>> (46 - 36))
+ | ((in[30 + inpos]) << 36);
+ out[22 + outpos] = ((in[30 + inpos]) >>> (46 - 18))
+ | ((in[31 + inpos]) << 18);
+ out[23 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 46);
+ out[24 + outpos] = ((in[33 + inpos]) >>> (46 - 28))
+ | ((in[34 + inpos]) << 28);
+ out[25 + outpos] = ((in[34 + inpos]) >>> (46 - 10))
+ | ((in[35 + inpos]) << 10)
+ | ((in[36 + inpos]) << 56);
+ out[26 + outpos] = ((in[36 + inpos]) >>> (46 - 38))
+ | ((in[37 + inpos]) << 38);
+ out[27 + outpos] = ((in[37 + inpos]) >>> (46 - 20))
+ | ((in[38 + inpos]) << 20);
+ out[28 + outpos] = ((in[38 + inpos]) >>> (46 - 2))
+ | ((in[39 + inpos]) << 2)
+ | ((in[40 + inpos]) << 48);
+ out[29 + outpos] = ((in[40 + inpos]) >>> (46 - 30))
+ | ((in[41 + inpos]) << 30);
+ out[30 + outpos] = ((in[41 + inpos]) >>> (46 - 12))
+ | ((in[42 + inpos]) << 12)
+ | ((in[43 + inpos]) << 58);
+ out[31 + outpos] = ((in[43 + inpos]) >>> (46 - 40))
+ | ((in[44 + inpos]) << 40);
+ out[32 + outpos] = ((in[44 + inpos]) >>> (46 - 22))
+ | ((in[45 + inpos]) << 22);
+ out[33 + outpos] = ((in[45 + inpos]) >>> (46 - 4))
+ | ((in[46 + inpos]) << 4)
+ | ((in[47 + inpos]) << 50);
+ out[34 + outpos] = ((in[47 + inpos]) >>> (46 - 32))
+ | ((in[48 + inpos]) << 32);
+ out[35 + outpos] = ((in[48 + inpos]) >>> (46 - 14))
+ | ((in[49 + inpos]) << 14)
+ | ((in[50 + inpos]) << 60);
+ out[36 + outpos] = ((in[50 + inpos]) >>> (46 - 42))
+ | ((in[51 + inpos]) << 42);
+ out[37 + outpos] = ((in[51 + inpos]) >>> (46 - 24))
+ | ((in[52 + inpos]) << 24);
+ out[38 + outpos] = ((in[52 + inpos]) >>> (46 - 6))
+ | ((in[53 + inpos]) << 6)
+ | ((in[54 + inpos]) << 52);
+ out[39 + outpos] = ((in[54 + inpos]) >>> (46 - 34))
+ | ((in[55 + inpos]) << 34);
+ out[40 + outpos] = ((in[55 + inpos]) >>> (46 - 16))
+ | ((in[56 + inpos]) << 16)
+ | ((in[57 + inpos]) << 62);
+ out[41 + outpos] = ((in[57 + inpos]) >>> (46 - 44))
+ | ((in[58 + inpos]) << 44);
+ out[42 + outpos] = ((in[58 + inpos]) >>> (46 - 26))
+ | ((in[59 + inpos]) << 26);
+ out[43 + outpos] = ((in[59 + inpos]) >>> (46 - 8))
+ | ((in[60 + inpos]) << 8)
+ | ((in[61 + inpos]) << 54);
+ out[44 + outpos] = ((in[61 + inpos]) >>> (46 - 36))
+ | ((in[62 + inpos]) << 36);
+ out[45 + outpos] = ((in[62 + inpos]) >>> (46 - 18))
+ | ((in[63 + inpos]) << 18);
+ }
+
+ protected static void fastpackwithoutmask47(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 47);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (47 - 30))
+ | ((in[2 + inpos]) << 30);
+ out[2 + outpos] = ((in[2 + inpos]) >>> (47 - 13))
+ | ((in[3 + inpos]) << 13)
+ | ((in[4 + inpos]) << 60);
+ out[3 + outpos] = ((in[4 + inpos]) >>> (47 - 43))
+ | ((in[5 + inpos]) << 43);
+ out[4 + outpos] = ((in[5 + inpos]) >>> (47 - 26))
+ | ((in[6 + inpos]) << 26);
+ out[5 + outpos] = ((in[6 + inpos]) >>> (47 - 9))
+ | ((in[7 + inpos]) << 9)
+ | ((in[8 + inpos]) << 56);
+ out[6 + outpos] = ((in[8 + inpos]) >>> (47 - 39))
+ | ((in[9 + inpos]) << 39);
+ out[7 + outpos] = ((in[9 + inpos]) >>> (47 - 22))
+ | ((in[10 + inpos]) << 22);
+ out[8 + outpos] = ((in[10 + inpos]) >>> (47 - 5))
+ | ((in[11 + inpos]) << 5)
+ | ((in[12 + inpos]) << 52);
+ out[9 + outpos] = ((in[12 + inpos]) >>> (47 - 35))
+ | ((in[13 + inpos]) << 35);
+ out[10 + outpos] = ((in[13 + inpos]) >>> (47 - 18))
+ | ((in[14 + inpos]) << 18);
+ out[11 + outpos] = ((in[14 + inpos]) >>> (47 - 1))
+ | ((in[15 + inpos]) << 1)
+ | ((in[16 + inpos]) << 48);
+ out[12 + outpos] = ((in[16 + inpos]) >>> (47 - 31))
+ | ((in[17 + inpos]) << 31);
+ out[13 + outpos] = ((in[17 + inpos]) >>> (47 - 14))
+ | ((in[18 + inpos]) << 14)
+ | ((in[19 + inpos]) << 61);
+ out[14 + outpos] = ((in[19 + inpos]) >>> (47 - 44))
+ | ((in[20 + inpos]) << 44);
+ out[15 + outpos] = ((in[20 + inpos]) >>> (47 - 27))
+ | ((in[21 + inpos]) << 27);
+ out[16 + outpos] = ((in[21 + inpos]) >>> (47 - 10))
+ | ((in[22 + inpos]) << 10)
+ | ((in[23 + inpos]) << 57);
+ out[17 + outpos] = ((in[23 + inpos]) >>> (47 - 40))
+ | ((in[24 + inpos]) << 40);
+ out[18 + outpos] = ((in[24 + inpos]) >>> (47 - 23))
+ | ((in[25 + inpos]) << 23);
+ out[19 + outpos] = ((in[25 + inpos]) >>> (47 - 6))
+ | ((in[26 + inpos]) << 6)
+ | ((in[27 + inpos]) << 53);
+ out[20 + outpos] = ((in[27 + inpos]) >>> (47 - 36))
+ | ((in[28 + inpos]) << 36);
+ out[21 + outpos] = ((in[28 + inpos]) >>> (47 - 19))
+ | ((in[29 + inpos]) << 19);
+ out[22 + outpos] = ((in[29 + inpos]) >>> (47 - 2))
+ | ((in[30 + inpos]) << 2)
+ | ((in[31 + inpos]) << 49);
+ out[23 + outpos] = ((in[31 + inpos]) >>> (47 - 32))
+ | ((in[32 + inpos]) << 32);
+ out[24 + outpos] = ((in[32 + inpos]) >>> (47 - 15))
+ | ((in[33 + inpos]) << 15)
+ | ((in[34 + inpos]) << 62);
+ out[25 + outpos] = ((in[34 + inpos]) >>> (47 - 45))
+ | ((in[35 + inpos]) << 45);
+ out[26 + outpos] = ((in[35 + inpos]) >>> (47 - 28))
+ | ((in[36 + inpos]) << 28);
+ out[27 + outpos] = ((in[36 + inpos]) >>> (47 - 11))
+ | ((in[37 + inpos]) << 11)
+ | ((in[38 + inpos]) << 58);
+ out[28 + outpos] = ((in[38 + inpos]) >>> (47 - 41))
+ | ((in[39 + inpos]) << 41);
+ out[29 + outpos] = ((in[39 + inpos]) >>> (47 - 24))
+ | ((in[40 + inpos]) << 24);
+ out[30 + outpos] = ((in[40 + inpos]) >>> (47 - 7))
+ | ((in[41 + inpos]) << 7)
+ | ((in[42 + inpos]) << 54);
+ out[31 + outpos] = ((in[42 + inpos]) >>> (47 - 37))
+ | ((in[43 + inpos]) << 37);
+ out[32 + outpos] = ((in[43 + inpos]) >>> (47 - 20))
+ | ((in[44 + inpos]) << 20);
+ out[33 + outpos] = ((in[44 + inpos]) >>> (47 - 3))
+ | ((in[45 + inpos]) << 3)
+ | ((in[46 + inpos]) << 50);
+ out[34 + outpos] = ((in[46 + inpos]) >>> (47 - 33))
+ | ((in[47 + inpos]) << 33);
+ out[35 + outpos] = ((in[47 + inpos]) >>> (47 - 16))
+ | ((in[48 + inpos]) << 16)
+ | ((in[49 + inpos]) << 63);
+ out[36 + outpos] = ((in[49 + inpos]) >>> (47 - 46))
+ | ((in[50 + inpos]) << 46);
+ out[37 + outpos] = ((in[50 + inpos]) >>> (47 - 29))
+ | ((in[51 + inpos]) << 29);
+ out[38 + outpos] = ((in[51 + inpos]) >>> (47 - 12))
+ | ((in[52 + inpos]) << 12)
+ | ((in[53 + inpos]) << 59);
+ out[39 + outpos] = ((in[53 + inpos]) >>> (47 - 42))
+ | ((in[54 + inpos]) << 42);
+ out[40 + outpos] = ((in[54 + inpos]) >>> (47 - 25))
+ | ((in[55 + inpos]) << 25);
+ out[41 + outpos] = ((in[55 + inpos]) >>> (47 - 8))
+ | ((in[56 + inpos]) << 8)
+ | ((in[57 + inpos]) << 55);
+ out[42 + outpos] = ((in[57 + inpos]) >>> (47 - 38))
+ | ((in[58 + inpos]) << 38);
+ out[43 + outpos] = ((in[58 + inpos]) >>> (47 - 21))
+ | ((in[59 + inpos]) << 21);
+ out[44 + outpos] = ((in[59 + inpos]) >>> (47 - 4))
+ | ((in[60 + inpos]) << 4)
+ | ((in[61 + inpos]) << 51);
+ out[45 + outpos] = ((in[61 + inpos]) >>> (47 - 34))
+ | ((in[62 + inpos]) << 34);
+ out[46 + outpos] = ((in[62 + inpos]) >>> (47 - 17))
+ | ((in[63 + inpos]) << 17);
+ }
+
+ protected static void fastpackwithoutmask48(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 48);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (48 - 32))
+ | ((in[2 + inpos]) << 32);
+ out[2 + outpos] = ((in[2 + inpos]) >>> (48 - 16))
+ | ((in[3 + inpos]) << 16);
+ out[3 + outpos] = in[4 + inpos]
+ | ((in[5 + inpos]) << 48);
+ out[4 + outpos] = ((in[5 + inpos]) >>> (48 - 32))
+ | ((in[6 + inpos]) << 32);
+ out[5 + outpos] = ((in[6 + inpos]) >>> (48 - 16))
+ | ((in[7 + inpos]) << 16);
+ out[6 + outpos] = in[8 + inpos]
+ | ((in[9 + inpos]) << 48);
+ out[7 + outpos] = ((in[9 + inpos]) >>> (48 - 32))
+ | ((in[10 + inpos]) << 32);
+ out[8 + outpos] = ((in[10 + inpos]) >>> (48 - 16))
+ | ((in[11 + inpos]) << 16);
+ out[9 + outpos] = in[12 + inpos]
+ | ((in[13 + inpos]) << 48);
+ out[10 + outpos] = ((in[13 + inpos]) >>> (48 - 32))
+ | ((in[14 + inpos]) << 32);
+ out[11 + outpos] = ((in[14 + inpos]) >>> (48 - 16))
+ | ((in[15 + inpos]) << 16);
+ out[12 + outpos] = in[16 + inpos]
+ | ((in[17 + inpos]) << 48);
+ out[13 + outpos] = ((in[17 + inpos]) >>> (48 - 32))
+ | ((in[18 + inpos]) << 32);
+ out[14 + outpos] = ((in[18 + inpos]) >>> (48 - 16))
+ | ((in[19 + inpos]) << 16);
+ out[15 + outpos] = in[20 + inpos]
+ | ((in[21 + inpos]) << 48);
+ out[16 + outpos] = ((in[21 + inpos]) >>> (48 - 32))
+ | ((in[22 + inpos]) << 32);
+ out[17 + outpos] = ((in[22 + inpos]) >>> (48 - 16))
+ | ((in[23 + inpos]) << 16);
+ out[18 + outpos] = in[24 + inpos]
+ | ((in[25 + inpos]) << 48);
+ out[19 + outpos] = ((in[25 + inpos]) >>> (48 - 32))
+ | ((in[26 + inpos]) << 32);
+ out[20 + outpos] = ((in[26 + inpos]) >>> (48 - 16))
+ | ((in[27 + inpos]) << 16);
+ out[21 + outpos] = in[28 + inpos]
+ | ((in[29 + inpos]) << 48);
+ out[22 + outpos] = ((in[29 + inpos]) >>> (48 - 32))
+ | ((in[30 + inpos]) << 32);
+ out[23 + outpos] = ((in[30 + inpos]) >>> (48 - 16))
+ | ((in[31 + inpos]) << 16);
+ out[24 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 48);
+ out[25 + outpos] = ((in[33 + inpos]) >>> (48 - 32))
+ | ((in[34 + inpos]) << 32);
+ out[26 + outpos] = ((in[34 + inpos]) >>> (48 - 16))
+ | ((in[35 + inpos]) << 16);
+ out[27 + outpos] = in[36 + inpos]
+ | ((in[37 + inpos]) << 48);
+ out[28 + outpos] = ((in[37 + inpos]) >>> (48 - 32))
+ | ((in[38 + inpos]) << 32);
+ out[29 + outpos] = ((in[38 + inpos]) >>> (48 - 16))
+ | ((in[39 + inpos]) << 16);
+ out[30 + outpos] = in[40 + inpos]
+ | ((in[41 + inpos]) << 48);
+ out[31 + outpos] = ((in[41 + inpos]) >>> (48 - 32))
+ | ((in[42 + inpos]) << 32);
+ out[32 + outpos] = ((in[42 + inpos]) >>> (48 - 16))
+ | ((in[43 + inpos]) << 16);
+ out[33 + outpos] = in[44 + inpos]
+ | ((in[45 + inpos]) << 48);
+ out[34 + outpos] = ((in[45 + inpos]) >>> (48 - 32))
+ | ((in[46 + inpos]) << 32);
+ out[35 + outpos] = ((in[46 + inpos]) >>> (48 - 16))
+ | ((in[47 + inpos]) << 16);
+ out[36 + outpos] = in[48 + inpos]
+ | ((in[49 + inpos]) << 48);
+ out[37 + outpos] = ((in[49 + inpos]) >>> (48 - 32))
+ | ((in[50 + inpos]) << 32);
+ out[38 + outpos] = ((in[50 + inpos]) >>> (48 - 16))
+ | ((in[51 + inpos]) << 16);
+ out[39 + outpos] = in[52 + inpos]
+ | ((in[53 + inpos]) << 48);
+ out[40 + outpos] = ((in[53 + inpos]) >>> (48 - 32))
+ | ((in[54 + inpos]) << 32);
+ out[41 + outpos] = ((in[54 + inpos]) >>> (48 - 16))
+ | ((in[55 + inpos]) << 16);
+ out[42 + outpos] = in[56 + inpos]
+ | ((in[57 + inpos]) << 48);
+ out[43 + outpos] = ((in[57 + inpos]) >>> (48 - 32))
+ | ((in[58 + inpos]) << 32);
+ out[44 + outpos] = ((in[58 + inpos]) >>> (48 - 16))
+ | ((in[59 + inpos]) << 16);
+ out[45 + outpos] = in[60 + inpos]
+ | ((in[61 + inpos]) << 48);
+ out[46 + outpos] = ((in[61 + inpos]) >>> (48 - 32))
+ | ((in[62 + inpos]) << 32);
+ out[47 + outpos] = ((in[62 + inpos]) >>> (48 - 16))
+ | ((in[63 + inpos]) << 16);
+ }
+
+ protected static void fastpackwithoutmask49(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 49);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (49 - 34))
+ | ((in[2 + inpos]) << 34);
+ out[2 + outpos] = ((in[2 + inpos]) >>> (49 - 19))
+ | ((in[3 + inpos]) << 19);
+ out[3 + outpos] = ((in[3 + inpos]) >>> (49 - 4))
+ | ((in[4 + inpos]) << 4)
+ | ((in[5 + inpos]) << 53);
+ out[4 + outpos] = ((in[5 + inpos]) >>> (49 - 38))
+ | ((in[6 + inpos]) << 38);
+ out[5 + outpos] = ((in[6 + inpos]) >>> (49 - 23))
+ | ((in[7 + inpos]) << 23);
+ out[6 + outpos] = ((in[7 + inpos]) >>> (49 - 8))
+ | ((in[8 + inpos]) << 8)
+ | ((in[9 + inpos]) << 57);
+ out[7 + outpos] = ((in[9 + inpos]) >>> (49 - 42))
+ | ((in[10 + inpos]) << 42);
+ out[8 + outpos] = ((in[10 + inpos]) >>> (49 - 27))
+ | ((in[11 + inpos]) << 27);
+ out[9 + outpos] = ((in[11 + inpos]) >>> (49 - 12))
+ | ((in[12 + inpos]) << 12)
+ | ((in[13 + inpos]) << 61);
+ out[10 + outpos] = ((in[13 + inpos]) >>> (49 - 46))
+ | ((in[14 + inpos]) << 46);
+ out[11 + outpos] = ((in[14 + inpos]) >>> (49 - 31))
+ | ((in[15 + inpos]) << 31);
+ out[12 + outpos] = ((in[15 + inpos]) >>> (49 - 16))
+ | ((in[16 + inpos]) << 16);
+ out[13 + outpos] = ((in[16 + inpos]) >>> (49 - 1))
+ | ((in[17 + inpos]) << 1)
+ | ((in[18 + inpos]) << 50);
+ out[14 + outpos] = ((in[18 + inpos]) >>> (49 - 35))
+ | ((in[19 + inpos]) << 35);
+ out[15 + outpos] = ((in[19 + inpos]) >>> (49 - 20))
+ | ((in[20 + inpos]) << 20);
+ out[16 + outpos] = ((in[20 + inpos]) >>> (49 - 5))
+ | ((in[21 + inpos]) << 5)
+ | ((in[22 + inpos]) << 54);
+ out[17 + outpos] = ((in[22 + inpos]) >>> (49 - 39))
+ | ((in[23 + inpos]) << 39);
+ out[18 + outpos] = ((in[23 + inpos]) >>> (49 - 24))
+ | ((in[24 + inpos]) << 24);
+ out[19 + outpos] = ((in[24 + inpos]) >>> (49 - 9))
+ | ((in[25 + inpos]) << 9)
+ | ((in[26 + inpos]) << 58);
+ out[20 + outpos] = ((in[26 + inpos]) >>> (49 - 43))
+ | ((in[27 + inpos]) << 43);
+ out[21 + outpos] = ((in[27 + inpos]) >>> (49 - 28))
+ | ((in[28 + inpos]) << 28);
+ out[22 + outpos] = ((in[28 + inpos]) >>> (49 - 13))
+ | ((in[29 + inpos]) << 13)
+ | ((in[30 + inpos]) << 62);
+ out[23 + outpos] = ((in[30 + inpos]) >>> (49 - 47))
+ | ((in[31 + inpos]) << 47);
+ out[24 + outpos] = ((in[31 + inpos]) >>> (49 - 32))
+ | ((in[32 + inpos]) << 32);
+ out[25 + outpos] = ((in[32 + inpos]) >>> (49 - 17))
+ | ((in[33 + inpos]) << 17);
+ out[26 + outpos] = ((in[33 + inpos]) >>> (49 - 2))
+ | ((in[34 + inpos]) << 2)
+ | ((in[35 + inpos]) << 51);
+ out[27 + outpos] = ((in[35 + inpos]) >>> (49 - 36))
+ | ((in[36 + inpos]) << 36);
+ out[28 + outpos] = ((in[36 + inpos]) >>> (49 - 21))
+ | ((in[37 + inpos]) << 21);
+ out[29 + outpos] = ((in[37 + inpos]) >>> (49 - 6))
+ | ((in[38 + inpos]) << 6)
+ | ((in[39 + inpos]) << 55);
+ out[30 + outpos] = ((in[39 + inpos]) >>> (49 - 40))
+ | ((in[40 + inpos]) << 40);
+ out[31 + outpos] = ((in[40 + inpos]) >>> (49 - 25))
+ | ((in[41 + inpos]) << 25);
+ out[32 + outpos] = ((in[41 + inpos]) >>> (49 - 10))
+ | ((in[42 + inpos]) << 10)
+ | ((in[43 + inpos]) << 59);
+ out[33 + outpos] = ((in[43 + inpos]) >>> (49 - 44))
+ | ((in[44 + inpos]) << 44);
+ out[34 + outpos] = ((in[44 + inpos]) >>> (49 - 29))
+ | ((in[45 + inpos]) << 29);
+ out[35 + outpos] = ((in[45 + inpos]) >>> (49 - 14))
+ | ((in[46 + inpos]) << 14)
+ | ((in[47 + inpos]) << 63);
+ out[36 + outpos] = ((in[47 + inpos]) >>> (49 - 48))
+ | ((in[48 + inpos]) << 48);
+ out[37 + outpos] = ((in[48 + inpos]) >>> (49 - 33))
+ | ((in[49 + inpos]) << 33);
+ out[38 + outpos] = ((in[49 + inpos]) >>> (49 - 18))
+ | ((in[50 + inpos]) << 18);
+ out[39 + outpos] = ((in[50 + inpos]) >>> (49 - 3))
+ | ((in[51 + inpos]) << 3)
+ | ((in[52 + inpos]) << 52);
+ out[40 + outpos] = ((in[52 + inpos]) >>> (49 - 37))
+ | ((in[53 + inpos]) << 37);
+ out[41 + outpos] = ((in[53 + inpos]) >>> (49 - 22))
+ | ((in[54 + inpos]) << 22);
+ out[42 + outpos] = ((in[54 + inpos]) >>> (49 - 7))
+ | ((in[55 + inpos]) << 7)
+ | ((in[56 + inpos]) << 56);
+ out[43 + outpos] = ((in[56 + inpos]) >>> (49 - 41))
+ | ((in[57 + inpos]) << 41);
+ out[44 + outpos] = ((in[57 + inpos]) >>> (49 - 26))
+ | ((in[58 + inpos]) << 26);
+ out[45 + outpos] = ((in[58 + inpos]) >>> (49 - 11))
+ | ((in[59 + inpos]) << 11)
+ | ((in[60 + inpos]) << 60);
+ out[46 + outpos] = ((in[60 + inpos]) >>> (49 - 45))
+ | ((in[61 + inpos]) << 45);
+ out[47 + outpos] = ((in[61 + inpos]) >>> (49 - 30))
+ | ((in[62 + inpos]) << 30);
+ out[48 + outpos] = ((in[62 + inpos]) >>> (49 - 15))
+ | ((in[63 + inpos]) << 15);
+ }
+
+ protected static void fastpackwithoutmask50(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 50);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (50 - 36))
+ | ((in[2 + inpos]) << 36);
+ out[2 + outpos] = ((in[2 + inpos]) >>> (50 - 22))
+ | ((in[3 + inpos]) << 22);
+ out[3 + outpos] = ((in[3 + inpos]) >>> (50 - 8))
+ | ((in[4 + inpos]) << 8)
+ | ((in[5 + inpos]) << 58);
+ out[4 + outpos] = ((in[5 + inpos]) >>> (50 - 44))
+ | ((in[6 + inpos]) << 44);
+ out[5 + outpos] = ((in[6 + inpos]) >>> (50 - 30))
+ | ((in[7 + inpos]) << 30);
+ out[6 + outpos] = ((in[7 + inpos]) >>> (50 - 16))
+ | ((in[8 + inpos]) << 16);
+ out[7 + outpos] = ((in[8 + inpos]) >>> (50 - 2))
+ | ((in[9 + inpos]) << 2)
+ | ((in[10 + inpos]) << 52);
+ out[8 + outpos] = ((in[10 + inpos]) >>> (50 - 38))
+ | ((in[11 + inpos]) << 38);
+ out[9 + outpos] = ((in[11 + inpos]) >>> (50 - 24))
+ | ((in[12 + inpos]) << 24);
+ out[10 + outpos] = ((in[12 + inpos]) >>> (50 - 10))
+ | ((in[13 + inpos]) << 10)
+ | ((in[14 + inpos]) << 60);
+ out[11 + outpos] = ((in[14 + inpos]) >>> (50 - 46))
+ | ((in[15 + inpos]) << 46);
+ out[12 + outpos] = ((in[15 + inpos]) >>> (50 - 32))
+ | ((in[16 + inpos]) << 32);
+ out[13 + outpos] = ((in[16 + inpos]) >>> (50 - 18))
+ | ((in[17 + inpos]) << 18);
+ out[14 + outpos] = ((in[17 + inpos]) >>> (50 - 4))
+ | ((in[18 + inpos]) << 4)
+ | ((in[19 + inpos]) << 54);
+ out[15 + outpos] = ((in[19 + inpos]) >>> (50 - 40))
+ | ((in[20 + inpos]) << 40);
+ out[16 + outpos] = ((in[20 + inpos]) >>> (50 - 26))
+ | ((in[21 + inpos]) << 26);
+ out[17 + outpos] = ((in[21 + inpos]) >>> (50 - 12))
+ | ((in[22 + inpos]) << 12)
+ | ((in[23 + inpos]) << 62);
+ out[18 + outpos] = ((in[23 + inpos]) >>> (50 - 48))
+ | ((in[24 + inpos]) << 48);
+ out[19 + outpos] = ((in[24 + inpos]) >>> (50 - 34))
+ | ((in[25 + inpos]) << 34);
+ out[20 + outpos] = ((in[25 + inpos]) >>> (50 - 20))
+ | ((in[26 + inpos]) << 20);
+ out[21 + outpos] = ((in[26 + inpos]) >>> (50 - 6))
+ | ((in[27 + inpos]) << 6)
+ | ((in[28 + inpos]) << 56);
+ out[22 + outpos] = ((in[28 + inpos]) >>> (50 - 42))
+ | ((in[29 + inpos]) << 42);
+ out[23 + outpos] = ((in[29 + inpos]) >>> (50 - 28))
+ | ((in[30 + inpos]) << 28);
+ out[24 + outpos] = ((in[30 + inpos]) >>> (50 - 14))
+ | ((in[31 + inpos]) << 14);
+ out[25 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 50);
+ out[26 + outpos] = ((in[33 + inpos]) >>> (50 - 36))
+ | ((in[34 + inpos]) << 36);
+ out[27 + outpos] = ((in[34 + inpos]) >>> (50 - 22))
+ | ((in[35 + inpos]) << 22);
+ out[28 + outpos] = ((in[35 + inpos]) >>> (50 - 8))
+ | ((in[36 + inpos]) << 8)
+ | ((in[37 + inpos]) << 58);
+ out[29 + outpos] = ((in[37 + inpos]) >>> (50 - 44))
+ | ((in[38 + inpos]) << 44);
+ out[30 + outpos] = ((in[38 + inpos]) >>> (50 - 30))
+ | ((in[39 + inpos]) << 30);
+ out[31 + outpos] = ((in[39 + inpos]) >>> (50 - 16))
+ | ((in[40 + inpos]) << 16);
+ out[32 + outpos] = ((in[40 + inpos]) >>> (50 - 2))
+ | ((in[41 + inpos]) << 2)
+ | ((in[42 + inpos]) << 52);
+ out[33 + outpos] = ((in[42 + inpos]) >>> (50 - 38))
+ | ((in[43 + inpos]) << 38);
+ out[34 + outpos] = ((in[43 + inpos]) >>> (50 - 24))
+ | ((in[44 + inpos]) << 24);
+ out[35 + outpos] = ((in[44 + inpos]) >>> (50 - 10))
+ | ((in[45 + inpos]) << 10)
+ | ((in[46 + inpos]) << 60);
+ out[36 + outpos] = ((in[46 + inpos]) >>> (50 - 46))
+ | ((in[47 + inpos]) << 46);
+ out[37 + outpos] = ((in[47 + inpos]) >>> (50 - 32))
+ | ((in[48 + inpos]) << 32);
+ out[38 + outpos] = ((in[48 + inpos]) >>> (50 - 18))
+ | ((in[49 + inpos]) << 18);
+ out[39 + outpos] = ((in[49 + inpos]) >>> (50 - 4))
+ | ((in[50 + inpos]) << 4)
+ | ((in[51 + inpos]) << 54);
+ out[40 + outpos] = ((in[51 + inpos]) >>> (50 - 40))
+ | ((in[52 + inpos]) << 40);
+ out[41 + outpos] = ((in[52 + inpos]) >>> (50 - 26))
+ | ((in[53 + inpos]) << 26);
+ out[42 + outpos] = ((in[53 + inpos]) >>> (50 - 12))
+ | ((in[54 + inpos]) << 12)
+ | ((in[55 + inpos]) << 62);
+ out[43 + outpos] = ((in[55 + inpos]) >>> (50 - 48))
+ | ((in[56 + inpos]) << 48);
+ out[44 + outpos] = ((in[56 + inpos]) >>> (50 - 34))
+ | ((in[57 + inpos]) << 34);
+ out[45 + outpos] = ((in[57 + inpos]) >>> (50 - 20))
+ | ((in[58 + inpos]) << 20);
+ out[46 + outpos] = ((in[58 + inpos]) >>> (50 - 6))
+ | ((in[59 + inpos]) << 6)
+ | ((in[60 + inpos]) << 56);
+ out[47 + outpos] = ((in[60 + inpos]) >>> (50 - 42))
+ | ((in[61 + inpos]) << 42);
+ out[48 + outpos] = ((in[61 + inpos]) >>> (50 - 28))
+ | ((in[62 + inpos]) << 28);
+ out[49 + outpos] = ((in[62 + inpos]) >>> (50 - 14))
+ | ((in[63 + inpos]) << 14);
+ }
+
+ protected static void fastpackwithoutmask51(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 51);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (51 - 38))
+ | ((in[2 + inpos]) << 38);
+ out[2 + outpos] = ((in[2 + inpos]) >>> (51 - 25))
+ | ((in[3 + inpos]) << 25);
+ out[3 + outpos] = ((in[3 + inpos]) >>> (51 - 12))
+ | ((in[4 + inpos]) << 12)
+ | ((in[5 + inpos]) << 63);
+ out[4 + outpos] = ((in[5 + inpos]) >>> (51 - 50))
+ | ((in[6 + inpos]) << 50);
+ out[5 + outpos] = ((in[6 + inpos]) >>> (51 - 37))
+ | ((in[7 + inpos]) << 37);
+ out[6 + outpos] = ((in[7 + inpos]) >>> (51 - 24))
+ | ((in[8 + inpos]) << 24);
+ out[7 + outpos] = ((in[8 + inpos]) >>> (51 - 11))
+ | ((in[9 + inpos]) << 11)
+ | ((in[10 + inpos]) << 62);
+ out[8 + outpos] = ((in[10 + inpos]) >>> (51 - 49))
+ | ((in[11 + inpos]) << 49);
+ out[9 + outpos] = ((in[11 + inpos]) >>> (51 - 36))
+ | ((in[12 + inpos]) << 36);
+ out[10 + outpos] = ((in[12 + inpos]) >>> (51 - 23))
+ | ((in[13 + inpos]) << 23);
+ out[11 + outpos] = ((in[13 + inpos]) >>> (51 - 10))
+ | ((in[14 + inpos]) << 10)
+ | ((in[15 + inpos]) << 61);
+ out[12 + outpos] = ((in[15 + inpos]) >>> (51 - 48))
+ | ((in[16 + inpos]) << 48);
+ out[13 + outpos] = ((in[16 + inpos]) >>> (51 - 35))
+ | ((in[17 + inpos]) << 35);
+ out[14 + outpos] = ((in[17 + inpos]) >>> (51 - 22))
+ | ((in[18 + inpos]) << 22);
+ out[15 + outpos] = ((in[18 + inpos]) >>> (51 - 9))
+ | ((in[19 + inpos]) << 9)
+ | ((in[20 + inpos]) << 60);
+ out[16 + outpos] = ((in[20 + inpos]) >>> (51 - 47))
+ | ((in[21 + inpos]) << 47);
+ out[17 + outpos] = ((in[21 + inpos]) >>> (51 - 34))
+ | ((in[22 + inpos]) << 34);
+ out[18 + outpos] = ((in[22 + inpos]) >>> (51 - 21))
+ | ((in[23 + inpos]) << 21);
+ out[19 + outpos] = ((in[23 + inpos]) >>> (51 - 8))
+ | ((in[24 + inpos]) << 8)
+ | ((in[25 + inpos]) << 59);
+ out[20 + outpos] = ((in[25 + inpos]) >>> (51 - 46))
+ | ((in[26 + inpos]) << 46);
+ out[21 + outpos] = ((in[26 + inpos]) >>> (51 - 33))
+ | ((in[27 + inpos]) << 33);
+ out[22 + outpos] = ((in[27 + inpos]) >>> (51 - 20))
+ | ((in[28 + inpos]) << 20);
+ out[23 + outpos] = ((in[28 + inpos]) >>> (51 - 7))
+ | ((in[29 + inpos]) << 7)
+ | ((in[30 + inpos]) << 58);
+ out[24 + outpos] = ((in[30 + inpos]) >>> (51 - 45))
+ | ((in[31 + inpos]) << 45);
+ out[25 + outpos] = ((in[31 + inpos]) >>> (51 - 32))
+ | ((in[32 + inpos]) << 32);
+ out[26 + outpos] = ((in[32 + inpos]) >>> (51 - 19))
+ | ((in[33 + inpos]) << 19);
+ out[27 + outpos] = ((in[33 + inpos]) >>> (51 - 6))
+ | ((in[34 + inpos]) << 6)
+ | ((in[35 + inpos]) << 57);
+ out[28 + outpos] = ((in[35 + inpos]) >>> (51 - 44))
+ | ((in[36 + inpos]) << 44);
+ out[29 + outpos] = ((in[36 + inpos]) >>> (51 - 31))
+ | ((in[37 + inpos]) << 31);
+ out[30 + outpos] = ((in[37 + inpos]) >>> (51 - 18))
+ | ((in[38 + inpos]) << 18);
+ out[31 + outpos] = ((in[38 + inpos]) >>> (51 - 5))
+ | ((in[39 + inpos]) << 5)
+ | ((in[40 + inpos]) << 56);
+ out[32 + outpos] = ((in[40 + inpos]) >>> (51 - 43))
+ | ((in[41 + inpos]) << 43);
+ out[33 + outpos] = ((in[41 + inpos]) >>> (51 - 30))
+ | ((in[42 + inpos]) << 30);
+ out[34 + outpos] = ((in[42 + inpos]) >>> (51 - 17))
+ | ((in[43 + inpos]) << 17);
+ out[35 + outpos] = ((in[43 + inpos]) >>> (51 - 4))
+ | ((in[44 + inpos]) << 4)
+ | ((in[45 + inpos]) << 55);
+ out[36 + outpos] = ((in[45 + inpos]) >>> (51 - 42))
+ | ((in[46 + inpos]) << 42);
+ out[37 + outpos] = ((in[46 + inpos]) >>> (51 - 29))
+ | ((in[47 + inpos]) << 29);
+ out[38 + outpos] = ((in[47 + inpos]) >>> (51 - 16))
+ | ((in[48 + inpos]) << 16);
+ out[39 + outpos] = ((in[48 + inpos]) >>> (51 - 3))
+ | ((in[49 + inpos]) << 3)
+ | ((in[50 + inpos]) << 54);
+ out[40 + outpos] = ((in[50 + inpos]) >>> (51 - 41))
+ | ((in[51 + inpos]) << 41);
+ out[41 + outpos] = ((in[51 + inpos]) >>> (51 - 28))
+ | ((in[52 + inpos]) << 28);
+ out[42 + outpos] = ((in[52 + inpos]) >>> (51 - 15))
+ | ((in[53 + inpos]) << 15);
+ out[43 + outpos] = ((in[53 + inpos]) >>> (51 - 2))
+ | ((in[54 + inpos]) << 2)
+ | ((in[55 + inpos]) << 53);
+ out[44 + outpos] = ((in[55 + inpos]) >>> (51 - 40))
+ | ((in[56 + inpos]) << 40);
+ out[45 + outpos] = ((in[56 + inpos]) >>> (51 - 27))
+ | ((in[57 + inpos]) << 27);
+ out[46 + outpos] = ((in[57 + inpos]) >>> (51 - 14))
+ | ((in[58 + inpos]) << 14);
+ out[47 + outpos] = ((in[58 + inpos]) >>> (51 - 1))
+ | ((in[59 + inpos]) << 1)
+ | ((in[60 + inpos]) << 52);
+ out[48 + outpos] = ((in[60 + inpos]) >>> (51 - 39))
+ | ((in[61 + inpos]) << 39);
+ out[49 + outpos] = ((in[61 + inpos]) >>> (51 - 26))
+ | ((in[62 + inpos]) << 26);
+ out[50 + outpos] = ((in[62 + inpos]) >>> (51 - 13))
+ | ((in[63 + inpos]) << 13);
+ }
+
+ protected static void fastpackwithoutmask52(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 52);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (52 - 40))
+ | ((in[2 + inpos]) << 40);
+ out[2 + outpos] = ((in[2 + inpos]) >>> (52 - 28))
+ | ((in[3 + inpos]) << 28);
+ out[3 + outpos] = ((in[3 + inpos]) >>> (52 - 16))
+ | ((in[4 + inpos]) << 16);
+ out[4 + outpos] = ((in[4 + inpos]) >>> (52 - 4))
+ | ((in[5 + inpos]) << 4)
+ | ((in[6 + inpos]) << 56);
+ out[5 + outpos] = ((in[6 + inpos]) >>> (52 - 44))
+ | ((in[7 + inpos]) << 44);
+ out[6 + outpos] = ((in[7 + inpos]) >>> (52 - 32))
+ | ((in[8 + inpos]) << 32);
+ out[7 + outpos] = ((in[8 + inpos]) >>> (52 - 20))
+ | ((in[9 + inpos]) << 20);
+ out[8 + outpos] = ((in[9 + inpos]) >>> (52 - 8))
+ | ((in[10 + inpos]) << 8)
+ | ((in[11 + inpos]) << 60);
+ out[9 + outpos] = ((in[11 + inpos]) >>> (52 - 48))
+ | ((in[12 + inpos]) << 48);
+ out[10 + outpos] = ((in[12 + inpos]) >>> (52 - 36))
+ | ((in[13 + inpos]) << 36);
+ out[11 + outpos] = ((in[13 + inpos]) >>> (52 - 24))
+ | ((in[14 + inpos]) << 24);
+ out[12 + outpos] = ((in[14 + inpos]) >>> (52 - 12))
+ | ((in[15 + inpos]) << 12);
+ out[13 + outpos] = in[16 + inpos]
+ | ((in[17 + inpos]) << 52);
+ out[14 + outpos] = ((in[17 + inpos]) >>> (52 - 40))
+ | ((in[18 + inpos]) << 40);
+ out[15 + outpos] = ((in[18 + inpos]) >>> (52 - 28))
+ | ((in[19 + inpos]) << 28);
+ out[16 + outpos] = ((in[19 + inpos]) >>> (52 - 16))
+ | ((in[20 + inpos]) << 16);
+ out[17 + outpos] = ((in[20 + inpos]) >>> (52 - 4))
+ | ((in[21 + inpos]) << 4)
+ | ((in[22 + inpos]) << 56);
+ out[18 + outpos] = ((in[22 + inpos]) >>> (52 - 44))
+ | ((in[23 + inpos]) << 44);
+ out[19 + outpos] = ((in[23 + inpos]) >>> (52 - 32))
+ | ((in[24 + inpos]) << 32);
+ out[20 + outpos] = ((in[24 + inpos]) >>> (52 - 20))
+ | ((in[25 + inpos]) << 20);
+ out[21 + outpos] = ((in[25 + inpos]) >>> (52 - 8))
+ | ((in[26 + inpos]) << 8)
+ | ((in[27 + inpos]) << 60);
+ out[22 + outpos] = ((in[27 + inpos]) >>> (52 - 48))
+ | ((in[28 + inpos]) << 48);
+ out[23 + outpos] = ((in[28 + inpos]) >>> (52 - 36))
+ | ((in[29 + inpos]) << 36);
+ out[24 + outpos] = ((in[29 + inpos]) >>> (52 - 24))
+ | ((in[30 + inpos]) << 24);
+ out[25 + outpos] = ((in[30 + inpos]) >>> (52 - 12))
+ | ((in[31 + inpos]) << 12);
+ out[26 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 52);
+ out[27 + outpos] = ((in[33 + inpos]) >>> (52 - 40))
+ | ((in[34 + inpos]) << 40);
+ out[28 + outpos] = ((in[34 + inpos]) >>> (52 - 28))
+ | ((in[35 + inpos]) << 28);
+ out[29 + outpos] = ((in[35 + inpos]) >>> (52 - 16))
+ | ((in[36 + inpos]) << 16);
+ out[30 + outpos] = ((in[36 + inpos]) >>> (52 - 4))
+ | ((in[37 + inpos]) << 4)
+ | ((in[38 + inpos]) << 56);
+ out[31 + outpos] = ((in[38 + inpos]) >>> (52 - 44))
+ | ((in[39 + inpos]) << 44);
+ out[32 + outpos] = ((in[39 + inpos]) >>> (52 - 32))
+ | ((in[40 + inpos]) << 32);
+ out[33 + outpos] = ((in[40 + inpos]) >>> (52 - 20))
+ | ((in[41 + inpos]) << 20);
+ out[34 + outpos] = ((in[41 + inpos]) >>> (52 - 8))
+ | ((in[42 + inpos]) << 8)
+ | ((in[43 + inpos]) << 60);
+ out[35 + outpos] = ((in[43 + inpos]) >>> (52 - 48))
+ | ((in[44 + inpos]) << 48);
+ out[36 + outpos] = ((in[44 + inpos]) >>> (52 - 36))
+ | ((in[45 + inpos]) << 36);
+ out[37 + outpos] = ((in[45 + inpos]) >>> (52 - 24))
+ | ((in[46 + inpos]) << 24);
+ out[38 + outpos] = ((in[46 + inpos]) >>> (52 - 12))
+ | ((in[47 + inpos]) << 12);
+ out[39 + outpos] = in[48 + inpos]
+ | ((in[49 + inpos]) << 52);
+ out[40 + outpos] = ((in[49 + inpos]) >>> (52 - 40))
+ | ((in[50 + inpos]) << 40);
+ out[41 + outpos] = ((in[50 + inpos]) >>> (52 - 28))
+ | ((in[51 + inpos]) << 28);
+ out[42 + outpos] = ((in[51 + inpos]) >>> (52 - 16))
+ | ((in[52 + inpos]) << 16);
+ out[43 + outpos] = ((in[52 + inpos]) >>> (52 - 4))
+ | ((in[53 + inpos]) << 4)
+ | ((in[54 + inpos]) << 56);
+ out[44 + outpos] = ((in[54 + inpos]) >>> (52 - 44))
+ | ((in[55 + inpos]) << 44);
+ out[45 + outpos] = ((in[55 + inpos]) >>> (52 - 32))
+ | ((in[56 + inpos]) << 32);
+ out[46 + outpos] = ((in[56 + inpos]) >>> (52 - 20))
+ | ((in[57 + inpos]) << 20);
+ out[47 + outpos] = ((in[57 + inpos]) >>> (52 - 8))
+ | ((in[58 + inpos]) << 8)
+ | ((in[59 + inpos]) << 60);
+ out[48 + outpos] = ((in[59 + inpos]) >>> (52 - 48))
+ | ((in[60 + inpos]) << 48);
+ out[49 + outpos] = ((in[60 + inpos]) >>> (52 - 36))
+ | ((in[61 + inpos]) << 36);
+ out[50 + outpos] = ((in[61 + inpos]) >>> (52 - 24))
+ | ((in[62 + inpos]) << 24);
+ out[51 + outpos] = ((in[62 + inpos]) >>> (52 - 12))
+ | ((in[63 + inpos]) << 12);
+ }
+
+ protected static void fastpackwithoutmask53(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 53);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (53 - 42))
+ | ((in[2 + inpos]) << 42);
+ out[2 + outpos] = ((in[2 + inpos]) >>> (53 - 31))
+ | ((in[3 + inpos]) << 31);
+ out[3 + outpos] = ((in[3 + inpos]) >>> (53 - 20))
+ | ((in[4 + inpos]) << 20);
+ out[4 + outpos] = ((in[4 + inpos]) >>> (53 - 9))
+ | ((in[5 + inpos]) << 9)
+ | ((in[6 + inpos]) << 62);
+ out[5 + outpos] = ((in[6 + inpos]) >>> (53 - 51))
+ | ((in[7 + inpos]) << 51);
+ out[6 + outpos] = ((in[7 + inpos]) >>> (53 - 40))
+ | ((in[8 + inpos]) << 40);
+ out[7 + outpos] = ((in[8 + inpos]) >>> (53 - 29))
+ | ((in[9 + inpos]) << 29);
+ out[8 + outpos] = ((in[9 + inpos]) >>> (53 - 18))
+ | ((in[10 + inpos]) << 18);
+ out[9 + outpos] = ((in[10 + inpos]) >>> (53 - 7))
+ | ((in[11 + inpos]) << 7)
+ | ((in[12 + inpos]) << 60);
+ out[10 + outpos] = ((in[12 + inpos]) >>> (53 - 49))
+ | ((in[13 + inpos]) << 49);
+ out[11 + outpos] = ((in[13 + inpos]) >>> (53 - 38))
+ | ((in[14 + inpos]) << 38);
+ out[12 + outpos] = ((in[14 + inpos]) >>> (53 - 27))
+ | ((in[15 + inpos]) << 27);
+ out[13 + outpos] = ((in[15 + inpos]) >>> (53 - 16))
+ | ((in[16 + inpos]) << 16);
+ out[14 + outpos] = ((in[16 + inpos]) >>> (53 - 5))
+ | ((in[17 + inpos]) << 5)
+ | ((in[18 + inpos]) << 58);
+ out[15 + outpos] = ((in[18 + inpos]) >>> (53 - 47))
+ | ((in[19 + inpos]) << 47);
+ out[16 + outpos] = ((in[19 + inpos]) >>> (53 - 36))
+ | ((in[20 + inpos]) << 36);
+ out[17 + outpos] = ((in[20 + inpos]) >>> (53 - 25))
+ | ((in[21 + inpos]) << 25);
+ out[18 + outpos] = ((in[21 + inpos]) >>> (53 - 14))
+ | ((in[22 + inpos]) << 14);
+ out[19 + outpos] = ((in[22 + inpos]) >>> (53 - 3))
+ | ((in[23 + inpos]) << 3)
+ | ((in[24 + inpos]) << 56);
+ out[20 + outpos] = ((in[24 + inpos]) >>> (53 - 45))
+ | ((in[25 + inpos]) << 45);
+ out[21 + outpos] = ((in[25 + inpos]) >>> (53 - 34))
+ | ((in[26 + inpos]) << 34);
+ out[22 + outpos] = ((in[26 + inpos]) >>> (53 - 23))
+ | ((in[27 + inpos]) << 23);
+ out[23 + outpos] = ((in[27 + inpos]) >>> (53 - 12))
+ | ((in[28 + inpos]) << 12);
+ out[24 + outpos] = ((in[28 + inpos]) >>> (53 - 1))
+ | ((in[29 + inpos]) << 1)
+ | ((in[30 + inpos]) << 54);
+ out[25 + outpos] = ((in[30 + inpos]) >>> (53 - 43))
+ | ((in[31 + inpos]) << 43);
+ out[26 + outpos] = ((in[31 + inpos]) >>> (53 - 32))
+ | ((in[32 + inpos]) << 32);
+ out[27 + outpos] = ((in[32 + inpos]) >>> (53 - 21))
+ | ((in[33 + inpos]) << 21);
+ out[28 + outpos] = ((in[33 + inpos]) >>> (53 - 10))
+ | ((in[34 + inpos]) << 10)
+ | ((in[35 + inpos]) << 63);
+ out[29 + outpos] = ((in[35 + inpos]) >>> (53 - 52))
+ | ((in[36 + inpos]) << 52);
+ out[30 + outpos] = ((in[36 + inpos]) >>> (53 - 41))
+ | ((in[37 + inpos]) << 41);
+ out[31 + outpos] = ((in[37 + inpos]) >>> (53 - 30))
+ | ((in[38 + inpos]) << 30);
+ out[32 + outpos] = ((in[38 + inpos]) >>> (53 - 19))
+ | ((in[39 + inpos]) << 19);
+ out[33 + outpos] = ((in[39 + inpos]) >>> (53 - 8))
+ | ((in[40 + inpos]) << 8)
+ | ((in[41 + inpos]) << 61);
+ out[34 + outpos] = ((in[41 + inpos]) >>> (53 - 50))
+ | ((in[42 + inpos]) << 50);
+ out[35 + outpos] = ((in[42 + inpos]) >>> (53 - 39))
+ | ((in[43 + inpos]) << 39);
+ out[36 + outpos] = ((in[43 + inpos]) >>> (53 - 28))
+ | ((in[44 + inpos]) << 28);
+ out[37 + outpos] = ((in[44 + inpos]) >>> (53 - 17))
+ | ((in[45 + inpos]) << 17);
+ out[38 + outpos] = ((in[45 + inpos]) >>> (53 - 6))
+ | ((in[46 + inpos]) << 6)
+ | ((in[47 + inpos]) << 59);
+ out[39 + outpos] = ((in[47 + inpos]) >>> (53 - 48))
+ | ((in[48 + inpos]) << 48);
+ out[40 + outpos] = ((in[48 + inpos]) >>> (53 - 37))
+ | ((in[49 + inpos]) << 37);
+ out[41 + outpos] = ((in[49 + inpos]) >>> (53 - 26))
+ | ((in[50 + inpos]) << 26);
+ out[42 + outpos] = ((in[50 + inpos]) >>> (53 - 15))
+ | ((in[51 + inpos]) << 15);
+ out[43 + outpos] = ((in[51 + inpos]) >>> (53 - 4))
+ | ((in[52 + inpos]) << 4)
+ | ((in[53 + inpos]) << 57);
+ out[44 + outpos] = ((in[53 + inpos]) >>> (53 - 46))
+ | ((in[54 + inpos]) << 46);
+ out[45 + outpos] = ((in[54 + inpos]) >>> (53 - 35))
+ | ((in[55 + inpos]) << 35);
+ out[46 + outpos] = ((in[55 + inpos]) >>> (53 - 24))
+ | ((in[56 + inpos]) << 24);
+ out[47 + outpos] = ((in[56 + inpos]) >>> (53 - 13))
+ | ((in[57 + inpos]) << 13);
+ out[48 + outpos] = ((in[57 + inpos]) >>> (53 - 2))
+ | ((in[58 + inpos]) << 2)
+ | ((in[59 + inpos]) << 55);
+ out[49 + outpos] = ((in[59 + inpos]) >>> (53 - 44))
+ | ((in[60 + inpos]) << 44);
+ out[50 + outpos] = ((in[60 + inpos]) >>> (53 - 33))
+ | ((in[61 + inpos]) << 33);
+ out[51 + outpos] = ((in[61 + inpos]) >>> (53 - 22))
+ | ((in[62 + inpos]) << 22);
+ out[52 + outpos] = ((in[62 + inpos]) >>> (53 - 11))
+ | ((in[63 + inpos]) << 11);
+ }
+
+ protected static void fastpackwithoutmask54(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 54);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (54 - 44))
+ | ((in[2 + inpos]) << 44);
+ out[2 + outpos] = ((in[2 + inpos]) >>> (54 - 34))
+ | ((in[3 + inpos]) << 34);
+ out[3 + outpos] = ((in[3 + inpos]) >>> (54 - 24))
+ | ((in[4 + inpos]) << 24);
+ out[4 + outpos] = ((in[4 + inpos]) >>> (54 - 14))
+ | ((in[5 + inpos]) << 14);
+ out[5 + outpos] = ((in[5 + inpos]) >>> (54 - 4))
+ | ((in[6 + inpos]) << 4)
+ | ((in[7 + inpos]) << 58);
+ out[6 + outpos] = ((in[7 + inpos]) >>> (54 - 48))
+ | ((in[8 + inpos]) << 48);
+ out[7 + outpos] = ((in[8 + inpos]) >>> (54 - 38))
+ | ((in[9 + inpos]) << 38);
+ out[8 + outpos] = ((in[9 + inpos]) >>> (54 - 28))
+ | ((in[10 + inpos]) << 28);
+ out[9 + outpos] = ((in[10 + inpos]) >>> (54 - 18))
+ | ((in[11 + inpos]) << 18);
+ out[10 + outpos] = ((in[11 + inpos]) >>> (54 - 8))
+ | ((in[12 + inpos]) << 8)
+ | ((in[13 + inpos]) << 62);
+ out[11 + outpos] = ((in[13 + inpos]) >>> (54 - 52))
+ | ((in[14 + inpos]) << 52);
+ out[12 + outpos] = ((in[14 + inpos]) >>> (54 - 42))
+ | ((in[15 + inpos]) << 42);
+ out[13 + outpos] = ((in[15 + inpos]) >>> (54 - 32))
+ | ((in[16 + inpos]) << 32);
+ out[14 + outpos] = ((in[16 + inpos]) >>> (54 - 22))
+ | ((in[17 + inpos]) << 22);
+ out[15 + outpos] = ((in[17 + inpos]) >>> (54 - 12))
+ | ((in[18 + inpos]) << 12);
+ out[16 + outpos] = ((in[18 + inpos]) >>> (54 - 2))
+ | ((in[19 + inpos]) << 2)
+ | ((in[20 + inpos]) << 56);
+ out[17 + outpos] = ((in[20 + inpos]) >>> (54 - 46))
+ | ((in[21 + inpos]) << 46);
+ out[18 + outpos] = ((in[21 + inpos]) >>> (54 - 36))
+ | ((in[22 + inpos]) << 36);
+ out[19 + outpos] = ((in[22 + inpos]) >>> (54 - 26))
+ | ((in[23 + inpos]) << 26);
+ out[20 + outpos] = ((in[23 + inpos]) >>> (54 - 16))
+ | ((in[24 + inpos]) << 16);
+ out[21 + outpos] = ((in[24 + inpos]) >>> (54 - 6))
+ | ((in[25 + inpos]) << 6)
+ | ((in[26 + inpos]) << 60);
+ out[22 + outpos] = ((in[26 + inpos]) >>> (54 - 50))
+ | ((in[27 + inpos]) << 50);
+ out[23 + outpos] = ((in[27 + inpos]) >>> (54 - 40))
+ | ((in[28 + inpos]) << 40);
+ out[24 + outpos] = ((in[28 + inpos]) >>> (54 - 30))
+ | ((in[29 + inpos]) << 30);
+ out[25 + outpos] = ((in[29 + inpos]) >>> (54 - 20))
+ | ((in[30 + inpos]) << 20);
+ out[26 + outpos] = ((in[30 + inpos]) >>> (54 - 10))
+ | ((in[31 + inpos]) << 10);
+ out[27 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 54);
+ out[28 + outpos] = ((in[33 + inpos]) >>> (54 - 44))
+ | ((in[34 + inpos]) << 44);
+ out[29 + outpos] = ((in[34 + inpos]) >>> (54 - 34))
+ | ((in[35 + inpos]) << 34);
+ out[30 + outpos] = ((in[35 + inpos]) >>> (54 - 24))
+ | ((in[36 + inpos]) << 24);
+ out[31 + outpos] = ((in[36 + inpos]) >>> (54 - 14))
+ | ((in[37 + inpos]) << 14);
+ out[32 + outpos] = ((in[37 + inpos]) >>> (54 - 4))
+ | ((in[38 + inpos]) << 4)
+ | ((in[39 + inpos]) << 58);
+ out[33 + outpos] = ((in[39 + inpos]) >>> (54 - 48))
+ | ((in[40 + inpos]) << 48);
+ out[34 + outpos] = ((in[40 + inpos]) >>> (54 - 38))
+ | ((in[41 + inpos]) << 38);
+ out[35 + outpos] = ((in[41 + inpos]) >>> (54 - 28))
+ | ((in[42 + inpos]) << 28);
+ out[36 + outpos] = ((in[42 + inpos]) >>> (54 - 18))
+ | ((in[43 + inpos]) << 18);
+ out[37 + outpos] = ((in[43 + inpos]) >>> (54 - 8))
+ | ((in[44 + inpos]) << 8)
+ | ((in[45 + inpos]) << 62);
+ out[38 + outpos] = ((in[45 + inpos]) >>> (54 - 52))
+ | ((in[46 + inpos]) << 52);
+ out[39 + outpos] = ((in[46 + inpos]) >>> (54 - 42))
+ | ((in[47 + inpos]) << 42);
+ out[40 + outpos] = ((in[47 + inpos]) >>> (54 - 32))
+ | ((in[48 + inpos]) << 32);
+ out[41 + outpos] = ((in[48 + inpos]) >>> (54 - 22))
+ | ((in[49 + inpos]) << 22);
+ out[42 + outpos] = ((in[49 + inpos]) >>> (54 - 12))
+ | ((in[50 + inpos]) << 12);
+ out[43 + outpos] = ((in[50 + inpos]) >>> (54 - 2))
+ | ((in[51 + inpos]) << 2)
+ | ((in[52 + inpos]) << 56);
+ out[44 + outpos] = ((in[52 + inpos]) >>> (54 - 46))
+ | ((in[53 + inpos]) << 46);
+ out[45 + outpos] = ((in[53 + inpos]) >>> (54 - 36))
+ | ((in[54 + inpos]) << 36);
+ out[46 + outpos] = ((in[54 + inpos]) >>> (54 - 26))
+ | ((in[55 + inpos]) << 26);
+ out[47 + outpos] = ((in[55 + inpos]) >>> (54 - 16))
+ | ((in[56 + inpos]) << 16);
+ out[48 + outpos] = ((in[56 + inpos]) >>> (54 - 6))
+ | ((in[57 + inpos]) << 6)
+ | ((in[58 + inpos]) << 60);
+ out[49 + outpos] = ((in[58 + inpos]) >>> (54 - 50))
+ | ((in[59 + inpos]) << 50);
+ out[50 + outpos] = ((in[59 + inpos]) >>> (54 - 40))
+ | ((in[60 + inpos]) << 40);
+ out[51 + outpos] = ((in[60 + inpos]) >>> (54 - 30))
+ | ((in[61 + inpos]) << 30);
+ out[52 + outpos] = ((in[61 + inpos]) >>> (54 - 20))
+ | ((in[62 + inpos]) << 20);
+ out[53 + outpos] = ((in[62 + inpos]) >>> (54 - 10))
+ | ((in[63 + inpos]) << 10);
+ }
+
+ protected static void fastpackwithoutmask55(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 55);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (55 - 46))
+ | ((in[2 + inpos]) << 46);
+ out[2 + outpos] = ((in[2 + inpos]) >>> (55 - 37))
+ | ((in[3 + inpos]) << 37);
+ out[3 + outpos] = ((in[3 + inpos]) >>> (55 - 28))
+ | ((in[4 + inpos]) << 28);
+ out[4 + outpos] = ((in[4 + inpos]) >>> (55 - 19))
+ | ((in[5 + inpos]) << 19);
+ out[5 + outpos] = ((in[5 + inpos]) >>> (55 - 10))
+ | ((in[6 + inpos]) << 10);
+ out[6 + outpos] = ((in[6 + inpos]) >>> (55 - 1))
+ | ((in[7 + inpos]) << 1)
+ | ((in[8 + inpos]) << 56);
+ out[7 + outpos] = ((in[8 + inpos]) >>> (55 - 47))
+ | ((in[9 + inpos]) << 47);
+ out[8 + outpos] = ((in[9 + inpos]) >>> (55 - 38))
+ | ((in[10 + inpos]) << 38);
+ out[9 + outpos] = ((in[10 + inpos]) >>> (55 - 29))
+ | ((in[11 + inpos]) << 29);
+ out[10 + outpos] = ((in[11 + inpos]) >>> (55 - 20))
+ | ((in[12 + inpos]) << 20);
+ out[11 + outpos] = ((in[12 + inpos]) >>> (55 - 11))
+ | ((in[13 + inpos]) << 11);
+ out[12 + outpos] = ((in[13 + inpos]) >>> (55 - 2))
+ | ((in[14 + inpos]) << 2)
+ | ((in[15 + inpos]) << 57);
+ out[13 + outpos] = ((in[15 + inpos]) >>> (55 - 48))
+ | ((in[16 + inpos]) << 48);
+ out[14 + outpos] = ((in[16 + inpos]) >>> (55 - 39))
+ | ((in[17 + inpos]) << 39);
+ out[15 + outpos] = ((in[17 + inpos]) >>> (55 - 30))
+ | ((in[18 + inpos]) << 30);
+ out[16 + outpos] = ((in[18 + inpos]) >>> (55 - 21))
+ | ((in[19 + inpos]) << 21);
+ out[17 + outpos] = ((in[19 + inpos]) >>> (55 - 12))
+ | ((in[20 + inpos]) << 12);
+ out[18 + outpos] = ((in[20 + inpos]) >>> (55 - 3))
+ | ((in[21 + inpos]) << 3)
+ | ((in[22 + inpos]) << 58);
+ out[19 + outpos] = ((in[22 + inpos]) >>> (55 - 49))
+ | ((in[23 + inpos]) << 49);
+ out[20 + outpos] = ((in[23 + inpos]) >>> (55 - 40))
+ | ((in[24 + inpos]) << 40);
+ out[21 + outpos] = ((in[24 + inpos]) >>> (55 - 31))
+ | ((in[25 + inpos]) << 31);
+ out[22 + outpos] = ((in[25 + inpos]) >>> (55 - 22))
+ | ((in[26 + inpos]) << 22);
+ out[23 + outpos] = ((in[26 + inpos]) >>> (55 - 13))
+ | ((in[27 + inpos]) << 13);
+ out[24 + outpos] = ((in[27 + inpos]) >>> (55 - 4))
+ | ((in[28 + inpos]) << 4)
+ | ((in[29 + inpos]) << 59);
+ out[25 + outpos] = ((in[29 + inpos]) >>> (55 - 50))
+ | ((in[30 + inpos]) << 50);
+ out[26 + outpos] = ((in[30 + inpos]) >>> (55 - 41))
+ | ((in[31 + inpos]) << 41);
+ out[27 + outpos] = ((in[31 + inpos]) >>> (55 - 32))
+ | ((in[32 + inpos]) << 32);
+ out[28 + outpos] = ((in[32 + inpos]) >>> (55 - 23))
+ | ((in[33 + inpos]) << 23);
+ out[29 + outpos] = ((in[33 + inpos]) >>> (55 - 14))
+ | ((in[34 + inpos]) << 14);
+ out[30 + outpos] = ((in[34 + inpos]) >>> (55 - 5))
+ | ((in[35 + inpos]) << 5)
+ | ((in[36 + inpos]) << 60);
+ out[31 + outpos] = ((in[36 + inpos]) >>> (55 - 51))
+ | ((in[37 + inpos]) << 51);
+ out[32 + outpos] = ((in[37 + inpos]) >>> (55 - 42))
+ | ((in[38 + inpos]) << 42);
+ out[33 + outpos] = ((in[38 + inpos]) >>> (55 - 33))
+ | ((in[39 + inpos]) << 33);
+ out[34 + outpos] = ((in[39 + inpos]) >>> (55 - 24))
+ | ((in[40 + inpos]) << 24);
+ out[35 + outpos] = ((in[40 + inpos]) >>> (55 - 15))
+ | ((in[41 + inpos]) << 15);
+ out[36 + outpos] = ((in[41 + inpos]) >>> (55 - 6))
+ | ((in[42 + inpos]) << 6)
+ | ((in[43 + inpos]) << 61);
+ out[37 + outpos] = ((in[43 + inpos]) >>> (55 - 52))
+ | ((in[44 + inpos]) << 52);
+ out[38 + outpos] = ((in[44 + inpos]) >>> (55 - 43))
+ | ((in[45 + inpos]) << 43);
+ out[39 + outpos] = ((in[45 + inpos]) >>> (55 - 34))
+ | ((in[46 + inpos]) << 34);
+ out[40 + outpos] = ((in[46 + inpos]) >>> (55 - 25))
+ | ((in[47 + inpos]) << 25);
+ out[41 + outpos] = ((in[47 + inpos]) >>> (55 - 16))
+ | ((in[48 + inpos]) << 16);
+ out[42 + outpos] = ((in[48 + inpos]) >>> (55 - 7))
+ | ((in[49 + inpos]) << 7)
+ | ((in[50 + inpos]) << 62);
+ out[43 + outpos] = ((in[50 + inpos]) >>> (55 - 53))
+ | ((in[51 + inpos]) << 53);
+ out[44 + outpos] = ((in[51 + inpos]) >>> (55 - 44))
+ | ((in[52 + inpos]) << 44);
+ out[45 + outpos] = ((in[52 + inpos]) >>> (55 - 35))
+ | ((in[53 + inpos]) << 35);
+ out[46 + outpos] = ((in[53 + inpos]) >>> (55 - 26))
+ | ((in[54 + inpos]) << 26);
+ out[47 + outpos] = ((in[54 + inpos]) >>> (55 - 17))
+ | ((in[55 + inpos]) << 17);
+ out[48 + outpos] = ((in[55 + inpos]) >>> (55 - 8))
+ | ((in[56 + inpos]) << 8)
+ | ((in[57 + inpos]) << 63);
+ out[49 + outpos] = ((in[57 + inpos]) >>> (55 - 54))
+ | ((in[58 + inpos]) << 54);
+ out[50 + outpos] = ((in[58 + inpos]) >>> (55 - 45))
+ | ((in[59 + inpos]) << 45);
+ out[51 + outpos] = ((in[59 + inpos]) >>> (55 - 36))
+ | ((in[60 + inpos]) << 36);
+ out[52 + outpos] = ((in[60 + inpos]) >>> (55 - 27))
+ | ((in[61 + inpos]) << 27);
+ out[53 + outpos] = ((in[61 + inpos]) >>> (55 - 18))
+ | ((in[62 + inpos]) << 18);
+ out[54 + outpos] = ((in[62 + inpos]) >>> (55 - 9))
+ | ((in[63 + inpos]) << 9);
+ }
+
+ protected static void fastpackwithoutmask56(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 56);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (56 - 48))
+ | ((in[2 + inpos]) << 48);
+ out[2 + outpos] = ((in[2 + inpos]) >>> (56 - 40))
+ | ((in[3 + inpos]) << 40);
+ out[3 + outpos] = ((in[3 + inpos]) >>> (56 - 32))
+ | ((in[4 + inpos]) << 32);
+ out[4 + outpos] = ((in[4 + inpos]) >>> (56 - 24))
+ | ((in[5 + inpos]) << 24);
+ out[5 + outpos] = ((in[5 + inpos]) >>> (56 - 16))
+ | ((in[6 + inpos]) << 16);
+ out[6 + outpos] = ((in[6 + inpos]) >>> (56 - 8))
+ | ((in[7 + inpos]) << 8);
+ out[7 + outpos] = in[8 + inpos]
+ | ((in[9 + inpos]) << 56);
+ out[8 + outpos] = ((in[9 + inpos]) >>> (56 - 48))
+ | ((in[10 + inpos]) << 48);
+ out[9 + outpos] = ((in[10 + inpos]) >>> (56 - 40))
+ | ((in[11 + inpos]) << 40);
+ out[10 + outpos] = ((in[11 + inpos]) >>> (56 - 32))
+ | ((in[12 + inpos]) << 32);
+ out[11 + outpos] = ((in[12 + inpos]) >>> (56 - 24))
+ | ((in[13 + inpos]) << 24);
+ out[12 + outpos] = ((in[13 + inpos]) >>> (56 - 16))
+ | ((in[14 + inpos]) << 16);
+ out[13 + outpos] = ((in[14 + inpos]) >>> (56 - 8))
+ | ((in[15 + inpos]) << 8);
+ out[14 + outpos] = in[16 + inpos]
+ | ((in[17 + inpos]) << 56);
+ out[15 + outpos] = ((in[17 + inpos]) >>> (56 - 48))
+ | ((in[18 + inpos]) << 48);
+ out[16 + outpos] = ((in[18 + inpos]) >>> (56 - 40))
+ | ((in[19 + inpos]) << 40);
+ out[17 + outpos] = ((in[19 + inpos]) >>> (56 - 32))
+ | ((in[20 + inpos]) << 32);
+ out[18 + outpos] = ((in[20 + inpos]) >>> (56 - 24))
+ | ((in[21 + inpos]) << 24);
+ out[19 + outpos] = ((in[21 + inpos]) >>> (56 - 16))
+ | ((in[22 + inpos]) << 16);
+ out[20 + outpos] = ((in[22 + inpos]) >>> (56 - 8))
+ | ((in[23 + inpos]) << 8);
+ out[21 + outpos] = in[24 + inpos]
+ | ((in[25 + inpos]) << 56);
+ out[22 + outpos] = ((in[25 + inpos]) >>> (56 - 48))
+ | ((in[26 + inpos]) << 48);
+ out[23 + outpos] = ((in[26 + inpos]) >>> (56 - 40))
+ | ((in[27 + inpos]) << 40);
+ out[24 + outpos] = ((in[27 + inpos]) >>> (56 - 32))
+ | ((in[28 + inpos]) << 32);
+ out[25 + outpos] = ((in[28 + inpos]) >>> (56 - 24))
+ | ((in[29 + inpos]) << 24);
+ out[26 + outpos] = ((in[29 + inpos]) >>> (56 - 16))
+ | ((in[30 + inpos]) << 16);
+ out[27 + outpos] = ((in[30 + inpos]) >>> (56 - 8))
+ | ((in[31 + inpos]) << 8);
+ out[28 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 56);
+ out[29 + outpos] = ((in[33 + inpos]) >>> (56 - 48))
+ | ((in[34 + inpos]) << 48);
+ out[30 + outpos] = ((in[34 + inpos]) >>> (56 - 40))
+ | ((in[35 + inpos]) << 40);
+ out[31 + outpos] = ((in[35 + inpos]) >>> (56 - 32))
+ | ((in[36 + inpos]) << 32);
+ out[32 + outpos] = ((in[36 + inpos]) >>> (56 - 24))
+ | ((in[37 + inpos]) << 24);
+ out[33 + outpos] = ((in[37 + inpos]) >>> (56 - 16))
+ | ((in[38 + inpos]) << 16);
+ out[34 + outpos] = ((in[38 + inpos]) >>> (56 - 8))
+ | ((in[39 + inpos]) << 8);
+ out[35 + outpos] = in[40 + inpos]
+ | ((in[41 + inpos]) << 56);
+ out[36 + outpos] = ((in[41 + inpos]) >>> (56 - 48))
+ | ((in[42 + inpos]) << 48);
+ out[37 + outpos] = ((in[42 + inpos]) >>> (56 - 40))
+ | ((in[43 + inpos]) << 40);
+ out[38 + outpos] = ((in[43 + inpos]) >>> (56 - 32))
+ | ((in[44 + inpos]) << 32);
+ out[39 + outpos] = ((in[44 + inpos]) >>> (56 - 24))
+ | ((in[45 + inpos]) << 24);
+ out[40 + outpos] = ((in[45 + inpos]) >>> (56 - 16))
+ | ((in[46 + inpos]) << 16);
+ out[41 + outpos] = ((in[46 + inpos]) >>> (56 - 8))
+ | ((in[47 + inpos]) << 8);
+ out[42 + outpos] = in[48 + inpos]
+ | ((in[49 + inpos]) << 56);
+ out[43 + outpos] = ((in[49 + inpos]) >>> (56 - 48))
+ | ((in[50 + inpos]) << 48);
+ out[44 + outpos] = ((in[50 + inpos]) >>> (56 - 40))
+ | ((in[51 + inpos]) << 40);
+ out[45 + outpos] = ((in[51 + inpos]) >>> (56 - 32))
+ | ((in[52 + inpos]) << 32);
+ out[46 + outpos] = ((in[52 + inpos]) >>> (56 - 24))
+ | ((in[53 + inpos]) << 24);
+ out[47 + outpos] = ((in[53 + inpos]) >>> (56 - 16))
+ | ((in[54 + inpos]) << 16);
+ out[48 + outpos] = ((in[54 + inpos]) >>> (56 - 8))
+ | ((in[55 + inpos]) << 8);
+ out[49 + outpos] = in[56 + inpos]
+ | ((in[57 + inpos]) << 56);
+ out[50 + outpos] = ((in[57 + inpos]) >>> (56 - 48))
+ | ((in[58 + inpos]) << 48);
+ out[51 + outpos] = ((in[58 + inpos]) >>> (56 - 40))
+ | ((in[59 + inpos]) << 40);
+ out[52 + outpos] = ((in[59 + inpos]) >>> (56 - 32))
+ | ((in[60 + inpos]) << 32);
+ out[53 + outpos] = ((in[60 + inpos]) >>> (56 - 24))
+ | ((in[61 + inpos]) << 24);
+ out[54 + outpos] = ((in[61 + inpos]) >>> (56 - 16))
+ | ((in[62 + inpos]) << 16);
+ out[55 + outpos] = ((in[62 + inpos]) >>> (56 - 8))
+ | ((in[63 + inpos]) << 8);
+ }
+
+ protected static void fastpackwithoutmask57(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 57);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (57 - 50))
+ | ((in[2 + inpos]) << 50);
+ out[2 + outpos] = ((in[2 + inpos]) >>> (57 - 43))
+ | ((in[3 + inpos]) << 43);
+ out[3 + outpos] = ((in[3 + inpos]) >>> (57 - 36))
+ | ((in[4 + inpos]) << 36);
+ out[4 + outpos] = ((in[4 + inpos]) >>> (57 - 29))
+ | ((in[5 + inpos]) << 29);
+ out[5 + outpos] = ((in[5 + inpos]) >>> (57 - 22))
+ | ((in[6 + inpos]) << 22);
+ out[6 + outpos] = ((in[6 + inpos]) >>> (57 - 15))
+ | ((in[7 + inpos]) << 15);
+ out[7 + outpos] = ((in[7 + inpos]) >>> (57 - 8))
+ | ((in[8 + inpos]) << 8);
+ out[8 + outpos] = ((in[8 + inpos]) >>> (57 - 1))
+ | ((in[9 + inpos]) << 1)
+ | ((in[10 + inpos]) << 58);
+ out[9 + outpos] = ((in[10 + inpos]) >>> (57 - 51))
+ | ((in[11 + inpos]) << 51);
+ out[10 + outpos] = ((in[11 + inpos]) >>> (57 - 44))
+ | ((in[12 + inpos]) << 44);
+ out[11 + outpos] = ((in[12 + inpos]) >>> (57 - 37))
+ | ((in[13 + inpos]) << 37);
+ out[12 + outpos] = ((in[13 + inpos]) >>> (57 - 30))
+ | ((in[14 + inpos]) << 30);
+ out[13 + outpos] = ((in[14 + inpos]) >>> (57 - 23))
+ | ((in[15 + inpos]) << 23);
+ out[14 + outpos] = ((in[15 + inpos]) >>> (57 - 16))
+ | ((in[16 + inpos]) << 16);
+ out[15 + outpos] = ((in[16 + inpos]) >>> (57 - 9))
+ | ((in[17 + inpos]) << 9);
+ out[16 + outpos] = ((in[17 + inpos]) >>> (57 - 2))
+ | ((in[18 + inpos]) << 2)
+ | ((in[19 + inpos]) << 59);
+ out[17 + outpos] = ((in[19 + inpos]) >>> (57 - 52))
+ | ((in[20 + inpos]) << 52);
+ out[18 + outpos] = ((in[20 + inpos]) >>> (57 - 45))
+ | ((in[21 + inpos]) << 45);
+ out[19 + outpos] = ((in[21 + inpos]) >>> (57 - 38))
+ | ((in[22 + inpos]) << 38);
+ out[20 + outpos] = ((in[22 + inpos]) >>> (57 - 31))
+ | ((in[23 + inpos]) << 31);
+ out[21 + outpos] = ((in[23 + inpos]) >>> (57 - 24))
+ | ((in[24 + inpos]) << 24);
+ out[22 + outpos] = ((in[24 + inpos]) >>> (57 - 17))
+ | ((in[25 + inpos]) << 17);
+ out[23 + outpos] = ((in[25 + inpos]) >>> (57 - 10))
+ | ((in[26 + inpos]) << 10);
+ out[24 + outpos] = ((in[26 + inpos]) >>> (57 - 3))
+ | ((in[27 + inpos]) << 3)
+ | ((in[28 + inpos]) << 60);
+ out[25 + outpos] = ((in[28 + inpos]) >>> (57 - 53))
+ | ((in[29 + inpos]) << 53);
+ out[26 + outpos] = ((in[29 + inpos]) >>> (57 - 46))
+ | ((in[30 + inpos]) << 46);
+ out[27 + outpos] = ((in[30 + inpos]) >>> (57 - 39))
+ | ((in[31 + inpos]) << 39);
+ out[28 + outpos] = ((in[31 + inpos]) >>> (57 - 32))
+ | ((in[32 + inpos]) << 32);
+ out[29 + outpos] = ((in[32 + inpos]) >>> (57 - 25))
+ | ((in[33 + inpos]) << 25);
+ out[30 + outpos] = ((in[33 + inpos]) >>> (57 - 18))
+ | ((in[34 + inpos]) << 18);
+ out[31 + outpos] = ((in[34 + inpos]) >>> (57 - 11))
+ | ((in[35 + inpos]) << 11);
+ out[32 + outpos] = ((in[35 + inpos]) >>> (57 - 4))
+ | ((in[36 + inpos]) << 4)
+ | ((in[37 + inpos]) << 61);
+ out[33 + outpos] = ((in[37 + inpos]) >>> (57 - 54))
+ | ((in[38 + inpos]) << 54);
+ out[34 + outpos] = ((in[38 + inpos]) >>> (57 - 47))
+ | ((in[39 + inpos]) << 47);
+ out[35 + outpos] = ((in[39 + inpos]) >>> (57 - 40))
+ | ((in[40 + inpos]) << 40);
+ out[36 + outpos] = ((in[40 + inpos]) >>> (57 - 33))
+ | ((in[41 + inpos]) << 33);
+ out[37 + outpos] = ((in[41 + inpos]) >>> (57 - 26))
+ | ((in[42 + inpos]) << 26);
+ out[38 + outpos] = ((in[42 + inpos]) >>> (57 - 19))
+ | ((in[43 + inpos]) << 19);
+ out[39 + outpos] = ((in[43 + inpos]) >>> (57 - 12))
+ | ((in[44 + inpos]) << 12);
+ out[40 + outpos] = ((in[44 + inpos]) >>> (57 - 5))
+ | ((in[45 + inpos]) << 5)
+ | ((in[46 + inpos]) << 62);
+ out[41 + outpos] = ((in[46 + inpos]) >>> (57 - 55))
+ | ((in[47 + inpos]) << 55);
+ out[42 + outpos] = ((in[47 + inpos]) >>> (57 - 48))
+ | ((in[48 + inpos]) << 48);
+ out[43 + outpos] = ((in[48 + inpos]) >>> (57 - 41))
+ | ((in[49 + inpos]) << 41);
+ out[44 + outpos] = ((in[49 + inpos]) >>> (57 - 34))
+ | ((in[50 + inpos]) << 34);
+ out[45 + outpos] = ((in[50 + inpos]) >>> (57 - 27))
+ | ((in[51 + inpos]) << 27);
+ out[46 + outpos] = ((in[51 + inpos]) >>> (57 - 20))
+ | ((in[52 + inpos]) << 20);
+ out[47 + outpos] = ((in[52 + inpos]) >>> (57 - 13))
+ | ((in[53 + inpos]) << 13);
+ out[48 + outpos] = ((in[53 + inpos]) >>> (57 - 6))
+ | ((in[54 + inpos]) << 6)
+ | ((in[55 + inpos]) << 63);
+ out[49 + outpos] = ((in[55 + inpos]) >>> (57 - 56))
+ | ((in[56 + inpos]) << 56);
+ out[50 + outpos] = ((in[56 + inpos]) >>> (57 - 49))
+ | ((in[57 + inpos]) << 49);
+ out[51 + outpos] = ((in[57 + inpos]) >>> (57 - 42))
+ | ((in[58 + inpos]) << 42);
+ out[52 + outpos] = ((in[58 + inpos]) >>> (57 - 35))
+ | ((in[59 + inpos]) << 35);
+ out[53 + outpos] = ((in[59 + inpos]) >>> (57 - 28))
+ | ((in[60 + inpos]) << 28);
+ out[54 + outpos] = ((in[60 + inpos]) >>> (57 - 21))
+ | ((in[61 + inpos]) << 21);
+ out[55 + outpos] = ((in[61 + inpos]) >>> (57 - 14))
+ | ((in[62 + inpos]) << 14);
+ out[56 + outpos] = ((in[62 + inpos]) >>> (57 - 7))
+ | ((in[63 + inpos]) << 7);
+ }
+
+ protected static void fastpackwithoutmask58(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 58);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (58 - 52))
+ | ((in[2 + inpos]) << 52);
+ out[2 + outpos] = ((in[2 + inpos]) >>> (58 - 46))
+ | ((in[3 + inpos]) << 46);
+ out[3 + outpos] = ((in[3 + inpos]) >>> (58 - 40))
+ | ((in[4 + inpos]) << 40);
+ out[4 + outpos] = ((in[4 + inpos]) >>> (58 - 34))
+ | ((in[5 + inpos]) << 34);
+ out[5 + outpos] = ((in[5 + inpos]) >>> (58 - 28))
+ | ((in[6 + inpos]) << 28);
+ out[6 + outpos] = ((in[6 + inpos]) >>> (58 - 22))
+ | ((in[7 + inpos]) << 22);
+ out[7 + outpos] = ((in[7 + inpos]) >>> (58 - 16))
+ | ((in[8 + inpos]) << 16);
+ out[8 + outpos] = ((in[8 + inpos]) >>> (58 - 10))
+ | ((in[9 + inpos]) << 10);
+ out[9 + outpos] = ((in[9 + inpos]) >>> (58 - 4))
+ | ((in[10 + inpos]) << 4)
+ | ((in[11 + inpos]) << 62);
+ out[10 + outpos] = ((in[11 + inpos]) >>> (58 - 56))
+ | ((in[12 + inpos]) << 56);
+ out[11 + outpos] = ((in[12 + inpos]) >>> (58 - 50))
+ | ((in[13 + inpos]) << 50);
+ out[12 + outpos] = ((in[13 + inpos]) >>> (58 - 44))
+ | ((in[14 + inpos]) << 44);
+ out[13 + outpos] = ((in[14 + inpos]) >>> (58 - 38))
+ | ((in[15 + inpos]) << 38);
+ out[14 + outpos] = ((in[15 + inpos]) >>> (58 - 32))
+ | ((in[16 + inpos]) << 32);
+ out[15 + outpos] = ((in[16 + inpos]) >>> (58 - 26))
+ | ((in[17 + inpos]) << 26);
+ out[16 + outpos] = ((in[17 + inpos]) >>> (58 - 20))
+ | ((in[18 + inpos]) << 20);
+ out[17 + outpos] = ((in[18 + inpos]) >>> (58 - 14))
+ | ((in[19 + inpos]) << 14);
+ out[18 + outpos] = ((in[19 + inpos]) >>> (58 - 8))
+ | ((in[20 + inpos]) << 8);
+ out[19 + outpos] = ((in[20 + inpos]) >>> (58 - 2))
+ | ((in[21 + inpos]) << 2)
+ | ((in[22 + inpos]) << 60);
+ out[20 + outpos] = ((in[22 + inpos]) >>> (58 - 54))
+ | ((in[23 + inpos]) << 54);
+ out[21 + outpos] = ((in[23 + inpos]) >>> (58 - 48))
+ | ((in[24 + inpos]) << 48);
+ out[22 + outpos] = ((in[24 + inpos]) >>> (58 - 42))
+ | ((in[25 + inpos]) << 42);
+ out[23 + outpos] = ((in[25 + inpos]) >>> (58 - 36))
+ | ((in[26 + inpos]) << 36);
+ out[24 + outpos] = ((in[26 + inpos]) >>> (58 - 30))
+ | ((in[27 + inpos]) << 30);
+ out[25 + outpos] = ((in[27 + inpos]) >>> (58 - 24))
+ | ((in[28 + inpos]) << 24);
+ out[26 + outpos] = ((in[28 + inpos]) >>> (58 - 18))
+ | ((in[29 + inpos]) << 18);
+ out[27 + outpos] = ((in[29 + inpos]) >>> (58 - 12))
+ | ((in[30 + inpos]) << 12);
+ out[28 + outpos] = ((in[30 + inpos]) >>> (58 - 6))
+ | ((in[31 + inpos]) << 6);
+ out[29 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 58);
+ out[30 + outpos] = ((in[33 + inpos]) >>> (58 - 52))
+ | ((in[34 + inpos]) << 52);
+ out[31 + outpos] = ((in[34 + inpos]) >>> (58 - 46))
+ | ((in[35 + inpos]) << 46);
+ out[32 + outpos] = ((in[35 + inpos]) >>> (58 - 40))
+ | ((in[36 + inpos]) << 40);
+ out[33 + outpos] = ((in[36 + inpos]) >>> (58 - 34))
+ | ((in[37 + inpos]) << 34);
+ out[34 + outpos] = ((in[37 + inpos]) >>> (58 - 28))
+ | ((in[38 + inpos]) << 28);
+ out[35 + outpos] = ((in[38 + inpos]) >>> (58 - 22))
+ | ((in[39 + inpos]) << 22);
+ out[36 + outpos] = ((in[39 + inpos]) >>> (58 - 16))
+ | ((in[40 + inpos]) << 16);
+ out[37 + outpos] = ((in[40 + inpos]) >>> (58 - 10))
+ | ((in[41 + inpos]) << 10);
+ out[38 + outpos] = ((in[41 + inpos]) >>> (58 - 4))
+ | ((in[42 + inpos]) << 4)
+ | ((in[43 + inpos]) << 62);
+ out[39 + outpos] = ((in[43 + inpos]) >>> (58 - 56))
+ | ((in[44 + inpos]) << 56);
+ out[40 + outpos] = ((in[44 + inpos]) >>> (58 - 50))
+ | ((in[45 + inpos]) << 50);
+ out[41 + outpos] = ((in[45 + inpos]) >>> (58 - 44))
+ | ((in[46 + inpos]) << 44);
+ out[42 + outpos] = ((in[46 + inpos]) >>> (58 - 38))
+ | ((in[47 + inpos]) << 38);
+ out[43 + outpos] = ((in[47 + inpos]) >>> (58 - 32))
+ | ((in[48 + inpos]) << 32);
+ out[44 + outpos] = ((in[48 + inpos]) >>> (58 - 26))
+ | ((in[49 + inpos]) << 26);
+ out[45 + outpos] = ((in[49 + inpos]) >>> (58 - 20))
+ | ((in[50 + inpos]) << 20);
+ out[46 + outpos] = ((in[50 + inpos]) >>> (58 - 14))
+ | ((in[51 + inpos]) << 14);
+ out[47 + outpos] = ((in[51 + inpos]) >>> (58 - 8))
+ | ((in[52 + inpos]) << 8);
+ out[48 + outpos] = ((in[52 + inpos]) >>> (58 - 2))
+ | ((in[53 + inpos]) << 2)
+ | ((in[54 + inpos]) << 60);
+ out[49 + outpos] = ((in[54 + inpos]) >>> (58 - 54))
+ | ((in[55 + inpos]) << 54);
+ out[50 + outpos] = ((in[55 + inpos]) >>> (58 - 48))
+ | ((in[56 + inpos]) << 48);
+ out[51 + outpos] = ((in[56 + inpos]) >>> (58 - 42))
+ | ((in[57 + inpos]) << 42);
+ out[52 + outpos] = ((in[57 + inpos]) >>> (58 - 36))
+ | ((in[58 + inpos]) << 36);
+ out[53 + outpos] = ((in[58 + inpos]) >>> (58 - 30))
+ | ((in[59 + inpos]) << 30);
+ out[54 + outpos] = ((in[59 + inpos]) >>> (58 - 24))
+ | ((in[60 + inpos]) << 24);
+ out[55 + outpos] = ((in[60 + inpos]) >>> (58 - 18))
+ | ((in[61 + inpos]) << 18);
+ out[56 + outpos] = ((in[61 + inpos]) >>> (58 - 12))
+ | ((in[62 + inpos]) << 12);
+ out[57 + outpos] = ((in[62 + inpos]) >>> (58 - 6))
+ | ((in[63 + inpos]) << 6);
+ }
+
+ protected static void fastpackwithoutmask59(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 59);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (59 - 54))
+ | ((in[2 + inpos]) << 54);
+ out[2 + outpos] = ((in[2 + inpos]) >>> (59 - 49))
+ | ((in[3 + inpos]) << 49);
+ out[3 + outpos] = ((in[3 + inpos]) >>> (59 - 44))
+ | ((in[4 + inpos]) << 44);
+ out[4 + outpos] = ((in[4 + inpos]) >>> (59 - 39))
+ | ((in[5 + inpos]) << 39);
+ out[5 + outpos] = ((in[5 + inpos]) >>> (59 - 34))
+ | ((in[6 + inpos]) << 34);
+ out[6 + outpos] = ((in[6 + inpos]) >>> (59 - 29))
+ | ((in[7 + inpos]) << 29);
+ out[7 + outpos] = ((in[7 + inpos]) >>> (59 - 24))
+ | ((in[8 + inpos]) << 24);
+ out[8 + outpos] = ((in[8 + inpos]) >>> (59 - 19))
+ | ((in[9 + inpos]) << 19);
+ out[9 + outpos] = ((in[9 + inpos]) >>> (59 - 14))
+ | ((in[10 + inpos]) << 14);
+ out[10 + outpos] = ((in[10 + inpos]) >>> (59 - 9))
+ | ((in[11 + inpos]) << 9);
+ out[11 + outpos] = ((in[11 + inpos]) >>> (59 - 4))
+ | ((in[12 + inpos]) << 4)
+ | ((in[13 + inpos]) << 63);
+ out[12 + outpos] = ((in[13 + inpos]) >>> (59 - 58))
+ | ((in[14 + inpos]) << 58);
+ out[13 + outpos] = ((in[14 + inpos]) >>> (59 - 53))
+ | ((in[15 + inpos]) << 53);
+ out[14 + outpos] = ((in[15 + inpos]) >>> (59 - 48))
+ | ((in[16 + inpos]) << 48);
+ out[15 + outpos] = ((in[16 + inpos]) >>> (59 - 43))
+ | ((in[17 + inpos]) << 43);
+ out[16 + outpos] = ((in[17 + inpos]) >>> (59 - 38))
+ | ((in[18 + inpos]) << 38);
+ out[17 + outpos] = ((in[18 + inpos]) >>> (59 - 33))
+ | ((in[19 + inpos]) << 33);
+ out[18 + outpos] = ((in[19 + inpos]) >>> (59 - 28))
+ | ((in[20 + inpos]) << 28);
+ out[19 + outpos] = ((in[20 + inpos]) >>> (59 - 23))
+ | ((in[21 + inpos]) << 23);
+ out[20 + outpos] = ((in[21 + inpos]) >>> (59 - 18))
+ | ((in[22 + inpos]) << 18);
+ out[21 + outpos] = ((in[22 + inpos]) >>> (59 - 13))
+ | ((in[23 + inpos]) << 13);
+ out[22 + outpos] = ((in[23 + inpos]) >>> (59 - 8))
+ | ((in[24 + inpos]) << 8);
+ out[23 + outpos] = ((in[24 + inpos]) >>> (59 - 3))
+ | ((in[25 + inpos]) << 3)
+ | ((in[26 + inpos]) << 62);
+ out[24 + outpos] = ((in[26 + inpos]) >>> (59 - 57))
+ | ((in[27 + inpos]) << 57);
+ out[25 + outpos] = ((in[27 + inpos]) >>> (59 - 52))
+ | ((in[28 + inpos]) << 52);
+ out[26 + outpos] = ((in[28 + inpos]) >>> (59 - 47))
+ | ((in[29 + inpos]) << 47);
+ out[27 + outpos] = ((in[29 + inpos]) >>> (59 - 42))
+ | ((in[30 + inpos]) << 42);
+ out[28 + outpos] = ((in[30 + inpos]) >>> (59 - 37))
+ | ((in[31 + inpos]) << 37);
+ out[29 + outpos] = ((in[31 + inpos]) >>> (59 - 32))
+ | ((in[32 + inpos]) << 32);
+ out[30 + outpos] = ((in[32 + inpos]) >>> (59 - 27))
+ | ((in[33 + inpos]) << 27);
+ out[31 + outpos] = ((in[33 + inpos]) >>> (59 - 22))
+ | ((in[34 + inpos]) << 22);
+ out[32 + outpos] = ((in[34 + inpos]) >>> (59 - 17))
+ | ((in[35 + inpos]) << 17);
+ out[33 + outpos] = ((in[35 + inpos]) >>> (59 - 12))
+ | ((in[36 + inpos]) << 12);
+ out[34 + outpos] = ((in[36 + inpos]) >>> (59 - 7))
+ | ((in[37 + inpos]) << 7);
+ out[35 + outpos] = ((in[37 + inpos]) >>> (59 - 2))
+ | ((in[38 + inpos]) << 2)
+ | ((in[39 + inpos]) << 61);
+ out[36 + outpos] = ((in[39 + inpos]) >>> (59 - 56))
+ | ((in[40 + inpos]) << 56);
+ out[37 + outpos] = ((in[40 + inpos]) >>> (59 - 51))
+ | ((in[41 + inpos]) << 51);
+ out[38 + outpos] = ((in[41 + inpos]) >>> (59 - 46))
+ | ((in[42 + inpos]) << 46);
+ out[39 + outpos] = ((in[42 + inpos]) >>> (59 - 41))
+ | ((in[43 + inpos]) << 41);
+ out[40 + outpos] = ((in[43 + inpos]) >>> (59 - 36))
+ | ((in[44 + inpos]) << 36);
+ out[41 + outpos] = ((in[44 + inpos]) >>> (59 - 31))
+ | ((in[45 + inpos]) << 31);
+ out[42 + outpos] = ((in[45 + inpos]) >>> (59 - 26))
+ | ((in[46 + inpos]) << 26);
+ out[43 + outpos] = ((in[46 + inpos]) >>> (59 - 21))
+ | ((in[47 + inpos]) << 21);
+ out[44 + outpos] = ((in[47 + inpos]) >>> (59 - 16))
+ | ((in[48 + inpos]) << 16);
+ out[45 + outpos] = ((in[48 + inpos]) >>> (59 - 11))
+ | ((in[49 + inpos]) << 11);
+ out[46 + outpos] = ((in[49 + inpos]) >>> (59 - 6))
+ | ((in[50 + inpos]) << 6);
+ out[47 + outpos] = ((in[50 + inpos]) >>> (59 - 1))
+ | ((in[51 + inpos]) << 1)
+ | ((in[52 + inpos]) << 60);
+ out[48 + outpos] = ((in[52 + inpos]) >>> (59 - 55))
+ | ((in[53 + inpos]) << 55);
+ out[49 + outpos] = ((in[53 + inpos]) >>> (59 - 50))
+ | ((in[54 + inpos]) << 50);
+ out[50 + outpos] = ((in[54 + inpos]) >>> (59 - 45))
+ | ((in[55 + inpos]) << 45);
+ out[51 + outpos] = ((in[55 + inpos]) >>> (59 - 40))
+ | ((in[56 + inpos]) << 40);
+ out[52 + outpos] = ((in[56 + inpos]) >>> (59 - 35))
+ | ((in[57 + inpos]) << 35);
+ out[53 + outpos] = ((in[57 + inpos]) >>> (59 - 30))
+ | ((in[58 + inpos]) << 30);
+ out[54 + outpos] = ((in[58 + inpos]) >>> (59 - 25))
+ | ((in[59 + inpos]) << 25);
+ out[55 + outpos] = ((in[59 + inpos]) >>> (59 - 20))
+ | ((in[60 + inpos]) << 20);
+ out[56 + outpos] = ((in[60 + inpos]) >>> (59 - 15))
+ | ((in[61 + inpos]) << 15);
+ out[57 + outpos] = ((in[61 + inpos]) >>> (59 - 10))
+ | ((in[62 + inpos]) << 10);
+ out[58 + outpos] = ((in[62 + inpos]) >>> (59 - 5))
+ | ((in[63 + inpos]) << 5);
+ }
+
+ protected static void fastpackwithoutmask60(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 60);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (60 - 56))
+ | ((in[2 + inpos]) << 56);
+ out[2 + outpos] = ((in[2 + inpos]) >>> (60 - 52))
+ | ((in[3 + inpos]) << 52);
+ out[3 + outpos] = ((in[3 + inpos]) >>> (60 - 48))
+ | ((in[4 + inpos]) << 48);
+ out[4 + outpos] = ((in[4 + inpos]) >>> (60 - 44))
+ | ((in[5 + inpos]) << 44);
+ out[5 + outpos] = ((in[5 + inpos]) >>> (60 - 40))
+ | ((in[6 + inpos]) << 40);
+ out[6 + outpos] = ((in[6 + inpos]) >>> (60 - 36))
+ | ((in[7 + inpos]) << 36);
+ out[7 + outpos] = ((in[7 + inpos]) >>> (60 - 32))
+ | ((in[8 + inpos]) << 32);
+ out[8 + outpos] = ((in[8 + inpos]) >>> (60 - 28))
+ | ((in[9 + inpos]) << 28);
+ out[9 + outpos] = ((in[9 + inpos]) >>> (60 - 24))
+ | ((in[10 + inpos]) << 24);
+ out[10 + outpos] = ((in[10 + inpos]) >>> (60 - 20))
+ | ((in[11 + inpos]) << 20);
+ out[11 + outpos] = ((in[11 + inpos]) >>> (60 - 16))
+ | ((in[12 + inpos]) << 16);
+ out[12 + outpos] = ((in[12 + inpos]) >>> (60 - 12))
+ | ((in[13 + inpos]) << 12);
+ out[13 + outpos] = ((in[13 + inpos]) >>> (60 - 8))
+ | ((in[14 + inpos]) << 8);
+ out[14 + outpos] = ((in[14 + inpos]) >>> (60 - 4))
+ | ((in[15 + inpos]) << 4);
+ out[15 + outpos] = in[16 + inpos]
+ | ((in[17 + inpos]) << 60);
+ out[16 + outpos] = ((in[17 + inpos]) >>> (60 - 56))
+ | ((in[18 + inpos]) << 56);
+ out[17 + outpos] = ((in[18 + inpos]) >>> (60 - 52))
+ | ((in[19 + inpos]) << 52);
+ out[18 + outpos] = ((in[19 + inpos]) >>> (60 - 48))
+ | ((in[20 + inpos]) << 48);
+ out[19 + outpos] = ((in[20 + inpos]) >>> (60 - 44))
+ | ((in[21 + inpos]) << 44);
+ out[20 + outpos] = ((in[21 + inpos]) >>> (60 - 40))
+ | ((in[22 + inpos]) << 40);
+ out[21 + outpos] = ((in[22 + inpos]) >>> (60 - 36))
+ | ((in[23 + inpos]) << 36);
+ out[22 + outpos] = ((in[23 + inpos]) >>> (60 - 32))
+ | ((in[24 + inpos]) << 32);
+ out[23 + outpos] = ((in[24 + inpos]) >>> (60 - 28))
+ | ((in[25 + inpos]) << 28);
+ out[24 + outpos] = ((in[25 + inpos]) >>> (60 - 24))
+ | ((in[26 + inpos]) << 24);
+ out[25 + outpos] = ((in[26 + inpos]) >>> (60 - 20))
+ | ((in[27 + inpos]) << 20);
+ out[26 + outpos] = ((in[27 + inpos]) >>> (60 - 16))
+ | ((in[28 + inpos]) << 16);
+ out[27 + outpos] = ((in[28 + inpos]) >>> (60 - 12))
+ | ((in[29 + inpos]) << 12);
+ out[28 + outpos] = ((in[29 + inpos]) >>> (60 - 8))
+ | ((in[30 + inpos]) << 8);
+ out[29 + outpos] = ((in[30 + inpos]) >>> (60 - 4))
+ | ((in[31 + inpos]) << 4);
+ out[30 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 60);
+ out[31 + outpos] = ((in[33 + inpos]) >>> (60 - 56))
+ | ((in[34 + inpos]) << 56);
+ out[32 + outpos] = ((in[34 + inpos]) >>> (60 - 52))
+ | ((in[35 + inpos]) << 52);
+ out[33 + outpos] = ((in[35 + inpos]) >>> (60 - 48))
+ | ((in[36 + inpos]) << 48);
+ out[34 + outpos] = ((in[36 + inpos]) >>> (60 - 44))
+ | ((in[37 + inpos]) << 44);
+ out[35 + outpos] = ((in[37 + inpos]) >>> (60 - 40))
+ | ((in[38 + inpos]) << 40);
+ out[36 + outpos] = ((in[38 + inpos]) >>> (60 - 36))
+ | ((in[39 + inpos]) << 36);
+ out[37 + outpos] = ((in[39 + inpos]) >>> (60 - 32))
+ | ((in[40 + inpos]) << 32);
+ out[38 + outpos] = ((in[40 + inpos]) >>> (60 - 28))
+ | ((in[41 + inpos]) << 28);
+ out[39 + outpos] = ((in[41 + inpos]) >>> (60 - 24))
+ | ((in[42 + inpos]) << 24);
+ out[40 + outpos] = ((in[42 + inpos]) >>> (60 - 20))
+ | ((in[43 + inpos]) << 20);
+ out[41 + outpos] = ((in[43 + inpos]) >>> (60 - 16))
+ | ((in[44 + inpos]) << 16);
+ out[42 + outpos] = ((in[44 + inpos]) >>> (60 - 12))
+ | ((in[45 + inpos]) << 12);
+ out[43 + outpos] = ((in[45 + inpos]) >>> (60 - 8))
+ | ((in[46 + inpos]) << 8);
+ out[44 + outpos] = ((in[46 + inpos]) >>> (60 - 4))
+ | ((in[47 + inpos]) << 4);
+ out[45 + outpos] = in[48 + inpos]
+ | ((in[49 + inpos]) << 60);
+ out[46 + outpos] = ((in[49 + inpos]) >>> (60 - 56))
+ | ((in[50 + inpos]) << 56);
+ out[47 + outpos] = ((in[50 + inpos]) >>> (60 - 52))
+ | ((in[51 + inpos]) << 52);
+ out[48 + outpos] = ((in[51 + inpos]) >>> (60 - 48))
+ | ((in[52 + inpos]) << 48);
+ out[49 + outpos] = ((in[52 + inpos]) >>> (60 - 44))
+ | ((in[53 + inpos]) << 44);
+ out[50 + outpos] = ((in[53 + inpos]) >>> (60 - 40))
+ | ((in[54 + inpos]) << 40);
+ out[51 + outpos] = ((in[54 + inpos]) >>> (60 - 36))
+ | ((in[55 + inpos]) << 36);
+ out[52 + outpos] = ((in[55 + inpos]) >>> (60 - 32))
+ | ((in[56 + inpos]) << 32);
+ out[53 + outpos] = ((in[56 + inpos]) >>> (60 - 28))
+ | ((in[57 + inpos]) << 28);
+ out[54 + outpos] = ((in[57 + inpos]) >>> (60 - 24))
+ | ((in[58 + inpos]) << 24);
+ out[55 + outpos] = ((in[58 + inpos]) >>> (60 - 20))
+ | ((in[59 + inpos]) << 20);
+ out[56 + outpos] = ((in[59 + inpos]) >>> (60 - 16))
+ | ((in[60 + inpos]) << 16);
+ out[57 + outpos] = ((in[60 + inpos]) >>> (60 - 12))
+ | ((in[61 + inpos]) << 12);
+ out[58 + outpos] = ((in[61 + inpos]) >>> (60 - 8))
+ | ((in[62 + inpos]) << 8);
+ out[59 + outpos] = ((in[62 + inpos]) >>> (60 - 4))
+ | ((in[63 + inpos]) << 4);
+ }
+
+ protected static void fastpackwithoutmask61(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 61);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (61 - 58))
+ | ((in[2 + inpos]) << 58);
+ out[2 + outpos] = ((in[2 + inpos]) >>> (61 - 55))
+ | ((in[3 + inpos]) << 55);
+ out[3 + outpos] = ((in[3 + inpos]) >>> (61 - 52))
+ | ((in[4 + inpos]) << 52);
+ out[4 + outpos] = ((in[4 + inpos]) >>> (61 - 49))
+ | ((in[5 + inpos]) << 49);
+ out[5 + outpos] = ((in[5 + inpos]) >>> (61 - 46))
+ | ((in[6 + inpos]) << 46);
+ out[6 + outpos] = ((in[6 + inpos]) >>> (61 - 43))
+ | ((in[7 + inpos]) << 43);
+ out[7 + outpos] = ((in[7 + inpos]) >>> (61 - 40))
+ | ((in[8 + inpos]) << 40);
+ out[8 + outpos] = ((in[8 + inpos]) >>> (61 - 37))
+ | ((in[9 + inpos]) << 37);
+ out[9 + outpos] = ((in[9 + inpos]) >>> (61 - 34))
+ | ((in[10 + inpos]) << 34);
+ out[10 + outpos] = ((in[10 + inpos]) >>> (61 - 31))
+ | ((in[11 + inpos]) << 31);
+ out[11 + outpos] = ((in[11 + inpos]) >>> (61 - 28))
+ | ((in[12 + inpos]) << 28);
+ out[12 + outpos] = ((in[12 + inpos]) >>> (61 - 25))
+ | ((in[13 + inpos]) << 25);
+ out[13 + outpos] = ((in[13 + inpos]) >>> (61 - 22))
+ | ((in[14 + inpos]) << 22);
+ out[14 + outpos] = ((in[14 + inpos]) >>> (61 - 19))
+ | ((in[15 + inpos]) << 19);
+ out[15 + outpos] = ((in[15 + inpos]) >>> (61 - 16))
+ | ((in[16 + inpos]) << 16);
+ out[16 + outpos] = ((in[16 + inpos]) >>> (61 - 13))
+ | ((in[17 + inpos]) << 13);
+ out[17 + outpos] = ((in[17 + inpos]) >>> (61 - 10))
+ | ((in[18 + inpos]) << 10);
+ out[18 + outpos] = ((in[18 + inpos]) >>> (61 - 7))
+ | ((in[19 + inpos]) << 7);
+ out[19 + outpos] = ((in[19 + inpos]) >>> (61 - 4))
+ | ((in[20 + inpos]) << 4);
+ out[20 + outpos] = ((in[20 + inpos]) >>> (61 - 1))
+ | ((in[21 + inpos]) << 1)
+ | ((in[22 + inpos]) << 62);
+ out[21 + outpos] = ((in[22 + inpos]) >>> (61 - 59))
+ | ((in[23 + inpos]) << 59);
+ out[22 + outpos] = ((in[23 + inpos]) >>> (61 - 56))
+ | ((in[24 + inpos]) << 56);
+ out[23 + outpos] = ((in[24 + inpos]) >>> (61 - 53))
+ | ((in[25 + inpos]) << 53);
+ out[24 + outpos] = ((in[25 + inpos]) >>> (61 - 50))
+ | ((in[26 + inpos]) << 50);
+ out[25 + outpos] = ((in[26 + inpos]) >>> (61 - 47))
+ | ((in[27 + inpos]) << 47);
+ out[26 + outpos] = ((in[27 + inpos]) >>> (61 - 44))
+ | ((in[28 + inpos]) << 44);
+ out[27 + outpos] = ((in[28 + inpos]) >>> (61 - 41))
+ | ((in[29 + inpos]) << 41);
+ out[28 + outpos] = ((in[29 + inpos]) >>> (61 - 38))
+ | ((in[30 + inpos]) << 38);
+ out[29 + outpos] = ((in[30 + inpos]) >>> (61 - 35))
+ | ((in[31 + inpos]) << 35);
+ out[30 + outpos] = ((in[31 + inpos]) >>> (61 - 32))
+ | ((in[32 + inpos]) << 32);
+ out[31 + outpos] = ((in[32 + inpos]) >>> (61 - 29))
+ | ((in[33 + inpos]) << 29);
+ out[32 + outpos] = ((in[33 + inpos]) >>> (61 - 26))
+ | ((in[34 + inpos]) << 26);
+ out[33 + outpos] = ((in[34 + inpos]) >>> (61 - 23))
+ | ((in[35 + inpos]) << 23);
+ out[34 + outpos] = ((in[35 + inpos]) >>> (61 - 20))
+ | ((in[36 + inpos]) << 20);
+ out[35 + outpos] = ((in[36 + inpos]) >>> (61 - 17))
+ | ((in[37 + inpos]) << 17);
+ out[36 + outpos] = ((in[37 + inpos]) >>> (61 - 14))
+ | ((in[38 + inpos]) << 14);
+ out[37 + outpos] = ((in[38 + inpos]) >>> (61 - 11))
+ | ((in[39 + inpos]) << 11);
+ out[38 + outpos] = ((in[39 + inpos]) >>> (61 - 8))
+ | ((in[40 + inpos]) << 8);
+ out[39 + outpos] = ((in[40 + inpos]) >>> (61 - 5))
+ | ((in[41 + inpos]) << 5);
+ out[40 + outpos] = ((in[41 + inpos]) >>> (61 - 2))
+ | ((in[42 + inpos]) << 2)
+ | ((in[43 + inpos]) << 63);
+ out[41 + outpos] = ((in[43 + inpos]) >>> (61 - 60))
+ | ((in[44 + inpos]) << 60);
+ out[42 + outpos] = ((in[44 + inpos]) >>> (61 - 57))
+ | ((in[45 + inpos]) << 57);
+ out[43 + outpos] = ((in[45 + inpos]) >>> (61 - 54))
+ | ((in[46 + inpos]) << 54);
+ out[44 + outpos] = ((in[46 + inpos]) >>> (61 - 51))
+ | ((in[47 + inpos]) << 51);
+ out[45 + outpos] = ((in[47 + inpos]) >>> (61 - 48))
+ | ((in[48 + inpos]) << 48);
+ out[46 + outpos] = ((in[48 + inpos]) >>> (61 - 45))
+ | ((in[49 + inpos]) << 45);
+ out[47 + outpos] = ((in[49 + inpos]) >>> (61 - 42))
+ | ((in[50 + inpos]) << 42);
+ out[48 + outpos] = ((in[50 + inpos]) >>> (61 - 39))
+ | ((in[51 + inpos]) << 39);
+ out[49 + outpos] = ((in[51 + inpos]) >>> (61 - 36))
+ | ((in[52 + inpos]) << 36);
+ out[50 + outpos] = ((in[52 + inpos]) >>> (61 - 33))
+ | ((in[53 + inpos]) << 33);
+ out[51 + outpos] = ((in[53 + inpos]) >>> (61 - 30))
+ | ((in[54 + inpos]) << 30);
+ out[52 + outpos] = ((in[54 + inpos]) >>> (61 - 27))
+ | ((in[55 + inpos]) << 27);
+ out[53 + outpos] = ((in[55 + inpos]) >>> (61 - 24))
+ | ((in[56 + inpos]) << 24);
+ out[54 + outpos] = ((in[56 + inpos]) >>> (61 - 21))
+ | ((in[57 + inpos]) << 21);
+ out[55 + outpos] = ((in[57 + inpos]) >>> (61 - 18))
+ | ((in[58 + inpos]) << 18);
+ out[56 + outpos] = ((in[58 + inpos]) >>> (61 - 15))
+ | ((in[59 + inpos]) << 15);
+ out[57 + outpos] = ((in[59 + inpos]) >>> (61 - 12))
+ | ((in[60 + inpos]) << 12);
+ out[58 + outpos] = ((in[60 + inpos]) >>> (61 - 9))
+ | ((in[61 + inpos]) << 9);
+ out[59 + outpos] = ((in[61 + inpos]) >>> (61 - 6))
+ | ((in[62 + inpos]) << 6);
+ out[60 + outpos] = ((in[62 + inpos]) >>> (61 - 3))
+ | ((in[63 + inpos]) << 3);
+ }
+
+ protected static void fastpackwithoutmask62(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 62);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (62 - 60))
+ | ((in[2 + inpos]) << 60);
+ out[2 + outpos] = ((in[2 + inpos]) >>> (62 - 58))
+ | ((in[3 + inpos]) << 58);
+ out[3 + outpos] = ((in[3 + inpos]) >>> (62 - 56))
+ | ((in[4 + inpos]) << 56);
+ out[4 + outpos] = ((in[4 + inpos]) >>> (62 - 54))
+ | ((in[5 + inpos]) << 54);
+ out[5 + outpos] = ((in[5 + inpos]) >>> (62 - 52))
+ | ((in[6 + inpos]) << 52);
+ out[6 + outpos] = ((in[6 + inpos]) >>> (62 - 50))
+ | ((in[7 + inpos]) << 50);
+ out[7 + outpos] = ((in[7 + inpos]) >>> (62 - 48))
+ | ((in[8 + inpos]) << 48);
+ out[8 + outpos] = ((in[8 + inpos]) >>> (62 - 46))
+ | ((in[9 + inpos]) << 46);
+ out[9 + outpos] = ((in[9 + inpos]) >>> (62 - 44))
+ | ((in[10 + inpos]) << 44);
+ out[10 + outpos] = ((in[10 + inpos]) >>> (62 - 42))
+ | ((in[11 + inpos]) << 42);
+ out[11 + outpos] = ((in[11 + inpos]) >>> (62 - 40))
+ | ((in[12 + inpos]) << 40);
+ out[12 + outpos] = ((in[12 + inpos]) >>> (62 - 38))
+ | ((in[13 + inpos]) << 38);
+ out[13 + outpos] = ((in[13 + inpos]) >>> (62 - 36))
+ | ((in[14 + inpos]) << 36);
+ out[14 + outpos] = ((in[14 + inpos]) >>> (62 - 34))
+ | ((in[15 + inpos]) << 34);
+ out[15 + outpos] = ((in[15 + inpos]) >>> (62 - 32))
+ | ((in[16 + inpos]) << 32);
+ out[16 + outpos] = ((in[16 + inpos]) >>> (62 - 30))
+ | ((in[17 + inpos]) << 30);
+ out[17 + outpos] = ((in[17 + inpos]) >>> (62 - 28))
+ | ((in[18 + inpos]) << 28);
+ out[18 + outpos] = ((in[18 + inpos]) >>> (62 - 26))
+ | ((in[19 + inpos]) << 26);
+ out[19 + outpos] = ((in[19 + inpos]) >>> (62 - 24))
+ | ((in[20 + inpos]) << 24);
+ out[20 + outpos] = ((in[20 + inpos]) >>> (62 - 22))
+ | ((in[21 + inpos]) << 22);
+ out[21 + outpos] = ((in[21 + inpos]) >>> (62 - 20))
+ | ((in[22 + inpos]) << 20);
+ out[22 + outpos] = ((in[22 + inpos]) >>> (62 - 18))
+ | ((in[23 + inpos]) << 18);
+ out[23 + outpos] = ((in[23 + inpos]) >>> (62 - 16))
+ | ((in[24 + inpos]) << 16);
+ out[24 + outpos] = ((in[24 + inpos]) >>> (62 - 14))
+ | ((in[25 + inpos]) << 14);
+ out[25 + outpos] = ((in[25 + inpos]) >>> (62 - 12))
+ | ((in[26 + inpos]) << 12);
+ out[26 + outpos] = ((in[26 + inpos]) >>> (62 - 10))
+ | ((in[27 + inpos]) << 10);
+ out[27 + outpos] = ((in[27 + inpos]) >>> (62 - 8))
+ | ((in[28 + inpos]) << 8);
+ out[28 + outpos] = ((in[28 + inpos]) >>> (62 - 6))
+ | ((in[29 + inpos]) << 6);
+ out[29 + outpos] = ((in[29 + inpos]) >>> (62 - 4))
+ | ((in[30 + inpos]) << 4);
+ out[30 + outpos] = ((in[30 + inpos]) >>> (62 - 2))
+ | ((in[31 + inpos]) << 2);
+ out[31 + outpos] = in[32 + inpos]
+ | ((in[33 + inpos]) << 62);
+ out[32 + outpos] = ((in[33 + inpos]) >>> (62 - 60))
+ | ((in[34 + inpos]) << 60);
+ out[33 + outpos] = ((in[34 + inpos]) >>> (62 - 58))
+ | ((in[35 + inpos]) << 58);
+ out[34 + outpos] = ((in[35 + inpos]) >>> (62 - 56))
+ | ((in[36 + inpos]) << 56);
+ out[35 + outpos] = ((in[36 + inpos]) >>> (62 - 54))
+ | ((in[37 + inpos]) << 54);
+ out[36 + outpos] = ((in[37 + inpos]) >>> (62 - 52))
+ | ((in[38 + inpos]) << 52);
+ out[37 + outpos] = ((in[38 + inpos]) >>> (62 - 50))
+ | ((in[39 + inpos]) << 50);
+ out[38 + outpos] = ((in[39 + inpos]) >>> (62 - 48))
+ | ((in[40 + inpos]) << 48);
+ out[39 + outpos] = ((in[40 + inpos]) >>> (62 - 46))
+ | ((in[41 + inpos]) << 46);
+ out[40 + outpos] = ((in[41 + inpos]) >>> (62 - 44))
+ | ((in[42 + inpos]) << 44);
+ out[41 + outpos] = ((in[42 + inpos]) >>> (62 - 42))
+ | ((in[43 + inpos]) << 42);
+ out[42 + outpos] = ((in[43 + inpos]) >>> (62 - 40))
+ | ((in[44 + inpos]) << 40);
+ out[43 + outpos] = ((in[44 + inpos]) >>> (62 - 38))
+ | ((in[45 + inpos]) << 38);
+ out[44 + outpos] = ((in[45 + inpos]) >>> (62 - 36))
+ | ((in[46 + inpos]) << 36);
+ out[45 + outpos] = ((in[46 + inpos]) >>> (62 - 34))
+ | ((in[47 + inpos]) << 34);
+ out[46 + outpos] = ((in[47 + inpos]) >>> (62 - 32))
+ | ((in[48 + inpos]) << 32);
+ out[47 + outpos] = ((in[48 + inpos]) >>> (62 - 30))
+ | ((in[49 + inpos]) << 30);
+ out[48 + outpos] = ((in[49 + inpos]) >>> (62 - 28))
+ | ((in[50 + inpos]) << 28);
+ out[49 + outpos] = ((in[50 + inpos]) >>> (62 - 26))
+ | ((in[51 + inpos]) << 26);
+ out[50 + outpos] = ((in[51 + inpos]) >>> (62 - 24))
+ | ((in[52 + inpos]) << 24);
+ out[51 + outpos] = ((in[52 + inpos]) >>> (62 - 22))
+ | ((in[53 + inpos]) << 22);
+ out[52 + outpos] = ((in[53 + inpos]) >>> (62 - 20))
+ | ((in[54 + inpos]) << 20);
+ out[53 + outpos] = ((in[54 + inpos]) >>> (62 - 18))
+ | ((in[55 + inpos]) << 18);
+ out[54 + outpos] = ((in[55 + inpos]) >>> (62 - 16))
+ | ((in[56 + inpos]) << 16);
+ out[55 + outpos] = ((in[56 + inpos]) >>> (62 - 14))
+ | ((in[57 + inpos]) << 14);
+ out[56 + outpos] = ((in[57 + inpos]) >>> (62 - 12))
+ | ((in[58 + inpos]) << 12);
+ out[57 + outpos] = ((in[58 + inpos]) >>> (62 - 10))
+ | ((in[59 + inpos]) << 10);
+ out[58 + outpos] = ((in[59 + inpos]) >>> (62 - 8))
+ | ((in[60 + inpos]) << 8);
+ out[59 + outpos] = ((in[60 + inpos]) >>> (62 - 6))
+ | ((in[61 + inpos]) << 6);
+ out[60 + outpos] = ((in[61 + inpos]) >>> (62 - 4))
+ | ((in[62 + inpos]) << 4);
+ out[61 + outpos] = ((in[62 + inpos]) >>> (62 - 2))
+ | ((in[63 + inpos]) << 2);
+ }
+
+ protected static void fastpackwithoutmask63(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = in[inpos] | ((in[1 + inpos]) << 63);
+ out[1 + outpos] = ((in[1 + inpos]) >>> (63 - 62))
+ | ((in[2 + inpos]) << 62);
+ out[2 + outpos] = ((in[2 + inpos]) >>> (63 - 61))
+ | ((in[3 + inpos]) << 61);
+ out[3 + outpos] = ((in[3 + inpos]) >>> (63 - 60))
+ | ((in[4 + inpos]) << 60);
+ out[4 + outpos] = ((in[4 + inpos]) >>> (63 - 59))
+ | ((in[5 + inpos]) << 59);
+ out[5 + outpos] = ((in[5 + inpos]) >>> (63 - 58))
+ | ((in[6 + inpos]) << 58);
+ out[6 + outpos] = ((in[6 + inpos]) >>> (63 - 57))
+ | ((in[7 + inpos]) << 57);
+ out[7 + outpos] = ((in[7 + inpos]) >>> (63 - 56))
+ | ((in[8 + inpos]) << 56);
+ out[8 + outpos] = ((in[8 + inpos]) >>> (63 - 55))
+ | ((in[9 + inpos]) << 55);
+ out[9 + outpos] = ((in[9 + inpos]) >>> (63 - 54))
+ | ((in[10 + inpos]) << 54);
+ out[10 + outpos] = ((in[10 + inpos]) >>> (63 - 53))
+ | ((in[11 + inpos]) << 53);
+ out[11 + outpos] = ((in[11 + inpos]) >>> (63 - 52))
+ | ((in[12 + inpos]) << 52);
+ out[12 + outpos] = ((in[12 + inpos]) >>> (63 - 51))
+ | ((in[13 + inpos]) << 51);
+ out[13 + outpos] = ((in[13 + inpos]) >>> (63 - 50))
+ | ((in[14 + inpos]) << 50);
+ out[14 + outpos] = ((in[14 + inpos]) >>> (63 - 49))
+ | ((in[15 + inpos]) << 49);
+ out[15 + outpos] = ((in[15 + inpos]) >>> (63 - 48))
+ | ((in[16 + inpos]) << 48);
+ out[16 + outpos] = ((in[16 + inpos]) >>> (63 - 47))
+ | ((in[17 + inpos]) << 47);
+ out[17 + outpos] = ((in[17 + inpos]) >>> (63 - 46))
+ | ((in[18 + inpos]) << 46);
+ out[18 + outpos] = ((in[18 + inpos]) >>> (63 - 45))
+ | ((in[19 + inpos]) << 45);
+ out[19 + outpos] = ((in[19 + inpos]) >>> (63 - 44))
+ | ((in[20 + inpos]) << 44);
+ out[20 + outpos] = ((in[20 + inpos]) >>> (63 - 43))
+ | ((in[21 + inpos]) << 43);
+ out[21 + outpos] = ((in[21 + inpos]) >>> (63 - 42))
+ | ((in[22 + inpos]) << 42);
+ out[22 + outpos] = ((in[22 + inpos]) >>> (63 - 41))
+ | ((in[23 + inpos]) << 41);
+ out[23 + outpos] = ((in[23 + inpos]) >>> (63 - 40))
+ | ((in[24 + inpos]) << 40);
+ out[24 + outpos] = ((in[24 + inpos]) >>> (63 - 39))
+ | ((in[25 + inpos]) << 39);
+ out[25 + outpos] = ((in[25 + inpos]) >>> (63 - 38))
+ | ((in[26 + inpos]) << 38);
+ out[26 + outpos] = ((in[26 + inpos]) >>> (63 - 37))
+ | ((in[27 + inpos]) << 37);
+ out[27 + outpos] = ((in[27 + inpos]) >>> (63 - 36))
+ | ((in[28 + inpos]) << 36);
+ out[28 + outpos] = ((in[28 + inpos]) >>> (63 - 35))
+ | ((in[29 + inpos]) << 35);
+ out[29 + outpos] = ((in[29 + inpos]) >>> (63 - 34))
+ | ((in[30 + inpos]) << 34);
+ out[30 + outpos] = ((in[30 + inpos]) >>> (63 - 33))
+ | ((in[31 + inpos]) << 33);
+ out[31 + outpos] = ((in[31 + inpos]) >>> (63 - 32))
+ | ((in[32 + inpos]) << 32);
+ out[32 + outpos] = ((in[32 + inpos]) >>> (63 - 31))
+ | ((in[33 + inpos]) << 31);
+ out[33 + outpos] = ((in[33 + inpos]) >>> (63 - 30))
+ | ((in[34 + inpos]) << 30);
+ out[34 + outpos] = ((in[34 + inpos]) >>> (63 - 29))
+ | ((in[35 + inpos]) << 29);
+ out[35 + outpos] = ((in[35 + inpos]) >>> (63 - 28))
+ | ((in[36 + inpos]) << 28);
+ out[36 + outpos] = ((in[36 + inpos]) >>> (63 - 27))
+ | ((in[37 + inpos]) << 27);
+ out[37 + outpos] = ((in[37 + inpos]) >>> (63 - 26))
+ | ((in[38 + inpos]) << 26);
+ out[38 + outpos] = ((in[38 + inpos]) >>> (63 - 25))
+ | ((in[39 + inpos]) << 25);
+ out[39 + outpos] = ((in[39 + inpos]) >>> (63 - 24))
+ | ((in[40 + inpos]) << 24);
+ out[40 + outpos] = ((in[40 + inpos]) >>> (63 - 23))
+ | ((in[41 + inpos]) << 23);
+ out[41 + outpos] = ((in[41 + inpos]) >>> (63 - 22))
+ | ((in[42 + inpos]) << 22);
+ out[42 + outpos] = ((in[42 + inpos]) >>> (63 - 21))
+ | ((in[43 + inpos]) << 21);
+ out[43 + outpos] = ((in[43 + inpos]) >>> (63 - 20))
+ | ((in[44 + inpos]) << 20);
+ out[44 + outpos] = ((in[44 + inpos]) >>> (63 - 19))
+ | ((in[45 + inpos]) << 19);
+ out[45 + outpos] = ((in[45 + inpos]) >>> (63 - 18))
+ | ((in[46 + inpos]) << 18);
+ out[46 + outpos] = ((in[46 + inpos]) >>> (63 - 17))
+ | ((in[47 + inpos]) << 17);
+ out[47 + outpos] = ((in[47 + inpos]) >>> (63 - 16))
+ | ((in[48 + inpos]) << 16);
+ out[48 + outpos] = ((in[48 + inpos]) >>> (63 - 15))
+ | ((in[49 + inpos]) << 15);
+ out[49 + outpos] = ((in[49 + inpos]) >>> (63 - 14))
+ | ((in[50 + inpos]) << 14);
+ out[50 + outpos] = ((in[50 + inpos]) >>> (63 - 13))
+ | ((in[51 + inpos]) << 13);
+ out[51 + outpos] = ((in[51 + inpos]) >>> (63 - 12))
+ | ((in[52 + inpos]) << 12);
+ out[52 + outpos] = ((in[52 + inpos]) >>> (63 - 11))
+ | ((in[53 + inpos]) << 11);
+ out[53 + outpos] = ((in[53 + inpos]) >>> (63 - 10))
+ | ((in[54 + inpos]) << 10);
+ out[54 + outpos] = ((in[54 + inpos]) >>> (63 - 9))
+ | ((in[55 + inpos]) << 9);
+ out[55 + outpos] = ((in[55 + inpos]) >>> (63 - 8))
+ | ((in[56 + inpos]) << 8);
+ out[56 + outpos] = ((in[56 + inpos]) >>> (63 - 7))
+ | ((in[57 + inpos]) << 7);
+ out[57 + outpos] = ((in[57 + inpos]) >>> (63 - 6))
+ | ((in[58 + inpos]) << 6);
+ out[58 + outpos] = ((in[58 + inpos]) >>> (63 - 5))
+ | ((in[59 + inpos]) << 5);
+ out[59 + outpos] = ((in[59 + inpos]) >>> (63 - 4))
+ | ((in[60 + inpos]) << 4);
+ out[60 + outpos] = ((in[60 + inpos]) >>> (63 - 3))
+ | ((in[61 + inpos]) << 3);
+ out[61 + outpos] = ((in[61 + inpos]) >>> (63 - 2))
+ | ((in[62 + inpos]) << 2);
+ out[62 + outpos] = ((in[62 + inpos]) >>> (63 - 1))
+ | ((in[63 + inpos]) << 1);
+ }
+
+ protected static void fastpackwithoutmask64(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ System.arraycopy(in, inpos, out, outpos, 64);
+ }
+
+ protected static void slowpackwithoutmask(final long[] in, int inpos,
+ final long[] out, int outpos, final int bit) {
+ int bucket = 0;
+ int shift = 0;
+
+ out[outpos + bucket] = 0L;
+ for (int i = 0 ; i < 64 ; i++) {
+ if (shift >= 64) {
+ bucket++;
+ out[bucket + outpos] = 0L;
+ shift -= 64;
+
+ if (shift > 0) {
+ // There is some leftovers from previous input in the next bucket
+ out[outpos + bucket] |= in[inpos + i - 1] >> (bit - shift);
+ }
+ }
+ out[outpos + bucket] |= in[inpos + i] << shift;
+
+ shift += bit;
+ }
+ }
+
+
+ /**
+ * Unpack the 64 longs
+ *
+ * @param in
+ * source array
+ * @param inpos
+ * starting point in the source array
+ * @param out
+ * output array
+ * @param outpos
+ * starting point in the output array
+ * @param bit
+ * how many bits to use per integer
+ */
+ public static void fastunpack(final long[] in, final int inpos,
+ final long[] out, final int outpos, final int bit) {
+ switch (bit) {
+ case 0:
+ fastunpack0(in, inpos, out, outpos);
+ break;
+ case 1:
+ fastunpack1(in, inpos, out, outpos);
+ break;
+ case 2:
+ fastunpack2(in, inpos, out, outpos);
+ break;
+ case 3:
+ fastunpack3(in, inpos, out, outpos);
+ break;
+ case 4:
+ fastunpack4(in, inpos, out, outpos);
+ break;
+ case 5:
+ fastunpack5(in, inpos, out, outpos);
+ break;
+ case 6:
+ fastunpack6(in, inpos, out, outpos);
+ break;
+ case 7:
+ fastunpack7(in, inpos, out, outpos);
+ break;
+ case 8:
+ fastunpack8(in, inpos, out, outpos);
+ break;
+ case 9:
+ fastunpack9(in, inpos, out, outpos);
+ break;
+ case 10:
+ fastunpack10(in, inpos, out, outpos);
+ break;
+ case 11:
+ fastunpack11(in, inpos, out, outpos);
+ break;
+ case 12:
+ fastunpack12(in, inpos, out, outpos);
+ break;
+ case 13:
+ fastunpack13(in, inpos, out, outpos);
+ break;
+ case 14:
+ fastunpack14(in, inpos, out, outpos);
+ break;
+ case 15:
+ fastunpack15(in, inpos, out, outpos);
+ break;
+ case 16:
+ fastunpack16(in, inpos, out, outpos);
+ break;
+ case 17:
+ fastunpack17(in, inpos, out, outpos);
+ break;
+ case 18:
+ fastunpack18(in, inpos, out, outpos);
+ break;
+ case 19:
+ fastunpack19(in, inpos, out, outpos);
+ break;
+ case 20:
+ fastunpack20(in, inpos, out, outpos);
+ break;
+ case 21:
+ fastunpack21(in, inpos, out, outpos);
+ break;
+ case 22:
+ fastunpack22(in, inpos, out, outpos);
+ break;
+ case 23:
+ fastunpack23(in, inpos, out, outpos);
+ break;
+ case 24:
+ fastunpack24(in, inpos, out, outpos);
+ break;
+ case 25:
+ fastunpack25(in, inpos, out, outpos);
+ break;
+ case 26:
+ fastunpack26(in, inpos, out, outpos);
+ break;
+ case 27:
+ fastunpack27(in, inpos, out, outpos);
+ break;
+ case 28:
+ fastunpack28(in, inpos, out, outpos);
+ break;
+ case 29:
+ fastunpack29(in, inpos, out, outpos);
+ break;
+ case 30:
+ fastunpack30(in, inpos, out, outpos);
+ break;
+ case 31:
+ fastunpack31(in, inpos, out, outpos);
+ break;
+ case 32:
+ fastunpack32(in, inpos, out, outpos);
+ break;
+ case 33:
+ fastunpack33(in, inpos, out, outpos);
+ break;
+ case 34:
+ fastunpack34(in, inpos, out, outpos);
+ break;
+ case 35:
+ fastunpack35(in, inpos, out, outpos);
+ break;
+ case 36:
+ fastunpack36(in, inpos, out, outpos);
+ break;
+ case 37:
+ fastunpack37(in, inpos, out, outpos);
+ break;
+ case 38:
+ fastunpack38(in, inpos, out, outpos);
+ break;
+ case 39:
+ fastunpack39(in, inpos, out, outpos);
+ break;
+ case 40:
+ fastunpack40(in, inpos, out, outpos);
+ break;
+ case 41:
+ fastunpack41(in, inpos, out, outpos);
+ break;
+ case 42:
+ fastunpack42(in, inpos, out, outpos);
+ break;
+ case 43:
+ fastunpack43(in, inpos, out, outpos);
+ break;
+ case 44:
+ fastunpack44(in, inpos, out, outpos);
+ break;
+ case 45:
+ fastunpack45(in, inpos, out, outpos);
+ break;
+ case 46:
+ fastunpack46(in, inpos, out, outpos);
+ break;
+ case 47:
+ fastunpack47(in, inpos, out, outpos);
+ break;
+ case 48:
+ fastunpack48(in, inpos, out, outpos);
+ break;
+ case 49:
+ fastunpack49(in, inpos, out, outpos);
+ break;
+ case 50:
+ fastunpack50(in, inpos, out, outpos);
+ break;
+ case 51:
+ fastunpack51(in, inpos, out, outpos);
+ break;
+ case 52:
+ fastunpack52(in, inpos, out, outpos);
+ break;
+ case 53:
+ fastunpack53(in, inpos, out, outpos);
+ break;
+ case 54:
+ fastunpack54(in, inpos, out, outpos);
+ break;
+ case 55:
+ fastunpack55(in, inpos, out, outpos);
+ break;
+ case 56:
+ fastunpack56(in, inpos, out, outpos);
+ break;
+ case 57:
+ fastunpack57(in, inpos, out, outpos);
+ break;
+ case 58:
+ fastunpack58(in, inpos, out, outpos);
+ break;
+ case 59:
+ fastunpack59(in, inpos, out, outpos);
+ break;
+ case 60:
+ fastunpack60(in, inpos, out, outpos);
+ break;
+ case 61:
+ fastunpack61(in, inpos, out, outpos);
+ break;
+ case 62:
+ fastunpack62(in, inpos, out, outpos);
+ break;
+ case 63:
+ fastunpack63(in, inpos, out, outpos);
+ break;
+ case 64:
+ fastunpack64(in, inpos, out, outpos);
+ break;
+ default:
+ throw new IllegalArgumentException("Unsupported bit width: " + bit);
+ }
+ }
+
+
+ protected static void fastunpack0(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ Arrays.fill(out, outpos, outpos + 64, 0);
+ }
+
+ protected static void fastunpack1(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 1L);
+ out[1 + outpos] = ((in[inpos] >>> 1) & 1L);
+ out[2 + outpos] = ((in[inpos] >>> 2) & 1L);
+ out[3 + outpos] = ((in[inpos] >>> 3) & 1L);
+ out[4 + outpos] = ((in[inpos] >>> 4) & 1L);
+ out[5 + outpos] = ((in[inpos] >>> 5) & 1L);
+ out[6 + outpos] = ((in[inpos] >>> 6) & 1L);
+ out[7 + outpos] = ((in[inpos] >>> 7) & 1L);
+ out[8 + outpos] = ((in[inpos] >>> 8) & 1L);
+ out[9 + outpos] = ((in[inpos] >>> 9) & 1L);
+ out[10 + outpos] = ((in[inpos] >>> 10) & 1L);
+ out[11 + outpos] = ((in[inpos] >>> 11) & 1L);
+ out[12 + outpos] = ((in[inpos] >>> 12) & 1L);
+ out[13 + outpos] = ((in[inpos] >>> 13) & 1L);
+ out[14 + outpos] = ((in[inpos] >>> 14) & 1L);
+ out[15 + outpos] = ((in[inpos] >>> 15) & 1L);
+ out[16 + outpos] = ((in[inpos] >>> 16) & 1L);
+ out[17 + outpos] = ((in[inpos] >>> 17) & 1L);
+ out[18 + outpos] = ((in[inpos] >>> 18) & 1L);
+ out[19 + outpos] = ((in[inpos] >>> 19) & 1L);
+ out[20 + outpos] = ((in[inpos] >>> 20) & 1L);
+ out[21 + outpos] = ((in[inpos] >>> 21) & 1L);
+ out[22 + outpos] = ((in[inpos] >>> 22) & 1L);
+ out[23 + outpos] = ((in[inpos] >>> 23) & 1L);
+ out[24 + outpos] = ((in[inpos] >>> 24) & 1L);
+ out[25 + outpos] = ((in[inpos] >>> 25) & 1L);
+ out[26 + outpos] = ((in[inpos] >>> 26) & 1L);
+ out[27 + outpos] = ((in[inpos] >>> 27) & 1L);
+ out[28 + outpos] = ((in[inpos] >>> 28) & 1L);
+ out[29 + outpos] = ((in[inpos] >>> 29) & 1L);
+ out[30 + outpos] = ((in[inpos] >>> 30) & 1L);
+ out[31 + outpos] = ((in[inpos] >>> 31) & 1L);
+ out[32 + outpos] = ((in[inpos] >>> 32) & 1L);
+ out[33 + outpos] = ((in[inpos] >>> 33) & 1L);
+ out[34 + outpos] = ((in[inpos] >>> 34) & 1L);
+ out[35 + outpos] = ((in[inpos] >>> 35) & 1L);
+ out[36 + outpos] = ((in[inpos] >>> 36) & 1L);
+ out[37 + outpos] = ((in[inpos] >>> 37) & 1L);
+ out[38 + outpos] = ((in[inpos] >>> 38) & 1L);
+ out[39 + outpos] = ((in[inpos] >>> 39) & 1L);
+ out[40 + outpos] = ((in[inpos] >>> 40) & 1L);
+ out[41 + outpos] = ((in[inpos] >>> 41) & 1L);
+ out[42 + outpos] = ((in[inpos] >>> 42) & 1L);
+ out[43 + outpos] = ((in[inpos] >>> 43) & 1L);
+ out[44 + outpos] = ((in[inpos] >>> 44) & 1L);
+ out[45 + outpos] = ((in[inpos] >>> 45) & 1L);
+ out[46 + outpos] = ((in[inpos] >>> 46) & 1L);
+ out[47 + outpos] = ((in[inpos] >>> 47) & 1L);
+ out[48 + outpos] = ((in[inpos] >>> 48) & 1L);
+ out[49 + outpos] = ((in[inpos] >>> 49) & 1L);
+ out[50 + outpos] = ((in[inpos] >>> 50) & 1L);
+ out[51 + outpos] = ((in[inpos] >>> 51) & 1L);
+ out[52 + outpos] = ((in[inpos] >>> 52) & 1L);
+ out[53 + outpos] = ((in[inpos] >>> 53) & 1L);
+ out[54 + outpos] = ((in[inpos] >>> 54) & 1L);
+ out[55 + outpos] = ((in[inpos] >>> 55) & 1L);
+ out[56 + outpos] = ((in[inpos] >>> 56) & 1L);
+ out[57 + outpos] = ((in[inpos] >>> 57) & 1L);
+ out[58 + outpos] = ((in[inpos] >>> 58) & 1L);
+ out[59 + outpos] = ((in[inpos] >>> 59) & 1L);
+ out[60 + outpos] = ((in[inpos] >>> 60) & 1L);
+ out[61 + outpos] = ((in[inpos] >>> 61) & 1L);
+ out[62 + outpos] = ((in[inpos] >>> 62) & 1L);
+ out[63 + outpos] = (in[inpos] >>> 63);
+ }
+
+ protected static void fastunpack2(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 3L);
+ out[1 + outpos] = ((in[inpos] >>> 2) & 3L);
+ out[2 + outpos] = ((in[inpos] >>> 4) & 3L);
+ out[3 + outpos] = ((in[inpos] >>> 6) & 3L);
+ out[4 + outpos] = ((in[inpos] >>> 8) & 3L);
+ out[5 + outpos] = ((in[inpos] >>> 10) & 3L);
+ out[6 + outpos] = ((in[inpos] >>> 12) & 3L);
+ out[7 + outpos] = ((in[inpos] >>> 14) & 3L);
+ out[8 + outpos] = ((in[inpos] >>> 16) & 3L);
+ out[9 + outpos] = ((in[inpos] >>> 18) & 3L);
+ out[10 + outpos] = ((in[inpos] >>> 20) & 3L);
+ out[11 + outpos] = ((in[inpos] >>> 22) & 3L);
+ out[12 + outpos] = ((in[inpos] >>> 24) & 3L);
+ out[13 + outpos] = ((in[inpos] >>> 26) & 3L);
+ out[14 + outpos] = ((in[inpos] >>> 28) & 3L);
+ out[15 + outpos] = ((in[inpos] >>> 30) & 3L);
+ out[16 + outpos] = ((in[inpos] >>> 32) & 3L);
+ out[17 + outpos] = ((in[inpos] >>> 34) & 3L);
+ out[18 + outpos] = ((in[inpos] >>> 36) & 3L);
+ out[19 + outpos] = ((in[inpos] >>> 38) & 3L);
+ out[20 + outpos] = ((in[inpos] >>> 40) & 3L);
+ out[21 + outpos] = ((in[inpos] >>> 42) & 3L);
+ out[22 + outpos] = ((in[inpos] >>> 44) & 3L);
+ out[23 + outpos] = ((in[inpos] >>> 46) & 3L);
+ out[24 + outpos] = ((in[inpos] >>> 48) & 3L);
+ out[25 + outpos] = ((in[inpos] >>> 50) & 3L);
+ out[26 + outpos] = ((in[inpos] >>> 52) & 3L);
+ out[27 + outpos] = ((in[inpos] >>> 54) & 3L);
+ out[28 + outpos] = ((in[inpos] >>> 56) & 3L);
+ out[29 + outpos] = ((in[inpos] >>> 58) & 3L);
+ out[30 + outpos] = ((in[inpos] >>> 60) & 3L);
+ out[31 + outpos] = (in[inpos] >>> 62);
+ out[32 + outpos] = (in[1 + inpos] & 3L);
+ out[33 + outpos] = ((in[1 + inpos] >>> 2) & 3L);
+ out[34 + outpos] = ((in[1 + inpos] >>> 4) & 3L);
+ out[35 + outpos] = ((in[1 + inpos] >>> 6) & 3L);
+ out[36 + outpos] = ((in[1 + inpos] >>> 8) & 3L);
+ out[37 + outpos] = ((in[1 + inpos] >>> 10) & 3L);
+ out[38 + outpos] = ((in[1 + inpos] >>> 12) & 3L);
+ out[39 + outpos] = ((in[1 + inpos] >>> 14) & 3L);
+ out[40 + outpos] = ((in[1 + inpos] >>> 16) & 3L);
+ out[41 + outpos] = ((in[1 + inpos] >>> 18) & 3L);
+ out[42 + outpos] = ((in[1 + inpos] >>> 20) & 3L);
+ out[43 + outpos] = ((in[1 + inpos] >>> 22) & 3L);
+ out[44 + outpos] = ((in[1 + inpos] >>> 24) & 3L);
+ out[45 + outpos] = ((in[1 + inpos] >>> 26) & 3L);
+ out[46 + outpos] = ((in[1 + inpos] >>> 28) & 3L);
+ out[47 + outpos] = ((in[1 + inpos] >>> 30) & 3L);
+ out[48 + outpos] = ((in[1 + inpos] >>> 32) & 3L);
+ out[49 + outpos] = ((in[1 + inpos] >>> 34) & 3L);
+ out[50 + outpos] = ((in[1 + inpos] >>> 36) & 3L);
+ out[51 + outpos] = ((in[1 + inpos] >>> 38) & 3L);
+ out[52 + outpos] = ((in[1 + inpos] >>> 40) & 3L);
+ out[53 + outpos] = ((in[1 + inpos] >>> 42) & 3L);
+ out[54 + outpos] = ((in[1 + inpos] >>> 44) & 3L);
+ out[55 + outpos] = ((in[1 + inpos] >>> 46) & 3L);
+ out[56 + outpos] = ((in[1 + inpos] >>> 48) & 3L);
+ out[57 + outpos] = ((in[1 + inpos] >>> 50) & 3L);
+ out[58 + outpos] = ((in[1 + inpos] >>> 52) & 3L);
+ out[59 + outpos] = ((in[1 + inpos] >>> 54) & 3L);
+ out[60 + outpos] = ((in[1 + inpos] >>> 56) & 3L);
+ out[61 + outpos] = ((in[1 + inpos] >>> 58) & 3L);
+ out[62 + outpos] = ((in[1 + inpos] >>> 60) & 3L);
+ out[63 + outpos] = (in[1 + inpos] >>> 62);
+ }
+
+ protected static void fastunpack3(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 7L);
+ out[1 + outpos] = ((in[inpos] >>> 3) & 7L);
+ out[2 + outpos] = ((in[inpos] >>> 6) & 7L);
+ out[3 + outpos] = ((in[inpos] >>> 9) & 7L);
+ out[4 + outpos] = ((in[inpos] >>> 12) & 7L);
+ out[5 + outpos] = ((in[inpos] >>> 15) & 7L);
+ out[6 + outpos] = ((in[inpos] >>> 18) & 7L);
+ out[7 + outpos] = ((in[inpos] >>> 21) & 7L);
+ out[8 + outpos] = ((in[inpos] >>> 24) & 7L);
+ out[9 + outpos] = ((in[inpos] >>> 27) & 7L);
+ out[10 + outpos] = ((in[inpos] >>> 30) & 7L);
+ out[11 + outpos] = ((in[inpos] >>> 33) & 7L);
+ out[12 + outpos] = ((in[inpos] >>> 36) & 7L);
+ out[13 + outpos] = ((in[inpos] >>> 39) & 7L);
+ out[14 + outpos] = ((in[inpos] >>> 42) & 7L);
+ out[15 + outpos] = ((in[inpos] >>> 45) & 7L);
+ out[16 + outpos] = ((in[inpos] >>> 48) & 7L);
+ out[17 + outpos] = ((in[inpos] >>> 51) & 7L);
+ out[18 + outpos] = ((in[inpos] >>> 54) & 7L);
+ out[19 + outpos] = ((in[inpos] >>> 57) & 7L);
+ out[20 + outpos] = ((in[inpos] >>> 60) & 7L);
+ out[21 + outpos] = (in[inpos] >>> 63)
+ | ((in[1 + inpos] & 3L) << (3 - 2));
+ out[22 + outpos] = ((in[1 + inpos] >>> 2) & 7L);
+ out[23 + outpos] = ((in[1 + inpos] >>> 5) & 7L);
+ out[24 + outpos] = ((in[1 + inpos] >>> 8) & 7L);
+ out[25 + outpos] = ((in[1 + inpos] >>> 11) & 7L);
+ out[26 + outpos] = ((in[1 + inpos] >>> 14) & 7L);
+ out[27 + outpos] = ((in[1 + inpos] >>> 17) & 7L);
+ out[28 + outpos] = ((in[1 + inpos] >>> 20) & 7L);
+ out[29 + outpos] = ((in[1 + inpos] >>> 23) & 7L);
+ out[30 + outpos] = ((in[1 + inpos] >>> 26) & 7L);
+ out[31 + outpos] = ((in[1 + inpos] >>> 29) & 7L);
+ out[32 + outpos] = ((in[1 + inpos] >>> 32) & 7L);
+ out[33 + outpos] = ((in[1 + inpos] >>> 35) & 7L);
+ out[34 + outpos] = ((in[1 + inpos] >>> 38) & 7L);
+ out[35 + outpos] = ((in[1 + inpos] >>> 41) & 7L);
+ out[36 + outpos] = ((in[1 + inpos] >>> 44) & 7L);
+ out[37 + outpos] = ((in[1 + inpos] >>> 47) & 7L);
+ out[38 + outpos] = ((in[1 + inpos] >>> 50) & 7L);
+ out[39 + outpos] = ((in[1 + inpos] >>> 53) & 7L);
+ out[40 + outpos] = ((in[1 + inpos] >>> 56) & 7L);
+ out[41 + outpos] = ((in[1 + inpos] >>> 59) & 7L);
+ out[42 + outpos] = (in[1 + inpos] >>> 62)
+ | ((in[2 + inpos] & 1L) << (3 - 1));
+ out[43 + outpos] = ((in[2 + inpos] >>> 1) & 7L);
+ out[44 + outpos] = ((in[2 + inpos] >>> 4) & 7L);
+ out[45 + outpos] = ((in[2 + inpos] >>> 7) & 7L);
+ out[46 + outpos] = ((in[2 + inpos] >>> 10) & 7L);
+ out[47 + outpos] = ((in[2 + inpos] >>> 13) & 7L);
+ out[48 + outpos] = ((in[2 + inpos] >>> 16) & 7L);
+ out[49 + outpos] = ((in[2 + inpos] >>> 19) & 7L);
+ out[50 + outpos] = ((in[2 + inpos] >>> 22) & 7L);
+ out[51 + outpos] = ((in[2 + inpos] >>> 25) & 7L);
+ out[52 + outpos] = ((in[2 + inpos] >>> 28) & 7L);
+ out[53 + outpos] = ((in[2 + inpos] >>> 31) & 7L);
+ out[54 + outpos] = ((in[2 + inpos] >>> 34) & 7L);
+ out[55 + outpos] = ((in[2 + inpos] >>> 37) & 7L);
+ out[56 + outpos] = ((in[2 + inpos] >>> 40) & 7L);
+ out[57 + outpos] = ((in[2 + inpos] >>> 43) & 7L);
+ out[58 + outpos] = ((in[2 + inpos] >>> 46) & 7L);
+ out[59 + outpos] = ((in[2 + inpos] >>> 49) & 7L);
+ out[60 + outpos] = ((in[2 + inpos] >>> 52) & 7L);
+ out[61 + outpos] = ((in[2 + inpos] >>> 55) & 7L);
+ out[62 + outpos] = ((in[2 + inpos] >>> 58) & 7L);
+ out[63 + outpos] = (in[2 + inpos] >>> 61);
+ }
+
+ protected static void fastunpack4(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 15L);
+ out[1 + outpos] = ((in[inpos] >>> 4) & 15L);
+ out[2 + outpos] = ((in[inpos] >>> 8) & 15L);
+ out[3 + outpos] = ((in[inpos] >>> 12) & 15L);
+ out[4 + outpos] = ((in[inpos] >>> 16) & 15L);
+ out[5 + outpos] = ((in[inpos] >>> 20) & 15L);
+ out[6 + outpos] = ((in[inpos] >>> 24) & 15L);
+ out[7 + outpos] = ((in[inpos] >>> 28) & 15L);
+ out[8 + outpos] = ((in[inpos] >>> 32) & 15L);
+ out[9 + outpos] = ((in[inpos] >>> 36) & 15L);
+ out[10 + outpos] = ((in[inpos] >>> 40) & 15L);
+ out[11 + outpos] = ((in[inpos] >>> 44) & 15L);
+ out[12 + outpos] = ((in[inpos] >>> 48) & 15L);
+ out[13 + outpos] = ((in[inpos] >>> 52) & 15L);
+ out[14 + outpos] = ((in[inpos] >>> 56) & 15L);
+ out[15 + outpos] = (in[inpos] >>> 60);
+ out[16 + outpos] = (in[1 + inpos] & 15L);
+ out[17 + outpos] = ((in[1 + inpos] >>> 4) & 15L);
+ out[18 + outpos] = ((in[1 + inpos] >>> 8) & 15L);
+ out[19 + outpos] = ((in[1 + inpos] >>> 12) & 15L);
+ out[20 + outpos] = ((in[1 + inpos] >>> 16) & 15L);
+ out[21 + outpos] = ((in[1 + inpos] >>> 20) & 15L);
+ out[22 + outpos] = ((in[1 + inpos] >>> 24) & 15L);
+ out[23 + outpos] = ((in[1 + inpos] >>> 28) & 15L);
+ out[24 + outpos] = ((in[1 + inpos] >>> 32) & 15L);
+ out[25 + outpos] = ((in[1 + inpos] >>> 36) & 15L);
+ out[26 + outpos] = ((in[1 + inpos] >>> 40) & 15L);
+ out[27 + outpos] = ((in[1 + inpos] >>> 44) & 15L);
+ out[28 + outpos] = ((in[1 + inpos] >>> 48) & 15L);
+ out[29 + outpos] = ((in[1 + inpos] >>> 52) & 15L);
+ out[30 + outpos] = ((in[1 + inpos] >>> 56) & 15L);
+ out[31 + outpos] = (in[1 + inpos] >>> 60);
+ out[32 + outpos] = (in[2 + inpos] & 15L);
+ out[33 + outpos] = ((in[2 + inpos] >>> 4) & 15L);
+ out[34 + outpos] = ((in[2 + inpos] >>> 8) & 15L);
+ out[35 + outpos] = ((in[2 + inpos] >>> 12) & 15L);
+ out[36 + outpos] = ((in[2 + inpos] >>> 16) & 15L);
+ out[37 + outpos] = ((in[2 + inpos] >>> 20) & 15L);
+ out[38 + outpos] = ((in[2 + inpos] >>> 24) & 15L);
+ out[39 + outpos] = ((in[2 + inpos] >>> 28) & 15L);
+ out[40 + outpos] = ((in[2 + inpos] >>> 32) & 15L);
+ out[41 + outpos] = ((in[2 + inpos] >>> 36) & 15L);
+ out[42 + outpos] = ((in[2 + inpos] >>> 40) & 15L);
+ out[43 + outpos] = ((in[2 + inpos] >>> 44) & 15L);
+ out[44 + outpos] = ((in[2 + inpos] >>> 48) & 15L);
+ out[45 + outpos] = ((in[2 + inpos] >>> 52) & 15L);
+ out[46 + outpos] = ((in[2 + inpos] >>> 56) & 15L);
+ out[47 + outpos] = (in[2 + inpos] >>> 60);
+ out[48 + outpos] = (in[3 + inpos] & 15L);
+ out[49 + outpos] = ((in[3 + inpos] >>> 4) & 15L);
+ out[50 + outpos] = ((in[3 + inpos] >>> 8) & 15L);
+ out[51 + outpos] = ((in[3 + inpos] >>> 12) & 15L);
+ out[52 + outpos] = ((in[3 + inpos] >>> 16) & 15L);
+ out[53 + outpos] = ((in[3 + inpos] >>> 20) & 15L);
+ out[54 + outpos] = ((in[3 + inpos] >>> 24) & 15L);
+ out[55 + outpos] = ((in[3 + inpos] >>> 28) & 15L);
+ out[56 + outpos] = ((in[3 + inpos] >>> 32) & 15L);
+ out[57 + outpos] = ((in[3 + inpos] >>> 36) & 15L);
+ out[58 + outpos] = ((in[3 + inpos] >>> 40) & 15L);
+ out[59 + outpos] = ((in[3 + inpos] >>> 44) & 15L);
+ out[60 + outpos] = ((in[3 + inpos] >>> 48) & 15L);
+ out[61 + outpos] = ((in[3 + inpos] >>> 52) & 15L);
+ out[62 + outpos] = ((in[3 + inpos] >>> 56) & 15L);
+ out[63 + outpos] = (in[3 + inpos] >>> 60);
+ }
+
+ protected static void fastunpack5(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 31L);
+ out[1 + outpos] = ((in[inpos] >>> 5) & 31L);
+ out[2 + outpos] = ((in[inpos] >>> 10) & 31L);
+ out[3 + outpos] = ((in[inpos] >>> 15) & 31L);
+ out[4 + outpos] = ((in[inpos] >>> 20) & 31L);
+ out[5 + outpos] = ((in[inpos] >>> 25) & 31L);
+ out[6 + outpos] = ((in[inpos] >>> 30) & 31L);
+ out[7 + outpos] = ((in[inpos] >>> 35) & 31L);
+ out[8 + outpos] = ((in[inpos] >>> 40) & 31L);
+ out[9 + outpos] = ((in[inpos] >>> 45) & 31L);
+ out[10 + outpos] = ((in[inpos] >>> 50) & 31L);
+ out[11 + outpos] = ((in[inpos] >>> 55) & 31L);
+ out[12 + outpos] = (in[inpos] >>> 60)
+ | ((in[1 + inpos] & 1L) << (5 - 1));
+ out[13 + outpos] = ((in[1 + inpos] >>> 1) & 31L);
+ out[14 + outpos] = ((in[1 + inpos] >>> 6) & 31L);
+ out[15 + outpos] = ((in[1 + inpos] >>> 11) & 31L);
+ out[16 + outpos] = ((in[1 + inpos] >>> 16) & 31L);
+ out[17 + outpos] = ((in[1 + inpos] >>> 21) & 31L);
+ out[18 + outpos] = ((in[1 + inpos] >>> 26) & 31L);
+ out[19 + outpos] = ((in[1 + inpos] >>> 31) & 31L);
+ out[20 + outpos] = ((in[1 + inpos] >>> 36) & 31L);
+ out[21 + outpos] = ((in[1 + inpos] >>> 41) & 31L);
+ out[22 + outpos] = ((in[1 + inpos] >>> 46) & 31L);
+ out[23 + outpos] = ((in[1 + inpos] >>> 51) & 31L);
+ out[24 + outpos] = ((in[1 + inpos] >>> 56) & 31L);
+ out[25 + outpos] = (in[1 + inpos] >>> 61)
+ | ((in[2 + inpos] & 3L) << (5 - 2));
+ out[26 + outpos] = ((in[2 + inpos] >>> 2) & 31L);
+ out[27 + outpos] = ((in[2 + inpos] >>> 7) & 31L);
+ out[28 + outpos] = ((in[2 + inpos] >>> 12) & 31L);
+ out[29 + outpos] = ((in[2 + inpos] >>> 17) & 31L);
+ out[30 + outpos] = ((in[2 + inpos] >>> 22) & 31L);
+ out[31 + outpos] = ((in[2 + inpos] >>> 27) & 31L);
+ out[32 + outpos] = ((in[2 + inpos] >>> 32) & 31L);
+ out[33 + outpos] = ((in[2 + inpos] >>> 37) & 31L);
+ out[34 + outpos] = ((in[2 + inpos] >>> 42) & 31L);
+ out[35 + outpos] = ((in[2 + inpos] >>> 47) & 31L);
+ out[36 + outpos] = ((in[2 + inpos] >>> 52) & 31L);
+ out[37 + outpos] = ((in[2 + inpos] >>> 57) & 31L);
+ out[38 + outpos] = (in[2 + inpos] >>> 62)
+ | ((in[3 + inpos] & 7L) << (5 - 3));
+ out[39 + outpos] = ((in[3 + inpos] >>> 3) & 31L);
+ out[40 + outpos] = ((in[3 + inpos] >>> 8) & 31L);
+ out[41 + outpos] = ((in[3 + inpos] >>> 13) & 31L);
+ out[42 + outpos] = ((in[3 + inpos] >>> 18) & 31L);
+ out[43 + outpos] = ((in[3 + inpos] >>> 23) & 31L);
+ out[44 + outpos] = ((in[3 + inpos] >>> 28) & 31L);
+ out[45 + outpos] = ((in[3 + inpos] >>> 33) & 31L);
+ out[46 + outpos] = ((in[3 + inpos] >>> 38) & 31L);
+ out[47 + outpos] = ((in[3 + inpos] >>> 43) & 31L);
+ out[48 + outpos] = ((in[3 + inpos] >>> 48) & 31L);
+ out[49 + outpos] = ((in[3 + inpos] >>> 53) & 31L);
+ out[50 + outpos] = ((in[3 + inpos] >>> 58) & 31L);
+ out[51 + outpos] = (in[3 + inpos] >>> 63)
+ | ((in[4 + inpos] & 15L) << (5 - 4));
+ out[52 + outpos] = ((in[4 + inpos] >>> 4) & 31L);
+ out[53 + outpos] = ((in[4 + inpos] >>> 9) & 31L);
+ out[54 + outpos] = ((in[4 + inpos] >>> 14) & 31L);
+ out[55 + outpos] = ((in[4 + inpos] >>> 19) & 31L);
+ out[56 + outpos] = ((in[4 + inpos] >>> 24) & 31L);
+ out[57 + outpos] = ((in[4 + inpos] >>> 29) & 31L);
+ out[58 + outpos] = ((in[4 + inpos] >>> 34) & 31L);
+ out[59 + outpos] = ((in[4 + inpos] >>> 39) & 31L);
+ out[60 + outpos] = ((in[4 + inpos] >>> 44) & 31L);
+ out[61 + outpos] = ((in[4 + inpos] >>> 49) & 31L);
+ out[62 + outpos] = ((in[4 + inpos] >>> 54) & 31L);
+ out[63 + outpos] = (in[4 + inpos] >>> 59);
+ }
+
+ protected static void fastunpack6(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 63L);
+ out[1 + outpos] = ((in[inpos] >>> 6) & 63L);
+ out[2 + outpos] = ((in[inpos] >>> 12) & 63L);
+ out[3 + outpos] = ((in[inpos] >>> 18) & 63L);
+ out[4 + outpos] = ((in[inpos] >>> 24) & 63L);
+ out[5 + outpos] = ((in[inpos] >>> 30) & 63L);
+ out[6 + outpos] = ((in[inpos] >>> 36) & 63L);
+ out[7 + outpos] = ((in[inpos] >>> 42) & 63L);
+ out[8 + outpos] = ((in[inpos] >>> 48) & 63L);
+ out[9 + outpos] = ((in[inpos] >>> 54) & 63L);
+ out[10 + outpos] = (in[inpos] >>> 60)
+ | ((in[1 + inpos] & 3L) << (6 - 2));
+ out[11 + outpos] = ((in[1 + inpos] >>> 2) & 63L);
+ out[12 + outpos] = ((in[1 + inpos] >>> 8) & 63L);
+ out[13 + outpos] = ((in[1 + inpos] >>> 14) & 63L);
+ out[14 + outpos] = ((in[1 + inpos] >>> 20) & 63L);
+ out[15 + outpos] = ((in[1 + inpos] >>> 26) & 63L);
+ out[16 + outpos] = ((in[1 + inpos] >>> 32) & 63L);
+ out[17 + outpos] = ((in[1 + inpos] >>> 38) & 63L);
+ out[18 + outpos] = ((in[1 + inpos] >>> 44) & 63L);
+ out[19 + outpos] = ((in[1 + inpos] >>> 50) & 63L);
+ out[20 + outpos] = ((in[1 + inpos] >>> 56) & 63L);
+ out[21 + outpos] = (in[1 + inpos] >>> 62)
+ | ((in[2 + inpos] & 15L) << (6 - 4));
+ out[22 + outpos] = ((in[2 + inpos] >>> 4) & 63L);
+ out[23 + outpos] = ((in[2 + inpos] >>> 10) & 63L);
+ out[24 + outpos] = ((in[2 + inpos] >>> 16) & 63L);
+ out[25 + outpos] = ((in[2 + inpos] >>> 22) & 63L);
+ out[26 + outpos] = ((in[2 + inpos] >>> 28) & 63L);
+ out[27 + outpos] = ((in[2 + inpos] >>> 34) & 63L);
+ out[28 + outpos] = ((in[2 + inpos] >>> 40) & 63L);
+ out[29 + outpos] = ((in[2 + inpos] >>> 46) & 63L);
+ out[30 + outpos] = ((in[2 + inpos] >>> 52) & 63L);
+ out[31 + outpos] = (in[2 + inpos] >>> 58);
+ out[32 + outpos] = (in[3 + inpos] & 63L);
+ out[33 + outpos] = ((in[3 + inpos] >>> 6) & 63L);
+ out[34 + outpos] = ((in[3 + inpos] >>> 12) & 63L);
+ out[35 + outpos] = ((in[3 + inpos] >>> 18) & 63L);
+ out[36 + outpos] = ((in[3 + inpos] >>> 24) & 63L);
+ out[37 + outpos] = ((in[3 + inpos] >>> 30) & 63L);
+ out[38 + outpos] = ((in[3 + inpos] >>> 36) & 63L);
+ out[39 + outpos] = ((in[3 + inpos] >>> 42) & 63L);
+ out[40 + outpos] = ((in[3 + inpos] >>> 48) & 63L);
+ out[41 + outpos] = ((in[3 + inpos] >>> 54) & 63L);
+ out[42 + outpos] = (in[3 + inpos] >>> 60)
+ | ((in[4 + inpos] & 3L) << (6 - 2));
+ out[43 + outpos] = ((in[4 + inpos] >>> 2) & 63L);
+ out[44 + outpos] = ((in[4 + inpos] >>> 8) & 63L);
+ out[45 + outpos] = ((in[4 + inpos] >>> 14) & 63L);
+ out[46 + outpos] = ((in[4 + inpos] >>> 20) & 63L);
+ out[47 + outpos] = ((in[4 + inpos] >>> 26) & 63L);
+ out[48 + outpos] = ((in[4 + inpos] >>> 32) & 63L);
+ out[49 + outpos] = ((in[4 + inpos] >>> 38) & 63L);
+ out[50 + outpos] = ((in[4 + inpos] >>> 44) & 63L);
+ out[51 + outpos] = ((in[4 + inpos] >>> 50) & 63L);
+ out[52 + outpos] = ((in[4 + inpos] >>> 56) & 63L);
+ out[53 + outpos] = (in[4 + inpos] >>> 62)
+ | ((in[5 + inpos] & 15L) << (6 - 4));
+ out[54 + outpos] = ((in[5 + inpos] >>> 4) & 63L);
+ out[55 + outpos] = ((in[5 + inpos] >>> 10) & 63L);
+ out[56 + outpos] = ((in[5 + inpos] >>> 16) & 63L);
+ out[57 + outpos] = ((in[5 + inpos] >>> 22) & 63L);
+ out[58 + outpos] = ((in[5 + inpos] >>> 28) & 63L);
+ out[59 + outpos] = ((in[5 + inpos] >>> 34) & 63L);
+ out[60 + outpos] = ((in[5 + inpos] >>> 40) & 63L);
+ out[61 + outpos] = ((in[5 + inpos] >>> 46) & 63L);
+ out[62 + outpos] = ((in[5 + inpos] >>> 52) & 63L);
+ out[63 + outpos] = (in[5 + inpos] >>> 58);
+ }
+
+ protected static void fastunpack7(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 127L);
+ out[1 + outpos] = ((in[inpos] >>> 7) & 127L);
+ out[2 + outpos] = ((in[inpos] >>> 14) & 127L);
+ out[3 + outpos] = ((in[inpos] >>> 21) & 127L);
+ out[4 + outpos] = ((in[inpos] >>> 28) & 127L);
+ out[5 + outpos] = ((in[inpos] >>> 35) & 127L);
+ out[6 + outpos] = ((in[inpos] >>> 42) & 127L);
+ out[7 + outpos] = ((in[inpos] >>> 49) & 127L);
+ out[8 + outpos] = ((in[inpos] >>> 56) & 127L);
+ out[9 + outpos] = (in[inpos] >>> 63)
+ | ((in[1 + inpos] & 63L) << (7 - 6));
+ out[10 + outpos] = ((in[1 + inpos] >>> 6) & 127L);
+ out[11 + outpos] = ((in[1 + inpos] >>> 13) & 127L);
+ out[12 + outpos] = ((in[1 + inpos] >>> 20) & 127L);
+ out[13 + outpos] = ((in[1 + inpos] >>> 27) & 127L);
+ out[14 + outpos] = ((in[1 + inpos] >>> 34) & 127L);
+ out[15 + outpos] = ((in[1 + inpos] >>> 41) & 127L);
+ out[16 + outpos] = ((in[1 + inpos] >>> 48) & 127L);
+ out[17 + outpos] = ((in[1 + inpos] >>> 55) & 127L);
+ out[18 + outpos] = (in[1 + inpos] >>> 62)
+ | ((in[2 + inpos] & 31L) << (7 - 5));
+ out[19 + outpos] = ((in[2 + inpos] >>> 5) & 127L);
+ out[20 + outpos] = ((in[2 + inpos] >>> 12) & 127L);
+ out[21 + outpos] = ((in[2 + inpos] >>> 19) & 127L);
+ out[22 + outpos] = ((in[2 + inpos] >>> 26) & 127L);
+ out[23 + outpos] = ((in[2 + inpos] >>> 33) & 127L);
+ out[24 + outpos] = ((in[2 + inpos] >>> 40) & 127L);
+ out[25 + outpos] = ((in[2 + inpos] >>> 47) & 127L);
+ out[26 + outpos] = ((in[2 + inpos] >>> 54) & 127L);
+ out[27 + outpos] = (in[2 + inpos] >>> 61)
+ | ((in[3 + inpos] & 15L) << (7 - 4));
+ out[28 + outpos] = ((in[3 + inpos] >>> 4) & 127L);
+ out[29 + outpos] = ((in[3 + inpos] >>> 11) & 127L);
+ out[30 + outpos] = ((in[3 + inpos] >>> 18) & 127L);
+ out[31 + outpos] = ((in[3 + inpos] >>> 25) & 127L);
+ out[32 + outpos] = ((in[3 + inpos] >>> 32) & 127L);
+ out[33 + outpos] = ((in[3 + inpos] >>> 39) & 127L);
+ out[34 + outpos] = ((in[3 + inpos] >>> 46) & 127L);
+ out[35 + outpos] = ((in[3 + inpos] >>> 53) & 127L);
+ out[36 + outpos] = (in[3 + inpos] >>> 60)
+ | ((in[4 + inpos] & 7L) << (7 - 3));
+ out[37 + outpos] = ((in[4 + inpos] >>> 3) & 127L);
+ out[38 + outpos] = ((in[4 + inpos] >>> 10) & 127L);
+ out[39 + outpos] = ((in[4 + inpos] >>> 17) & 127L);
+ out[40 + outpos] = ((in[4 + inpos] >>> 24) & 127L);
+ out[41 + outpos] = ((in[4 + inpos] >>> 31) & 127L);
+ out[42 + outpos] = ((in[4 + inpos] >>> 38) & 127L);
+ out[43 + outpos] = ((in[4 + inpos] >>> 45) & 127L);
+ out[44 + outpos] = ((in[4 + inpos] >>> 52) & 127L);
+ out[45 + outpos] = (in[4 + inpos] >>> 59)
+ | ((in[5 + inpos] & 3L) << (7 - 2));
+ out[46 + outpos] = ((in[5 + inpos] >>> 2) & 127L);
+ out[47 + outpos] = ((in[5 + inpos] >>> 9) & 127L);
+ out[48 + outpos] = ((in[5 + inpos] >>> 16) & 127L);
+ out[49 + outpos] = ((in[5 + inpos] >>> 23) & 127L);
+ out[50 + outpos] = ((in[5 + inpos] >>> 30) & 127L);
+ out[51 + outpos] = ((in[5 + inpos] >>> 37) & 127L);
+ out[52 + outpos] = ((in[5 + inpos] >>> 44) & 127L);
+ out[53 + outpos] = ((in[5 + inpos] >>> 51) & 127L);
+ out[54 + outpos] = (in[5 + inpos] >>> 58)
+ | ((in[6 + inpos] & 1L) << (7 - 1));
+ out[55 + outpos] = ((in[6 + inpos] >>> 1) & 127L);
+ out[56 + outpos] = ((in[6 + inpos] >>> 8) & 127L);
+ out[57 + outpos] = ((in[6 + inpos] >>> 15) & 127L);
+ out[58 + outpos] = ((in[6 + inpos] >>> 22) & 127L);
+ out[59 + outpos] = ((in[6 + inpos] >>> 29) & 127L);
+ out[60 + outpos] = ((in[6 + inpos] >>> 36) & 127L);
+ out[61 + outpos] = ((in[6 + inpos] >>> 43) & 127L);
+ out[62 + outpos] = ((in[6 + inpos] >>> 50) & 127L);
+ out[63 + outpos] = (in[6 + inpos] >>> 57);
+ }
+
+ protected static void fastunpack8(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 255L);
+ out[1 + outpos] = ((in[inpos] >>> 8) & 255L);
+ out[2 + outpos] = ((in[inpos] >>> 16) & 255L);
+ out[3 + outpos] = ((in[inpos] >>> 24) & 255L);
+ out[4 + outpos] = ((in[inpos] >>> 32) & 255L);
+ out[5 + outpos] = ((in[inpos] >>> 40) & 255L);
+ out[6 + outpos] = ((in[inpos] >>> 48) & 255L);
+ out[7 + outpos] = (in[inpos] >>> 56);
+ out[8 + outpos] = (in[1 + inpos] & 255L);
+ out[9 + outpos] = ((in[1 + inpos] >>> 8) & 255L);
+ out[10 + outpos] = ((in[1 + inpos] >>> 16) & 255L);
+ out[11 + outpos] = ((in[1 + inpos] >>> 24) & 255L);
+ out[12 + outpos] = ((in[1 + inpos] >>> 32) & 255L);
+ out[13 + outpos] = ((in[1 + inpos] >>> 40) & 255L);
+ out[14 + outpos] = ((in[1 + inpos] >>> 48) & 255L);
+ out[15 + outpos] = (in[1 + inpos] >>> 56);
+ out[16 + outpos] = (in[2 + inpos] & 255L);
+ out[17 + outpos] = ((in[2 + inpos] >>> 8) & 255L);
+ out[18 + outpos] = ((in[2 + inpos] >>> 16) & 255L);
+ out[19 + outpos] = ((in[2 + inpos] >>> 24) & 255L);
+ out[20 + outpos] = ((in[2 + inpos] >>> 32) & 255L);
+ out[21 + outpos] = ((in[2 + inpos] >>> 40) & 255L);
+ out[22 + outpos] = ((in[2 + inpos] >>> 48) & 255L);
+ out[23 + outpos] = (in[2 + inpos] >>> 56);
+ out[24 + outpos] = (in[3 + inpos] & 255L);
+ out[25 + outpos] = ((in[3 + inpos] >>> 8) & 255L);
+ out[26 + outpos] = ((in[3 + inpos] >>> 16) & 255L);
+ out[27 + outpos] = ((in[3 + inpos] >>> 24) & 255L);
+ out[28 + outpos] = ((in[3 + inpos] >>> 32) & 255L);
+ out[29 + outpos] = ((in[3 + inpos] >>> 40) & 255L);
+ out[30 + outpos] = ((in[3 + inpos] >>> 48) & 255L);
+ out[31 + outpos] = (in[3 + inpos] >>> 56);
+ out[32 + outpos] = (in[4 + inpos] & 255L);
+ out[33 + outpos] = ((in[4 + inpos] >>> 8) & 255L);
+ out[34 + outpos] = ((in[4 + inpos] >>> 16) & 255L);
+ out[35 + outpos] = ((in[4 + inpos] >>> 24) & 255L);
+ out[36 + outpos] = ((in[4 + inpos] >>> 32) & 255L);
+ out[37 + outpos] = ((in[4 + inpos] >>> 40) & 255L);
+ out[38 + outpos] = ((in[4 + inpos] >>> 48) & 255L);
+ out[39 + outpos] = (in[4 + inpos] >>> 56);
+ out[40 + outpos] = (in[5 + inpos] & 255L);
+ out[41 + outpos] = ((in[5 + inpos] >>> 8) & 255L);
+ out[42 + outpos] = ((in[5 + inpos] >>> 16) & 255L);
+ out[43 + outpos] = ((in[5 + inpos] >>> 24) & 255L);
+ out[44 + outpos] = ((in[5 + inpos] >>> 32) & 255L);
+ out[45 + outpos] = ((in[5 + inpos] >>> 40) & 255L);
+ out[46 + outpos] = ((in[5 + inpos] >>> 48) & 255L);
+ out[47 + outpos] = (in[5 + inpos] >>> 56);
+ out[48 + outpos] = (in[6 + inpos] & 255L);
+ out[49 + outpos] = ((in[6 + inpos] >>> 8) & 255L);
+ out[50 + outpos] = ((in[6 + inpos] >>> 16) & 255L);
+ out[51 + outpos] = ((in[6 + inpos] >>> 24) & 255L);
+ out[52 + outpos] = ((in[6 + inpos] >>> 32) & 255L);
+ out[53 + outpos] = ((in[6 + inpos] >>> 40) & 255L);
+ out[54 + outpos] = ((in[6 + inpos] >>> 48) & 255L);
+ out[55 + outpos] = (in[6 + inpos] >>> 56);
+ out[56 + outpos] = (in[7 + inpos] & 255L);
+ out[57 + outpos] = ((in[7 + inpos] >>> 8) & 255L);
+ out[58 + outpos] = ((in[7 + inpos] >>> 16) & 255L);
+ out[59 + outpos] = ((in[7 + inpos] >>> 24) & 255L);
+ out[60 + outpos] = ((in[7 + inpos] >>> 32) & 255L);
+ out[61 + outpos] = ((in[7 + inpos] >>> 40) & 255L);
+ out[62 + outpos] = ((in[7 + inpos] >>> 48) & 255L);
+ out[63 + outpos] = (in[7 + inpos] >>> 56);
+ }
+
+ protected static void fastunpack9(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 511L);
+ out[1 + outpos] = ((in[inpos] >>> 9) & 511L);
+ out[2 + outpos] = ((in[inpos] >>> 18) & 511L);
+ out[3 + outpos] = ((in[inpos] >>> 27) & 511L);
+ out[4 + outpos] = ((in[inpos] >>> 36) & 511L);
+ out[5 + outpos] = ((in[inpos] >>> 45) & 511L);
+ out[6 + outpos] = ((in[inpos] >>> 54) & 511L);
+ out[7 + outpos] = (in[inpos] >>> 63)
+ | ((in[1 + inpos] & 255L) << (9 - 8));
+ out[8 + outpos] = ((in[1 + inpos] >>> 8) & 511L);
+ out[9 + outpos] = ((in[1 + inpos] >>> 17) & 511L);
+ out[10 + outpos] = ((in[1 + inpos] >>> 26) & 511L);
+ out[11 + outpos] = ((in[1 + inpos] >>> 35) & 511L);
+ out[12 + outpos] = ((in[1 + inpos] >>> 44) & 511L);
+ out[13 + outpos] = ((in[1 + inpos] >>> 53) & 511L);
+ out[14 + outpos] = (in[1 + inpos] >>> 62)
+ | ((in[2 + inpos] & 127L) << (9 - 7));
+ out[15 + outpos] = ((in[2 + inpos] >>> 7) & 511L);
+ out[16 + outpos] = ((in[2 + inpos] >>> 16) & 511L);
+ out[17 + outpos] = ((in[2 + inpos] >>> 25) & 511L);
+ out[18 + outpos] = ((in[2 + inpos] >>> 34) & 511L);
+ out[19 + outpos] = ((in[2 + inpos] >>> 43) & 511L);
+ out[20 + outpos] = ((in[2 + inpos] >>> 52) & 511L);
+ out[21 + outpos] = (in[2 + inpos] >>> 61)
+ | ((in[3 + inpos] & 63L) << (9 - 6));
+ out[22 + outpos] = ((in[3 + inpos] >>> 6) & 511L);
+ out[23 + outpos] = ((in[3 + inpos] >>> 15) & 511L);
+ out[24 + outpos] = ((in[3 + inpos] >>> 24) & 511L);
+ out[25 + outpos] = ((in[3 + inpos] >>> 33) & 511L);
+ out[26 + outpos] = ((in[3 + inpos] >>> 42) & 511L);
+ out[27 + outpos] = ((in[3 + inpos] >>> 51) & 511L);
+ out[28 + outpos] = (in[3 + inpos] >>> 60)
+ | ((in[4 + inpos] & 31L) << (9 - 5));
+ out[29 + outpos] = ((in[4 + inpos] >>> 5) & 511L);
+ out[30 + outpos] = ((in[4 + inpos] >>> 14) & 511L);
+ out[31 + outpos] = ((in[4 + inpos] >>> 23) & 511L);
+ out[32 + outpos] = ((in[4 + inpos] >>> 32) & 511L);
+ out[33 + outpos] = ((in[4 + inpos] >>> 41) & 511L);
+ out[34 + outpos] = ((in[4 + inpos] >>> 50) & 511L);
+ out[35 + outpos] = (in[4 + inpos] >>> 59)
+ | ((in[5 + inpos] & 15L) << (9 - 4));
+ out[36 + outpos] = ((in[5 + inpos] >>> 4) & 511L);
+ out[37 + outpos] = ((in[5 + inpos] >>> 13) & 511L);
+ out[38 + outpos] = ((in[5 + inpos] >>> 22) & 511L);
+ out[39 + outpos] = ((in[5 + inpos] >>> 31) & 511L);
+ out[40 + outpos] = ((in[5 + inpos] >>> 40) & 511L);
+ out[41 + outpos] = ((in[5 + inpos] >>> 49) & 511L);
+ out[42 + outpos] = (in[5 + inpos] >>> 58)
+ | ((in[6 + inpos] & 7L) << (9 - 3));
+ out[43 + outpos] = ((in[6 + inpos] >>> 3) & 511L);
+ out[44 + outpos] = ((in[6 + inpos] >>> 12) & 511L);
+ out[45 + outpos] = ((in[6 + inpos] >>> 21) & 511L);
+ out[46 + outpos] = ((in[6 + inpos] >>> 30) & 511L);
+ out[47 + outpos] = ((in[6 + inpos] >>> 39) & 511L);
+ out[48 + outpos] = ((in[6 + inpos] >>> 48) & 511L);
+ out[49 + outpos] = (in[6 + inpos] >>> 57)
+ | ((in[7 + inpos] & 3L) << (9 - 2));
+ out[50 + outpos] = ((in[7 + inpos] >>> 2) & 511L);
+ out[51 + outpos] = ((in[7 + inpos] >>> 11) & 511L);
+ out[52 + outpos] = ((in[7 + inpos] >>> 20) & 511L);
+ out[53 + outpos] = ((in[7 + inpos] >>> 29) & 511L);
+ out[54 + outpos] = ((in[7 + inpos] >>> 38) & 511L);
+ out[55 + outpos] = ((in[7 + inpos] >>> 47) & 511L);
+ out[56 + outpos] = (in[7 + inpos] >>> 56)
+ | ((in[8 + inpos] & 1L) << (9 - 1));
+ out[57 + outpos] = ((in[8 + inpos] >>> 1) & 511L);
+ out[58 + outpos] = ((in[8 + inpos] >>> 10) & 511L);
+ out[59 + outpos] = ((in[8 + inpos] >>> 19) & 511L);
+ out[60 + outpos] = ((in[8 + inpos] >>> 28) & 511L);
+ out[61 + outpos] = ((in[8 + inpos] >>> 37) & 511L);
+ out[62 + outpos] = ((in[8 + inpos] >>> 46) & 511L);
+ out[63 + outpos] = (in[8 + inpos] >>> 55);
+ }
+
+ protected static void fastunpack10(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 1023L);
+ out[1 + outpos] = ((in[inpos] >>> 10) & 1023L);
+ out[2 + outpos] = ((in[inpos] >>> 20) & 1023L);
+ out[3 + outpos] = ((in[inpos] >>> 30) & 1023L);
+ out[4 + outpos] = ((in[inpos] >>> 40) & 1023L);
+ out[5 + outpos] = ((in[inpos] >>> 50) & 1023L);
+ out[6 + outpos] = (in[inpos] >>> 60)
+ | ((in[1 + inpos] & 63L) << (10 - 6));
+ out[7 + outpos] = ((in[1 + inpos] >>> 6) & 1023L);
+ out[8 + outpos] = ((in[1 + inpos] >>> 16) & 1023L);
+ out[9 + outpos] = ((in[1 + inpos] >>> 26) & 1023L);
+ out[10 + outpos] = ((in[1 + inpos] >>> 36) & 1023L);
+ out[11 + outpos] = ((in[1 + inpos] >>> 46) & 1023L);
+ out[12 + outpos] = (in[1 + inpos] >>> 56)
+ | ((in[2 + inpos] & 3L) << (10 - 2));
+ out[13 + outpos] = ((in[2 + inpos] >>> 2) & 1023L);
+ out[14 + outpos] = ((in[2 + inpos] >>> 12) & 1023L);
+ out[15 + outpos] = ((in[2 + inpos] >>> 22) & 1023L);
+ out[16 + outpos] = ((in[2 + inpos] >>> 32) & 1023L);
+ out[17 + outpos] = ((in[2 + inpos] >>> 42) & 1023L);
+ out[18 + outpos] = ((in[2 + inpos] >>> 52) & 1023L);
+ out[19 + outpos] = (in[2 + inpos] >>> 62)
+ | ((in[3 + inpos] & 255L) << (10 - 8));
+ out[20 + outpos] = ((in[3 + inpos] >>> 8) & 1023L);
+ out[21 + outpos] = ((in[3 + inpos] >>> 18) & 1023L);
+ out[22 + outpos] = ((in[3 + inpos] >>> 28) & 1023L);
+ out[23 + outpos] = ((in[3 + inpos] >>> 38) & 1023L);
+ out[24 + outpos] = ((in[3 + inpos] >>> 48) & 1023L);
+ out[25 + outpos] = (in[3 + inpos] >>> 58)
+ | ((in[4 + inpos] & 15L) << (10 - 4));
+ out[26 + outpos] = ((in[4 + inpos] >>> 4) & 1023L);
+ out[27 + outpos] = ((in[4 + inpos] >>> 14) & 1023L);
+ out[28 + outpos] = ((in[4 + inpos] >>> 24) & 1023L);
+ out[29 + outpos] = ((in[4 + inpos] >>> 34) & 1023L);
+ out[30 + outpos] = ((in[4 + inpos] >>> 44) & 1023L);
+ out[31 + outpos] = (in[4 + inpos] >>> 54);
+ out[32 + outpos] = (in[5 + inpos] & 1023L);
+ out[33 + outpos] = ((in[5 + inpos] >>> 10) & 1023L);
+ out[34 + outpos] = ((in[5 + inpos] >>> 20) & 1023L);
+ out[35 + outpos] = ((in[5 + inpos] >>> 30) & 1023L);
+ out[36 + outpos] = ((in[5 + inpos] >>> 40) & 1023L);
+ out[37 + outpos] = ((in[5 + inpos] >>> 50) & 1023L);
+ out[38 + outpos] = (in[5 + inpos] >>> 60)
+ | ((in[6 + inpos] & 63L) << (10 - 6));
+ out[39 + outpos] = ((in[6 + inpos] >>> 6) & 1023L);
+ out[40 + outpos] = ((in[6 + inpos] >>> 16) & 1023L);
+ out[41 + outpos] = ((in[6 + inpos] >>> 26) & 1023L);
+ out[42 + outpos] = ((in[6 + inpos] >>> 36) & 1023L);
+ out[43 + outpos] = ((in[6 + inpos] >>> 46) & 1023L);
+ out[44 + outpos] = (in[6 + inpos] >>> 56)
+ | ((in[7 + inpos] & 3L) << (10 - 2));
+ out[45 + outpos] = ((in[7 + inpos] >>> 2) & 1023L);
+ out[46 + outpos] = ((in[7 + inpos] >>> 12) & 1023L);
+ out[47 + outpos] = ((in[7 + inpos] >>> 22) & 1023L);
+ out[48 + outpos] = ((in[7 + inpos] >>> 32) & 1023L);
+ out[49 + outpos] = ((in[7 + inpos] >>> 42) & 1023L);
+ out[50 + outpos] = ((in[7 + inpos] >>> 52) & 1023L);
+ out[51 + outpos] = (in[7 + inpos] >>> 62)
+ | ((in[8 + inpos] & 255L) << (10 - 8));
+ out[52 + outpos] = ((in[8 + inpos] >>> 8) & 1023L);
+ out[53 + outpos] = ((in[8 + inpos] >>> 18) & 1023L);
+ out[54 + outpos] = ((in[8 + inpos] >>> 28) & 1023L);
+ out[55 + outpos] = ((in[8 + inpos] >>> 38) & 1023L);
+ out[56 + outpos] = ((in[8 + inpos] >>> 48) & 1023L);
+ out[57 + outpos] = (in[8 + inpos] >>> 58)
+ | ((in[9 + inpos] & 15L) << (10 - 4));
+ out[58 + outpos] = ((in[9 + inpos] >>> 4) & 1023L);
+ out[59 + outpos] = ((in[9 + inpos] >>> 14) & 1023L);
+ out[60 + outpos] = ((in[9 + inpos] >>> 24) & 1023L);
+ out[61 + outpos] = ((in[9 + inpos] >>> 34) & 1023L);
+ out[62 + outpos] = ((in[9 + inpos] >>> 44) & 1023L);
+ out[63 + outpos] = (in[9 + inpos] >>> 54);
+ }
+
+ protected static void fastunpack11(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 2047L);
+ out[1 + outpos] = ((in[inpos] >>> 11) & 2047L);
+ out[2 + outpos] = ((in[inpos] >>> 22) & 2047L);
+ out[3 + outpos] = ((in[inpos] >>> 33) & 2047L);
+ out[4 + outpos] = ((in[inpos] >>> 44) & 2047L);
+ out[5 + outpos] = (in[inpos] >>> 55)
+ | ((in[1 + inpos] & 3L) << (11 - 2));
+ out[6 + outpos] = ((in[1 + inpos] >>> 2) & 2047L);
+ out[7 + outpos] = ((in[1 + inpos] >>> 13) & 2047L);
+ out[8 + outpos] = ((in[1 + inpos] >>> 24) & 2047L);
+ out[9 + outpos] = ((in[1 + inpos] >>> 35) & 2047L);
+ out[10 + outpos] = ((in[1 + inpos] >>> 46) & 2047L);
+ out[11 + outpos] = (in[1 + inpos] >>> 57)
+ | ((in[2 + inpos] & 15L) << (11 - 4));
+ out[12 + outpos] = ((in[2 + inpos] >>> 4) & 2047L);
+ out[13 + outpos] = ((in[2 + inpos] >>> 15) & 2047L);
+ out[14 + outpos] = ((in[2 + inpos] >>> 26) & 2047L);
+ out[15 + outpos] = ((in[2 + inpos] >>> 37) & 2047L);
+ out[16 + outpos] = ((in[2 + inpos] >>> 48) & 2047L);
+ out[17 + outpos] = (in[2 + inpos] >>> 59)
+ | ((in[3 + inpos] & 63L) << (11 - 6));
+ out[18 + outpos] = ((in[3 + inpos] >>> 6) & 2047L);
+ out[19 + outpos] = ((in[3 + inpos] >>> 17) & 2047L);
+ out[20 + outpos] = ((in[3 + inpos] >>> 28) & 2047L);
+ out[21 + outpos] = ((in[3 + inpos] >>> 39) & 2047L);
+ out[22 + outpos] = ((in[3 + inpos] >>> 50) & 2047L);
+ out[23 + outpos] = (in[3 + inpos] >>> 61)
+ | ((in[4 + inpos] & 255L) << (11 - 8));
+ out[24 + outpos] = ((in[4 + inpos] >>> 8) & 2047L);
+ out[25 + outpos] = ((in[4 + inpos] >>> 19) & 2047L);
+ out[26 + outpos] = ((in[4 + inpos] >>> 30) & 2047L);
+ out[27 + outpos] = ((in[4 + inpos] >>> 41) & 2047L);
+ out[28 + outpos] = ((in[4 + inpos] >>> 52) & 2047L);
+ out[29 + outpos] = (in[4 + inpos] >>> 63)
+ | ((in[5 + inpos] & 1023L) << (11 - 10));
+ out[30 + outpos] = ((in[5 + inpos] >>> 10) & 2047L);
+ out[31 + outpos] = ((in[5 + inpos] >>> 21) & 2047L);
+ out[32 + outpos] = ((in[5 + inpos] >>> 32) & 2047L);
+ out[33 + outpos] = ((in[5 + inpos] >>> 43) & 2047L);
+ out[34 + outpos] = (in[5 + inpos] >>> 54)
+ | ((in[6 + inpos] & 1L) << (11 - 1));
+ out[35 + outpos] = ((in[6 + inpos] >>> 1) & 2047L);
+ out[36 + outpos] = ((in[6 + inpos] >>> 12) & 2047L);
+ out[37 + outpos] = ((in[6 + inpos] >>> 23) & 2047L);
+ out[38 + outpos] = ((in[6 + inpos] >>> 34) & 2047L);
+ out[39 + outpos] = ((in[6 + inpos] >>> 45) & 2047L);
+ out[40 + outpos] = (in[6 + inpos] >>> 56)
+ | ((in[7 + inpos] & 7L) << (11 - 3));
+ out[41 + outpos] = ((in[7 + inpos] >>> 3) & 2047L);
+ out[42 + outpos] = ((in[7 + inpos] >>> 14) & 2047L);
+ out[43 + outpos] = ((in[7 + inpos] >>> 25) & 2047L);
+ out[44 + outpos] = ((in[7 + inpos] >>> 36) & 2047L);
+ out[45 + outpos] = ((in[7 + inpos] >>> 47) & 2047L);
+ out[46 + outpos] = (in[7 + inpos] >>> 58)
+ | ((in[8 + inpos] & 31L) << (11 - 5));
+ out[47 + outpos] = ((in[8 + inpos] >>> 5) & 2047L);
+ out[48 + outpos] = ((in[8 + inpos] >>> 16) & 2047L);
+ out[49 + outpos] = ((in[8 + inpos] >>> 27) & 2047L);
+ out[50 + outpos] = ((in[8 + inpos] >>> 38) & 2047L);
+ out[51 + outpos] = ((in[8 + inpos] >>> 49) & 2047L);
+ out[52 + outpos] = (in[8 + inpos] >>> 60)
+ | ((in[9 + inpos] & 127L) << (11 - 7));
+ out[53 + outpos] = ((in[9 + inpos] >>> 7) & 2047L);
+ out[54 + outpos] = ((in[9 + inpos] >>> 18) & 2047L);
+ out[55 + outpos] = ((in[9 + inpos] >>> 29) & 2047L);
+ out[56 + outpos] = ((in[9 + inpos] >>> 40) & 2047L);
+ out[57 + outpos] = ((in[9 + inpos] >>> 51) & 2047L);
+ out[58 + outpos] = (in[9 + inpos] >>> 62)
+ | ((in[10 + inpos] & 511L) << (11 - 9));
+ out[59 + outpos] = ((in[10 + inpos] >>> 9) & 2047L);
+ out[60 + outpos] = ((in[10 + inpos] >>> 20) & 2047L);
+ out[61 + outpos] = ((in[10 + inpos] >>> 31) & 2047L);
+ out[62 + outpos] = ((in[10 + inpos] >>> 42) & 2047L);
+ out[63 + outpos] = (in[10 + inpos] >>> 53);
+ }
+
+ protected static void fastunpack12(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 4095L);
+ out[1 + outpos] = ((in[inpos] >>> 12) & 4095L);
+ out[2 + outpos] = ((in[inpos] >>> 24) & 4095L);
+ out[3 + outpos] = ((in[inpos] >>> 36) & 4095L);
+ out[4 + outpos] = ((in[inpos] >>> 48) & 4095L);
+ out[5 + outpos] = (in[inpos] >>> 60)
+ | ((in[1 + inpos] & 255L) << (12 - 8));
+ out[6 + outpos] = ((in[1 + inpos] >>> 8) & 4095L);
+ out[7 + outpos] = ((in[1 + inpos] >>> 20) & 4095L);
+ out[8 + outpos] = ((in[1 + inpos] >>> 32) & 4095L);
+ out[9 + outpos] = ((in[1 + inpos] >>> 44) & 4095L);
+ out[10 + outpos] = (in[1 + inpos] >>> 56)
+ | ((in[2 + inpos] & 15L) << (12 - 4));
+ out[11 + outpos] = ((in[2 + inpos] >>> 4) & 4095L);
+ out[12 + outpos] = ((in[2 + inpos] >>> 16) & 4095L);
+ out[13 + outpos] = ((in[2 + inpos] >>> 28) & 4095L);
+ out[14 + outpos] = ((in[2 + inpos] >>> 40) & 4095L);
+ out[15 + outpos] = (in[2 + inpos] >>> 52);
+ out[16 + outpos] = (in[3 + inpos] & 4095L);
+ out[17 + outpos] = ((in[3 + inpos] >>> 12) & 4095L);
+ out[18 + outpos] = ((in[3 + inpos] >>> 24) & 4095L);
+ out[19 + outpos] = ((in[3 + inpos] >>> 36) & 4095L);
+ out[20 + outpos] = ((in[3 + inpos] >>> 48) & 4095L);
+ out[21 + outpos] = (in[3 + inpos] >>> 60)
+ | ((in[4 + inpos] & 255L) << (12 - 8));
+ out[22 + outpos] = ((in[4 + inpos] >>> 8) & 4095L);
+ out[23 + outpos] = ((in[4 + inpos] >>> 20) & 4095L);
+ out[24 + outpos] = ((in[4 + inpos] >>> 32) & 4095L);
+ out[25 + outpos] = ((in[4 + inpos] >>> 44) & 4095L);
+ out[26 + outpos] = (in[4 + inpos] >>> 56)
+ | ((in[5 + inpos] & 15L) << (12 - 4));
+ out[27 + outpos] = ((in[5 + inpos] >>> 4) & 4095L);
+ out[28 + outpos] = ((in[5 + inpos] >>> 16) & 4095L);
+ out[29 + outpos] = ((in[5 + inpos] >>> 28) & 4095L);
+ out[30 + outpos] = ((in[5 + inpos] >>> 40) & 4095L);
+ out[31 + outpos] = (in[5 + inpos] >>> 52);
+ out[32 + outpos] = (in[6 + inpos] & 4095L);
+ out[33 + outpos] = ((in[6 + inpos] >>> 12) & 4095L);
+ out[34 + outpos] = ((in[6 + inpos] >>> 24) & 4095L);
+ out[35 + outpos] = ((in[6 + inpos] >>> 36) & 4095L);
+ out[36 + outpos] = ((in[6 + inpos] >>> 48) & 4095L);
+ out[37 + outpos] = (in[6 + inpos] >>> 60)
+ | ((in[7 + inpos] & 255L) << (12 - 8));
+ out[38 + outpos] = ((in[7 + inpos] >>> 8) & 4095L);
+ out[39 + outpos] = ((in[7 + inpos] >>> 20) & 4095L);
+ out[40 + outpos] = ((in[7 + inpos] >>> 32) & 4095L);
+ out[41 + outpos] = ((in[7 + inpos] >>> 44) & 4095L);
+ out[42 + outpos] = (in[7 + inpos] >>> 56)
+ | ((in[8 + inpos] & 15L) << (12 - 4));
+ out[43 + outpos] = ((in[8 + inpos] >>> 4) & 4095L);
+ out[44 + outpos] = ((in[8 + inpos] >>> 16) & 4095L);
+ out[45 + outpos] = ((in[8 + inpos] >>> 28) & 4095L);
+ out[46 + outpos] = ((in[8 + inpos] >>> 40) & 4095L);
+ out[47 + outpos] = (in[8 + inpos] >>> 52);
+ out[48 + outpos] = (in[9 + inpos] & 4095L);
+ out[49 + outpos] = ((in[9 + inpos] >>> 12) & 4095L);
+ out[50 + outpos] = ((in[9 + inpos] >>> 24) & 4095L);
+ out[51 + outpos] = ((in[9 + inpos] >>> 36) & 4095L);
+ out[52 + outpos] = ((in[9 + inpos] >>> 48) & 4095L);
+ out[53 + outpos] = (in[9 + inpos] >>> 60)
+ | ((in[10 + inpos] & 255L) << (12 - 8));
+ out[54 + outpos] = ((in[10 + inpos] >>> 8) & 4095L);
+ out[55 + outpos] = ((in[10 + inpos] >>> 20) & 4095L);
+ out[56 + outpos] = ((in[10 + inpos] >>> 32) & 4095L);
+ out[57 + outpos] = ((in[10 + inpos] >>> 44) & 4095L);
+ out[58 + outpos] = (in[10 + inpos] >>> 56)
+ | ((in[11 + inpos] & 15L) << (12 - 4));
+ out[59 + outpos] = ((in[11 + inpos] >>> 4) & 4095L);
+ out[60 + outpos] = ((in[11 + inpos] >>> 16) & 4095L);
+ out[61 + outpos] = ((in[11 + inpos] >>> 28) & 4095L);
+ out[62 + outpos] = ((in[11 + inpos] >>> 40) & 4095L);
+ out[63 + outpos] = (in[11 + inpos] >>> 52);
+ }
+
+ protected static void fastunpack13(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 8191L);
+ out[1 + outpos] = ((in[inpos] >>> 13) & 8191L);
+ out[2 + outpos] = ((in[inpos] >>> 26) & 8191L);
+ out[3 + outpos] = ((in[inpos] >>> 39) & 8191L);
+ out[4 + outpos] = (in[inpos] >>> 52)
+ | ((in[1 + inpos] & 1L) << (13 - 1));
+ out[5 + outpos] = ((in[1 + inpos] >>> 1) & 8191L);
+ out[6 + outpos] = ((in[1 + inpos] >>> 14) & 8191L);
+ out[7 + outpos] = ((in[1 + inpos] >>> 27) & 8191L);
+ out[8 + outpos] = ((in[1 + inpos] >>> 40) & 8191L);
+ out[9 + outpos] = (in[1 + inpos] >>> 53)
+ | ((in[2 + inpos] & 3L) << (13 - 2));
+ out[10 + outpos] = ((in[2 + inpos] >>> 2) & 8191L);
+ out[11 + outpos] = ((in[2 + inpos] >>> 15) & 8191L);
+ out[12 + outpos] = ((in[2 + inpos] >>> 28) & 8191L);
+ out[13 + outpos] = ((in[2 + inpos] >>> 41) & 8191L);
+ out[14 + outpos] = (in[2 + inpos] >>> 54)
+ | ((in[3 + inpos] & 7L) << (13 - 3));
+ out[15 + outpos] = ((in[3 + inpos] >>> 3) & 8191L);
+ out[16 + outpos] = ((in[3 + inpos] >>> 16) & 8191L);
+ out[17 + outpos] = ((in[3 + inpos] >>> 29) & 8191L);
+ out[18 + outpos] = ((in[3 + inpos] >>> 42) & 8191L);
+ out[19 + outpos] = (in[3 + inpos] >>> 55)
+ | ((in[4 + inpos] & 15L) << (13 - 4));
+ out[20 + outpos] = ((in[4 + inpos] >>> 4) & 8191L);
+ out[21 + outpos] = ((in[4 + inpos] >>> 17) & 8191L);
+ out[22 + outpos] = ((in[4 + inpos] >>> 30) & 8191L);
+ out[23 + outpos] = ((in[4 + inpos] >>> 43) & 8191L);
+ out[24 + outpos] = (in[4 + inpos] >>> 56)
+ | ((in[5 + inpos] & 31L) << (13 - 5));
+ out[25 + outpos] = ((in[5 + inpos] >>> 5) & 8191L);
+ out[26 + outpos] = ((in[5 + inpos] >>> 18) & 8191L);
+ out[27 + outpos] = ((in[5 + inpos] >>> 31) & 8191L);
+ out[28 + outpos] = ((in[5 + inpos] >>> 44) & 8191L);
+ out[29 + outpos] = (in[5 + inpos] >>> 57)
+ | ((in[6 + inpos] & 63L) << (13 - 6));
+ out[30 + outpos] = ((in[6 + inpos] >>> 6) & 8191L);
+ out[31 + outpos] = ((in[6 + inpos] >>> 19) & 8191L);
+ out[32 + outpos] = ((in[6 + inpos] >>> 32) & 8191L);
+ out[33 + outpos] = ((in[6 + inpos] >>> 45) & 8191L);
+ out[34 + outpos] = (in[6 + inpos] >>> 58)
+ | ((in[7 + inpos] & 127L) << (13 - 7));
+ out[35 + outpos] = ((in[7 + inpos] >>> 7) & 8191L);
+ out[36 + outpos] = ((in[7 + inpos] >>> 20) & 8191L);
+ out[37 + outpos] = ((in[7 + inpos] >>> 33) & 8191L);
+ out[38 + outpos] = ((in[7 + inpos] >>> 46) & 8191L);
+ out[39 + outpos] = (in[7 + inpos] >>> 59)
+ | ((in[8 + inpos] & 255L) << (13 - 8));
+ out[40 + outpos] = ((in[8 + inpos] >>> 8) & 8191L);
+ out[41 + outpos] = ((in[8 + inpos] >>> 21) & 8191L);
+ out[42 + outpos] = ((in[8 + inpos] >>> 34) & 8191L);
+ out[43 + outpos] = ((in[8 + inpos] >>> 47) & 8191L);
+ out[44 + outpos] = (in[8 + inpos] >>> 60)
+ | ((in[9 + inpos] & 511L) << (13 - 9));
+ out[45 + outpos] = ((in[9 + inpos] >>> 9) & 8191L);
+ out[46 + outpos] = ((in[9 + inpos] >>> 22) & 8191L);
+ out[47 + outpos] = ((in[9 + inpos] >>> 35) & 8191L);
+ out[48 + outpos] = ((in[9 + inpos] >>> 48) & 8191L);
+ out[49 + outpos] = (in[9 + inpos] >>> 61)
+ | ((in[10 + inpos] & 1023L) << (13 - 10));
+ out[50 + outpos] = ((in[10 + inpos] >>> 10) & 8191L);
+ out[51 + outpos] = ((in[10 + inpos] >>> 23) & 8191L);
+ out[52 + outpos] = ((in[10 + inpos] >>> 36) & 8191L);
+ out[53 + outpos] = ((in[10 + inpos] >>> 49) & 8191L);
+ out[54 + outpos] = (in[10 + inpos] >>> 62)
+ | ((in[11 + inpos] & 2047L) << (13 - 11));
+ out[55 + outpos] = ((in[11 + inpos] >>> 11) & 8191L);
+ out[56 + outpos] = ((in[11 + inpos] >>> 24) & 8191L);
+ out[57 + outpos] = ((in[11 + inpos] >>> 37) & 8191L);
+ out[58 + outpos] = ((in[11 + inpos] >>> 50) & 8191L);
+ out[59 + outpos] = (in[11 + inpos] >>> 63)
+ | ((in[12 + inpos] & 4095L) << (13 - 12));
+ out[60 + outpos] = ((in[12 + inpos] >>> 12) & 8191L);
+ out[61 + outpos] = ((in[12 + inpos] >>> 25) & 8191L);
+ out[62 + outpos] = ((in[12 + inpos] >>> 38) & 8191L);
+ out[63 + outpos] = (in[12 + inpos] >>> 51);
+ }
+
+ protected static void fastunpack14(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 16383L);
+ out[1 + outpos] = ((in[inpos] >>> 14) & 16383L);
+ out[2 + outpos] = ((in[inpos] >>> 28) & 16383L);
+ out[3 + outpos] = ((in[inpos] >>> 42) & 16383L);
+ out[4 + outpos] = (in[inpos] >>> 56)
+ | ((in[1 + inpos] & 63L) << (14 - 6));
+ out[5 + outpos] = ((in[1 + inpos] >>> 6) & 16383L);
+ out[6 + outpos] = ((in[1 + inpos] >>> 20) & 16383L);
+ out[7 + outpos] = ((in[1 + inpos] >>> 34) & 16383L);
+ out[8 + outpos] = ((in[1 + inpos] >>> 48) & 16383L);
+ out[9 + outpos] = (in[1 + inpos] >>> 62)
+ | ((in[2 + inpos] & 4095L) << (14 - 12));
+ out[10 + outpos] = ((in[2 + inpos] >>> 12) & 16383L);
+ out[11 + outpos] = ((in[2 + inpos] >>> 26) & 16383L);
+ out[12 + outpos] = ((in[2 + inpos] >>> 40) & 16383L);
+ out[13 + outpos] = (in[2 + inpos] >>> 54)
+ | ((in[3 + inpos] & 15L) << (14 - 4));
+ out[14 + outpos] = ((in[3 + inpos] >>> 4) & 16383L);
+ out[15 + outpos] = ((in[3 + inpos] >>> 18) & 16383L);
+ out[16 + outpos] = ((in[3 + inpos] >>> 32) & 16383L);
+ out[17 + outpos] = ((in[3 + inpos] >>> 46) & 16383L);
+ out[18 + outpos] = (in[3 + inpos] >>> 60)
+ | ((in[4 + inpos] & 1023L) << (14 - 10));
+ out[19 + outpos] = ((in[4 + inpos] >>> 10) & 16383L);
+ out[20 + outpos] = ((in[4 + inpos] >>> 24) & 16383L);
+ out[21 + outpos] = ((in[4 + inpos] >>> 38) & 16383L);
+ out[22 + outpos] = (in[4 + inpos] >>> 52)
+ | ((in[5 + inpos] & 3L) << (14 - 2));
+ out[23 + outpos] = ((in[5 + inpos] >>> 2) & 16383L);
+ out[24 + outpos] = ((in[5 + inpos] >>> 16) & 16383L);
+ out[25 + outpos] = ((in[5 + inpos] >>> 30) & 16383L);
+ out[26 + outpos] = ((in[5 + inpos] >>> 44) & 16383L);
+ out[27 + outpos] = (in[5 + inpos] >>> 58)
+ | ((in[6 + inpos] & 255L) << (14 - 8));
+ out[28 + outpos] = ((in[6 + inpos] >>> 8) & 16383L);
+ out[29 + outpos] = ((in[6 + inpos] >>> 22) & 16383L);
+ out[30 + outpos] = ((in[6 + inpos] >>> 36) & 16383L);
+ out[31 + outpos] = (in[6 + inpos] >>> 50);
+ out[32 + outpos] = (in[7 + inpos] & 16383L);
+ out[33 + outpos] = ((in[7 + inpos] >>> 14) & 16383L);
+ out[34 + outpos] = ((in[7 + inpos] >>> 28) & 16383L);
+ out[35 + outpos] = ((in[7 + inpos] >>> 42) & 16383L);
+ out[36 + outpos] = (in[7 + inpos] >>> 56)
+ | ((in[8 + inpos] & 63L) << (14 - 6));
+ out[37 + outpos] = ((in[8 + inpos] >>> 6) & 16383L);
+ out[38 + outpos] = ((in[8 + inpos] >>> 20) & 16383L);
+ out[39 + outpos] = ((in[8 + inpos] >>> 34) & 16383L);
+ out[40 + outpos] = ((in[8 + inpos] >>> 48) & 16383L);
+ out[41 + outpos] = (in[8 + inpos] >>> 62)
+ | ((in[9 + inpos] & 4095L) << (14 - 12));
+ out[42 + outpos] = ((in[9 + inpos] >>> 12) & 16383L);
+ out[43 + outpos] = ((in[9 + inpos] >>> 26) & 16383L);
+ out[44 + outpos] = ((in[9 + inpos] >>> 40) & 16383L);
+ out[45 + outpos] = (in[9 + inpos] >>> 54)
+ | ((in[10 + inpos] & 15L) << (14 - 4));
+ out[46 + outpos] = ((in[10 + inpos] >>> 4) & 16383L);
+ out[47 + outpos] = ((in[10 + inpos] >>> 18) & 16383L);
+ out[48 + outpos] = ((in[10 + inpos] >>> 32) & 16383L);
+ out[49 + outpos] = ((in[10 + inpos] >>> 46) & 16383L);
+ out[50 + outpos] = (in[10 + inpos] >>> 60)
+ | ((in[11 + inpos] & 1023L) << (14 - 10));
+ out[51 + outpos] = ((in[11 + inpos] >>> 10) & 16383L);
+ out[52 + outpos] = ((in[11 + inpos] >>> 24) & 16383L);
+ out[53 + outpos] = ((in[11 + inpos] >>> 38) & 16383L);
+ out[54 + outpos] = (in[11 + inpos] >>> 52)
+ | ((in[12 + inpos] & 3L) << (14 - 2));
+ out[55 + outpos] = ((in[12 + inpos] >>> 2) & 16383L);
+ out[56 + outpos] = ((in[12 + inpos] >>> 16) & 16383L);
+ out[57 + outpos] = ((in[12 + inpos] >>> 30) & 16383L);
+ out[58 + outpos] = ((in[12 + inpos] >>> 44) & 16383L);
+ out[59 + outpos] = (in[12 + inpos] >>> 58)
+ | ((in[13 + inpos] & 255L) << (14 - 8));
+ out[60 + outpos] = ((in[13 + inpos] >>> 8) & 16383L);
+ out[61 + outpos] = ((in[13 + inpos] >>> 22) & 16383L);
+ out[62 + outpos] = ((in[13 + inpos] >>> 36) & 16383L);
+ out[63 + outpos] = (in[13 + inpos] >>> 50);
+ }
+
+ protected static void fastunpack15(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 32767L);
+ out[1 + outpos] = ((in[inpos] >>> 15) & 32767L);
+ out[2 + outpos] = ((in[inpos] >>> 30) & 32767L);
+ out[3 + outpos] = ((in[inpos] >>> 45) & 32767L);
+ out[4 + outpos] = (in[inpos] >>> 60)
+ | ((in[1 + inpos] & 2047L) << (15 - 11));
+ out[5 + outpos] = ((in[1 + inpos] >>> 11) & 32767L);
+ out[6 + outpos] = ((in[1 + inpos] >>> 26) & 32767L);
+ out[7 + outpos] = ((in[1 + inpos] >>> 41) & 32767L);
+ out[8 + outpos] = (in[1 + inpos] >>> 56)
+ | ((in[2 + inpos] & 127L) << (15 - 7));
+ out[9 + outpos] = ((in[2 + inpos] >>> 7) & 32767L);
+ out[10 + outpos] = ((in[2 + inpos] >>> 22) & 32767L);
+ out[11 + outpos] = ((in[2 + inpos] >>> 37) & 32767L);
+ out[12 + outpos] = (in[2 + inpos] >>> 52)
+ | ((in[3 + inpos] & 7L) << (15 - 3));
+ out[13 + outpos] = ((in[3 + inpos] >>> 3) & 32767L);
+ out[14 + outpos] = ((in[3 + inpos] >>> 18) & 32767L);
+ out[15 + outpos] = ((in[3 + inpos] >>> 33) & 32767L);
+ out[16 + outpos] = ((in[3 + inpos] >>> 48) & 32767L);
+ out[17 + outpos] = (in[3 + inpos] >>> 63)
+ | ((in[4 + inpos] & 16383L) << (15 - 14));
+ out[18 + outpos] = ((in[4 + inpos] >>> 14) & 32767L);
+ out[19 + outpos] = ((in[4 + inpos] >>> 29) & 32767L);
+ out[20 + outpos] = ((in[4 + inpos] >>> 44) & 32767L);
+ out[21 + outpos] = (in[4 + inpos] >>> 59)
+ | ((in[5 + inpos] & 1023L) << (15 - 10));
+ out[22 + outpos] = ((in[5 + inpos] >>> 10) & 32767L);
+ out[23 + outpos] = ((in[5 + inpos] >>> 25) & 32767L);
+ out[24 + outpos] = ((in[5 + inpos] >>> 40) & 32767L);
+ out[25 + outpos] = (in[5 + inpos] >>> 55)
+ | ((in[6 + inpos] & 63L) << (15 - 6));
+ out[26 + outpos] = ((in[6 + inpos] >>> 6) & 32767L);
+ out[27 + outpos] = ((in[6 + inpos] >>> 21) & 32767L);
+ out[28 + outpos] = ((in[6 + inpos] >>> 36) & 32767L);
+ out[29 + outpos] = (in[6 + inpos] >>> 51)
+ | ((in[7 + inpos] & 3L) << (15 - 2));
+ out[30 + outpos] = ((in[7 + inpos] >>> 2) & 32767L);
+ out[31 + outpos] = ((in[7 + inpos] >>> 17) & 32767L);
+ out[32 + outpos] = ((in[7 + inpos] >>> 32) & 32767L);
+ out[33 + outpos] = ((in[7 + inpos] >>> 47) & 32767L);
+ out[34 + outpos] = (in[7 + inpos] >>> 62)
+ | ((in[8 + inpos] & 8191L) << (15 - 13));
+ out[35 + outpos] = ((in[8 + inpos] >>> 13) & 32767L);
+ out[36 + outpos] = ((in[8 + inpos] >>> 28) & 32767L);
+ out[37 + outpos] = ((in[8 + inpos] >>> 43) & 32767L);
+ out[38 + outpos] = (in[8 + inpos] >>> 58)
+ | ((in[9 + inpos] & 511L) << (15 - 9));
+ out[39 + outpos] = ((in[9 + inpos] >>> 9) & 32767L);
+ out[40 + outpos] = ((in[9 + inpos] >>> 24) & 32767L);
+ out[41 + outpos] = ((in[9 + inpos] >>> 39) & 32767L);
+ out[42 + outpos] = (in[9 + inpos] >>> 54)
+ | ((in[10 + inpos] & 31L) << (15 - 5));
+ out[43 + outpos] = ((in[10 + inpos] >>> 5) & 32767L);
+ out[44 + outpos] = ((in[10 + inpos] >>> 20) & 32767L);
+ out[45 + outpos] = ((in[10 + inpos] >>> 35) & 32767L);
+ out[46 + outpos] = (in[10 + inpos] >>> 50)
+ | ((in[11 + inpos] & 1L) << (15 - 1));
+ out[47 + outpos] = ((in[11 + inpos] >>> 1) & 32767L);
+ out[48 + outpos] = ((in[11 + inpos] >>> 16) & 32767L);
+ out[49 + outpos] = ((in[11 + inpos] >>> 31) & 32767L);
+ out[50 + outpos] = ((in[11 + inpos] >>> 46) & 32767L);
+ out[51 + outpos] = (in[11 + inpos] >>> 61)
+ | ((in[12 + inpos] & 4095L) << (15 - 12));
+ out[52 + outpos] = ((in[12 + inpos] >>> 12) & 32767L);
+ out[53 + outpos] = ((in[12 + inpos] >>> 27) & 32767L);
+ out[54 + outpos] = ((in[12 + inpos] >>> 42) & 32767L);
+ out[55 + outpos] = (in[12 + inpos] >>> 57)
+ | ((in[13 + inpos] & 255L) << (15 - 8));
+ out[56 + outpos] = ((in[13 + inpos] >>> 8) & 32767L);
+ out[57 + outpos] = ((in[13 + inpos] >>> 23) & 32767L);
+ out[58 + outpos] = ((in[13 + inpos] >>> 38) & 32767L);
+ out[59 + outpos] = (in[13 + inpos] >>> 53)
+ | ((in[14 + inpos] & 15L) << (15 - 4));
+ out[60 + outpos] = ((in[14 + inpos] >>> 4) & 32767L);
+ out[61 + outpos] = ((in[14 + inpos] >>> 19) & 32767L);
+ out[62 + outpos] = ((in[14 + inpos] >>> 34) & 32767L);
+ out[63 + outpos] = (in[14 + inpos] >>> 49);
+ }
+
+ protected static void fastunpack16(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 65535L);
+ out[1 + outpos] = ((in[inpos] >>> 16) & 65535L);
+ out[2 + outpos] = ((in[inpos] >>> 32) & 65535L);
+ out[3 + outpos] = (in[inpos] >>> 48);
+ out[4 + outpos] = (in[1 + inpos] & 65535L);
+ out[5 + outpos] = ((in[1 + inpos] >>> 16) & 65535L);
+ out[6 + outpos] = ((in[1 + inpos] >>> 32) & 65535L);
+ out[7 + outpos] = (in[1 + inpos] >>> 48);
+ out[8 + outpos] = (in[2 + inpos] & 65535L);
+ out[9 + outpos] = ((in[2 + inpos] >>> 16) & 65535L);
+ out[10 + outpos] = ((in[2 + inpos] >>> 32) & 65535L);
+ out[11 + outpos] = (in[2 + inpos] >>> 48);
+ out[12 + outpos] = (in[3 + inpos] & 65535L);
+ out[13 + outpos] = ((in[3 + inpos] >>> 16) & 65535L);
+ out[14 + outpos] = ((in[3 + inpos] >>> 32) & 65535L);
+ out[15 + outpos] = (in[3 + inpos] >>> 48);
+ out[16 + outpos] = (in[4 + inpos] & 65535L);
+ out[17 + outpos] = ((in[4 + inpos] >>> 16) & 65535L);
+ out[18 + outpos] = ((in[4 + inpos] >>> 32) & 65535L);
+ out[19 + outpos] = (in[4 + inpos] >>> 48);
+ out[20 + outpos] = (in[5 + inpos] & 65535L);
+ out[21 + outpos] = ((in[5 + inpos] >>> 16) & 65535L);
+ out[22 + outpos] = ((in[5 + inpos] >>> 32) & 65535L);
+ out[23 + outpos] = (in[5 + inpos] >>> 48);
+ out[24 + outpos] = (in[6 + inpos] & 65535L);
+ out[25 + outpos] = ((in[6 + inpos] >>> 16) & 65535L);
+ out[26 + outpos] = ((in[6 + inpos] >>> 32) & 65535L);
+ out[27 + outpos] = (in[6 + inpos] >>> 48);
+ out[28 + outpos] = (in[7 + inpos] & 65535L);
+ out[29 + outpos] = ((in[7 + inpos] >>> 16) & 65535L);
+ out[30 + outpos] = ((in[7 + inpos] >>> 32) & 65535L);
+ out[31 + outpos] = (in[7 + inpos] >>> 48);
+ out[32 + outpos] = (in[8 + inpos] & 65535L);
+ out[33 + outpos] = ((in[8 + inpos] >>> 16) & 65535L);
+ out[34 + outpos] = ((in[8 + inpos] >>> 32) & 65535L);
+ out[35 + outpos] = (in[8 + inpos] >>> 48);
+ out[36 + outpos] = (in[9 + inpos] & 65535L);
+ out[37 + outpos] = ((in[9 + inpos] >>> 16) & 65535L);
+ out[38 + outpos] = ((in[9 + inpos] >>> 32) & 65535L);
+ out[39 + outpos] = (in[9 + inpos] >>> 48);
+ out[40 + outpos] = (in[10 + inpos] & 65535L);
+ out[41 + outpos] = ((in[10 + inpos] >>> 16) & 65535L);
+ out[42 + outpos] = ((in[10 + inpos] >>> 32) & 65535L);
+ out[43 + outpos] = (in[10 + inpos] >>> 48);
+ out[44 + outpos] = (in[11 + inpos] & 65535L);
+ out[45 + outpos] = ((in[11 + inpos] >>> 16) & 65535L);
+ out[46 + outpos] = ((in[11 + inpos] >>> 32) & 65535L);
+ out[47 + outpos] = (in[11 + inpos] >>> 48);
+ out[48 + outpos] = (in[12 + inpos] & 65535L);
+ out[49 + outpos] = ((in[12 + inpos] >>> 16) & 65535L);
+ out[50 + outpos] = ((in[12 + inpos] >>> 32) & 65535L);
+ out[51 + outpos] = (in[12 + inpos] >>> 48);
+ out[52 + outpos] = (in[13 + inpos] & 65535L);
+ out[53 + outpos] = ((in[13 + inpos] >>> 16) & 65535L);
+ out[54 + outpos] = ((in[13 + inpos] >>> 32) & 65535L);
+ out[55 + outpos] = (in[13 + inpos] >>> 48);
+ out[56 + outpos] = (in[14 + inpos] & 65535L);
+ out[57 + outpos] = ((in[14 + inpos] >>> 16) & 65535L);
+ out[58 + outpos] = ((in[14 + inpos] >>> 32) & 65535L);
+ out[59 + outpos] = (in[14 + inpos] >>> 48);
+ out[60 + outpos] = (in[15 + inpos] & 65535L);
+ out[61 + outpos] = ((in[15 + inpos] >>> 16) & 65535L);
+ out[62 + outpos] = ((in[15 + inpos] >>> 32) & 65535L);
+ out[63 + outpos] = (in[15 + inpos] >>> 48);
+ }
+
+ protected static void fastunpack17(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 131071L);
+ out[1 + outpos] = ((in[inpos] >>> 17) & 131071L);
+ out[2 + outpos] = ((in[inpos] >>> 34) & 131071L);
+ out[3 + outpos] = (in[inpos] >>> 51)
+ | ((in[1 + inpos] & 15L) << (17 - 4));
+ out[4 + outpos] = ((in[1 + inpos] >>> 4) & 131071L);
+ out[5 + outpos] = ((in[1 + inpos] >>> 21) & 131071L);
+ out[6 + outpos] = ((in[1 + inpos] >>> 38) & 131071L);
+ out[7 + outpos] = (in[1 + inpos] >>> 55)
+ | ((in[2 + inpos] & 255L) << (17 - 8));
+ out[8 + outpos] = ((in[2 + inpos] >>> 8) & 131071L);
+ out[9 + outpos] = ((in[2 + inpos] >>> 25) & 131071L);
+ out[10 + outpos] = ((in[2 + inpos] >>> 42) & 131071L);
+ out[11 + outpos] = (in[2 + inpos] >>> 59)
+ | ((in[3 + inpos] & 4095L) << (17 - 12));
+ out[12 + outpos] = ((in[3 + inpos] >>> 12) & 131071L);
+ out[13 + outpos] = ((in[3 + inpos] >>> 29) & 131071L);
+ out[14 + outpos] = ((in[3 + inpos] >>> 46) & 131071L);
+ out[15 + outpos] = (in[3 + inpos] >>> 63)
+ | ((in[4 + inpos] & 65535L) << (17 - 16));
+ out[16 + outpos] = ((in[4 + inpos] >>> 16) & 131071L);
+ out[17 + outpos] = ((in[4 + inpos] >>> 33) & 131071L);
+ out[18 + outpos] = (in[4 + inpos] >>> 50)
+ | ((in[5 + inpos] & 7L) << (17 - 3));
+ out[19 + outpos] = ((in[5 + inpos] >>> 3) & 131071L);
+ out[20 + outpos] = ((in[5 + inpos] >>> 20) & 131071L);
+ out[21 + outpos] = ((in[5 + inpos] >>> 37) & 131071L);
+ out[22 + outpos] = (in[5 + inpos] >>> 54)
+ | ((in[6 + inpos] & 127L) << (17 - 7));
+ out[23 + outpos] = ((in[6 + inpos] >>> 7) & 131071L);
+ out[24 + outpos] = ((in[6 + inpos] >>> 24) & 131071L);
+ out[25 + outpos] = ((in[6 + inpos] >>> 41) & 131071L);
+ out[26 + outpos] = (in[6 + inpos] >>> 58)
+ | ((in[7 + inpos] & 2047L) << (17 - 11));
+ out[27 + outpos] = ((in[7 + inpos] >>> 11) & 131071L);
+ out[28 + outpos] = ((in[7 + inpos] >>> 28) & 131071L);
+ out[29 + outpos] = ((in[7 + inpos] >>> 45) & 131071L);
+ out[30 + outpos] = (in[7 + inpos] >>> 62)
+ | ((in[8 + inpos] & 32767L) << (17 - 15));
+ out[31 + outpos] = ((in[8 + inpos] >>> 15) & 131071L);
+ out[32 + outpos] = ((in[8 + inpos] >>> 32) & 131071L);
+ out[33 + outpos] = (in[8 + inpos] >>> 49)
+ | ((in[9 + inpos] & 3L) << (17 - 2));
+ out[34 + outpos] = ((in[9 + inpos] >>> 2) & 131071L);
+ out[35 + outpos] = ((in[9 + inpos] >>> 19) & 131071L);
+ out[36 + outpos] = ((in[9 + inpos] >>> 36) & 131071L);
+ out[37 + outpos] = (in[9 + inpos] >>> 53)
+ | ((in[10 + inpos] & 63L) << (17 - 6));
+ out[38 + outpos] = ((in[10 + inpos] >>> 6) & 131071L);
+ out[39 + outpos] = ((in[10 + inpos] >>> 23) & 131071L);
+ out[40 + outpos] = ((in[10 + inpos] >>> 40) & 131071L);
+ out[41 + outpos] = (in[10 + inpos] >>> 57)
+ | ((in[11 + inpos] & 1023L) << (17 - 10));
+ out[42 + outpos] = ((in[11 + inpos] >>> 10) & 131071L);
+ out[43 + outpos] = ((in[11 + inpos] >>> 27) & 131071L);
+ out[44 + outpos] = ((in[11 + inpos] >>> 44) & 131071L);
+ out[45 + outpos] = (in[11 + inpos] >>> 61)
+ | ((in[12 + inpos] & 16383L) << (17 - 14));
+ out[46 + outpos] = ((in[12 + inpos] >>> 14) & 131071L);
+ out[47 + outpos] = ((in[12 + inpos] >>> 31) & 131071L);
+ out[48 + outpos] = (in[12 + inpos] >>> 48)
+ | ((in[13 + inpos] & 1L) << (17 - 1));
+ out[49 + outpos] = ((in[13 + inpos] >>> 1) & 131071L);
+ out[50 + outpos] = ((in[13 + inpos] >>> 18) & 131071L);
+ out[51 + outpos] = ((in[13 + inpos] >>> 35) & 131071L);
+ out[52 + outpos] = (in[13 + inpos] >>> 52)
+ | ((in[14 + inpos] & 31L) << (17 - 5));
+ out[53 + outpos] = ((in[14 + inpos] >>> 5) & 131071L);
+ out[54 + outpos] = ((in[14 + inpos] >>> 22) & 131071L);
+ out[55 + outpos] = ((in[14 + inpos] >>> 39) & 131071L);
+ out[56 + outpos] = (in[14 + inpos] >>> 56)
+ | ((in[15 + inpos] & 511L) << (17 - 9));
+ out[57 + outpos] = ((in[15 + inpos] >>> 9) & 131071L);
+ out[58 + outpos] = ((in[15 + inpos] >>> 26) & 131071L);
+ out[59 + outpos] = ((in[15 + inpos] >>> 43) & 131071L);
+ out[60 + outpos] = (in[15 + inpos] >>> 60)
+ | ((in[16 + inpos] & 8191L) << (17 - 13));
+ out[61 + outpos] = ((in[16 + inpos] >>> 13) & 131071L);
+ out[62 + outpos] = ((in[16 + inpos] >>> 30) & 131071L);
+ out[63 + outpos] = (in[16 + inpos] >>> 47);
+ }
+
+ protected static void fastunpack18(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 262143L);
+ out[1 + outpos] = ((in[inpos] >>> 18) & 262143L);
+ out[2 + outpos] = ((in[inpos] >>> 36) & 262143L);
+ out[3 + outpos] = (in[inpos] >>> 54)
+ | ((in[1 + inpos] & 255L) << (18 - 8));
+ out[4 + outpos] = ((in[1 + inpos] >>> 8) & 262143L);
+ out[5 + outpos] = ((in[1 + inpos] >>> 26) & 262143L);
+ out[6 + outpos] = ((in[1 + inpos] >>> 44) & 262143L);
+ out[7 + outpos] = (in[1 + inpos] >>> 62)
+ | ((in[2 + inpos] & 65535L) << (18 - 16));
+ out[8 + outpos] = ((in[2 + inpos] >>> 16) & 262143L);
+ out[9 + outpos] = ((in[2 + inpos] >>> 34) & 262143L);
+ out[10 + outpos] = (in[2 + inpos] >>> 52)
+ | ((in[3 + inpos] & 63L) << (18 - 6));
+ out[11 + outpos] = ((in[3 + inpos] >>> 6) & 262143L);
+ out[12 + outpos] = ((in[3 + inpos] >>> 24) & 262143L);
+ out[13 + outpos] = ((in[3 + inpos] >>> 42) & 262143L);
+ out[14 + outpos] = (in[3 + inpos] >>> 60)
+ | ((in[4 + inpos] & 16383L) << (18 - 14));
+ out[15 + outpos] = ((in[4 + inpos] >>> 14) & 262143L);
+ out[16 + outpos] = ((in[4 + inpos] >>> 32) & 262143L);
+ out[17 + outpos] = (in[4 + inpos] >>> 50)
+ | ((in[5 + inpos] & 15L) << (18 - 4));
+ out[18 + outpos] = ((in[5 + inpos] >>> 4) & 262143L);
+ out[19 + outpos] = ((in[5 + inpos] >>> 22) & 262143L);
+ out[20 + outpos] = ((in[5 + inpos] >>> 40) & 262143L);
+ out[21 + outpos] = (in[5 + inpos] >>> 58)
+ | ((in[6 + inpos] & 4095L) << (18 - 12));
+ out[22 + outpos] = ((in[6 + inpos] >>> 12) & 262143L);
+ out[23 + outpos] = ((in[6 + inpos] >>> 30) & 262143L);
+ out[24 + outpos] = (in[6 + inpos] >>> 48)
+ | ((in[7 + inpos] & 3L) << (18 - 2));
+ out[25 + outpos] = ((in[7 + inpos] >>> 2) & 262143L);
+ out[26 + outpos] = ((in[7 + inpos] >>> 20) & 262143L);
+ out[27 + outpos] = ((in[7 + inpos] >>> 38) & 262143L);
+ out[28 + outpos] = (in[7 + inpos] >>> 56)
+ | ((in[8 + inpos] & 1023L) << (18 - 10));
+ out[29 + outpos] = ((in[8 + inpos] >>> 10) & 262143L);
+ out[30 + outpos] = ((in[8 + inpos] >>> 28) & 262143L);
+ out[31 + outpos] = (in[8 + inpos] >>> 46);
+ out[32 + outpos] = (in[9 + inpos] & 262143L);
+ out[33 + outpos] = ((in[9 + inpos] >>> 18) & 262143L);
+ out[34 + outpos] = ((in[9 + inpos] >>> 36) & 262143L);
+ out[35 + outpos] = (in[9 + inpos] >>> 54)
+ | ((in[10 + inpos] & 255L) << (18 - 8));
+ out[36 + outpos] = ((in[10 + inpos] >>> 8) & 262143L);
+ out[37 + outpos] = ((in[10 + inpos] >>> 26) & 262143L);
+ out[38 + outpos] = ((in[10 + inpos] >>> 44) & 262143L);
+ out[39 + outpos] = (in[10 + inpos] >>> 62)
+ | ((in[11 + inpos] & 65535L) << (18 - 16));
+ out[40 + outpos] = ((in[11 + inpos] >>> 16) & 262143L);
+ out[41 + outpos] = ((in[11 + inpos] >>> 34) & 262143L);
+ out[42 + outpos] = (in[11 + inpos] >>> 52)
+ | ((in[12 + inpos] & 63L) << (18 - 6));
+ out[43 + outpos] = ((in[12 + inpos] >>> 6) & 262143L);
+ out[44 + outpos] = ((in[12 + inpos] >>> 24) & 262143L);
+ out[45 + outpos] = ((in[12 + inpos] >>> 42) & 262143L);
+ out[46 + outpos] = (in[12 + inpos] >>> 60)
+ | ((in[13 + inpos] & 16383L) << (18 - 14));
+ out[47 + outpos] = ((in[13 + inpos] >>> 14) & 262143L);
+ out[48 + outpos] = ((in[13 + inpos] >>> 32) & 262143L);
+ out[49 + outpos] = (in[13 + inpos] >>> 50)
+ | ((in[14 + inpos] & 15L) << (18 - 4));
+ out[50 + outpos] = ((in[14 + inpos] >>> 4) & 262143L);
+ out[51 + outpos] = ((in[14 + inpos] >>> 22) & 262143L);
+ out[52 + outpos] = ((in[14 + inpos] >>> 40) & 262143L);
+ out[53 + outpos] = (in[14 + inpos] >>> 58)
+ | ((in[15 + inpos] & 4095L) << (18 - 12));
+ out[54 + outpos] = ((in[15 + inpos] >>> 12) & 262143L);
+ out[55 + outpos] = ((in[15 + inpos] >>> 30) & 262143L);
+ out[56 + outpos] = (in[15 + inpos] >>> 48)
+ | ((in[16 + inpos] & 3L) << (18 - 2));
+ out[57 + outpos] = ((in[16 + inpos] >>> 2) & 262143L);
+ out[58 + outpos] = ((in[16 + inpos] >>> 20) & 262143L);
+ out[59 + outpos] = ((in[16 + inpos] >>> 38) & 262143L);
+ out[60 + outpos] = (in[16 + inpos] >>> 56)
+ | ((in[17 + inpos] & 1023L) << (18 - 10));
+ out[61 + outpos] = ((in[17 + inpos] >>> 10) & 262143L);
+ out[62 + outpos] = ((in[17 + inpos] >>> 28) & 262143L);
+ out[63 + outpos] = (in[17 + inpos] >>> 46);
+ }
+
+ protected static void fastunpack19(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 524287L);
+ out[1 + outpos] = ((in[inpos] >>> 19) & 524287L);
+ out[2 + outpos] = ((in[inpos] >>> 38) & 524287L);
+ out[3 + outpos] = (in[inpos] >>> 57)
+ | ((in[1 + inpos] & 4095L) << (19 - 12));
+ out[4 + outpos] = ((in[1 + inpos] >>> 12) & 524287L);
+ out[5 + outpos] = ((in[1 + inpos] >>> 31) & 524287L);
+ out[6 + outpos] = (in[1 + inpos] >>> 50)
+ | ((in[2 + inpos] & 31L) << (19 - 5));
+ out[7 + outpos] = ((in[2 + inpos] >>> 5) & 524287L);
+ out[8 + outpos] = ((in[2 + inpos] >>> 24) & 524287L);
+ out[9 + outpos] = ((in[2 + inpos] >>> 43) & 524287L);
+ out[10 + outpos] = (in[2 + inpos] >>> 62)
+ | ((in[3 + inpos] & 131071L) << (19 - 17));
+ out[11 + outpos] = ((in[3 + inpos] >>> 17) & 524287L);
+ out[12 + outpos] = ((in[3 + inpos] >>> 36) & 524287L);
+ out[13 + outpos] = (in[3 + inpos] >>> 55)
+ | ((in[4 + inpos] & 1023L) << (19 - 10));
+ out[14 + outpos] = ((in[4 + inpos] >>> 10) & 524287L);
+ out[15 + outpos] = ((in[4 + inpos] >>> 29) & 524287L);
+ out[16 + outpos] = (in[4 + inpos] >>> 48)
+ | ((in[5 + inpos] & 7L) << (19 - 3));
+ out[17 + outpos] = ((in[5 + inpos] >>> 3) & 524287L);
+ out[18 + outpos] = ((in[5 + inpos] >>> 22) & 524287L);
+ out[19 + outpos] = ((in[5 + inpos] >>> 41) & 524287L);
+ out[20 + outpos] = (in[5 + inpos] >>> 60)
+ | ((in[6 + inpos] & 32767L) << (19 - 15));
+ out[21 + outpos] = ((in[6 + inpos] >>> 15) & 524287L);
+ out[22 + outpos] = ((in[6 + inpos] >>> 34) & 524287L);
+ out[23 + outpos] = (in[6 + inpos] >>> 53)
+ | ((in[7 + inpos] & 255L) << (19 - 8));
+ out[24 + outpos] = ((in[7 + inpos] >>> 8) & 524287L);
+ out[25 + outpos] = ((in[7 + inpos] >>> 27) & 524287L);
+ out[26 + outpos] = (in[7 + inpos] >>> 46)
+ | ((in[8 + inpos] & 1L) << (19 - 1));
+ out[27 + outpos] = ((in[8 + inpos] >>> 1) & 524287L);
+ out[28 + outpos] = ((in[8 + inpos] >>> 20) & 524287L);
+ out[29 + outpos] = ((in[8 + inpos] >>> 39) & 524287L);
+ out[30 + outpos] = (in[8 + inpos] >>> 58)
+ | ((in[9 + inpos] & 8191L) << (19 - 13));
+ out[31 + outpos] = ((in[9 + inpos] >>> 13) & 524287L);
+ out[32 + outpos] = ((in[9 + inpos] >>> 32) & 524287L);
+ out[33 + outpos] = (in[9 + inpos] >>> 51)
+ | ((in[10 + inpos] & 63L) << (19 - 6));
+ out[34 + outpos] = ((in[10 + inpos] >>> 6) & 524287L);
+ out[35 + outpos] = ((in[10 + inpos] >>> 25) & 524287L);
+ out[36 + outpos] = ((in[10 + inpos] >>> 44) & 524287L);
+ out[37 + outpos] = (in[10 + inpos] >>> 63)
+ | ((in[11 + inpos] & 262143L) << (19 - 18));
+ out[38 + outpos] = ((in[11 + inpos] >>> 18) & 524287L);
+ out[39 + outpos] = ((in[11 + inpos] >>> 37) & 524287L);
+ out[40 + outpos] = (in[11 + inpos] >>> 56)
+ | ((in[12 + inpos] & 2047L) << (19 - 11));
+ out[41 + outpos] = ((in[12 + inpos] >>> 11) & 524287L);
+ out[42 + outpos] = ((in[12 + inpos] >>> 30) & 524287L);
+ out[43 + outpos] = (in[12 + inpos] >>> 49)
+ | ((in[13 + inpos] & 15L) << (19 - 4));
+ out[44 + outpos] = ((in[13 + inpos] >>> 4) & 524287L);
+ out[45 + outpos] = ((in[13 + inpos] >>> 23) & 524287L);
+ out[46 + outpos] = ((in[13 + inpos] >>> 42) & 524287L);
+ out[47 + outpos] = (in[13 + inpos] >>> 61)
+ | ((in[14 + inpos] & 65535L) << (19 - 16));
+ out[48 + outpos] = ((in[14 + inpos] >>> 16) & 524287L);
+ out[49 + outpos] = ((in[14 + inpos] >>> 35) & 524287L);
+ out[50 + outpos] = (in[14 + inpos] >>> 54)
+ | ((in[15 + inpos] & 511L) << (19 - 9));
+ out[51 + outpos] = ((in[15 + inpos] >>> 9) & 524287L);
+ out[52 + outpos] = ((in[15 + inpos] >>> 28) & 524287L);
+ out[53 + outpos] = (in[15 + inpos] >>> 47)
+ | ((in[16 + inpos] & 3L) << (19 - 2));
+ out[54 + outpos] = ((in[16 + inpos] >>> 2) & 524287L);
+ out[55 + outpos] = ((in[16 + inpos] >>> 21) & 524287L);
+ out[56 + outpos] = ((in[16 + inpos] >>> 40) & 524287L);
+ out[57 + outpos] = (in[16 + inpos] >>> 59)
+ | ((in[17 + inpos] & 16383L) << (19 - 14));
+ out[58 + outpos] = ((in[17 + inpos] >>> 14) & 524287L);
+ out[59 + outpos] = ((in[17 + inpos] >>> 33) & 524287L);
+ out[60 + outpos] = (in[17 + inpos] >>> 52)
+ | ((in[18 + inpos] & 127L) << (19 - 7));
+ out[61 + outpos] = ((in[18 + inpos] >>> 7) & 524287L);
+ out[62 + outpos] = ((in[18 + inpos] >>> 26) & 524287L);
+ out[63 + outpos] = (in[18 + inpos] >>> 45);
+ }
+
+ protected static void fastunpack20(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 1048575L);
+ out[1 + outpos] = ((in[inpos] >>> 20) & 1048575L);
+ out[2 + outpos] = ((in[inpos] >>> 40) & 1048575L);
+ out[3 + outpos] = (in[inpos] >>> 60)
+ | ((in[1 + inpos] & 65535L) << (20 - 16));
+ out[4 + outpos] = ((in[1 + inpos] >>> 16) & 1048575L);
+ out[5 + outpos] = ((in[1 + inpos] >>> 36) & 1048575L);
+ out[6 + outpos] = (in[1 + inpos] >>> 56)
+ | ((in[2 + inpos] & 4095L) << (20 - 12));
+ out[7 + outpos] = ((in[2 + inpos] >>> 12) & 1048575L);
+ out[8 + outpos] = ((in[2 + inpos] >>> 32) & 1048575L);
+ out[9 + outpos] = (in[2 + inpos] >>> 52)
+ | ((in[3 + inpos] & 255L) << (20 - 8));
+ out[10 + outpos] = ((in[3 + inpos] >>> 8) & 1048575L);
+ out[11 + outpos] = ((in[3 + inpos] >>> 28) & 1048575L);
+ out[12 + outpos] = (in[3 + inpos] >>> 48)
+ | ((in[4 + inpos] & 15L) << (20 - 4));
+ out[13 + outpos] = ((in[4 + inpos] >>> 4) & 1048575L);
+ out[14 + outpos] = ((in[4 + inpos] >>> 24) & 1048575L);
+ out[15 + outpos] = (in[4 + inpos] >>> 44);
+ out[16 + outpos] = (in[5 + inpos] & 1048575L);
+ out[17 + outpos] = ((in[5 + inpos] >>> 20) & 1048575L);
+ out[18 + outpos] = ((in[5 + inpos] >>> 40) & 1048575L);
+ out[19 + outpos] = (in[5 + inpos] >>> 60)
+ | ((in[6 + inpos] & 65535L) << (20 - 16));
+ out[20 + outpos] = ((in[6 + inpos] >>> 16) & 1048575L);
+ out[21 + outpos] = ((in[6 + inpos] >>> 36) & 1048575L);
+ out[22 + outpos] = (in[6 + inpos] >>> 56)
+ | ((in[7 + inpos] & 4095L) << (20 - 12));
+ out[23 + outpos] = ((in[7 + inpos] >>> 12) & 1048575L);
+ out[24 + outpos] = ((in[7 + inpos] >>> 32) & 1048575L);
+ out[25 + outpos] = (in[7 + inpos] >>> 52)
+ | ((in[8 + inpos] & 255L) << (20 - 8));
+ out[26 + outpos] = ((in[8 + inpos] >>> 8) & 1048575L);
+ out[27 + outpos] = ((in[8 + inpos] >>> 28) & 1048575L);
+ out[28 + outpos] = (in[8 + inpos] >>> 48)
+ | ((in[9 + inpos] & 15L) << (20 - 4));
+ out[29 + outpos] = ((in[9 + inpos] >>> 4) & 1048575L);
+ out[30 + outpos] = ((in[9 + inpos] >>> 24) & 1048575L);
+ out[31 + outpos] = (in[9 + inpos] >>> 44);
+ out[32 + outpos] = (in[10 + inpos] & 1048575L);
+ out[33 + outpos] = ((in[10 + inpos] >>> 20) & 1048575L);
+ out[34 + outpos] = ((in[10 + inpos] >>> 40) & 1048575L);
+ out[35 + outpos] = (in[10 + inpos] >>> 60)
+ | ((in[11 + inpos] & 65535L) << (20 - 16));
+ out[36 + outpos] = ((in[11 + inpos] >>> 16) & 1048575L);
+ out[37 + outpos] = ((in[11 + inpos] >>> 36) & 1048575L);
+ out[38 + outpos] = (in[11 + inpos] >>> 56)
+ | ((in[12 + inpos] & 4095L) << (20 - 12));
+ out[39 + outpos] = ((in[12 + inpos] >>> 12) & 1048575L);
+ out[40 + outpos] = ((in[12 + inpos] >>> 32) & 1048575L);
+ out[41 + outpos] = (in[12 + inpos] >>> 52)
+ | ((in[13 + inpos] & 255L) << (20 - 8));
+ out[42 + outpos] = ((in[13 + inpos] >>> 8) & 1048575L);
+ out[43 + outpos] = ((in[13 + inpos] >>> 28) & 1048575L);
+ out[44 + outpos] = (in[13 + inpos] >>> 48)
+ | ((in[14 + inpos] & 15L) << (20 - 4));
+ out[45 + outpos] = ((in[14 + inpos] >>> 4) & 1048575L);
+ out[46 + outpos] = ((in[14 + inpos] >>> 24) & 1048575L);
+ out[47 + outpos] = (in[14 + inpos] >>> 44);
+ out[48 + outpos] = (in[15 + inpos] & 1048575L);
+ out[49 + outpos] = ((in[15 + inpos] >>> 20) & 1048575L);
+ out[50 + outpos] = ((in[15 + inpos] >>> 40) & 1048575L);
+ out[51 + outpos] = (in[15 + inpos] >>> 60)
+ | ((in[16 + inpos] & 65535L) << (20 - 16));
+ out[52 + outpos] = ((in[16 + inpos] >>> 16) & 1048575L);
+ out[53 + outpos] = ((in[16 + inpos] >>> 36) & 1048575L);
+ out[54 + outpos] = (in[16 + inpos] >>> 56)
+ | ((in[17 + inpos] & 4095L) << (20 - 12));
+ out[55 + outpos] = ((in[17 + inpos] >>> 12) & 1048575L);
+ out[56 + outpos] = ((in[17 + inpos] >>> 32) & 1048575L);
+ out[57 + outpos] = (in[17 + inpos] >>> 52)
+ | ((in[18 + inpos] & 255L) << (20 - 8));
+ out[58 + outpos] = ((in[18 + inpos] >>> 8) & 1048575L);
+ out[59 + outpos] = ((in[18 + inpos] >>> 28) & 1048575L);
+ out[60 + outpos] = (in[18 + inpos] >>> 48)
+ | ((in[19 + inpos] & 15L) << (20 - 4));
+ out[61 + outpos] = ((in[19 + inpos] >>> 4) & 1048575L);
+ out[62 + outpos] = ((in[19 + inpos] >>> 24) & 1048575L);
+ out[63 + outpos] = (in[19 + inpos] >>> 44);
+ }
+
+ protected static void fastunpack21(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 2097151L);
+ out[1 + outpos] = ((in[inpos] >>> 21) & 2097151L);
+ out[2 + outpos] = ((in[inpos] >>> 42) & 2097151L);
+ out[3 + outpos] = (in[inpos] >>> 63)
+ | ((in[1 + inpos] & 1048575L) << (21 - 20));
+ out[4 + outpos] = ((in[1 + inpos] >>> 20) & 2097151L);
+ out[5 + outpos] = ((in[1 + inpos] >>> 41) & 2097151L);
+ out[6 + outpos] = (in[1 + inpos] >>> 62)
+ | ((in[2 + inpos] & 524287L) << (21 - 19));
+ out[7 + outpos] = ((in[2 + inpos] >>> 19) & 2097151L);
+ out[8 + outpos] = ((in[2 + inpos] >>> 40) & 2097151L);
+ out[9 + outpos] = (in[2 + inpos] >>> 61)
+ | ((in[3 + inpos] & 262143L) << (21 - 18));
+ out[10 + outpos] = ((in[3 + inpos] >>> 18) & 2097151L);
+ out[11 + outpos] = ((in[3 + inpos] >>> 39) & 2097151L);
+ out[12 + outpos] = (in[3 + inpos] >>> 60)
+ | ((in[4 + inpos] & 131071L) << (21 - 17));
+ out[13 + outpos] = ((in[4 + inpos] >>> 17) & 2097151L);
+ out[14 + outpos] = ((in[4 + inpos] >>> 38) & 2097151L);
+ out[15 + outpos] = (in[4 + inpos] >>> 59)
+ | ((in[5 + inpos] & 65535L) << (21 - 16));
+ out[16 + outpos] = ((in[5 + inpos] >>> 16) & 2097151L);
+ out[17 + outpos] = ((in[5 + inpos] >>> 37) & 2097151L);
+ out[18 + outpos] = (in[5 + inpos] >>> 58)
+ | ((in[6 + inpos] & 32767L) << (21 - 15));
+ out[19 + outpos] = ((in[6 + inpos] >>> 15) & 2097151L);
+ out[20 + outpos] = ((in[6 + inpos] >>> 36) & 2097151L);
+ out[21 + outpos] = (in[6 + inpos] >>> 57)
+ | ((in[7 + inpos] & 16383L) << (21 - 14));
+ out[22 + outpos] = ((in[7 + inpos] >>> 14) & 2097151L);
+ out[23 + outpos] = ((in[7 + inpos] >>> 35) & 2097151L);
+ out[24 + outpos] = (in[7 + inpos] >>> 56)
+ | ((in[8 + inpos] & 8191L) << (21 - 13));
+ out[25 + outpos] = ((in[8 + inpos] >>> 13) & 2097151L);
+ out[26 + outpos] = ((in[8 + inpos] >>> 34) & 2097151L);
+ out[27 + outpos] = (in[8 + inpos] >>> 55)
+ | ((in[9 + inpos] & 4095L) << (21 - 12));
+ out[28 + outpos] = ((in[9 + inpos] >>> 12) & 2097151L);
+ out[29 + outpos] = ((in[9 + inpos] >>> 33) & 2097151L);
+ out[30 + outpos] = (in[9 + inpos] >>> 54)
+ | ((in[10 + inpos] & 2047L) << (21 - 11));
+ out[31 + outpos] = ((in[10 + inpos] >>> 11) & 2097151L);
+ out[32 + outpos] = ((in[10 + inpos] >>> 32) & 2097151L);
+ out[33 + outpos] = (in[10 + inpos] >>> 53)
+ | ((in[11 + inpos] & 1023L) << (21 - 10));
+ out[34 + outpos] = ((in[11 + inpos] >>> 10) & 2097151L);
+ out[35 + outpos] = ((in[11 + inpos] >>> 31) & 2097151L);
+ out[36 + outpos] = (in[11 + inpos] >>> 52)
+ | ((in[12 + inpos] & 511L) << (21 - 9));
+ out[37 + outpos] = ((in[12 + inpos] >>> 9) & 2097151L);
+ out[38 + outpos] = ((in[12 + inpos] >>> 30) & 2097151L);
+ out[39 + outpos] = (in[12 + inpos] >>> 51)
+ | ((in[13 + inpos] & 255L) << (21 - 8));
+ out[40 + outpos] = ((in[13 + inpos] >>> 8) & 2097151L);
+ out[41 + outpos] = ((in[13 + inpos] >>> 29) & 2097151L);
+ out[42 + outpos] = (in[13 + inpos] >>> 50)
+ | ((in[14 + inpos] & 127L) << (21 - 7));
+ out[43 + outpos] = ((in[14 + inpos] >>> 7) & 2097151L);
+ out[44 + outpos] = ((in[14 + inpos] >>> 28) & 2097151L);
+ out[45 + outpos] = (in[14 + inpos] >>> 49)
+ | ((in[15 + inpos] & 63L) << (21 - 6));
+ out[46 + outpos] = ((in[15 + inpos] >>> 6) & 2097151L);
+ out[47 + outpos] = ((in[15 + inpos] >>> 27) & 2097151L);
+ out[48 + outpos] = (in[15 + inpos] >>> 48)
+ | ((in[16 + inpos] & 31L) << (21 - 5));
+ out[49 + outpos] = ((in[16 + inpos] >>> 5) & 2097151L);
+ out[50 + outpos] = ((in[16 + inpos] >>> 26) & 2097151L);
+ out[51 + outpos] = (in[16 + inpos] >>> 47)
+ | ((in[17 + inpos] & 15L) << (21 - 4));
+ out[52 + outpos] = ((in[17 + inpos] >>> 4) & 2097151L);
+ out[53 + outpos] = ((in[17 + inpos] >>> 25) & 2097151L);
+ out[54 + outpos] = (in[17 + inpos] >>> 46)
+ | ((in[18 + inpos] & 7L) << (21 - 3));
+ out[55 + outpos] = ((in[18 + inpos] >>> 3) & 2097151L);
+ out[56 + outpos] = ((in[18 + inpos] >>> 24) & 2097151L);
+ out[57 + outpos] = (in[18 + inpos] >>> 45)
+ | ((in[19 + inpos] & 3L) << (21 - 2));
+ out[58 + outpos] = ((in[19 + inpos] >>> 2) & 2097151L);
+ out[59 + outpos] = ((in[19 + inpos] >>> 23) & 2097151L);
+ out[60 + outpos] = (in[19 + inpos] >>> 44)
+ | ((in[20 + inpos] & 1L) << (21 - 1));
+ out[61 + outpos] = ((in[20 + inpos] >>> 1) & 2097151L);
+ out[62 + outpos] = ((in[20 + inpos] >>> 22) & 2097151L);
+ out[63 + outpos] = (in[20 + inpos] >>> 43);
+ }
+
+ protected static void fastunpack22(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 4194303L);
+ out[1 + outpos] = ((in[inpos] >>> 22) & 4194303L);
+ out[2 + outpos] = (in[inpos] >>> 44)
+ | ((in[1 + inpos] & 3L) << (22 - 2));
+ out[3 + outpos] = ((in[1 + inpos] >>> 2) & 4194303L);
+ out[4 + outpos] = ((in[1 + inpos] >>> 24) & 4194303L);
+ out[5 + outpos] = (in[1 + inpos] >>> 46)
+ | ((in[2 + inpos] & 15L) << (22 - 4));
+ out[6 + outpos] = ((in[2 + inpos] >>> 4) & 4194303L);
+ out[7 + outpos] = ((in[2 + inpos] >>> 26) & 4194303L);
+ out[8 + outpos] = (in[2 + inpos] >>> 48)
+ | ((in[3 + inpos] & 63L) << (22 - 6));
+ out[9 + outpos] = ((in[3 + inpos] >>> 6) & 4194303L);
+ out[10 + outpos] = ((in[3 + inpos] >>> 28) & 4194303L);
+ out[11 + outpos] = (in[3 + inpos] >>> 50)
+ | ((in[4 + inpos] & 255L) << (22 - 8));
+ out[12 + outpos] = ((in[4 + inpos] >>> 8) & 4194303L);
+ out[13 + outpos] = ((in[4 + inpos] >>> 30) & 4194303L);
+ out[14 + outpos] = (in[4 + inpos] >>> 52)
+ | ((in[5 + inpos] & 1023L) << (22 - 10));
+ out[15 + outpos] = ((in[5 + inpos] >>> 10) & 4194303L);
+ out[16 + outpos] = ((in[5 + inpos] >>> 32) & 4194303L);
+ out[17 + outpos] = (in[5 + inpos] >>> 54)
+ | ((in[6 + inpos] & 4095L) << (22 - 12));
+ out[18 + outpos] = ((in[6 + inpos] >>> 12) & 4194303L);
+ out[19 + outpos] = ((in[6 + inpos] >>> 34) & 4194303L);
+ out[20 + outpos] = (in[6 + inpos] >>> 56)
+ | ((in[7 + inpos] & 16383L) << (22 - 14));
+ out[21 + outpos] = ((in[7 + inpos] >>> 14) & 4194303L);
+ out[22 + outpos] = ((in[7 + inpos] >>> 36) & 4194303L);
+ out[23 + outpos] = (in[7 + inpos] >>> 58)
+ | ((in[8 + inpos] & 65535L) << (22 - 16));
+ out[24 + outpos] = ((in[8 + inpos] >>> 16) & 4194303L);
+ out[25 + outpos] = ((in[8 + inpos] >>> 38) & 4194303L);
+ out[26 + outpos] = (in[8 + inpos] >>> 60)
+ | ((in[9 + inpos] & 262143L) << (22 - 18));
+ out[27 + outpos] = ((in[9 + inpos] >>> 18) & 4194303L);
+ out[28 + outpos] = ((in[9 + inpos] >>> 40) & 4194303L);
+ out[29 + outpos] = (in[9 + inpos] >>> 62)
+ | ((in[10 + inpos] & 1048575L) << (22 - 20));
+ out[30 + outpos] = ((in[10 + inpos] >>> 20) & 4194303L);
+ out[31 + outpos] = (in[10 + inpos] >>> 42);
+ out[32 + outpos] = (in[11 + inpos] & 4194303L);
+ out[33 + outpos] = ((in[11 + inpos] >>> 22) & 4194303L);
+ out[34 + outpos] = (in[11 + inpos] >>> 44)
+ | ((in[12 + inpos] & 3L) << (22 - 2));
+ out[35 + outpos] = ((in[12 + inpos] >>> 2) & 4194303L);
+ out[36 + outpos] = ((in[12 + inpos] >>> 24) & 4194303L);
+ out[37 + outpos] = (in[12 + inpos] >>> 46)
+ | ((in[13 + inpos] & 15L) << (22 - 4));
+ out[38 + outpos] = ((in[13 + inpos] >>> 4) & 4194303L);
+ out[39 + outpos] = ((in[13 + inpos] >>> 26) & 4194303L);
+ out[40 + outpos] = (in[13 + inpos] >>> 48)
+ | ((in[14 + inpos] & 63L) << (22 - 6));
+ out[41 + outpos] = ((in[14 + inpos] >>> 6) & 4194303L);
+ out[42 + outpos] = ((in[14 + inpos] >>> 28) & 4194303L);
+ out[43 + outpos] = (in[14 + inpos] >>> 50)
+ | ((in[15 + inpos] & 255L) << (22 - 8));
+ out[44 + outpos] = ((in[15 + inpos] >>> 8) & 4194303L);
+ out[45 + outpos] = ((in[15 + inpos] >>> 30) & 4194303L);
+ out[46 + outpos] = (in[15 + inpos] >>> 52)
+ | ((in[16 + inpos] & 1023L) << (22 - 10));
+ out[47 + outpos] = ((in[16 + inpos] >>> 10) & 4194303L);
+ out[48 + outpos] = ((in[16 + inpos] >>> 32) & 4194303L);
+ out[49 + outpos] = (in[16 + inpos] >>> 54)
+ | ((in[17 + inpos] & 4095L) << (22 - 12));
+ out[50 + outpos] = ((in[17 + inpos] >>> 12) & 4194303L);
+ out[51 + outpos] = ((in[17 + inpos] >>> 34) & 4194303L);
+ out[52 + outpos] = (in[17 + inpos] >>> 56)
+ | ((in[18 + inpos] & 16383L) << (22 - 14));
+ out[53 + outpos] = ((in[18 + inpos] >>> 14) & 4194303L);
+ out[54 + outpos] = ((in[18 + inpos] >>> 36) & 4194303L);
+ out[55 + outpos] = (in[18 + inpos] >>> 58)
+ | ((in[19 + inpos] & 65535L) << (22 - 16));
+ out[56 + outpos] = ((in[19 + inpos] >>> 16) & 4194303L);
+ out[57 + outpos] = ((in[19 + inpos] >>> 38) & 4194303L);
+ out[58 + outpos] = (in[19 + inpos] >>> 60)
+ | ((in[20 + inpos] & 262143L) << (22 - 18));
+ out[59 + outpos] = ((in[20 + inpos] >>> 18) & 4194303L);
+ out[60 + outpos] = ((in[20 + inpos] >>> 40) & 4194303L);
+ out[61 + outpos] = (in[20 + inpos] >>> 62)
+ | ((in[21 + inpos] & 1048575L) << (22 - 20));
+ out[62 + outpos] = ((in[21 + inpos] >>> 20) & 4194303L);
+ out[63 + outpos] = (in[21 + inpos] >>> 42);
+ }
+
+ protected static void fastunpack23(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 8388607L);
+ out[1 + outpos] = ((in[inpos] >>> 23) & 8388607L);
+ out[2 + outpos] = (in[inpos] >>> 46)
+ | ((in[1 + inpos] & 31L) << (23 - 5));
+ out[3 + outpos] = ((in[1 + inpos] >>> 5) & 8388607L);
+ out[4 + outpos] = ((in[1 + inpos] >>> 28) & 8388607L);
+ out[5 + outpos] = (in[1 + inpos] >>> 51)
+ | ((in[2 + inpos] & 1023L) << (23 - 10));
+ out[6 + outpos] = ((in[2 + inpos] >>> 10) & 8388607L);
+ out[7 + outpos] = ((in[2 + inpos] >>> 33) & 8388607L);
+ out[8 + outpos] = (in[2 + inpos] >>> 56)
+ | ((in[3 + inpos] & 32767L) << (23 - 15));
+ out[9 + outpos] = ((in[3 + inpos] >>> 15) & 8388607L);
+ out[10 + outpos] = ((in[3 + inpos] >>> 38) & 8388607L);
+ out[11 + outpos] = (in[3 + inpos] >>> 61)
+ | ((in[4 + inpos] & 1048575L) << (23 - 20));
+ out[12 + outpos] = ((in[4 + inpos] >>> 20) & 8388607L);
+ out[13 + outpos] = (in[4 + inpos] >>> 43)
+ | ((in[5 + inpos] & 3L) << (23 - 2));
+ out[14 + outpos] = ((in[5 + inpos] >>> 2) & 8388607L);
+ out[15 + outpos] = ((in[5 + inpos] >>> 25) & 8388607L);
+ out[16 + outpos] = (in[5 + inpos] >>> 48)
+ | ((in[6 + inpos] & 127L) << (23 - 7));
+ out[17 + outpos] = ((in[6 + inpos] >>> 7) & 8388607L);
+ out[18 + outpos] = ((in[6 + inpos] >>> 30) & 8388607L);
+ out[19 + outpos] = (in[6 + inpos] >>> 53)
+ | ((in[7 + inpos] & 4095L) << (23 - 12));
+ out[20 + outpos] = ((in[7 + inpos] >>> 12) & 8388607L);
+ out[21 + outpos] = ((in[7 + inpos] >>> 35) & 8388607L);
+ out[22 + outpos] = (in[7 + inpos] >>> 58)
+ | ((in[8 + inpos] & 131071L) << (23 - 17));
+ out[23 + outpos] = ((in[8 + inpos] >>> 17) & 8388607L);
+ out[24 + outpos] = ((in[8 + inpos] >>> 40) & 8388607L);
+ out[25 + outpos] = (in[8 + inpos] >>> 63)
+ | ((in[9 + inpos] & 4194303L) << (23 - 22));
+ out[26 + outpos] = ((in[9 + inpos] >>> 22) & 8388607L);
+ out[27 + outpos] = (in[9 + inpos] >>> 45)
+ | ((in[10 + inpos] & 15L) << (23 - 4));
+ out[28 + outpos] = ((in[10 + inpos] >>> 4) & 8388607L);
+ out[29 + outpos] = ((in[10 + inpos] >>> 27) & 8388607L);
+ out[30 + outpos] = (in[10 + inpos] >>> 50)
+ | ((in[11 + inpos] & 511L) << (23 - 9));
+ out[31 + outpos] = ((in[11 + inpos] >>> 9) & 8388607L);
+ out[32 + outpos] = ((in[11 + inpos] >>> 32) & 8388607L);
+ out[33 + outpos] = (in[11 + inpos] >>> 55)
+ | ((in[12 + inpos] & 16383L) << (23 - 14));
+ out[34 + outpos] = ((in[12 + inpos] >>> 14) & 8388607L);
+ out[35 + outpos] = ((in[12 + inpos] >>> 37) & 8388607L);
+ out[36 + outpos] = (in[12 + inpos] >>> 60)
+ | ((in[13 + inpos] & 524287L) << (23 - 19));
+ out[37 + outpos] = ((in[13 + inpos] >>> 19) & 8388607L);
+ out[38 + outpos] = (in[13 + inpos] >>> 42)
+ | ((in[14 + inpos] & 1L) << (23 - 1));
+ out[39 + outpos] = ((in[14 + inpos] >>> 1) & 8388607L);
+ out[40 + outpos] = ((in[14 + inpos] >>> 24) & 8388607L);
+ out[41 + outpos] = (in[14 + inpos] >>> 47)
+ | ((in[15 + inpos] & 63L) << (23 - 6));
+ out[42 + outpos] = ((in[15 + inpos] >>> 6) & 8388607L);
+ out[43 + outpos] = ((in[15 + inpos] >>> 29) & 8388607L);
+ out[44 + outpos] = (in[15 + inpos] >>> 52)
+ | ((in[16 + inpos] & 2047L) << (23 - 11));
+ out[45 + outpos] = ((in[16 + inpos] >>> 11) & 8388607L);
+ out[46 + outpos] = ((in[16 + inpos] >>> 34) & 8388607L);
+ out[47 + outpos] = (in[16 + inpos] >>> 57)
+ | ((in[17 + inpos] & 65535L) << (23 - 16));
+ out[48 + outpos] = ((in[17 + inpos] >>> 16) & 8388607L);
+ out[49 + outpos] = ((in[17 + inpos] >>> 39) & 8388607L);
+ out[50 + outpos] = (in[17 + inpos] >>> 62)
+ | ((in[18 + inpos] & 2097151L) << (23 - 21));
+ out[51 + outpos] = ((in[18 + inpos] >>> 21) & 8388607L);
+ out[52 + outpos] = (in[18 + inpos] >>> 44)
+ | ((in[19 + inpos] & 7L) << (23 - 3));
+ out[53 + outpos] = ((in[19 + inpos] >>> 3) & 8388607L);
+ out[54 + outpos] = ((in[19 + inpos] >>> 26) & 8388607L);
+ out[55 + outpos] = (in[19 + inpos] >>> 49)
+ | ((in[20 + inpos] & 255L) << (23 - 8));
+ out[56 + outpos] = ((in[20 + inpos] >>> 8) & 8388607L);
+ out[57 + outpos] = ((in[20 + inpos] >>> 31) & 8388607L);
+ out[58 + outpos] = (in[20 + inpos] >>> 54)
+ | ((in[21 + inpos] & 8191L) << (23 - 13));
+ out[59 + outpos] = ((in[21 + inpos] >>> 13) & 8388607L);
+ out[60 + outpos] = ((in[21 + inpos] >>> 36) & 8388607L);
+ out[61 + outpos] = (in[21 + inpos] >>> 59)
+ | ((in[22 + inpos] & 262143L) << (23 - 18));
+ out[62 + outpos] = ((in[22 + inpos] >>> 18) & 8388607L);
+ out[63 + outpos] = (in[22 + inpos] >>> 41);
+ }
+
+ protected static void fastunpack24(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 16777215L);
+ out[1 + outpos] = ((in[inpos] >>> 24) & 16777215L);
+ out[2 + outpos] = (in[inpos] >>> 48)
+ | ((in[1 + inpos] & 255L) << (24 - 8));
+ out[3 + outpos] = ((in[1 + inpos] >>> 8) & 16777215L);
+ out[4 + outpos] = ((in[1 + inpos] >>> 32) & 16777215L);
+ out[5 + outpos] = (in[1 + inpos] >>> 56)
+ | ((in[2 + inpos] & 65535L) << (24 - 16));
+ out[6 + outpos] = ((in[2 + inpos] >>> 16) & 16777215L);
+ out[7 + outpos] = (in[2 + inpos] >>> 40);
+ out[8 + outpos] = (in[3 + inpos] & 16777215L);
+ out[9 + outpos] = ((in[3 + inpos] >>> 24) & 16777215L);
+ out[10 + outpos] = (in[3 + inpos] >>> 48)
+ | ((in[4 + inpos] & 255L) << (24 - 8));
+ out[11 + outpos] = ((in[4 + inpos] >>> 8) & 16777215L);
+ out[12 + outpos] = ((in[4 + inpos] >>> 32) & 16777215L);
+ out[13 + outpos] = (in[4 + inpos] >>> 56)
+ | ((in[5 + inpos] & 65535L) << (24 - 16));
+ out[14 + outpos] = ((in[5 + inpos] >>> 16) & 16777215L);
+ out[15 + outpos] = (in[5 + inpos] >>> 40);
+ out[16 + outpos] = (in[6 + inpos] & 16777215L);
+ out[17 + outpos] = ((in[6 + inpos] >>> 24) & 16777215L);
+ out[18 + outpos] = (in[6 + inpos] >>> 48)
+ | ((in[7 + inpos] & 255L) << (24 - 8));
+ out[19 + outpos] = ((in[7 + inpos] >>> 8) & 16777215L);
+ out[20 + outpos] = ((in[7 + inpos] >>> 32) & 16777215L);
+ out[21 + outpos] = (in[7 + inpos] >>> 56)
+ | ((in[8 + inpos] & 65535L) << (24 - 16));
+ out[22 + outpos] = ((in[8 + inpos] >>> 16) & 16777215L);
+ out[23 + outpos] = (in[8 + inpos] >>> 40);
+ out[24 + outpos] = (in[9 + inpos] & 16777215L);
+ out[25 + outpos] = ((in[9 + inpos] >>> 24) & 16777215L);
+ out[26 + outpos] = (in[9 + inpos] >>> 48)
+ | ((in[10 + inpos] & 255L) << (24 - 8));
+ out[27 + outpos] = ((in[10 + inpos] >>> 8) & 16777215L);
+ out[28 + outpos] = ((in[10 + inpos] >>> 32) & 16777215L);
+ out[29 + outpos] = (in[10 + inpos] >>> 56)
+ | ((in[11 + inpos] & 65535L) << (24 - 16));
+ out[30 + outpos] = ((in[11 + inpos] >>> 16) & 16777215L);
+ out[31 + outpos] = (in[11 + inpos] >>> 40);
+ out[32 + outpos] = (in[12 + inpos] & 16777215L);
+ out[33 + outpos] = ((in[12 + inpos] >>> 24) & 16777215L);
+ out[34 + outpos] = (in[12 + inpos] >>> 48)
+ | ((in[13 + inpos] & 255L) << (24 - 8));
+ out[35 + outpos] = ((in[13 + inpos] >>> 8) & 16777215L);
+ out[36 + outpos] = ((in[13 + inpos] >>> 32) & 16777215L);
+ out[37 + outpos] = (in[13 + inpos] >>> 56)
+ | ((in[14 + inpos] & 65535L) << (24 - 16));
+ out[38 + outpos] = ((in[14 + inpos] >>> 16) & 16777215L);
+ out[39 + outpos] = (in[14 + inpos] >>> 40);
+ out[40 + outpos] = (in[15 + inpos] & 16777215L);
+ out[41 + outpos] = ((in[15 + inpos] >>> 24) & 16777215L);
+ out[42 + outpos] = (in[15 + inpos] >>> 48)
+ | ((in[16 + inpos] & 255L) << (24 - 8));
+ out[43 + outpos] = ((in[16 + inpos] >>> 8) & 16777215L);
+ out[44 + outpos] = ((in[16 + inpos] >>> 32) & 16777215L);
+ out[45 + outpos] = (in[16 + inpos] >>> 56)
+ | ((in[17 + inpos] & 65535L) << (24 - 16));
+ out[46 + outpos] = ((in[17 + inpos] >>> 16) & 16777215L);
+ out[47 + outpos] = (in[17 + inpos] >>> 40);
+ out[48 + outpos] = (in[18 + inpos] & 16777215L);
+ out[49 + outpos] = ((in[18 + inpos] >>> 24) & 16777215L);
+ out[50 + outpos] = (in[18 + inpos] >>> 48)
+ | ((in[19 + inpos] & 255L) << (24 - 8));
+ out[51 + outpos] = ((in[19 + inpos] >>> 8) & 16777215L);
+ out[52 + outpos] = ((in[19 + inpos] >>> 32) & 16777215L);
+ out[53 + outpos] = (in[19 + inpos] >>> 56)
+ | ((in[20 + inpos] & 65535L) << (24 - 16));
+ out[54 + outpos] = ((in[20 + inpos] >>> 16) & 16777215L);
+ out[55 + outpos] = (in[20 + inpos] >>> 40);
+ out[56 + outpos] = (in[21 + inpos] & 16777215L);
+ out[57 + outpos] = ((in[21 + inpos] >>> 24) & 16777215L);
+ out[58 + outpos] = (in[21 + inpos] >>> 48)
+ | ((in[22 + inpos] & 255L) << (24 - 8));
+ out[59 + outpos] = ((in[22 + inpos] >>> 8) & 16777215L);
+ out[60 + outpos] = ((in[22 + inpos] >>> 32) & 16777215L);
+ out[61 + outpos] = (in[22 + inpos] >>> 56)
+ | ((in[23 + inpos] & 65535L) << (24 - 16));
+ out[62 + outpos] = ((in[23 + inpos] >>> 16) & 16777215L);
+ out[63 + outpos] = (in[23 + inpos] >>> 40);
+ }
+
+ protected static void fastunpack25(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 33554431L);
+ out[1 + outpos] = ((in[inpos] >>> 25) & 33554431L);
+ out[2 + outpos] = (in[inpos] >>> 50)
+ | ((in[1 + inpos] & 2047L) << (25 - 11));
+ out[3 + outpos] = ((in[1 + inpos] >>> 11) & 33554431L);
+ out[4 + outpos] = ((in[1 + inpos] >>> 36) & 33554431L);
+ out[5 + outpos] = (in[1 + inpos] >>> 61)
+ | ((in[2 + inpos] & 4194303L) << (25 - 22));
+ out[6 + outpos] = ((in[2 + inpos] >>> 22) & 33554431L);
+ out[7 + outpos] = (in[2 + inpos] >>> 47)
+ | ((in[3 + inpos] & 255L) << (25 - 8));
+ out[8 + outpos] = ((in[3 + inpos] >>> 8) & 33554431L);
+ out[9 + outpos] = ((in[3 + inpos] >>> 33) & 33554431L);
+ out[10 + outpos] = (in[3 + inpos] >>> 58)
+ | ((in[4 + inpos] & 524287L) << (25 - 19));
+ out[11 + outpos] = ((in[4 + inpos] >>> 19) & 33554431L);
+ out[12 + outpos] = (in[4 + inpos] >>> 44)
+ | ((in[5 + inpos] & 31L) << (25 - 5));
+ out[13 + outpos] = ((in[5 + inpos] >>> 5) & 33554431L);
+ out[14 + outpos] = ((in[5 + inpos] >>> 30) & 33554431L);
+ out[15 + outpos] = (in[5 + inpos] >>> 55)
+ | ((in[6 + inpos] & 65535L) << (25 - 16));
+ out[16 + outpos] = ((in[6 + inpos] >>> 16) & 33554431L);
+ out[17 + outpos] = (in[6 + inpos] >>> 41)
+ | ((in[7 + inpos] & 3L) << (25 - 2));
+ out[18 + outpos] = ((in[7 + inpos] >>> 2) & 33554431L);
+ out[19 + outpos] = ((in[7 + inpos] >>> 27) & 33554431L);
+ out[20 + outpos] = (in[7 + inpos] >>> 52)
+ | ((in[8 + inpos] & 8191L) << (25 - 13));
+ out[21 + outpos] = ((in[8 + inpos] >>> 13) & 33554431L);
+ out[22 + outpos] = ((in[8 + inpos] >>> 38) & 33554431L);
+ out[23 + outpos] = (in[8 + inpos] >>> 63)
+ | ((in[9 + inpos] & 16777215L) << (25 - 24));
+ out[24 + outpos] = ((in[9 + inpos] >>> 24) & 33554431L);
+ out[25 + outpos] = (in[9 + inpos] >>> 49)
+ | ((in[10 + inpos] & 1023L) << (25 - 10));
+ out[26 + outpos] = ((in[10 + inpos] >>> 10) & 33554431L);
+ out[27 + outpos] = ((in[10 + inpos] >>> 35) & 33554431L);
+ out[28 + outpos] = (in[10 + inpos] >>> 60)
+ | ((in[11 + inpos] & 2097151L) << (25 - 21));
+ out[29 + outpos] = ((in[11 + inpos] >>> 21) & 33554431L);
+ out[30 + outpos] = (in[11 + inpos] >>> 46)
+ | ((in[12 + inpos] & 127L) << (25 - 7));
+ out[31 + outpos] = ((in[12 + inpos] >>> 7) & 33554431L);
+ out[32 + outpos] = ((in[12 + inpos] >>> 32) & 33554431L);
+ out[33 + outpos] = (in[12 + inpos] >>> 57)
+ | ((in[13 + inpos] & 262143L) << (25 - 18));
+ out[34 + outpos] = ((in[13 + inpos] >>> 18) & 33554431L);
+ out[35 + outpos] = (in[13 + inpos] >>> 43)
+ | ((in[14 + inpos] & 15L) << (25 - 4));
+ out[36 + outpos] = ((in[14 + inpos] >>> 4) & 33554431L);
+ out[37 + outpos] = ((in[14 + inpos] >>> 29) & 33554431L);
+ out[38 + outpos] = (in[14 + inpos] >>> 54)
+ | ((in[15 + inpos] & 32767L) << (25 - 15));
+ out[39 + outpos] = ((in[15 + inpos] >>> 15) & 33554431L);
+ out[40 + outpos] = (in[15 + inpos] >>> 40)
+ | ((in[16 + inpos] & 1L) << (25 - 1));
+ out[41 + outpos] = ((in[16 + inpos] >>> 1) & 33554431L);
+ out[42 + outpos] = ((in[16 + inpos] >>> 26) & 33554431L);
+ out[43 + outpos] = (in[16 + inpos] >>> 51)
+ | ((in[17 + inpos] & 4095L) << (25 - 12));
+ out[44 + outpos] = ((in[17 + inpos] >>> 12) & 33554431L);
+ out[45 + outpos] = ((in[17 + inpos] >>> 37) & 33554431L);
+ out[46 + outpos] = (in[17 + inpos] >>> 62)
+ | ((in[18 + inpos] & 8388607L) << (25 - 23));
+ out[47 + outpos] = ((in[18 + inpos] >>> 23) & 33554431L);
+ out[48 + outpos] = (in[18 + inpos] >>> 48)
+ | ((in[19 + inpos] & 511L) << (25 - 9));
+ out[49 + outpos] = ((in[19 + inpos] >>> 9) & 33554431L);
+ out[50 + outpos] = ((in[19 + inpos] >>> 34) & 33554431L);
+ out[51 + outpos] = (in[19 + inpos] >>> 59)
+ | ((in[20 + inpos] & 1048575L) << (25 - 20));
+ out[52 + outpos] = ((in[20 + inpos] >>> 20) & 33554431L);
+ out[53 + outpos] = (in[20 + inpos] >>> 45)
+ | ((in[21 + inpos] & 63L) << (25 - 6));
+ out[54 + outpos] = ((in[21 + inpos] >>> 6) & 33554431L);
+ out[55 + outpos] = ((in[21 + inpos] >>> 31) & 33554431L);
+ out[56 + outpos] = (in[21 + inpos] >>> 56)
+ | ((in[22 + inpos] & 131071L) << (25 - 17));
+ out[57 + outpos] = ((in[22 + inpos] >>> 17) & 33554431L);
+ out[58 + outpos] = (in[22 + inpos] >>> 42)
+ | ((in[23 + inpos] & 7L) << (25 - 3));
+ out[59 + outpos] = ((in[23 + inpos] >>> 3) & 33554431L);
+ out[60 + outpos] = ((in[23 + inpos] >>> 28) & 33554431L);
+ out[61 + outpos] = (in[23 + inpos] >>> 53)
+ | ((in[24 + inpos] & 16383L) << (25 - 14));
+ out[62 + outpos] = ((in[24 + inpos] >>> 14) & 33554431L);
+ out[63 + outpos] = (in[24 + inpos] >>> 39);
+ }
+
+ protected static void fastunpack26(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 67108863L);
+ out[1 + outpos] = ((in[inpos] >>> 26) & 67108863L);
+ out[2 + outpos] = (in[inpos] >>> 52)
+ | ((in[1 + inpos] & 16383L) << (26 - 14));
+ out[3 + outpos] = ((in[1 + inpos] >>> 14) & 67108863L);
+ out[4 + outpos] = (in[1 + inpos] >>> 40)
+ | ((in[2 + inpos] & 3L) << (26 - 2));
+ out[5 + outpos] = ((in[2 + inpos] >>> 2) & 67108863L);
+ out[6 + outpos] = ((in[2 + inpos] >>> 28) & 67108863L);
+ out[7 + outpos] = (in[2 + inpos] >>> 54)
+ | ((in[3 + inpos] & 65535L) << (26 - 16));
+ out[8 + outpos] = ((in[3 + inpos] >>> 16) & 67108863L);
+ out[9 + outpos] = (in[3 + inpos] >>> 42)
+ | ((in[4 + inpos] & 15L) << (26 - 4));
+ out[10 + outpos] = ((in[4 + inpos] >>> 4) & 67108863L);
+ out[11 + outpos] = ((in[4 + inpos] >>> 30) & 67108863L);
+ out[12 + outpos] = (in[4 + inpos] >>> 56)
+ | ((in[5 + inpos] & 262143L) << (26 - 18));
+ out[13 + outpos] = ((in[5 + inpos] >>> 18) & 67108863L);
+ out[14 + outpos] = (in[5 + inpos] >>> 44)
+ | ((in[6 + inpos] & 63L) << (26 - 6));
+ out[15 + outpos] = ((in[6 + inpos] >>> 6) & 67108863L);
+ out[16 + outpos] = ((in[6 + inpos] >>> 32) & 67108863L);
+ out[17 + outpos] = (in[6 + inpos] >>> 58)
+ | ((in[7 + inpos] & 1048575L) << (26 - 20));
+ out[18 + outpos] = ((in[7 + inpos] >>> 20) & 67108863L);
+ out[19 + outpos] = (in[7 + inpos] >>> 46)
+ | ((in[8 + inpos] & 255L) << (26 - 8));
+ out[20 + outpos] = ((in[8 + inpos] >>> 8) & 67108863L);
+ out[21 + outpos] = ((in[8 + inpos] >>> 34) & 67108863L);
+ out[22 + outpos] = (in[8 + inpos] >>> 60)
+ | ((in[9 + inpos] & 4194303L) << (26 - 22));
+ out[23 + outpos] = ((in[9 + inpos] >>> 22) & 67108863L);
+ out[24 + outpos] = (in[9 + inpos] >>> 48)
+ | ((in[10 + inpos] & 1023L) << (26 - 10));
+ out[25 + outpos] = ((in[10 + inpos] >>> 10) & 67108863L);
+ out[26 + outpos] = ((in[10 + inpos] >>> 36) & 67108863L);
+ out[27 + outpos] = (in[10 + inpos] >>> 62)
+ | ((in[11 + inpos] & 16777215L) << (26 - 24));
+ out[28 + outpos] = ((in[11 + inpos] >>> 24) & 67108863L);
+ out[29 + outpos] = (in[11 + inpos] >>> 50)
+ | ((in[12 + inpos] & 4095L) << (26 - 12));
+ out[30 + outpos] = ((in[12 + inpos] >>> 12) & 67108863L);
+ out[31 + outpos] = (in[12 + inpos] >>> 38);
+ out[32 + outpos] = (in[13 + inpos] & 67108863L);
+ out[33 + outpos] = ((in[13 + inpos] >>> 26) & 67108863L);
+ out[34 + outpos] = (in[13 + inpos] >>> 52)
+ | ((in[14 + inpos] & 16383L) << (26 - 14));
+ out[35 + outpos] = ((in[14 + inpos] >>> 14) & 67108863L);
+ out[36 + outpos] = (in[14 + inpos] >>> 40)
+ | ((in[15 + inpos] & 3L) << (26 - 2));
+ out[37 + outpos] = ((in[15 + inpos] >>> 2) & 67108863L);
+ out[38 + outpos] = ((in[15 + inpos] >>> 28) & 67108863L);
+ out[39 + outpos] = (in[15 + inpos] >>> 54)
+ | ((in[16 + inpos] & 65535L) << (26 - 16));
+ out[40 + outpos] = ((in[16 + inpos] >>> 16) & 67108863L);
+ out[41 + outpos] = (in[16 + inpos] >>> 42)
+ | ((in[17 + inpos] & 15L) << (26 - 4));
+ out[42 + outpos] = ((in[17 + inpos] >>> 4) & 67108863L);
+ out[43 + outpos] = ((in[17 + inpos] >>> 30) & 67108863L);
+ out[44 + outpos] = (in[17 + inpos] >>> 56)
+ | ((in[18 + inpos] & 262143L) << (26 - 18));
+ out[45 + outpos] = ((in[18 + inpos] >>> 18) & 67108863L);
+ out[46 + outpos] = (in[18 + inpos] >>> 44)
+ | ((in[19 + inpos] & 63L) << (26 - 6));
+ out[47 + outpos] = ((in[19 + inpos] >>> 6) & 67108863L);
+ out[48 + outpos] = ((in[19 + inpos] >>> 32) & 67108863L);
+ out[49 + outpos] = (in[19 + inpos] >>> 58)
+ | ((in[20 + inpos] & 1048575L) << (26 - 20));
+ out[50 + outpos] = ((in[20 + inpos] >>> 20) & 67108863L);
+ out[51 + outpos] = (in[20 + inpos] >>> 46)
+ | ((in[21 + inpos] & 255L) << (26 - 8));
+ out[52 + outpos] = ((in[21 + inpos] >>> 8) & 67108863L);
+ out[53 + outpos] = ((in[21 + inpos] >>> 34) & 67108863L);
+ out[54 + outpos] = (in[21 + inpos] >>> 60)
+ | ((in[22 + inpos] & 4194303L) << (26 - 22));
+ out[55 + outpos] = ((in[22 + inpos] >>> 22) & 67108863L);
+ out[56 + outpos] = (in[22 + inpos] >>> 48)
+ | ((in[23 + inpos] & 1023L) << (26 - 10));
+ out[57 + outpos] = ((in[23 + inpos] >>> 10) & 67108863L);
+ out[58 + outpos] = ((in[23 + inpos] >>> 36) & 67108863L);
+ out[59 + outpos] = (in[23 + inpos] >>> 62)
+ | ((in[24 + inpos] & 16777215L) << (26 - 24));
+ out[60 + outpos] = ((in[24 + inpos] >>> 24) & 67108863L);
+ out[61 + outpos] = (in[24 + inpos] >>> 50)
+ | ((in[25 + inpos] & 4095L) << (26 - 12));
+ out[62 + outpos] = ((in[25 + inpos] >>> 12) & 67108863L);
+ out[63 + outpos] = (in[25 + inpos] >>> 38);
+ }
+
+ protected static void fastunpack27(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 134217727L);
+ out[1 + outpos] = ((in[inpos] >>> 27) & 134217727L);
+ out[2 + outpos] = (in[inpos] >>> 54)
+ | ((in[1 + inpos] & 131071L) << (27 - 17));
+ out[3 + outpos] = ((in[1 + inpos] >>> 17) & 134217727L);
+ out[4 + outpos] = (in[1 + inpos] >>> 44)
+ | ((in[2 + inpos] & 127L) << (27 - 7));
+ out[5 + outpos] = ((in[2 + inpos] >>> 7) & 134217727L);
+ out[6 + outpos] = ((in[2 + inpos] >>> 34) & 134217727L);
+ out[7 + outpos] = (in[2 + inpos] >>> 61)
+ | ((in[3 + inpos] & 16777215L) << (27 - 24));
+ out[8 + outpos] = ((in[3 + inpos] >>> 24) & 134217727L);
+ out[9 + outpos] = (in[3 + inpos] >>> 51)
+ | ((in[4 + inpos] & 16383L) << (27 - 14));
+ out[10 + outpos] = ((in[4 + inpos] >>> 14) & 134217727L);
+ out[11 + outpos] = (in[4 + inpos] >>> 41)
+ | ((in[5 + inpos] & 15L) << (27 - 4));
+ out[12 + outpos] = ((in[5 + inpos] >>> 4) & 134217727L);
+ out[13 + outpos] = ((in[5 + inpos] >>> 31) & 134217727L);
+ out[14 + outpos] = (in[5 + inpos] >>> 58)
+ | ((in[6 + inpos] & 2097151L) << (27 - 21));
+ out[15 + outpos] = ((in[6 + inpos] >>> 21) & 134217727L);
+ out[16 + outpos] = (in[6 + inpos] >>> 48)
+ | ((in[7 + inpos] & 2047L) << (27 - 11));
+ out[17 + outpos] = ((in[7 + inpos] >>> 11) & 134217727L);
+ out[18 + outpos] = (in[7 + inpos] >>> 38)
+ | ((in[8 + inpos] & 1L) << (27 - 1));
+ out[19 + outpos] = ((in[8 + inpos] >>> 1) & 134217727L);
+ out[20 + outpos] = ((in[8 + inpos] >>> 28) & 134217727L);
+ out[21 + outpos] = (in[8 + inpos] >>> 55)
+ | ((in[9 + inpos] & 262143L) << (27 - 18));
+ out[22 + outpos] = ((in[9 + inpos] >>> 18) & 134217727L);
+ out[23 + outpos] = (in[9 + inpos] >>> 45)
+ | ((in[10 + inpos] & 255L) << (27 - 8));
+ out[24 + outpos] = ((in[10 + inpos] >>> 8) & 134217727L);
+ out[25 + outpos] = ((in[10 + inpos] >>> 35) & 134217727L);
+ out[26 + outpos] = (in[10 + inpos] >>> 62)
+ | ((in[11 + inpos] & 33554431L) << (27 - 25));
+ out[27 + outpos] = ((in[11 + inpos] >>> 25) & 134217727L);
+ out[28 + outpos] = (in[11 + inpos] >>> 52)
+ | ((in[12 + inpos] & 32767L) << (27 - 15));
+ out[29 + outpos] = ((in[12 + inpos] >>> 15) & 134217727L);
+ out[30 + outpos] = (in[12 + inpos] >>> 42)
+ | ((in[13 + inpos] & 31L) << (27 - 5));
+ out[31 + outpos] = ((in[13 + inpos] >>> 5) & 134217727L);
+ out[32 + outpos] = ((in[13 + inpos] >>> 32) & 134217727L);
+ out[33 + outpos] = (in[13 + inpos] >>> 59)
+ | ((in[14 + inpos] & 4194303L) << (27 - 22));
+ out[34 + outpos] = ((in[14 + inpos] >>> 22) & 134217727L);
+ out[35 + outpos] = (in[14 + inpos] >>> 49)
+ | ((in[15 + inpos] & 4095L) << (27 - 12));
+ out[36 + outpos] = ((in[15 + inpos] >>> 12) & 134217727L);
+ out[37 + outpos] = (in[15 + inpos] >>> 39)
+ | ((in[16 + inpos] & 3L) << (27 - 2));
+ out[38 + outpos] = ((in[16 + inpos] >>> 2) & 134217727L);
+ out[39 + outpos] = ((in[16 + inpos] >>> 29) & 134217727L);
+ out[40 + outpos] = (in[16 + inpos] >>> 56)
+ | ((in[17 + inpos] & 524287L) << (27 - 19));
+ out[41 + outpos] = ((in[17 + inpos] >>> 19) & 134217727L);
+ out[42 + outpos] = (in[17 + inpos] >>> 46)
+ | ((in[18 + inpos] & 511L) << (27 - 9));
+ out[43 + outpos] = ((in[18 + inpos] >>> 9) & 134217727L);
+ out[44 + outpos] = ((in[18 + inpos] >>> 36) & 134217727L);
+ out[45 + outpos] = (in[18 + inpos] >>> 63)
+ | ((in[19 + inpos] & 67108863L) << (27 - 26));
+ out[46 + outpos] = ((in[19 + inpos] >>> 26) & 134217727L);
+ out[47 + outpos] = (in[19 + inpos] >>> 53)
+ | ((in[20 + inpos] & 65535L) << (27 - 16));
+ out[48 + outpos] = ((in[20 + inpos] >>> 16) & 134217727L);
+ out[49 + outpos] = (in[20 + inpos] >>> 43)
+ | ((in[21 + inpos] & 63L) << (27 - 6));
+ out[50 + outpos] = ((in[21 + inpos] >>> 6) & 134217727L);
+ out[51 + outpos] = ((in[21 + inpos] >>> 33) & 134217727L);
+ out[52 + outpos] = (in[21 + inpos] >>> 60)
+ | ((in[22 + inpos] & 8388607L) << (27 - 23));
+ out[53 + outpos] = ((in[22 + inpos] >>> 23) & 134217727L);
+ out[54 + outpos] = (in[22 + inpos] >>> 50)
+ | ((in[23 + inpos] & 8191L) << (27 - 13));
+ out[55 + outpos] = ((in[23 + inpos] >>> 13) & 134217727L);
+ out[56 + outpos] = (in[23 + inpos] >>> 40)
+ | ((in[24 + inpos] & 7L) << (27 - 3));
+ out[57 + outpos] = ((in[24 + inpos] >>> 3) & 134217727L);
+ out[58 + outpos] = ((in[24 + inpos] >>> 30) & 134217727L);
+ out[59 + outpos] = (in[24 + inpos] >>> 57)
+ | ((in[25 + inpos] & 1048575L) << (27 - 20));
+ out[60 + outpos] = ((in[25 + inpos] >>> 20) & 134217727L);
+ out[61 + outpos] = (in[25 + inpos] >>> 47)
+ | ((in[26 + inpos] & 1023L) << (27 - 10));
+ out[62 + outpos] = ((in[26 + inpos] >>> 10) & 134217727L);
+ out[63 + outpos] = (in[26 + inpos] >>> 37);
+ }
+
+ protected static void fastunpack28(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 268435455L);
+ out[1 + outpos] = ((in[inpos] >>> 28) & 268435455L);
+ out[2 + outpos] = (in[inpos] >>> 56)
+ | ((in[1 + inpos] & 1048575L) << (28 - 20));
+ out[3 + outpos] = ((in[1 + inpos] >>> 20) & 268435455L);
+ out[4 + outpos] = (in[1 + inpos] >>> 48)
+ | ((in[2 + inpos] & 4095L) << (28 - 12));
+ out[5 + outpos] = ((in[2 + inpos] >>> 12) & 268435455L);
+ out[6 + outpos] = (in[2 + inpos] >>> 40)
+ | ((in[3 + inpos] & 15L) << (28 - 4));
+ out[7 + outpos] = ((in[3 + inpos] >>> 4) & 268435455L);
+ out[8 + outpos] = ((in[3 + inpos] >>> 32) & 268435455L);
+ out[9 + outpos] = (in[3 + inpos] >>> 60)
+ | ((in[4 + inpos] & 16777215L) << (28 - 24));
+ out[10 + outpos] = ((in[4 + inpos] >>> 24) & 268435455L);
+ out[11 + outpos] = (in[4 + inpos] >>> 52)
+ | ((in[5 + inpos] & 65535L) << (28 - 16));
+ out[12 + outpos] = ((in[5 + inpos] >>> 16) & 268435455L);
+ out[13 + outpos] = (in[5 + inpos] >>> 44)
+ | ((in[6 + inpos] & 255L) << (28 - 8));
+ out[14 + outpos] = ((in[6 + inpos] >>> 8) & 268435455L);
+ out[15 + outpos] = (in[6 + inpos] >>> 36);
+ out[16 + outpos] = (in[7 + inpos] & 268435455L);
+ out[17 + outpos] = ((in[7 + inpos] >>> 28) & 268435455L);
+ out[18 + outpos] = (in[7 + inpos] >>> 56)
+ | ((in[8 + inpos] & 1048575L) << (28 - 20));
+ out[19 + outpos] = ((in[8 + inpos] >>> 20) & 268435455L);
+ out[20 + outpos] = (in[8 + inpos] >>> 48)
+ | ((in[9 + inpos] & 4095L) << (28 - 12));
+ out[21 + outpos] = ((in[9 + inpos] >>> 12) & 268435455L);
+ out[22 + outpos] = (in[9 + inpos] >>> 40)
+ | ((in[10 + inpos] & 15L) << (28 - 4));
+ out[23 + outpos] = ((in[10 + inpos] >>> 4) & 268435455L);
+ out[24 + outpos] = ((in[10 + inpos] >>> 32) & 268435455L);
+ out[25 + outpos] = (in[10 + inpos] >>> 60)
+ | ((in[11 + inpos] & 16777215L) << (28 - 24));
+ out[26 + outpos] = ((in[11 + inpos] >>> 24) & 268435455L);
+ out[27 + outpos] = (in[11 + inpos] >>> 52)
+ | ((in[12 + inpos] & 65535L) << (28 - 16));
+ out[28 + outpos] = ((in[12 + inpos] >>> 16) & 268435455L);
+ out[29 + outpos] = (in[12 + inpos] >>> 44)
+ | ((in[13 + inpos] & 255L) << (28 - 8));
+ out[30 + outpos] = ((in[13 + inpos] >>> 8) & 268435455L);
+ out[31 + outpos] = (in[13 + inpos] >>> 36);
+ out[32 + outpos] = (in[14 + inpos] & 268435455L);
+ out[33 + outpos] = ((in[14 + inpos] >>> 28) & 268435455L);
+ out[34 + outpos] = (in[14 + inpos] >>> 56)
+ | ((in[15 + inpos] & 1048575L) << (28 - 20));
+ out[35 + outpos] = ((in[15 + inpos] >>> 20) & 268435455L);
+ out[36 + outpos] = (in[15 + inpos] >>> 48)
+ | ((in[16 + inpos] & 4095L) << (28 - 12));
+ out[37 + outpos] = ((in[16 + inpos] >>> 12) & 268435455L);
+ out[38 + outpos] = (in[16 + inpos] >>> 40)
+ | ((in[17 + inpos] & 15L) << (28 - 4));
+ out[39 + outpos] = ((in[17 + inpos] >>> 4) & 268435455L);
+ out[40 + outpos] = ((in[17 + inpos] >>> 32) & 268435455L);
+ out[41 + outpos] = (in[17 + inpos] >>> 60)
+ | ((in[18 + inpos] & 16777215L) << (28 - 24));
+ out[42 + outpos] = ((in[18 + inpos] >>> 24) & 268435455L);
+ out[43 + outpos] = (in[18 + inpos] >>> 52)
+ | ((in[19 + inpos] & 65535L) << (28 - 16));
+ out[44 + outpos] = ((in[19 + inpos] >>> 16) & 268435455L);
+ out[45 + outpos] = (in[19 + inpos] >>> 44)
+ | ((in[20 + inpos] & 255L) << (28 - 8));
+ out[46 + outpos] = ((in[20 + inpos] >>> 8) & 268435455L);
+ out[47 + outpos] = (in[20 + inpos] >>> 36);
+ out[48 + outpos] = (in[21 + inpos] & 268435455L);
+ out[49 + outpos] = ((in[21 + inpos] >>> 28) & 268435455L);
+ out[50 + outpos] = (in[21 + inpos] >>> 56)
+ | ((in[22 + inpos] & 1048575L) << (28 - 20));
+ out[51 + outpos] = ((in[22 + inpos] >>> 20) & 268435455L);
+ out[52 + outpos] = (in[22 + inpos] >>> 48)
+ | ((in[23 + inpos] & 4095L) << (28 - 12));
+ out[53 + outpos] = ((in[23 + inpos] >>> 12) & 268435455L);
+ out[54 + outpos] = (in[23 + inpos] >>> 40)
+ | ((in[24 + inpos] & 15L) << (28 - 4));
+ out[55 + outpos] = ((in[24 + inpos] >>> 4) & 268435455L);
+ out[56 + outpos] = ((in[24 + inpos] >>> 32) & 268435455L);
+ out[57 + outpos] = (in[24 + inpos] >>> 60)
+ | ((in[25 + inpos] & 16777215L) << (28 - 24));
+ out[58 + outpos] = ((in[25 + inpos] >>> 24) & 268435455L);
+ out[59 + outpos] = (in[25 + inpos] >>> 52)
+ | ((in[26 + inpos] & 65535L) << (28 - 16));
+ out[60 + outpos] = ((in[26 + inpos] >>> 16) & 268435455L);
+ out[61 + outpos] = (in[26 + inpos] >>> 44)
+ | ((in[27 + inpos] & 255L) << (28 - 8));
+ out[62 + outpos] = ((in[27 + inpos] >>> 8) & 268435455L);
+ out[63 + outpos] = (in[27 + inpos] >>> 36);
+ }
+
+ protected static void fastunpack29(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 536870911L);
+ out[1 + outpos] = ((in[inpos] >>> 29) & 536870911L);
+ out[2 + outpos] = (in[inpos] >>> 58)
+ | ((in[1 + inpos] & 8388607L) << (29 - 23));
+ out[3 + outpos] = ((in[1 + inpos] >>> 23) & 536870911L);
+ out[4 + outpos] = (in[1 + inpos] >>> 52)
+ | ((in[2 + inpos] & 131071L) << (29 - 17));
+ out[5 + outpos] = ((in[2 + inpos] >>> 17) & 536870911L);
+ out[6 + outpos] = (in[2 + inpos] >>> 46)
+ | ((in[3 + inpos] & 2047L) << (29 - 11));
+ out[7 + outpos] = ((in[3 + inpos] >>> 11) & 536870911L);
+ out[8 + outpos] = (in[3 + inpos] >>> 40)
+ | ((in[4 + inpos] & 31L) << (29 - 5));
+ out[9 + outpos] = ((in[4 + inpos] >>> 5) & 536870911L);
+ out[10 + outpos] = ((in[4 + inpos] >>> 34) & 536870911L);
+ out[11 + outpos] = (in[4 + inpos] >>> 63)
+ | ((in[5 + inpos] & 268435455L) << (29 - 28));
+ out[12 + outpos] = ((in[5 + inpos] >>> 28) & 536870911L);
+ out[13 + outpos] = (in[5 + inpos] >>> 57)
+ | ((in[6 + inpos] & 4194303L) << (29 - 22));
+ out[14 + outpos] = ((in[6 + inpos] >>> 22) & 536870911L);
+ out[15 + outpos] = (in[6 + inpos] >>> 51)
+ | ((in[7 + inpos] & 65535L) << (29 - 16));
+ out[16 + outpos] = ((in[7 + inpos] >>> 16) & 536870911L);
+ out[17 + outpos] = (in[7 + inpos] >>> 45)
+ | ((in[8 + inpos] & 1023L) << (29 - 10));
+ out[18 + outpos] = ((in[8 + inpos] >>> 10) & 536870911L);
+ out[19 + outpos] = (in[8 + inpos] >>> 39)
+ | ((in[9 + inpos] & 15L) << (29 - 4));
+ out[20 + outpos] = ((in[9 + inpos] >>> 4) & 536870911L);
+ out[21 + outpos] = ((in[9 + inpos] >>> 33) & 536870911L);
+ out[22 + outpos] = (in[9 + inpos] >>> 62)
+ | ((in[10 + inpos] & 134217727L) << (29 - 27));
+ out[23 + outpos] = ((in[10 + inpos] >>> 27) & 536870911L);
+ out[24 + outpos] = (in[10 + inpos] >>> 56)
+ | ((in[11 + inpos] & 2097151L) << (29 - 21));
+ out[25 + outpos] = ((in[11 + inpos] >>> 21) & 536870911L);
+ out[26 + outpos] = (in[11 + inpos] >>> 50)
+ | ((in[12 + inpos] & 32767L) << (29 - 15));
+ out[27 + outpos] = ((in[12 + inpos] >>> 15) & 536870911L);
+ out[28 + outpos] = (in[12 + inpos] >>> 44)
+ | ((in[13 + inpos] & 511L) << (29 - 9));
+ out[29 + outpos] = ((in[13 + inpos] >>> 9) & 536870911L);
+ out[30 + outpos] = (in[13 + inpos] >>> 38)
+ | ((in[14 + inpos] & 7L) << (29 - 3));
+ out[31 + outpos] = ((in[14 + inpos] >>> 3) & 536870911L);
+ out[32 + outpos] = ((in[14 + inpos] >>> 32) & 536870911L);
+ out[33 + outpos] = (in[14 + inpos] >>> 61)
+ | ((in[15 + inpos] & 67108863L) << (29 - 26));
+ out[34 + outpos] = ((in[15 + inpos] >>> 26) & 536870911L);
+ out[35 + outpos] = (in[15 + inpos] >>> 55)
+ | ((in[16 + inpos] & 1048575L) << (29 - 20));
+ out[36 + outpos] = ((in[16 + inpos] >>> 20) & 536870911L);
+ out[37 + outpos] = (in[16 + inpos] >>> 49)
+ | ((in[17 + inpos] & 16383L) << (29 - 14));
+ out[38 + outpos] = ((in[17 + inpos] >>> 14) & 536870911L);
+ out[39 + outpos] = (in[17 + inpos] >>> 43)
+ | ((in[18 + inpos] & 255L) << (29 - 8));
+ out[40 + outpos] = ((in[18 + inpos] >>> 8) & 536870911L);
+ out[41 + outpos] = (in[18 + inpos] >>> 37)
+ | ((in[19 + inpos] & 3L) << (29 - 2));
+ out[42 + outpos] = ((in[19 + inpos] >>> 2) & 536870911L);
+ out[43 + outpos] = ((in[19 + inpos] >>> 31) & 536870911L);
+ out[44 + outpos] = (in[19 + inpos] >>> 60)
+ | ((in[20 + inpos] & 33554431L) << (29 - 25));
+ out[45 + outpos] = ((in[20 + inpos] >>> 25) & 536870911L);
+ out[46 + outpos] = (in[20 + inpos] >>> 54)
+ | ((in[21 + inpos] & 524287L) << (29 - 19));
+ out[47 + outpos] = ((in[21 + inpos] >>> 19) & 536870911L);
+ out[48 + outpos] = (in[21 + inpos] >>> 48)
+ | ((in[22 + inpos] & 8191L) << (29 - 13));
+ out[49 + outpos] = ((in[22 + inpos] >>> 13) & 536870911L);
+ out[50 + outpos] = (in[22 + inpos] >>> 42)
+ | ((in[23 + inpos] & 127L) << (29 - 7));
+ out[51 + outpos] = ((in[23 + inpos] >>> 7) & 536870911L);
+ out[52 + outpos] = (in[23 + inpos] >>> 36)
+ | ((in[24 + inpos] & 1L) << (29 - 1));
+ out[53 + outpos] = ((in[24 + inpos] >>> 1) & 536870911L);
+ out[54 + outpos] = ((in[24 + inpos] >>> 30) & 536870911L);
+ out[55 + outpos] = (in[24 + inpos] >>> 59)
+ | ((in[25 + inpos] & 16777215L) << (29 - 24));
+ out[56 + outpos] = ((in[25 + inpos] >>> 24) & 536870911L);
+ out[57 + outpos] = (in[25 + inpos] >>> 53)
+ | ((in[26 + inpos] & 262143L) << (29 - 18));
+ out[58 + outpos] = ((in[26 + inpos] >>> 18) & 536870911L);
+ out[59 + outpos] = (in[26 + inpos] >>> 47)
+ | ((in[27 + inpos] & 4095L) << (29 - 12));
+ out[60 + outpos] = ((in[27 + inpos] >>> 12) & 536870911L);
+ out[61 + outpos] = (in[27 + inpos] >>> 41)
+ | ((in[28 + inpos] & 63L) << (29 - 6));
+ out[62 + outpos] = ((in[28 + inpos] >>> 6) & 536870911L);
+ out[63 + outpos] = (in[28 + inpos] >>> 35);
+ }
+
+ protected static void fastunpack30(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 1073741823L);
+ out[1 + outpos] = ((in[inpos] >>> 30) & 1073741823L);
+ out[2 + outpos] = (in[inpos] >>> 60)
+ | ((in[1 + inpos] & 67108863L) << (30 - 26));
+ out[3 + outpos] = ((in[1 + inpos] >>> 26) & 1073741823L);
+ out[4 + outpos] = (in[1 + inpos] >>> 56)
+ | ((in[2 + inpos] & 4194303L) << (30 - 22));
+ out[5 + outpos] = ((in[2 + inpos] >>> 22) & 1073741823L);
+ out[6 + outpos] = (in[2 + inpos] >>> 52)
+ | ((in[3 + inpos] & 262143L) << (30 - 18));
+ out[7 + outpos] = ((in[3 + inpos] >>> 18) & 1073741823L);
+ out[8 + outpos] = (in[3 + inpos] >>> 48)
+ | ((in[4 + inpos] & 16383L) << (30 - 14));
+ out[9 + outpos] = ((in[4 + inpos] >>> 14) & 1073741823L);
+ out[10 + outpos] = (in[4 + inpos] >>> 44)
+ | ((in[5 + inpos] & 1023L) << (30 - 10));
+ out[11 + outpos] = ((in[5 + inpos] >>> 10) & 1073741823L);
+ out[12 + outpos] = (in[5 + inpos] >>> 40)
+ | ((in[6 + inpos] & 63L) << (30 - 6));
+ out[13 + outpos] = ((in[6 + inpos] >>> 6) & 1073741823L);
+ out[14 + outpos] = (in[6 + inpos] >>> 36)
+ | ((in[7 + inpos] & 3L) << (30 - 2));
+ out[15 + outpos] = ((in[7 + inpos] >>> 2) & 1073741823L);
+ out[16 + outpos] = ((in[7 + inpos] >>> 32) & 1073741823L);
+ out[17 + outpos] = (in[7 + inpos] >>> 62)
+ | ((in[8 + inpos] & 268435455L) << (30 - 28));
+ out[18 + outpos] = ((in[8 + inpos] >>> 28) & 1073741823L);
+ out[19 + outpos] = (in[8 + inpos] >>> 58)
+ | ((in[9 + inpos] & 16777215L) << (30 - 24));
+ out[20 + outpos] = ((in[9 + inpos] >>> 24) & 1073741823L);
+ out[21 + outpos] = (in[9 + inpos] >>> 54)
+ | ((in[10 + inpos] & 1048575L) << (30 - 20));
+ out[22 + outpos] = ((in[10 + inpos] >>> 20) & 1073741823L);
+ out[23 + outpos] = (in[10 + inpos] >>> 50)
+ | ((in[11 + inpos] & 65535L) << (30 - 16));
+ out[24 + outpos] = ((in[11 + inpos] >>> 16) & 1073741823L);
+ out[25 + outpos] = (in[11 + inpos] >>> 46)
+ | ((in[12 + inpos] & 4095L) << (30 - 12));
+ out[26 + outpos] = ((in[12 + inpos] >>> 12) & 1073741823L);
+ out[27 + outpos] = (in[12 + inpos] >>> 42)
+ | ((in[13 + inpos] & 255L) << (30 - 8));
+ out[28 + outpos] = ((in[13 + inpos] >>> 8) & 1073741823L);
+ out[29 + outpos] = (in[13 + inpos] >>> 38)
+ | ((in[14 + inpos] & 15L) << (30 - 4));
+ out[30 + outpos] = ((in[14 + inpos] >>> 4) & 1073741823L);
+ out[31 + outpos] = (in[14 + inpos] >>> 34);
+ out[32 + outpos] = (in[15 + inpos] & 1073741823L);
+ out[33 + outpos] = ((in[15 + inpos] >>> 30) & 1073741823L);
+ out[34 + outpos] = (in[15 + inpos] >>> 60)
+ | ((in[16 + inpos] & 67108863L) << (30 - 26));
+ out[35 + outpos] = ((in[16 + inpos] >>> 26) & 1073741823L);
+ out[36 + outpos] = (in[16 + inpos] >>> 56)
+ | ((in[17 + inpos] & 4194303L) << (30 - 22));
+ out[37 + outpos] = ((in[17 + inpos] >>> 22) & 1073741823L);
+ out[38 + outpos] = (in[17 + inpos] >>> 52)
+ | ((in[18 + inpos] & 262143L) << (30 - 18));
+ out[39 + outpos] = ((in[18 + inpos] >>> 18) & 1073741823L);
+ out[40 + outpos] = (in[18 + inpos] >>> 48)
+ | ((in[19 + inpos] & 16383L) << (30 - 14));
+ out[41 + outpos] = ((in[19 + inpos] >>> 14) & 1073741823L);
+ out[42 + outpos] = (in[19 + inpos] >>> 44)
+ | ((in[20 + inpos] & 1023L) << (30 - 10));
+ out[43 + outpos] = ((in[20 + inpos] >>> 10) & 1073741823L);
+ out[44 + outpos] = (in[20 + inpos] >>> 40)
+ | ((in[21 + inpos] & 63L) << (30 - 6));
+ out[45 + outpos] = ((in[21 + inpos] >>> 6) & 1073741823L);
+ out[46 + outpos] = (in[21 + inpos] >>> 36)
+ | ((in[22 + inpos] & 3L) << (30 - 2));
+ out[47 + outpos] = ((in[22 + inpos] >>> 2) & 1073741823L);
+ out[48 + outpos] = ((in[22 + inpos] >>> 32) & 1073741823L);
+ out[49 + outpos] = (in[22 + inpos] >>> 62)
+ | ((in[23 + inpos] & 268435455L) << (30 - 28));
+ out[50 + outpos] = ((in[23 + inpos] >>> 28) & 1073741823L);
+ out[51 + outpos] = (in[23 + inpos] >>> 58)
+ | ((in[24 + inpos] & 16777215L) << (30 - 24));
+ out[52 + outpos] = ((in[24 + inpos] >>> 24) & 1073741823L);
+ out[53 + outpos] = (in[24 + inpos] >>> 54)
+ | ((in[25 + inpos] & 1048575L) << (30 - 20));
+ out[54 + outpos] = ((in[25 + inpos] >>> 20) & 1073741823L);
+ out[55 + outpos] = (in[25 + inpos] >>> 50)
+ | ((in[26 + inpos] & 65535L) << (30 - 16));
+ out[56 + outpos] = ((in[26 + inpos] >>> 16) & 1073741823L);
+ out[57 + outpos] = (in[26 + inpos] >>> 46)
+ | ((in[27 + inpos] & 4095L) << (30 - 12));
+ out[58 + outpos] = ((in[27 + inpos] >>> 12) & 1073741823L);
+ out[59 + outpos] = (in[27 + inpos] >>> 42)
+ | ((in[28 + inpos] & 255L) << (30 - 8));
+ out[60 + outpos] = ((in[28 + inpos] >>> 8) & 1073741823L);
+ out[61 + outpos] = (in[28 + inpos] >>> 38)
+ | ((in[29 + inpos] & 15L) << (30 - 4));
+ out[62 + outpos] = ((in[29 + inpos] >>> 4) & 1073741823L);
+ out[63 + outpos] = (in[29 + inpos] >>> 34);
+ }
+
+ protected static void fastunpack31(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 2147483647L);
+ out[1 + outpos] = ((in[inpos] >>> 31) & 2147483647L);
+ out[2 + outpos] = (in[inpos] >>> 62)
+ | ((in[1 + inpos] & 536870911L) << (31 - 29));
+ out[3 + outpos] = ((in[1 + inpos] >>> 29) & 2147483647L);
+ out[4 + outpos] = (in[1 + inpos] >>> 60)
+ | ((in[2 + inpos] & 134217727L) << (31 - 27));
+ out[5 + outpos] = ((in[2 + inpos] >>> 27) & 2147483647L);
+ out[6 + outpos] = (in[2 + inpos] >>> 58)
+ | ((in[3 + inpos] & 33554431L) << (31 - 25));
+ out[7 + outpos] = ((in[3 + inpos] >>> 25) & 2147483647L);
+ out[8 + outpos] = (in[3 + inpos] >>> 56)
+ | ((in[4 + inpos] & 8388607L) << (31 - 23));
+ out[9 + outpos] = ((in[4 + inpos] >>> 23) & 2147483647L);
+ out[10 + outpos] = (in[4 + inpos] >>> 54)
+ | ((in[5 + inpos] & 2097151L) << (31 - 21));
+ out[11 + outpos] = ((in[5 + inpos] >>> 21) & 2147483647L);
+ out[12 + outpos] = (in[5 + inpos] >>> 52)
+ | ((in[6 + inpos] & 524287L) << (31 - 19));
+ out[13 + outpos] = ((in[6 + inpos] >>> 19) & 2147483647L);
+ out[14 + outpos] = (in[6 + inpos] >>> 50)
+ | ((in[7 + inpos] & 131071L) << (31 - 17));
+ out[15 + outpos] = ((in[7 + inpos] >>> 17) & 2147483647L);
+ out[16 + outpos] = (in[7 + inpos] >>> 48)
+ | ((in[8 + inpos] & 32767L) << (31 - 15));
+ out[17 + outpos] = ((in[8 + inpos] >>> 15) & 2147483647L);
+ out[18 + outpos] = (in[8 + inpos] >>> 46)
+ | ((in[9 + inpos] & 8191L) << (31 - 13));
+ out[19 + outpos] = ((in[9 + inpos] >>> 13) & 2147483647L);
+ out[20 + outpos] = (in[9 + inpos] >>> 44)
+ | ((in[10 + inpos] & 2047L) << (31 - 11));
+ out[21 + outpos] = ((in[10 + inpos] >>> 11) & 2147483647L);
+ out[22 + outpos] = (in[10 + inpos] >>> 42)
+ | ((in[11 + inpos] & 511L) << (31 - 9));
+ out[23 + outpos] = ((in[11 + inpos] >>> 9) & 2147483647L);
+ out[24 + outpos] = (in[11 + inpos] >>> 40)
+ | ((in[12 + inpos] & 127L) << (31 - 7));
+ out[25 + outpos] = ((in[12 + inpos] >>> 7) & 2147483647L);
+ out[26 + outpos] = (in[12 + inpos] >>> 38)
+ | ((in[13 + inpos] & 31L) << (31 - 5));
+ out[27 + outpos] = ((in[13 + inpos] >>> 5) & 2147483647L);
+ out[28 + outpos] = (in[13 + inpos] >>> 36)
+ | ((in[14 + inpos] & 7L) << (31 - 3));
+ out[29 + outpos] = ((in[14 + inpos] >>> 3) & 2147483647L);
+ out[30 + outpos] = (in[14 + inpos] >>> 34)
+ | ((in[15 + inpos] & 1L) << (31 - 1));
+ out[31 + outpos] = ((in[15 + inpos] >>> 1) & 2147483647L);
+ out[32 + outpos] = ((in[15 + inpos] >>> 32) & 2147483647L);
+ out[33 + outpos] = (in[15 + inpos] >>> 63)
+ | ((in[16 + inpos] & 1073741823L) << (31 - 30));
+ out[34 + outpos] = ((in[16 + inpos] >>> 30) & 2147483647L);
+ out[35 + outpos] = (in[16 + inpos] >>> 61)
+ | ((in[17 + inpos] & 268435455L) << (31 - 28));
+ out[36 + outpos] = ((in[17 + inpos] >>> 28) & 2147483647L);
+ out[37 + outpos] = (in[17 + inpos] >>> 59)
+ | ((in[18 + inpos] & 67108863L) << (31 - 26));
+ out[38 + outpos] = ((in[18 + inpos] >>> 26) & 2147483647L);
+ out[39 + outpos] = (in[18 + inpos] >>> 57)
+ | ((in[19 + inpos] & 16777215L) << (31 - 24));
+ out[40 + outpos] = ((in[19 + inpos] >>> 24) & 2147483647L);
+ out[41 + outpos] = (in[19 + inpos] >>> 55)
+ | ((in[20 + inpos] & 4194303L) << (31 - 22));
+ out[42 + outpos] = ((in[20 + inpos] >>> 22) & 2147483647L);
+ out[43 + outpos] = (in[20 + inpos] >>> 53)
+ | ((in[21 + inpos] & 1048575L) << (31 - 20));
+ out[44 + outpos] = ((in[21 + inpos] >>> 20) & 2147483647L);
+ out[45 + outpos] = (in[21 + inpos] >>> 51)
+ | ((in[22 + inpos] & 262143L) << (31 - 18));
+ out[46 + outpos] = ((in[22 + inpos] >>> 18) & 2147483647L);
+ out[47 + outpos] = (in[22 + inpos] >>> 49)
+ | ((in[23 + inpos] & 65535L) << (31 - 16));
+ out[48 + outpos] = ((in[23 + inpos] >>> 16) & 2147483647L);
+ out[49 + outpos] = (in[23 + inpos] >>> 47)
+ | ((in[24 + inpos] & 16383L) << (31 - 14));
+ out[50 + outpos] = ((in[24 + inpos] >>> 14) & 2147483647L);
+ out[51 + outpos] = (in[24 + inpos] >>> 45)
+ | ((in[25 + inpos] & 4095L) << (31 - 12));
+ out[52 + outpos] = ((in[25 + inpos] >>> 12) & 2147483647L);
+ out[53 + outpos] = (in[25 + inpos] >>> 43)
+ | ((in[26 + inpos] & 1023L) << (31 - 10));
+ out[54 + outpos] = ((in[26 + inpos] >>> 10) & 2147483647L);
+ out[55 + outpos] = (in[26 + inpos] >>> 41)
+ | ((in[27 + inpos] & 255L) << (31 - 8));
+ out[56 + outpos] = ((in[27 + inpos] >>> 8) & 2147483647L);
+ out[57 + outpos] = (in[27 + inpos] >>> 39)
+ | ((in[28 + inpos] & 63L) << (31 - 6));
+ out[58 + outpos] = ((in[28 + inpos] >>> 6) & 2147483647L);
+ out[59 + outpos] = (in[28 + inpos] >>> 37)
+ | ((in[29 + inpos] & 15L) << (31 - 4));
+ out[60 + outpos] = ((in[29 + inpos] >>> 4) & 2147483647L);
+ out[61 + outpos] = (in[29 + inpos] >>> 35)
+ | ((in[30 + inpos] & 3L) << (31 - 2));
+ out[62 + outpos] = ((in[30 + inpos] >>> 2) & 2147483647L);
+ out[63 + outpos] = (in[30 + inpos] >>> 33);
+ }
+
+ protected static void fastunpack32(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 4294967295L);
+ out[1 + outpos] = (in[inpos] >>> 32);
+ out[2 + outpos] = (in[1 + inpos] & 4294967295L);
+ out[3 + outpos] = (in[1 + inpos] >>> 32);
+ out[4 + outpos] = (in[2 + inpos] & 4294967295L);
+ out[5 + outpos] = (in[2 + inpos] >>> 32);
+ out[6 + outpos] = (in[3 + inpos] & 4294967295L);
+ out[7 + outpos] = (in[3 + inpos] >>> 32);
+ out[8 + outpos] = (in[4 + inpos] & 4294967295L);
+ out[9 + outpos] = (in[4 + inpos] >>> 32);
+ out[10 + outpos] = (in[5 + inpos] & 4294967295L);
+ out[11 + outpos] = (in[5 + inpos] >>> 32);
+ out[12 + outpos] = (in[6 + inpos] & 4294967295L);
+ out[13 + outpos] = (in[6 + inpos] >>> 32);
+ out[14 + outpos] = (in[7 + inpos] & 4294967295L);
+ out[15 + outpos] = (in[7 + inpos] >>> 32);
+ out[16 + outpos] = (in[8 + inpos] & 4294967295L);
+ out[17 + outpos] = (in[8 + inpos] >>> 32);
+ out[18 + outpos] = (in[9 + inpos] & 4294967295L);
+ out[19 + outpos] = (in[9 + inpos] >>> 32);
+ out[20 + outpos] = (in[10 + inpos] & 4294967295L);
+ out[21 + outpos] = (in[10 + inpos] >>> 32);
+ out[22 + outpos] = (in[11 + inpos] & 4294967295L);
+ out[23 + outpos] = (in[11 + inpos] >>> 32);
+ out[24 + outpos] = (in[12 + inpos] & 4294967295L);
+ out[25 + outpos] = (in[12 + inpos] >>> 32);
+ out[26 + outpos] = (in[13 + inpos] & 4294967295L);
+ out[27 + outpos] = (in[13 + inpos] >>> 32);
+ out[28 + outpos] = (in[14 + inpos] & 4294967295L);
+ out[29 + outpos] = (in[14 + inpos] >>> 32);
+ out[30 + outpos] = (in[15 + inpos] & 4294967295L);
+ out[31 + outpos] = (in[15 + inpos] >>> 32);
+ out[32 + outpos] = (in[16 + inpos] & 4294967295L);
+ out[33 + outpos] = (in[16 + inpos] >>> 32);
+ out[34 + outpos] = (in[17 + inpos] & 4294967295L);
+ out[35 + outpos] = (in[17 + inpos] >>> 32);
+ out[36 + outpos] = (in[18 + inpos] & 4294967295L);
+ out[37 + outpos] = (in[18 + inpos] >>> 32);
+ out[38 + outpos] = (in[19 + inpos] & 4294967295L);
+ out[39 + outpos] = (in[19 + inpos] >>> 32);
+ out[40 + outpos] = (in[20 + inpos] & 4294967295L);
+ out[41 + outpos] = (in[20 + inpos] >>> 32);
+ out[42 + outpos] = (in[21 + inpos] & 4294967295L);
+ out[43 + outpos] = (in[21 + inpos] >>> 32);
+ out[44 + outpos] = (in[22 + inpos] & 4294967295L);
+ out[45 + outpos] = (in[22 + inpos] >>> 32);
+ out[46 + outpos] = (in[23 + inpos] & 4294967295L);
+ out[47 + outpos] = (in[23 + inpos] >>> 32);
+ out[48 + outpos] = (in[24 + inpos] & 4294967295L);
+ out[49 + outpos] = (in[24 + inpos] >>> 32);
+ out[50 + outpos] = (in[25 + inpos] & 4294967295L);
+ out[51 + outpos] = (in[25 + inpos] >>> 32);
+ out[52 + outpos] = (in[26 + inpos] & 4294967295L);
+ out[53 + outpos] = (in[26 + inpos] >>> 32);
+ out[54 + outpos] = (in[27 + inpos] & 4294967295L);
+ out[55 + outpos] = (in[27 + inpos] >>> 32);
+ out[56 + outpos] = (in[28 + inpos] & 4294967295L);
+ out[57 + outpos] = (in[28 + inpos] >>> 32);
+ out[58 + outpos] = (in[29 + inpos] & 4294967295L);
+ out[59 + outpos] = (in[29 + inpos] >>> 32);
+ out[60 + outpos] = (in[30 + inpos] & 4294967295L);
+ out[61 + outpos] = (in[30 + inpos] >>> 32);
+ out[62 + outpos] = (in[31 + inpos] & 4294967295L);
+ out[63 + outpos] = (in[31 + inpos] >>> 32);
+ }
+
+ protected static void fastunpack33(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 8589934591L);
+ out[1 + outpos] = (in[inpos] >>> 33)
+ | ((in[1 + inpos] & 3L) << (33 - 2));
+ out[2 + outpos] = ((in[1 + inpos] >>> 2) & 8589934591L);
+ out[3 + outpos] = (in[1 + inpos] >>> 35)
+ | ((in[2 + inpos] & 15L) << (33 - 4));
+ out[4 + outpos] = ((in[2 + inpos] >>> 4) & 8589934591L);
+ out[5 + outpos] = (in[2 + inpos] >>> 37)
+ | ((in[3 + inpos] & 63L) << (33 - 6));
+ out[6 + outpos] = ((in[3 + inpos] >>> 6) & 8589934591L);
+ out[7 + outpos] = (in[3 + inpos] >>> 39)
+ | ((in[4 + inpos] & 255L) << (33 - 8));
+ out[8 + outpos] = ((in[4 + inpos] >>> 8) & 8589934591L);
+ out[9 + outpos] = (in[4 + inpos] >>> 41)
+ | ((in[5 + inpos] & 1023L) << (33 - 10));
+ out[10 + outpos] = ((in[5 + inpos] >>> 10) & 8589934591L);
+ out[11 + outpos] = (in[5 + inpos] >>> 43)
+ | ((in[6 + inpos] & 4095L) << (33 - 12));
+ out[12 + outpos] = ((in[6 + inpos] >>> 12) & 8589934591L);
+ out[13 + outpos] = (in[6 + inpos] >>> 45)
+ | ((in[7 + inpos] & 16383L) << (33 - 14));
+ out[14 + outpos] = ((in[7 + inpos] >>> 14) & 8589934591L);
+ out[15 + outpos] = (in[7 + inpos] >>> 47)
+ | ((in[8 + inpos] & 65535L) << (33 - 16));
+ out[16 + outpos] = ((in[8 + inpos] >>> 16) & 8589934591L);
+ out[17 + outpos] = (in[8 + inpos] >>> 49)
+ | ((in[9 + inpos] & 262143L) << (33 - 18));
+ out[18 + outpos] = ((in[9 + inpos] >>> 18) & 8589934591L);
+ out[19 + outpos] = (in[9 + inpos] >>> 51)
+ | ((in[10 + inpos] & 1048575L) << (33 - 20));
+ out[20 + outpos] = ((in[10 + inpos] >>> 20) & 8589934591L);
+ out[21 + outpos] = (in[10 + inpos] >>> 53)
+ | ((in[11 + inpos] & 4194303L) << (33 - 22));
+ out[22 + outpos] = ((in[11 + inpos] >>> 22) & 8589934591L);
+ out[23 + outpos] = (in[11 + inpos] >>> 55)
+ | ((in[12 + inpos] & 16777215L) << (33 - 24));
+ out[24 + outpos] = ((in[12 + inpos] >>> 24) & 8589934591L);
+ out[25 + outpos] = (in[12 + inpos] >>> 57)
+ | ((in[13 + inpos] & 67108863L) << (33 - 26));
+ out[26 + outpos] = ((in[13 + inpos] >>> 26) & 8589934591L);
+ out[27 + outpos] = (in[13 + inpos] >>> 59)
+ | ((in[14 + inpos] & 268435455L) << (33 - 28));
+ out[28 + outpos] = ((in[14 + inpos] >>> 28) & 8589934591L);
+ out[29 + outpos] = (in[14 + inpos] >>> 61)
+ | ((in[15 + inpos] & 1073741823L) << (33 - 30));
+ out[30 + outpos] = ((in[15 + inpos] >>> 30) & 8589934591L);
+ out[31 + outpos] = (in[15 + inpos] >>> 63)
+ | ((in[16 + inpos] & 4294967295L) << (33 - 32));
+ out[32 + outpos] = (in[16 + inpos] >>> 32)
+ | ((in[17 + inpos] & 1L) << (33 - 1));
+ out[33 + outpos] = ((in[17 + inpos] >>> 1) & 8589934591L);
+ out[34 + outpos] = (in[17 + inpos] >>> 34)
+ | ((in[18 + inpos] & 7L) << (33 - 3));
+ out[35 + outpos] = ((in[18 + inpos] >>> 3) & 8589934591L);
+ out[36 + outpos] = (in[18 + inpos] >>> 36)
+ | ((in[19 + inpos] & 31L) << (33 - 5));
+ out[37 + outpos] = ((in[19 + inpos] >>> 5) & 8589934591L);
+ out[38 + outpos] = (in[19 + inpos] >>> 38)
+ | ((in[20 + inpos] & 127L) << (33 - 7));
+ out[39 + outpos] = ((in[20 + inpos] >>> 7) & 8589934591L);
+ out[40 + outpos] = (in[20 + inpos] >>> 40)
+ | ((in[21 + inpos] & 511L) << (33 - 9));
+ out[41 + outpos] = ((in[21 + inpos] >>> 9) & 8589934591L);
+ out[42 + outpos] = (in[21 + inpos] >>> 42)
+ | ((in[22 + inpos] & 2047L) << (33 - 11));
+ out[43 + outpos] = ((in[22 + inpos] >>> 11) & 8589934591L);
+ out[44 + outpos] = (in[22 + inpos] >>> 44)
+ | ((in[23 + inpos] & 8191L) << (33 - 13));
+ out[45 + outpos] = ((in[23 + inpos] >>> 13) & 8589934591L);
+ out[46 + outpos] = (in[23 + inpos] >>> 46)
+ | ((in[24 + inpos] & 32767L) << (33 - 15));
+ out[47 + outpos] = ((in[24 + inpos] >>> 15) & 8589934591L);
+ out[48 + outpos] = (in[24 + inpos] >>> 48)
+ | ((in[25 + inpos] & 131071L) << (33 - 17));
+ out[49 + outpos] = ((in[25 + inpos] >>> 17) & 8589934591L);
+ out[50 + outpos] = (in[25 + inpos] >>> 50)
+ | ((in[26 + inpos] & 524287L) << (33 - 19));
+ out[51 + outpos] = ((in[26 + inpos] >>> 19) & 8589934591L);
+ out[52 + outpos] = (in[26 + inpos] >>> 52)
+ | ((in[27 + inpos] & 2097151L) << (33 - 21));
+ out[53 + outpos] = ((in[27 + inpos] >>> 21) & 8589934591L);
+ out[54 + outpos] = (in[27 + inpos] >>> 54)
+ | ((in[28 + inpos] & 8388607L) << (33 - 23));
+ out[55 + outpos] = ((in[28 + inpos] >>> 23) & 8589934591L);
+ out[56 + outpos] = (in[28 + inpos] >>> 56)
+ | ((in[29 + inpos] & 33554431L) << (33 - 25));
+ out[57 + outpos] = ((in[29 + inpos] >>> 25) & 8589934591L);
+ out[58 + outpos] = (in[29 + inpos] >>> 58)
+ | ((in[30 + inpos] & 134217727L) << (33 - 27));
+ out[59 + outpos] = ((in[30 + inpos] >>> 27) & 8589934591L);
+ out[60 + outpos] = (in[30 + inpos] >>> 60)
+ | ((in[31 + inpos] & 536870911L) << (33 - 29));
+ out[61 + outpos] = ((in[31 + inpos] >>> 29) & 8589934591L);
+ out[62 + outpos] = (in[31 + inpos] >>> 62)
+ | ((in[32 + inpos] & 2147483647L) << (33 - 31));
+ out[63 + outpos] = (in[32 + inpos] >>> 31);
+ }
+
+ protected static void fastunpack34(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 17179869183L);
+ out[1 + outpos] = (in[inpos] >>> 34)
+ | ((in[1 + inpos] & 15L) << (34 - 4));
+ out[2 + outpos] = ((in[1 + inpos] >>> 4) & 17179869183L);
+ out[3 + outpos] = (in[1 + inpos] >>> 38)
+ | ((in[2 + inpos] & 255L) << (34 - 8));
+ out[4 + outpos] = ((in[2 + inpos] >>> 8) & 17179869183L);
+ out[5 + outpos] = (in[2 + inpos] >>> 42)
+ | ((in[3 + inpos] & 4095L) << (34 - 12));
+ out[6 + outpos] = ((in[3 + inpos] >>> 12) & 17179869183L);
+ out[7 + outpos] = (in[3 + inpos] >>> 46)
+ | ((in[4 + inpos] & 65535L) << (34 - 16));
+ out[8 + outpos] = ((in[4 + inpos] >>> 16) & 17179869183L);
+ out[9 + outpos] = (in[4 + inpos] >>> 50)
+ | ((in[5 + inpos] & 1048575L) << (34 - 20));
+ out[10 + outpos] = ((in[5 + inpos] >>> 20) & 17179869183L);
+ out[11 + outpos] = (in[5 + inpos] >>> 54)
+ | ((in[6 + inpos] & 16777215L) << (34 - 24));
+ out[12 + outpos] = ((in[6 + inpos] >>> 24) & 17179869183L);
+ out[13 + outpos] = (in[6 + inpos] >>> 58)
+ | ((in[7 + inpos] & 268435455L) << (34 - 28));
+ out[14 + outpos] = ((in[7 + inpos] >>> 28) & 17179869183L);
+ out[15 + outpos] = (in[7 + inpos] >>> 62)
+ | ((in[8 + inpos] & 4294967295L) << (34 - 32));
+ out[16 + outpos] = (in[8 + inpos] >>> 32)
+ | ((in[9 + inpos] & 3L) << (34 - 2));
+ out[17 + outpos] = ((in[9 + inpos] >>> 2) & 17179869183L);
+ out[18 + outpos] = (in[9 + inpos] >>> 36)
+ | ((in[10 + inpos] & 63L) << (34 - 6));
+ out[19 + outpos] = ((in[10 + inpos] >>> 6) & 17179869183L);
+ out[20 + outpos] = (in[10 + inpos] >>> 40)
+ | ((in[11 + inpos] & 1023L) << (34 - 10));
+ out[21 + outpos] = ((in[11 + inpos] >>> 10) & 17179869183L);
+ out[22 + outpos] = (in[11 + inpos] >>> 44)
+ | ((in[12 + inpos] & 16383L) << (34 - 14));
+ out[23 + outpos] = ((in[12 + inpos] >>> 14) & 17179869183L);
+ out[24 + outpos] = (in[12 + inpos] >>> 48)
+ | ((in[13 + inpos] & 262143L) << (34 - 18));
+ out[25 + outpos] = ((in[13 + inpos] >>> 18) & 17179869183L);
+ out[26 + outpos] = (in[13 + inpos] >>> 52)
+ | ((in[14 + inpos] & 4194303L) << (34 - 22));
+ out[27 + outpos] = ((in[14 + inpos] >>> 22) & 17179869183L);
+ out[28 + outpos] = (in[14 + inpos] >>> 56)
+ | ((in[15 + inpos] & 67108863L) << (34 - 26));
+ out[29 + outpos] = ((in[15 + inpos] >>> 26) & 17179869183L);
+ out[30 + outpos] = (in[15 + inpos] >>> 60)
+ | ((in[16 + inpos] & 1073741823L) << (34 - 30));
+ out[31 + outpos] = (in[16 + inpos] >>> 30);
+ out[32 + outpos] = (in[17 + inpos] & 17179869183L);
+ out[33 + outpos] = (in[17 + inpos] >>> 34)
+ | ((in[18 + inpos] & 15L) << (34 - 4));
+ out[34 + outpos] = ((in[18 + inpos] >>> 4) & 17179869183L);
+ out[35 + outpos] = (in[18 + inpos] >>> 38)
+ | ((in[19 + inpos] & 255L) << (34 - 8));
+ out[36 + outpos] = ((in[19 + inpos] >>> 8) & 17179869183L);
+ out[37 + outpos] = (in[19 + inpos] >>> 42)
+ | ((in[20 + inpos] & 4095L) << (34 - 12));
+ out[38 + outpos] = ((in[20 + inpos] >>> 12) & 17179869183L);
+ out[39 + outpos] = (in[20 + inpos] >>> 46)
+ | ((in[21 + inpos] & 65535L) << (34 - 16));
+ out[40 + outpos] = ((in[21 + inpos] >>> 16) & 17179869183L);
+ out[41 + outpos] = (in[21 + inpos] >>> 50)
+ | ((in[22 + inpos] & 1048575L) << (34 - 20));
+ out[42 + outpos] = ((in[22 + inpos] >>> 20) & 17179869183L);
+ out[43 + outpos] = (in[22 + inpos] >>> 54)
+ | ((in[23 + inpos] & 16777215L) << (34 - 24));
+ out[44 + outpos] = ((in[23 + inpos] >>> 24) & 17179869183L);
+ out[45 + outpos] = (in[23 + inpos] >>> 58)
+ | ((in[24 + inpos] & 268435455L) << (34 - 28));
+ out[46 + outpos] = ((in[24 + inpos] >>> 28) & 17179869183L);
+ out[47 + outpos] = (in[24 + inpos] >>> 62)
+ | ((in[25 + inpos] & 4294967295L) << (34 - 32));
+ out[48 + outpos] = (in[25 + inpos] >>> 32)
+ | ((in[26 + inpos] & 3L) << (34 - 2));
+ out[49 + outpos] = ((in[26 + inpos] >>> 2) & 17179869183L);
+ out[50 + outpos] = (in[26 + inpos] >>> 36)
+ | ((in[27 + inpos] & 63L) << (34 - 6));
+ out[51 + outpos] = ((in[27 + inpos] >>> 6) & 17179869183L);
+ out[52 + outpos] = (in[27 + inpos] >>> 40)
+ | ((in[28 + inpos] & 1023L) << (34 - 10));
+ out[53 + outpos] = ((in[28 + inpos] >>> 10) & 17179869183L);
+ out[54 + outpos] = (in[28 + inpos] >>> 44)
+ | ((in[29 + inpos] & 16383L) << (34 - 14));
+ out[55 + outpos] = ((in[29 + inpos] >>> 14) & 17179869183L);
+ out[56 + outpos] = (in[29 + inpos] >>> 48)
+ | ((in[30 + inpos] & 262143L) << (34 - 18));
+ out[57 + outpos] = ((in[30 + inpos] >>> 18) & 17179869183L);
+ out[58 + outpos] = (in[30 + inpos] >>> 52)
+ | ((in[31 + inpos] & 4194303L) << (34 - 22));
+ out[59 + outpos] = ((in[31 + inpos] >>> 22) & 17179869183L);
+ out[60 + outpos] = (in[31 + inpos] >>> 56)
+ | ((in[32 + inpos] & 67108863L) << (34 - 26));
+ out[61 + outpos] = ((in[32 + inpos] >>> 26) & 17179869183L);
+ out[62 + outpos] = (in[32 + inpos] >>> 60)
+ | ((in[33 + inpos] & 1073741823L) << (34 - 30));
+ out[63 + outpos] = (in[33 + inpos] >>> 30);
+ }
+
+ protected static void fastunpack35(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 34359738367L);
+ out[1 + outpos] = (in[inpos] >>> 35)
+ | ((in[1 + inpos] & 63L) << (35 - 6));
+ out[2 + outpos] = ((in[1 + inpos] >>> 6) & 34359738367L);
+ out[3 + outpos] = (in[1 + inpos] >>> 41)
+ | ((in[2 + inpos] & 4095L) << (35 - 12));
+ out[4 + outpos] = ((in[2 + inpos] >>> 12) & 34359738367L);
+ out[5 + outpos] = (in[2 + inpos] >>> 47)
+ | ((in[3 + inpos] & 262143L) << (35 - 18));
+ out[6 + outpos] = ((in[3 + inpos] >>> 18) & 34359738367L);
+ out[7 + outpos] = (in[3 + inpos] >>> 53)
+ | ((in[4 + inpos] & 16777215L) << (35 - 24));
+ out[8 + outpos] = ((in[4 + inpos] >>> 24) & 34359738367L);
+ out[9 + outpos] = (in[4 + inpos] >>> 59)
+ | ((in[5 + inpos] & 1073741823L) << (35 - 30));
+ out[10 + outpos] = (in[5 + inpos] >>> 30)
+ | ((in[6 + inpos] & 1L) << (35 - 1));
+ out[11 + outpos] = ((in[6 + inpos] >>> 1) & 34359738367L);
+ out[12 + outpos] = (in[6 + inpos] >>> 36)
+ | ((in[7 + inpos] & 127L) << (35 - 7));
+ out[13 + outpos] = ((in[7 + inpos] >>> 7) & 34359738367L);
+ out[14 + outpos] = (in[7 + inpos] >>> 42)
+ | ((in[8 + inpos] & 8191L) << (35 - 13));
+ out[15 + outpos] = ((in[8 + inpos] >>> 13) & 34359738367L);
+ out[16 + outpos] = (in[8 + inpos] >>> 48)
+ | ((in[9 + inpos] & 524287L) << (35 - 19));
+ out[17 + outpos] = ((in[9 + inpos] >>> 19) & 34359738367L);
+ out[18 + outpos] = (in[9 + inpos] >>> 54)
+ | ((in[10 + inpos] & 33554431L) << (35 - 25));
+ out[19 + outpos] = ((in[10 + inpos] >>> 25) & 34359738367L);
+ out[20 + outpos] = (in[10 + inpos] >>> 60)
+ | ((in[11 + inpos] & 2147483647L) << (35 - 31));
+ out[21 + outpos] = (in[11 + inpos] >>> 31)
+ | ((in[12 + inpos] & 3L) << (35 - 2));
+ out[22 + outpos] = ((in[12 + inpos] >>> 2) & 34359738367L);
+ out[23 + outpos] = (in[12 + inpos] >>> 37)
+ | ((in[13 + inpos] & 255L) << (35 - 8));
+ out[24 + outpos] = ((in[13 + inpos] >>> 8) & 34359738367L);
+ out[25 + outpos] = (in[13 + inpos] >>> 43)
+ | ((in[14 + inpos] & 16383L) << (35 - 14));
+ out[26 + outpos] = ((in[14 + inpos] >>> 14) & 34359738367L);
+ out[27 + outpos] = (in[14 + inpos] >>> 49)
+ | ((in[15 + inpos] & 1048575L) << (35 - 20));
+ out[28 + outpos] = ((in[15 + inpos] >>> 20) & 34359738367L);
+ out[29 + outpos] = (in[15 + inpos] >>> 55)
+ | ((in[16 + inpos] & 67108863L) << (35 - 26));
+ out[30 + outpos] = ((in[16 + inpos] >>> 26) & 34359738367L);
+ out[31 + outpos] = (in[16 + inpos] >>> 61)
+ | ((in[17 + inpos] & 4294967295L) << (35 - 32));
+ out[32 + outpos] = (in[17 + inpos] >>> 32)
+ | ((in[18 + inpos] & 7L) << (35 - 3));
+ out[33 + outpos] = ((in[18 + inpos] >>> 3) & 34359738367L);
+ out[34 + outpos] = (in[18 + inpos] >>> 38)
+ | ((in[19 + inpos] & 511L) << (35 - 9));
+ out[35 + outpos] = ((in[19 + inpos] >>> 9) & 34359738367L);
+ out[36 + outpos] = (in[19 + inpos] >>> 44)
+ | ((in[20 + inpos] & 32767L) << (35 - 15));
+ out[37 + outpos] = ((in[20 + inpos] >>> 15) & 34359738367L);
+ out[38 + outpos] = (in[20 + inpos] >>> 50)
+ | ((in[21 + inpos] & 2097151L) << (35 - 21));
+ out[39 + outpos] = ((in[21 + inpos] >>> 21) & 34359738367L);
+ out[40 + outpos] = (in[21 + inpos] >>> 56)
+ | ((in[22 + inpos] & 134217727L) << (35 - 27));
+ out[41 + outpos] = ((in[22 + inpos] >>> 27) & 34359738367L);
+ out[42 + outpos] = (in[22 + inpos] >>> 62)
+ | ((in[23 + inpos] & 8589934591L) << (35 - 33));
+ out[43 + outpos] = (in[23 + inpos] >>> 33)
+ | ((in[24 + inpos] & 15L) << (35 - 4));
+ out[44 + outpos] = ((in[24 + inpos] >>> 4) & 34359738367L);
+ out[45 + outpos] = (in[24 + inpos] >>> 39)
+ | ((in[25 + inpos] & 1023L) << (35 - 10));
+ out[46 + outpos] = ((in[25 + inpos] >>> 10) & 34359738367L);
+ out[47 + outpos] = (in[25 + inpos] >>> 45)
+ | ((in[26 + inpos] & 65535L) << (35 - 16));
+ out[48 + outpos] = ((in[26 + inpos] >>> 16) & 34359738367L);
+ out[49 + outpos] = (in[26 + inpos] >>> 51)
+ | ((in[27 + inpos] & 4194303L) << (35 - 22));
+ out[50 + outpos] = ((in[27 + inpos] >>> 22) & 34359738367L);
+ out[51 + outpos] = (in[27 + inpos] >>> 57)
+ | ((in[28 + inpos] & 268435455L) << (35 - 28));
+ out[52 + outpos] = ((in[28 + inpos] >>> 28) & 34359738367L);
+ out[53 + outpos] = (in[28 + inpos] >>> 63)
+ | ((in[29 + inpos] & 17179869183L) << (35 - 34));
+ out[54 + outpos] = (in[29 + inpos] >>> 34)
+ | ((in[30 + inpos] & 31L) << (35 - 5));
+ out[55 + outpos] = ((in[30 + inpos] >>> 5) & 34359738367L);
+ out[56 + outpos] = (in[30 + inpos] >>> 40)
+ | ((in[31 + inpos] & 2047L) << (35 - 11));
+ out[57 + outpos] = ((in[31 + inpos] >>> 11) & 34359738367L);
+ out[58 + outpos] = (in[31 + inpos] >>> 46)
+ | ((in[32 + inpos] & 131071L) << (35 - 17));
+ out[59 + outpos] = ((in[32 + inpos] >>> 17) & 34359738367L);
+ out[60 + outpos] = (in[32 + inpos] >>> 52)
+ | ((in[33 + inpos] & 8388607L) << (35 - 23));
+ out[61 + outpos] = ((in[33 + inpos] >>> 23) & 34359738367L);
+ out[62 + outpos] = (in[33 + inpos] >>> 58)
+ | ((in[34 + inpos] & 536870911L) << (35 - 29));
+ out[63 + outpos] = (in[34 + inpos] >>> 29);
+ }
+
+ protected static void fastunpack36(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 68719476735L);
+ out[1 + outpos] = (in[inpos] >>> 36)
+ | ((in[1 + inpos] & 255L) << (36 - 8));
+ out[2 + outpos] = ((in[1 + inpos] >>> 8) & 68719476735L);
+ out[3 + outpos] = (in[1 + inpos] >>> 44)
+ | ((in[2 + inpos] & 65535L) << (36 - 16));
+ out[4 + outpos] = ((in[2 + inpos] >>> 16) & 68719476735L);
+ out[5 + outpos] = (in[2 + inpos] >>> 52)
+ | ((in[3 + inpos] & 16777215L) << (36 - 24));
+ out[6 + outpos] = ((in[3 + inpos] >>> 24) & 68719476735L);
+ out[7 + outpos] = (in[3 + inpos] >>> 60)
+ | ((in[4 + inpos] & 4294967295L) << (36 - 32));
+ out[8 + outpos] = (in[4 + inpos] >>> 32)
+ | ((in[5 + inpos] & 15L) << (36 - 4));
+ out[9 + outpos] = ((in[5 + inpos] >>> 4) & 68719476735L);
+ out[10 + outpos] = (in[5 + inpos] >>> 40)
+ | ((in[6 + inpos] & 4095L) << (36 - 12));
+ out[11 + outpos] = ((in[6 + inpos] >>> 12) & 68719476735L);
+ out[12 + outpos] = (in[6 + inpos] >>> 48)
+ | ((in[7 + inpos] & 1048575L) << (36 - 20));
+ out[13 + outpos] = ((in[7 + inpos] >>> 20) & 68719476735L);
+ out[14 + outpos] = (in[7 + inpos] >>> 56)
+ | ((in[8 + inpos] & 268435455L) << (36 - 28));
+ out[15 + outpos] = (in[8 + inpos] >>> 28);
+ out[16 + outpos] = (in[9 + inpos] & 68719476735L);
+ out[17 + outpos] = (in[9 + inpos] >>> 36)
+ | ((in[10 + inpos] & 255L) << (36 - 8));
+ out[18 + outpos] = ((in[10 + inpos] >>> 8) & 68719476735L);
+ out[19 + outpos] = (in[10 + inpos] >>> 44)
+ | ((in[11 + inpos] & 65535L) << (36 - 16));
+ out[20 + outpos] = ((in[11 + inpos] >>> 16) & 68719476735L);
+ out[21 + outpos] = (in[11 + inpos] >>> 52)
+ | ((in[12 + inpos] & 16777215L) << (36 - 24));
+ out[22 + outpos] = ((in[12 + inpos] >>> 24) & 68719476735L);
+ out[23 + outpos] = (in[12 + inpos] >>> 60)
+ | ((in[13 + inpos] & 4294967295L) << (36 - 32));
+ out[24 + outpos] = (in[13 + inpos] >>> 32)
+ | ((in[14 + inpos] & 15L) << (36 - 4));
+ out[25 + outpos] = ((in[14 + inpos] >>> 4) & 68719476735L);
+ out[26 + outpos] = (in[14 + inpos] >>> 40)
+ | ((in[15 + inpos] & 4095L) << (36 - 12));
+ out[27 + outpos] = ((in[15 + inpos] >>> 12) & 68719476735L);
+ out[28 + outpos] = (in[15 + inpos] >>> 48)
+ | ((in[16 + inpos] & 1048575L) << (36 - 20));
+ out[29 + outpos] = ((in[16 + inpos] >>> 20) & 68719476735L);
+ out[30 + outpos] = (in[16 + inpos] >>> 56)
+ | ((in[17 + inpos] & 268435455L) << (36 - 28));
+ out[31 + outpos] = (in[17 + inpos] >>> 28);
+ out[32 + outpos] = (in[18 + inpos] & 68719476735L);
+ out[33 + outpos] = (in[18 + inpos] >>> 36)
+ | ((in[19 + inpos] & 255L) << (36 - 8));
+ out[34 + outpos] = ((in[19 + inpos] >>> 8) & 68719476735L);
+ out[35 + outpos] = (in[19 + inpos] >>> 44)
+ | ((in[20 + inpos] & 65535L) << (36 - 16));
+ out[36 + outpos] = ((in[20 + inpos] >>> 16) & 68719476735L);
+ out[37 + outpos] = (in[20 + inpos] >>> 52)
+ | ((in[21 + inpos] & 16777215L) << (36 - 24));
+ out[38 + outpos] = ((in[21 + inpos] >>> 24) & 68719476735L);
+ out[39 + outpos] = (in[21 + inpos] >>> 60)
+ | ((in[22 + inpos] & 4294967295L) << (36 - 32));
+ out[40 + outpos] = (in[22 + inpos] >>> 32)
+ | ((in[23 + inpos] & 15L) << (36 - 4));
+ out[41 + outpos] = ((in[23 + inpos] >>> 4) & 68719476735L);
+ out[42 + outpos] = (in[23 + inpos] >>> 40)
+ | ((in[24 + inpos] & 4095L) << (36 - 12));
+ out[43 + outpos] = ((in[24 + inpos] >>> 12) & 68719476735L);
+ out[44 + outpos] = (in[24 + inpos] >>> 48)
+ | ((in[25 + inpos] & 1048575L) << (36 - 20));
+ out[45 + outpos] = ((in[25 + inpos] >>> 20) & 68719476735L);
+ out[46 + outpos] = (in[25 + inpos] >>> 56)
+ | ((in[26 + inpos] & 268435455L) << (36 - 28));
+ out[47 + outpos] = (in[26 + inpos] >>> 28);
+ out[48 + outpos] = (in[27 + inpos] & 68719476735L);
+ out[49 + outpos] = (in[27 + inpos] >>> 36)
+ | ((in[28 + inpos] & 255L) << (36 - 8));
+ out[50 + outpos] = ((in[28 + inpos] >>> 8) & 68719476735L);
+ out[51 + outpos] = (in[28 + inpos] >>> 44)
+ | ((in[29 + inpos] & 65535L) << (36 - 16));
+ out[52 + outpos] = ((in[29 + inpos] >>> 16) & 68719476735L);
+ out[53 + outpos] = (in[29 + inpos] >>> 52)
+ | ((in[30 + inpos] & 16777215L) << (36 - 24));
+ out[54 + outpos] = ((in[30 + inpos] >>> 24) & 68719476735L);
+ out[55 + outpos] = (in[30 + inpos] >>> 60)
+ | ((in[31 + inpos] & 4294967295L) << (36 - 32));
+ out[56 + outpos] = (in[31 + inpos] >>> 32)
+ | ((in[32 + inpos] & 15L) << (36 - 4));
+ out[57 + outpos] = ((in[32 + inpos] >>> 4) & 68719476735L);
+ out[58 + outpos] = (in[32 + inpos] >>> 40)
+ | ((in[33 + inpos] & 4095L) << (36 - 12));
+ out[59 + outpos] = ((in[33 + inpos] >>> 12) & 68719476735L);
+ out[60 + outpos] = (in[33 + inpos] >>> 48)
+ | ((in[34 + inpos] & 1048575L) << (36 - 20));
+ out[61 + outpos] = ((in[34 + inpos] >>> 20) & 68719476735L);
+ out[62 + outpos] = (in[34 + inpos] >>> 56)
+ | ((in[35 + inpos] & 268435455L) << (36 - 28));
+ out[63 + outpos] = (in[35 + inpos] >>> 28);
+ }
+
+ protected static void fastunpack37(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 137438953471L);
+ out[1 + outpos] = (in[inpos] >>> 37)
+ | ((in[1 + inpos] & 1023L) << (37 - 10));
+ out[2 + outpos] = ((in[1 + inpos] >>> 10) & 137438953471L);
+ out[3 + outpos] = (in[1 + inpos] >>> 47)
+ | ((in[2 + inpos] & 1048575L) << (37 - 20));
+ out[4 + outpos] = ((in[2 + inpos] >>> 20) & 137438953471L);
+ out[5 + outpos] = (in[2 + inpos] >>> 57)
+ | ((in[3 + inpos] & 1073741823L) << (37 - 30));
+ out[6 + outpos] = (in[3 + inpos] >>> 30)
+ | ((in[4 + inpos] & 7L) << (37 - 3));
+ out[7 + outpos] = ((in[4 + inpos] >>> 3) & 137438953471L);
+ out[8 + outpos] = (in[4 + inpos] >>> 40)
+ | ((in[5 + inpos] & 8191L) << (37 - 13));
+ out[9 + outpos] = ((in[5 + inpos] >>> 13) & 137438953471L);
+ out[10 + outpos] = (in[5 + inpos] >>> 50)
+ | ((in[6 + inpos] & 8388607L) << (37 - 23));
+ out[11 + outpos] = ((in[6 + inpos] >>> 23) & 137438953471L);
+ out[12 + outpos] = (in[6 + inpos] >>> 60)
+ | ((in[7 + inpos] & 8589934591L) << (37 - 33));
+ out[13 + outpos] = (in[7 + inpos] >>> 33)
+ | ((in[8 + inpos] & 63L) << (37 - 6));
+ out[14 + outpos] = ((in[8 + inpos] >>> 6) & 137438953471L);
+ out[15 + outpos] = (in[8 + inpos] >>> 43)
+ | ((in[9 + inpos] & 65535L) << (37 - 16));
+ out[16 + outpos] = ((in[9 + inpos] >>> 16) & 137438953471L);
+ out[17 + outpos] = (in[9 + inpos] >>> 53)
+ | ((in[10 + inpos] & 67108863L) << (37 - 26));
+ out[18 + outpos] = ((in[10 + inpos] >>> 26) & 137438953471L);
+ out[19 + outpos] = (in[10 + inpos] >>> 63)
+ | ((in[11 + inpos] & 68719476735L) << (37 - 36));
+ out[20 + outpos] = (in[11 + inpos] >>> 36)
+ | ((in[12 + inpos] & 511L) << (37 - 9));
+ out[21 + outpos] = ((in[12 + inpos] >>> 9) & 137438953471L);
+ out[22 + outpos] = (in[12 + inpos] >>> 46)
+ | ((in[13 + inpos] & 524287L) << (37 - 19));
+ out[23 + outpos] = ((in[13 + inpos] >>> 19) & 137438953471L);
+ out[24 + outpos] = (in[13 + inpos] >>> 56)
+ | ((in[14 + inpos] & 536870911L) << (37 - 29));
+ out[25 + outpos] = (in[14 + inpos] >>> 29)
+ | ((in[15 + inpos] & 3L) << (37 - 2));
+ out[26 + outpos] = ((in[15 + inpos] >>> 2) & 137438953471L);
+ out[27 + outpos] = (in[15 + inpos] >>> 39)
+ | ((in[16 + inpos] & 4095L) << (37 - 12));
+ out[28 + outpos] = ((in[16 + inpos] >>> 12) & 137438953471L);
+ out[29 + outpos] = (in[16 + inpos] >>> 49)
+ | ((in[17 + inpos] & 4194303L) << (37 - 22));
+ out[30 + outpos] = ((in[17 + inpos] >>> 22) & 137438953471L);
+ out[31 + outpos] = (in[17 + inpos] >>> 59)
+ | ((in[18 + inpos] & 4294967295L) << (37 - 32));
+ out[32 + outpos] = (in[18 + inpos] >>> 32)
+ | ((in[19 + inpos] & 31L) << (37 - 5));
+ out[33 + outpos] = ((in[19 + inpos] >>> 5) & 137438953471L);
+ out[34 + outpos] = (in[19 + inpos] >>> 42)
+ | ((in[20 + inpos] & 32767L) << (37 - 15));
+ out[35 + outpos] = ((in[20 + inpos] >>> 15) & 137438953471L);
+ out[36 + outpos] = (in[20 + inpos] >>> 52)
+ | ((in[21 + inpos] & 33554431L) << (37 - 25));
+ out[37 + outpos] = ((in[21 + inpos] >>> 25) & 137438953471L);
+ out[38 + outpos] = (in[21 + inpos] >>> 62)
+ | ((in[22 + inpos] & 34359738367L) << (37 - 35));
+ out[39 + outpos] = (in[22 + inpos] >>> 35)
+ | ((in[23 + inpos] & 255L) << (37 - 8));
+ out[40 + outpos] = ((in[23 + inpos] >>> 8) & 137438953471L);
+ out[41 + outpos] = (in[23 + inpos] >>> 45)
+ | ((in[24 + inpos] & 262143L) << (37 - 18));
+ out[42 + outpos] = ((in[24 + inpos] >>> 18) & 137438953471L);
+ out[43 + outpos] = (in[24 + inpos] >>> 55)
+ | ((in[25 + inpos] & 268435455L) << (37 - 28));
+ out[44 + outpos] = (in[25 + inpos] >>> 28)
+ | ((in[26 + inpos] & 1L) << (37 - 1));
+ out[45 + outpos] = ((in[26 + inpos] >>> 1) & 137438953471L);
+ out[46 + outpos] = (in[26 + inpos] >>> 38)
+ | ((in[27 + inpos] & 2047L) << (37 - 11));
+ out[47 + outpos] = ((in[27 + inpos] >>> 11) & 137438953471L);
+ out[48 + outpos] = (in[27 + inpos] >>> 48)
+ | ((in[28 + inpos] & 2097151L) << (37 - 21));
+ out[49 + outpos] = ((in[28 + inpos] >>> 21) & 137438953471L);
+ out[50 + outpos] = (in[28 + inpos] >>> 58)
+ | ((in[29 + inpos] & 2147483647L) << (37 - 31));
+ out[51 + outpos] = (in[29 + inpos] >>> 31)
+ | ((in[30 + inpos] & 15L) << (37 - 4));
+ out[52 + outpos] = ((in[30 + inpos] >>> 4) & 137438953471L);
+ out[53 + outpos] = (in[30 + inpos] >>> 41)
+ | ((in[31 + inpos] & 16383L) << (37 - 14));
+ out[54 + outpos] = ((in[31 + inpos] >>> 14) & 137438953471L);
+ out[55 + outpos] = (in[31 + inpos] >>> 51)
+ | ((in[32 + inpos] & 16777215L) << (37 - 24));
+ out[56 + outpos] = ((in[32 + inpos] >>> 24) & 137438953471L);
+ out[57 + outpos] = (in[32 + inpos] >>> 61)
+ | ((in[33 + inpos] & 17179869183L) << (37 - 34));
+ out[58 + outpos] = (in[33 + inpos] >>> 34)
+ | ((in[34 + inpos] & 127L) << (37 - 7));
+ out[59 + outpos] = ((in[34 + inpos] >>> 7) & 137438953471L);
+ out[60 + outpos] = (in[34 + inpos] >>> 44)
+ | ((in[35 + inpos] & 131071L) << (37 - 17));
+ out[61 + outpos] = ((in[35 + inpos] >>> 17) & 137438953471L);
+ out[62 + outpos] = (in[35 + inpos] >>> 54)
+ | ((in[36 + inpos] & 134217727L) << (37 - 27));
+ out[63 + outpos] = (in[36 + inpos] >>> 27);
+ }
+
+ protected static void fastunpack38(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 274877906943L);
+ out[1 + outpos] = (in[inpos] >>> 38)
+ | ((in[1 + inpos] & 4095L) << (38 - 12));
+ out[2 + outpos] = ((in[1 + inpos] >>> 12) & 274877906943L);
+ out[3 + outpos] = (in[1 + inpos] >>> 50)
+ | ((in[2 + inpos] & 16777215L) << (38 - 24));
+ out[4 + outpos] = ((in[2 + inpos] >>> 24) & 274877906943L);
+ out[5 + outpos] = (in[2 + inpos] >>> 62)
+ | ((in[3 + inpos] & 68719476735L) << (38 - 36));
+ out[6 + outpos] = (in[3 + inpos] >>> 36)
+ | ((in[4 + inpos] & 1023L) << (38 - 10));
+ out[7 + outpos] = ((in[4 + inpos] >>> 10) & 274877906943L);
+ out[8 + outpos] = (in[4 + inpos] >>> 48)
+ | ((in[5 + inpos] & 4194303L) << (38 - 22));
+ out[9 + outpos] = ((in[5 + inpos] >>> 22) & 274877906943L);
+ out[10 + outpos] = (in[5 + inpos] >>> 60)
+ | ((in[6 + inpos] & 17179869183L) << (38 - 34));
+ out[11 + outpos] = (in[6 + inpos] >>> 34)
+ | ((in[7 + inpos] & 255L) << (38 - 8));
+ out[12 + outpos] = ((in[7 + inpos] >>> 8) & 274877906943L);
+ out[13 + outpos] = (in[7 + inpos] >>> 46)
+ | ((in[8 + inpos] & 1048575L) << (38 - 20));
+ out[14 + outpos] = ((in[8 + inpos] >>> 20) & 274877906943L);
+ out[15 + outpos] = (in[8 + inpos] >>> 58)
+ | ((in[9 + inpos] & 4294967295L) << (38 - 32));
+ out[16 + outpos] = (in[9 + inpos] >>> 32)
+ | ((in[10 + inpos] & 63L) << (38 - 6));
+ out[17 + outpos] = ((in[10 + inpos] >>> 6) & 274877906943L);
+ out[18 + outpos] = (in[10 + inpos] >>> 44)
+ | ((in[11 + inpos] & 262143L) << (38 - 18));
+ out[19 + outpos] = ((in[11 + inpos] >>> 18) & 274877906943L);
+ out[20 + outpos] = (in[11 + inpos] >>> 56)
+ | ((in[12 + inpos] & 1073741823L) << (38 - 30));
+ out[21 + outpos] = (in[12 + inpos] >>> 30)
+ | ((in[13 + inpos] & 15L) << (38 - 4));
+ out[22 + outpos] = ((in[13 + inpos] >>> 4) & 274877906943L);
+ out[23 + outpos] = (in[13 + inpos] >>> 42)
+ | ((in[14 + inpos] & 65535L) << (38 - 16));
+ out[24 + outpos] = ((in[14 + inpos] >>> 16) & 274877906943L);
+ out[25 + outpos] = (in[14 + inpos] >>> 54)
+ | ((in[15 + inpos] & 268435455L) << (38 - 28));
+ out[26 + outpos] = (in[15 + inpos] >>> 28)
+ | ((in[16 + inpos] & 3L) << (38 - 2));
+ out[27 + outpos] = ((in[16 + inpos] >>> 2) & 274877906943L);
+ out[28 + outpos] = (in[16 + inpos] >>> 40)
+ | ((in[17 + inpos] & 16383L) << (38 - 14));
+ out[29 + outpos] = ((in[17 + inpos] >>> 14) & 274877906943L);
+ out[30 + outpos] = (in[17 + inpos] >>> 52)
+ | ((in[18 + inpos] & 67108863L) << (38 - 26));
+ out[31 + outpos] = (in[18 + inpos] >>> 26);
+ out[32 + outpos] = (in[19 + inpos] & 274877906943L);
+ out[33 + outpos] = (in[19 + inpos] >>> 38)
+ | ((in[20 + inpos] & 4095L) << (38 - 12));
+ out[34 + outpos] = ((in[20 + inpos] >>> 12) & 274877906943L);
+ out[35 + outpos] = (in[20 + inpos] >>> 50)
+ | ((in[21 + inpos] & 16777215L) << (38 - 24));
+ out[36 + outpos] = ((in[21 + inpos] >>> 24) & 274877906943L);
+ out[37 + outpos] = (in[21 + inpos] >>> 62)
+ | ((in[22 + inpos] & 68719476735L) << (38 - 36));
+ out[38 + outpos] = (in[22 + inpos] >>> 36)
+ | ((in[23 + inpos] & 1023L) << (38 - 10));
+ out[39 + outpos] = ((in[23 + inpos] >>> 10) & 274877906943L);
+ out[40 + outpos] = (in[23 + inpos] >>> 48)
+ | ((in[24 + inpos] & 4194303L) << (38 - 22));
+ out[41 + outpos] = ((in[24 + inpos] >>> 22) & 274877906943L);
+ out[42 + outpos] = (in[24 + inpos] >>> 60)
+ | ((in[25 + inpos] & 17179869183L) << (38 - 34));
+ out[43 + outpos] = (in[25 + inpos] >>> 34)
+ | ((in[26 + inpos] & 255L) << (38 - 8));
+ out[44 + outpos] = ((in[26 + inpos] >>> 8) & 274877906943L);
+ out[45 + outpos] = (in[26 + inpos] >>> 46)
+ | ((in[27 + inpos] & 1048575L) << (38 - 20));
+ out[46 + outpos] = ((in[27 + inpos] >>> 20) & 274877906943L);
+ out[47 + outpos] = (in[27 + inpos] >>> 58)
+ | ((in[28 + inpos] & 4294967295L) << (38 - 32));
+ out[48 + outpos] = (in[28 + inpos] >>> 32)
+ | ((in[29 + inpos] & 63L) << (38 - 6));
+ out[49 + outpos] = ((in[29 + inpos] >>> 6) & 274877906943L);
+ out[50 + outpos] = (in[29 + inpos] >>> 44)
+ | ((in[30 + inpos] & 262143L) << (38 - 18));
+ out[51 + outpos] = ((in[30 + inpos] >>> 18) & 274877906943L);
+ out[52 + outpos] = (in[30 + inpos] >>> 56)
+ | ((in[31 + inpos] & 1073741823L) << (38 - 30));
+ out[53 + outpos] = (in[31 + inpos] >>> 30)
+ | ((in[32 + inpos] & 15L) << (38 - 4));
+ out[54 + outpos] = ((in[32 + inpos] >>> 4) & 274877906943L);
+ out[55 + outpos] = (in[32 + inpos] >>> 42)
+ | ((in[33 + inpos] & 65535L) << (38 - 16));
+ out[56 + outpos] = ((in[33 + inpos] >>> 16) & 274877906943L);
+ out[57 + outpos] = (in[33 + inpos] >>> 54)
+ | ((in[34 + inpos] & 268435455L) << (38 - 28));
+ out[58 + outpos] = (in[34 + inpos] >>> 28)
+ | ((in[35 + inpos] & 3L) << (38 - 2));
+ out[59 + outpos] = ((in[35 + inpos] >>> 2) & 274877906943L);
+ out[60 + outpos] = (in[35 + inpos] >>> 40)
+ | ((in[36 + inpos] & 16383L) << (38 - 14));
+ out[61 + outpos] = ((in[36 + inpos] >>> 14) & 274877906943L);
+ out[62 + outpos] = (in[36 + inpos] >>> 52)
+ | ((in[37 + inpos] & 67108863L) << (38 - 26));
+ out[63 + outpos] = (in[37 + inpos] >>> 26);
+ }
+
+ protected static void fastunpack39(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 549755813887L);
+ out[1 + outpos] = (in[inpos] >>> 39)
+ | ((in[1 + inpos] & 16383L) << (39 - 14));
+ out[2 + outpos] = ((in[1 + inpos] >>> 14) & 549755813887L);
+ out[3 + outpos] = (in[1 + inpos] >>> 53)
+ | ((in[2 + inpos] & 268435455L) << (39 - 28));
+ out[4 + outpos] = (in[2 + inpos] >>> 28)
+ | ((in[3 + inpos] & 7L) << (39 - 3));
+ out[5 + outpos] = ((in[3 + inpos] >>> 3) & 549755813887L);
+ out[6 + outpos] = (in[3 + inpos] >>> 42)
+ | ((in[4 + inpos] & 131071L) << (39 - 17));
+ out[7 + outpos] = ((in[4 + inpos] >>> 17) & 549755813887L);
+ out[8 + outpos] = (in[4 + inpos] >>> 56)
+ | ((in[5 + inpos] & 2147483647L) << (39 - 31));
+ out[9 + outpos] = (in[5 + inpos] >>> 31)
+ | ((in[6 + inpos] & 63L) << (39 - 6));
+ out[10 + outpos] = ((in[6 + inpos] >>> 6) & 549755813887L);
+ out[11 + outpos] = (in[6 + inpos] >>> 45)
+ | ((in[7 + inpos] & 1048575L) << (39 - 20));
+ out[12 + outpos] = ((in[7 + inpos] >>> 20) & 549755813887L);
+ out[13 + outpos] = (in[7 + inpos] >>> 59)
+ | ((in[8 + inpos] & 17179869183L) << (39 - 34));
+ out[14 + outpos] = (in[8 + inpos] >>> 34)
+ | ((in[9 + inpos] & 511L) << (39 - 9));
+ out[15 + outpos] = ((in[9 + inpos] >>> 9) & 549755813887L);
+ out[16 + outpos] = (in[9 + inpos] >>> 48)
+ | ((in[10 + inpos] & 8388607L) << (39 - 23));
+ out[17 + outpos] = ((in[10 + inpos] >>> 23) & 549755813887L);
+ out[18 + outpos] = (in[10 + inpos] >>> 62)
+ | ((in[11 + inpos] & 137438953471L) << (39 - 37));
+ out[19 + outpos] = (in[11 + inpos] >>> 37)
+ | ((in[12 + inpos] & 4095L) << (39 - 12));
+ out[20 + outpos] = ((in[12 + inpos] >>> 12) & 549755813887L);
+ out[21 + outpos] = (in[12 + inpos] >>> 51)
+ | ((in[13 + inpos] & 67108863L) << (39 - 26));
+ out[22 + outpos] = (in[13 + inpos] >>> 26)
+ | ((in[14 + inpos] & 1L) << (39 - 1));
+ out[23 + outpos] = ((in[14 + inpos] >>> 1) & 549755813887L);
+ out[24 + outpos] = (in[14 + inpos] >>> 40)
+ | ((in[15 + inpos] & 32767L) << (39 - 15));
+ out[25 + outpos] = ((in[15 + inpos] >>> 15) & 549755813887L);
+ out[26 + outpos] = (in[15 + inpos] >>> 54)
+ | ((in[16 + inpos] & 536870911L) << (39 - 29));
+ out[27 + outpos] = (in[16 + inpos] >>> 29)
+ | ((in[17 + inpos] & 15L) << (39 - 4));
+ out[28 + outpos] = ((in[17 + inpos] >>> 4) & 549755813887L);
+ out[29 + outpos] = (in[17 + inpos] >>> 43)
+ | ((in[18 + inpos] & 262143L) << (39 - 18));
+ out[30 + outpos] = ((in[18 + inpos] >>> 18) & 549755813887L);
+ out[31 + outpos] = (in[18 + inpos] >>> 57)
+ | ((in[19 + inpos] & 4294967295L) << (39 - 32));
+ out[32 + outpos] = (in[19 + inpos] >>> 32)
+ | ((in[20 + inpos] & 127L) << (39 - 7));
+ out[33 + outpos] = ((in[20 + inpos] >>> 7) & 549755813887L);
+ out[34 + outpos] = (in[20 + inpos] >>> 46)
+ | ((in[21 + inpos] & 2097151L) << (39 - 21));
+ out[35 + outpos] = ((in[21 + inpos] >>> 21) & 549755813887L);
+ out[36 + outpos] = (in[21 + inpos] >>> 60)
+ | ((in[22 + inpos] & 34359738367L) << (39 - 35));
+ out[37 + outpos] = (in[22 + inpos] >>> 35)
+ | ((in[23 + inpos] & 1023L) << (39 - 10));
+ out[38 + outpos] = ((in[23 + inpos] >>> 10) & 549755813887L);
+ out[39 + outpos] = (in[23 + inpos] >>> 49)
+ | ((in[24 + inpos] & 16777215L) << (39 - 24));
+ out[40 + outpos] = ((in[24 + inpos] >>> 24) & 549755813887L);
+ out[41 + outpos] = (in[24 + inpos] >>> 63)
+ | ((in[25 + inpos] & 274877906943L) << (39 - 38));
+ out[42 + outpos] = (in[25 + inpos] >>> 38)
+ | ((in[26 + inpos] & 8191L) << (39 - 13));
+ out[43 + outpos] = ((in[26 + inpos] >>> 13) & 549755813887L);
+ out[44 + outpos] = (in[26 + inpos] >>> 52)
+ | ((in[27 + inpos] & 134217727L) << (39 - 27));
+ out[45 + outpos] = (in[27 + inpos] >>> 27)
+ | ((in[28 + inpos] & 3L) << (39 - 2));
+ out[46 + outpos] = ((in[28 + inpos] >>> 2) & 549755813887L);
+ out[47 + outpos] = (in[28 + inpos] >>> 41)
+ | ((in[29 + inpos] & 65535L) << (39 - 16));
+ out[48 + outpos] = ((in[29 + inpos] >>> 16) & 549755813887L);
+ out[49 + outpos] = (in[29 + inpos] >>> 55)
+ | ((in[30 + inpos] & 1073741823L) << (39 - 30));
+ out[50 + outpos] = (in[30 + inpos] >>> 30)
+ | ((in[31 + inpos] & 31L) << (39 - 5));
+ out[51 + outpos] = ((in[31 + inpos] >>> 5) & 549755813887L);
+ out[52 + outpos] = (in[31 + inpos] >>> 44)
+ | ((in[32 + inpos] & 524287L) << (39 - 19));
+ out[53 + outpos] = ((in[32 + inpos] >>> 19) & 549755813887L);
+ out[54 + outpos] = (in[32 + inpos] >>> 58)
+ | ((in[33 + inpos] & 8589934591L) << (39 - 33));
+ out[55 + outpos] = (in[33 + inpos] >>> 33)
+ | ((in[34 + inpos] & 255L) << (39 - 8));
+ out[56 + outpos] = ((in[34 + inpos] >>> 8) & 549755813887L);
+ out[57 + outpos] = (in[34 + inpos] >>> 47)
+ | ((in[35 + inpos] & 4194303L) << (39 - 22));
+ out[58 + outpos] = ((in[35 + inpos] >>> 22) & 549755813887L);
+ out[59 + outpos] = (in[35 + inpos] >>> 61)
+ | ((in[36 + inpos] & 68719476735L) << (39 - 36));
+ out[60 + outpos] = (in[36 + inpos] >>> 36)
+ | ((in[37 + inpos] & 2047L) << (39 - 11));
+ out[61 + outpos] = ((in[37 + inpos] >>> 11) & 549755813887L);
+ out[62 + outpos] = (in[37 + inpos] >>> 50)
+ | ((in[38 + inpos] & 33554431L) << (39 - 25));
+ out[63 + outpos] = (in[38 + inpos] >>> 25);
+ }
+
+ protected static void fastunpack40(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 1099511627775L);
+ out[1 + outpos] = (in[inpos] >>> 40)
+ | ((in[1 + inpos] & 65535L) << (40 - 16));
+ out[2 + outpos] = ((in[1 + inpos] >>> 16) & 1099511627775L);
+ out[3 + outpos] = (in[1 + inpos] >>> 56)
+ | ((in[2 + inpos] & 4294967295L) << (40 - 32));
+ out[4 + outpos] = (in[2 + inpos] >>> 32)
+ | ((in[3 + inpos] & 255L) << (40 - 8));
+ out[5 + outpos] = ((in[3 + inpos] >>> 8) & 1099511627775L);
+ out[6 + outpos] = (in[3 + inpos] >>> 48)
+ | ((in[4 + inpos] & 16777215L) << (40 - 24));
+ out[7 + outpos] = (in[4 + inpos] >>> 24);
+ out[8 + outpos] = (in[5 + inpos] & 1099511627775L);
+ out[9 + outpos] = (in[5 + inpos] >>> 40)
+ | ((in[6 + inpos] & 65535L) << (40 - 16));
+ out[10 + outpos] = ((in[6 + inpos] >>> 16) & 1099511627775L);
+ out[11 + outpos] = (in[6 + inpos] >>> 56)
+ | ((in[7 + inpos] & 4294967295L) << (40 - 32));
+ out[12 + outpos] = (in[7 + inpos] >>> 32)
+ | ((in[8 + inpos] & 255L) << (40 - 8));
+ out[13 + outpos] = ((in[8 + inpos] >>> 8) & 1099511627775L);
+ out[14 + outpos] = (in[8 + inpos] >>> 48)
+ | ((in[9 + inpos] & 16777215L) << (40 - 24));
+ out[15 + outpos] = (in[9 + inpos] >>> 24);
+ out[16 + outpos] = (in[10 + inpos] & 1099511627775L);
+ out[17 + outpos] = (in[10 + inpos] >>> 40)
+ | ((in[11 + inpos] & 65535L) << (40 - 16));
+ out[18 + outpos] = ((in[11 + inpos] >>> 16) & 1099511627775L);
+ out[19 + outpos] = (in[11 + inpos] >>> 56)
+ | ((in[12 + inpos] & 4294967295L) << (40 - 32));
+ out[20 + outpos] = (in[12 + inpos] >>> 32)
+ | ((in[13 + inpos] & 255L) << (40 - 8));
+ out[21 + outpos] = ((in[13 + inpos] >>> 8) & 1099511627775L);
+ out[22 + outpos] = (in[13 + inpos] >>> 48)
+ | ((in[14 + inpos] & 16777215L) << (40 - 24));
+ out[23 + outpos] = (in[14 + inpos] >>> 24);
+ out[24 + outpos] = (in[15 + inpos] & 1099511627775L);
+ out[25 + outpos] = (in[15 + inpos] >>> 40)
+ | ((in[16 + inpos] & 65535L) << (40 - 16));
+ out[26 + outpos] = ((in[16 + inpos] >>> 16) & 1099511627775L);
+ out[27 + outpos] = (in[16 + inpos] >>> 56)
+ | ((in[17 + inpos] & 4294967295L) << (40 - 32));
+ out[28 + outpos] = (in[17 + inpos] >>> 32)
+ | ((in[18 + inpos] & 255L) << (40 - 8));
+ out[29 + outpos] = ((in[18 + inpos] >>> 8) & 1099511627775L);
+ out[30 + outpos] = (in[18 + inpos] >>> 48)
+ | ((in[19 + inpos] & 16777215L) << (40 - 24));
+ out[31 + outpos] = (in[19 + inpos] >>> 24);
+ out[32 + outpos] = (in[20 + inpos] & 1099511627775L);
+ out[33 + outpos] = (in[20 + inpos] >>> 40)
+ | ((in[21 + inpos] & 65535L) << (40 - 16));
+ out[34 + outpos] = ((in[21 + inpos] >>> 16) & 1099511627775L);
+ out[35 + outpos] = (in[21 + inpos] >>> 56)
+ | ((in[22 + inpos] & 4294967295L) << (40 - 32));
+ out[36 + outpos] = (in[22 + inpos] >>> 32)
+ | ((in[23 + inpos] & 255L) << (40 - 8));
+ out[37 + outpos] = ((in[23 + inpos] >>> 8) & 1099511627775L);
+ out[38 + outpos] = (in[23 + inpos] >>> 48)
+ | ((in[24 + inpos] & 16777215L) << (40 - 24));
+ out[39 + outpos] = (in[24 + inpos] >>> 24);
+ out[40 + outpos] = (in[25 + inpos] & 1099511627775L);
+ out[41 + outpos] = (in[25 + inpos] >>> 40)
+ | ((in[26 + inpos] & 65535L) << (40 - 16));
+ out[42 + outpos] = ((in[26 + inpos] >>> 16) & 1099511627775L);
+ out[43 + outpos] = (in[26 + inpos] >>> 56)
+ | ((in[27 + inpos] & 4294967295L) << (40 - 32));
+ out[44 + outpos] = (in[27 + inpos] >>> 32)
+ | ((in[28 + inpos] & 255L) << (40 - 8));
+ out[45 + outpos] = ((in[28 + inpos] >>> 8) & 1099511627775L);
+ out[46 + outpos] = (in[28 + inpos] >>> 48)
+ | ((in[29 + inpos] & 16777215L) << (40 - 24));
+ out[47 + outpos] = (in[29 + inpos] >>> 24);
+ out[48 + outpos] = (in[30 + inpos] & 1099511627775L);
+ out[49 + outpos] = (in[30 + inpos] >>> 40)
+ | ((in[31 + inpos] & 65535L) << (40 - 16));
+ out[50 + outpos] = ((in[31 + inpos] >>> 16) & 1099511627775L);
+ out[51 + outpos] = (in[31 + inpos] >>> 56)
+ | ((in[32 + inpos] & 4294967295L) << (40 - 32));
+ out[52 + outpos] = (in[32 + inpos] >>> 32)
+ | ((in[33 + inpos] & 255L) << (40 - 8));
+ out[53 + outpos] = ((in[33 + inpos] >>> 8) & 1099511627775L);
+ out[54 + outpos] = (in[33 + inpos] >>> 48)
+ | ((in[34 + inpos] & 16777215L) << (40 - 24));
+ out[55 + outpos] = (in[34 + inpos] >>> 24);
+ out[56 + outpos] = (in[35 + inpos] & 1099511627775L);
+ out[57 + outpos] = (in[35 + inpos] >>> 40)
+ | ((in[36 + inpos] & 65535L) << (40 - 16));
+ out[58 + outpos] = ((in[36 + inpos] >>> 16) & 1099511627775L);
+ out[59 + outpos] = (in[36 + inpos] >>> 56)
+ | ((in[37 + inpos] & 4294967295L) << (40 - 32));
+ out[60 + outpos] = (in[37 + inpos] >>> 32)
+ | ((in[38 + inpos] & 255L) << (40 - 8));
+ out[61 + outpos] = ((in[38 + inpos] >>> 8) & 1099511627775L);
+ out[62 + outpos] = (in[38 + inpos] >>> 48)
+ | ((in[39 + inpos] & 16777215L) << (40 - 24));
+ out[63 + outpos] = (in[39 + inpos] >>> 24);
+ }
+
+ protected static void fastunpack41(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 2199023255551L);
+ out[1 + outpos] = (in[inpos] >>> 41)
+ | ((in[1 + inpos] & 262143L) << (41 - 18));
+ out[2 + outpos] = ((in[1 + inpos] >>> 18) & 2199023255551L);
+ out[3 + outpos] = (in[1 + inpos] >>> 59)
+ | ((in[2 + inpos] & 68719476735L) << (41 - 36));
+ out[4 + outpos] = (in[2 + inpos] >>> 36)
+ | ((in[3 + inpos] & 8191L) << (41 - 13));
+ out[5 + outpos] = ((in[3 + inpos] >>> 13) & 2199023255551L);
+ out[6 + outpos] = (in[3 + inpos] >>> 54)
+ | ((in[4 + inpos] & 2147483647L) << (41 - 31));
+ out[7 + outpos] = (in[4 + inpos] >>> 31)
+ | ((in[5 + inpos] & 255L) << (41 - 8));
+ out[8 + outpos] = ((in[5 + inpos] >>> 8) & 2199023255551L);
+ out[9 + outpos] = (in[5 + inpos] >>> 49)
+ | ((in[6 + inpos] & 67108863L) << (41 - 26));
+ out[10 + outpos] = (in[6 + inpos] >>> 26)
+ | ((in[7 + inpos] & 7L) << (41 - 3));
+ out[11 + outpos] = ((in[7 + inpos] >>> 3) & 2199023255551L);
+ out[12 + outpos] = (in[7 + inpos] >>> 44)
+ | ((in[8 + inpos] & 2097151L) << (41 - 21));
+ out[13 + outpos] = ((in[8 + inpos] >>> 21) & 2199023255551L);
+ out[14 + outpos] = (in[8 + inpos] >>> 62)
+ | ((in[9 + inpos] & 549755813887L) << (41 - 39));
+ out[15 + outpos] = (in[9 + inpos] >>> 39)
+ | ((in[10 + inpos] & 65535L) << (41 - 16));
+ out[16 + outpos] = ((in[10 + inpos] >>> 16) & 2199023255551L);
+ out[17 + outpos] = (in[10 + inpos] >>> 57)
+ | ((in[11 + inpos] & 17179869183L) << (41 - 34));
+ out[18 + outpos] = (in[11 + inpos] >>> 34)
+ | ((in[12 + inpos] & 2047L) << (41 - 11));
+ out[19 + outpos] = ((in[12 + inpos] >>> 11) & 2199023255551L);
+ out[20 + outpos] = (in[12 + inpos] >>> 52)
+ | ((in[13 + inpos] & 536870911L) << (41 - 29));
+ out[21 + outpos] = (in[13 + inpos] >>> 29)
+ | ((in[14 + inpos] & 63L) << (41 - 6));
+ out[22 + outpos] = ((in[14 + inpos] >>> 6) & 2199023255551L);
+ out[23 + outpos] = (in[14 + inpos] >>> 47)
+ | ((in[15 + inpos] & 16777215L) << (41 - 24));
+ out[24 + outpos] = (in[15 + inpos] >>> 24)
+ | ((in[16 + inpos] & 1L) << (41 - 1));
+ out[25 + outpos] = ((in[16 + inpos] >>> 1) & 2199023255551L);
+ out[26 + outpos] = (in[16 + inpos] >>> 42)
+ | ((in[17 + inpos] & 524287L) << (41 - 19));
+ out[27 + outpos] = ((in[17 + inpos] >>> 19) & 2199023255551L);
+ out[28 + outpos] = (in[17 + inpos] >>> 60)
+ | ((in[18 + inpos] & 137438953471L) << (41 - 37));
+ out[29 + outpos] = (in[18 + inpos] >>> 37)
+ | ((in[19 + inpos] & 16383L) << (41 - 14));
+ out[30 + outpos] = ((in[19 + inpos] >>> 14) & 2199023255551L);
+ out[31 + outpos] = (in[19 + inpos] >>> 55)
+ | ((in[20 + inpos] & 4294967295L) << (41 - 32));
+ out[32 + outpos] = (in[20 + inpos] >>> 32)
+ | ((in[21 + inpos] & 511L) << (41 - 9));
+ out[33 + outpos] = ((in[21 + inpos] >>> 9) & 2199023255551L);
+ out[34 + outpos] = (in[21 + inpos] >>> 50)
+ | ((in[22 + inpos] & 134217727L) << (41 - 27));
+ out[35 + outpos] = (in[22 + inpos] >>> 27)
+ | ((in[23 + inpos] & 15L) << (41 - 4));
+ out[36 + outpos] = ((in[23 + inpos] >>> 4) & 2199023255551L);
+ out[37 + outpos] = (in[23 + inpos] >>> 45)
+ | ((in[24 + inpos] & 4194303L) << (41 - 22));
+ out[38 + outpos] = ((in[24 + inpos] >>> 22) & 2199023255551L);
+ out[39 + outpos] = (in[24 + inpos] >>> 63)
+ | ((in[25 + inpos] & 1099511627775L) << (41 - 40));
+ out[40 + outpos] = (in[25 + inpos] >>> 40)
+ | ((in[26 + inpos] & 131071L) << (41 - 17));
+ out[41 + outpos] = ((in[26 + inpos] >>> 17) & 2199023255551L);
+ out[42 + outpos] = (in[26 + inpos] >>> 58)
+ | ((in[27 + inpos] & 34359738367L) << (41 - 35));
+ out[43 + outpos] = (in[27 + inpos] >>> 35)
+ | ((in[28 + inpos] & 4095L) << (41 - 12));
+ out[44 + outpos] = ((in[28 + inpos] >>> 12) & 2199023255551L);
+ out[45 + outpos] = (in[28 + inpos] >>> 53)
+ | ((in[29 + inpos] & 1073741823L) << (41 - 30));
+ out[46 + outpos] = (in[29 + inpos] >>> 30)
+ | ((in[30 + inpos] & 127L) << (41 - 7));
+ out[47 + outpos] = ((in[30 + inpos] >>> 7) & 2199023255551L);
+ out[48 + outpos] = (in[30 + inpos] >>> 48)
+ | ((in[31 + inpos] & 33554431L) << (41 - 25));
+ out[49 + outpos] = (in[31 + inpos] >>> 25)
+ | ((in[32 + inpos] & 3L) << (41 - 2));
+ out[50 + outpos] = ((in[32 + inpos] >>> 2) & 2199023255551L);
+ out[51 + outpos] = (in[32 + inpos] >>> 43)
+ | ((in[33 + inpos] & 1048575L) << (41 - 20));
+ out[52 + outpos] = ((in[33 + inpos] >>> 20) & 2199023255551L);
+ out[53 + outpos] = (in[33 + inpos] >>> 61)
+ | ((in[34 + inpos] & 274877906943L) << (41 - 38));
+ out[54 + outpos] = (in[34 + inpos] >>> 38)
+ | ((in[35 + inpos] & 32767L) << (41 - 15));
+ out[55 + outpos] = ((in[35 + inpos] >>> 15) & 2199023255551L);
+ out[56 + outpos] = (in[35 + inpos] >>> 56)
+ | ((in[36 + inpos] & 8589934591L) << (41 - 33));
+ out[57 + outpos] = (in[36 + inpos] >>> 33)
+ | ((in[37 + inpos] & 1023L) << (41 - 10));
+ out[58 + outpos] = ((in[37 + inpos] >>> 10) & 2199023255551L);
+ out[59 + outpos] = (in[37 + inpos] >>> 51)
+ | ((in[38 + inpos] & 268435455L) << (41 - 28));
+ out[60 + outpos] = (in[38 + inpos] >>> 28)
+ | ((in[39 + inpos] & 31L) << (41 - 5));
+ out[61 + outpos] = ((in[39 + inpos] >>> 5) & 2199023255551L);
+ out[62 + outpos] = (in[39 + inpos] >>> 46)
+ | ((in[40 + inpos] & 8388607L) << (41 - 23));
+ out[63 + outpos] = (in[40 + inpos] >>> 23);
+ }
+
+ protected static void fastunpack42(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 4398046511103L);
+ out[1 + outpos] = (in[inpos] >>> 42)
+ | ((in[1 + inpos] & 1048575L) << (42 - 20));
+ out[2 + outpos] = ((in[1 + inpos] >>> 20) & 4398046511103L);
+ out[3 + outpos] = (in[1 + inpos] >>> 62)
+ | ((in[2 + inpos] & 1099511627775L) << (42 - 40));
+ out[4 + outpos] = (in[2 + inpos] >>> 40)
+ | ((in[3 + inpos] & 262143L) << (42 - 18));
+ out[5 + outpos] = ((in[3 + inpos] >>> 18) & 4398046511103L);
+ out[6 + outpos] = (in[3 + inpos] >>> 60)
+ | ((in[4 + inpos] & 274877906943L) << (42 - 38));
+ out[7 + outpos] = (in[4 + inpos] >>> 38)
+ | ((in[5 + inpos] & 65535L) << (42 - 16));
+ out[8 + outpos] = ((in[5 + inpos] >>> 16) & 4398046511103L);
+ out[9 + outpos] = (in[5 + inpos] >>> 58)
+ | ((in[6 + inpos] & 68719476735L) << (42 - 36));
+ out[10 + outpos] = (in[6 + inpos] >>> 36)
+ | ((in[7 + inpos] & 16383L) << (42 - 14));
+ out[11 + outpos] = ((in[7 + inpos] >>> 14) & 4398046511103L);
+ out[12 + outpos] = (in[7 + inpos] >>> 56)
+ | ((in[8 + inpos] & 17179869183L) << (42 - 34));
+ out[13 + outpos] = (in[8 + inpos] >>> 34)
+ | ((in[9 + inpos] & 4095L) << (42 - 12));
+ out[14 + outpos] = ((in[9 + inpos] >>> 12) & 4398046511103L);
+ out[15 + outpos] = (in[9 + inpos] >>> 54)
+ | ((in[10 + inpos] & 4294967295L) << (42 - 32));
+ out[16 + outpos] = (in[10 + inpos] >>> 32)
+ | ((in[11 + inpos] & 1023L) << (42 - 10));
+ out[17 + outpos] = ((in[11 + inpos] >>> 10) & 4398046511103L);
+ out[18 + outpos] = (in[11 + inpos] >>> 52)
+ | ((in[12 + inpos] & 1073741823L) << (42 - 30));
+ out[19 + outpos] = (in[12 + inpos] >>> 30)
+ | ((in[13 + inpos] & 255L) << (42 - 8));
+ out[20 + outpos] = ((in[13 + inpos] >>> 8) & 4398046511103L);
+ out[21 + outpos] = (in[13 + inpos] >>> 50)
+ | ((in[14 + inpos] & 268435455L) << (42 - 28));
+ out[22 + outpos] = (in[14 + inpos] >>> 28)
+ | ((in[15 + inpos] & 63L) << (42 - 6));
+ out[23 + outpos] = ((in[15 + inpos] >>> 6) & 4398046511103L);
+ out[24 + outpos] = (in[15 + inpos] >>> 48)
+ | ((in[16 + inpos] & 67108863L) << (42 - 26));
+ out[25 + outpos] = (in[16 + inpos] >>> 26)
+ | ((in[17 + inpos] & 15L) << (42 - 4));
+ out[26 + outpos] = ((in[17 + inpos] >>> 4) & 4398046511103L);
+ out[27 + outpos] = (in[17 + inpos] >>> 46)
+ | ((in[18 + inpos] & 16777215L) << (42 - 24));
+ out[28 + outpos] = (in[18 + inpos] >>> 24)
+ | ((in[19 + inpos] & 3L) << (42 - 2));
+ out[29 + outpos] = ((in[19 + inpos] >>> 2) & 4398046511103L);
+ out[30 + outpos] = (in[19 + inpos] >>> 44)
+ | ((in[20 + inpos] & 4194303L) << (42 - 22));
+ out[31 + outpos] = (in[20 + inpos] >>> 22);
+ out[32 + outpos] = (in[21 + inpos] & 4398046511103L);
+ out[33 + outpos] = (in[21 + inpos] >>> 42)
+ | ((in[22 + inpos] & 1048575L) << (42 - 20));
+ out[34 + outpos] = ((in[22 + inpos] >>> 20) & 4398046511103L);
+ out[35 + outpos] = (in[22 + inpos] >>> 62)
+ | ((in[23 + inpos] & 1099511627775L) << (42 - 40));
+ out[36 + outpos] = (in[23 + inpos] >>> 40)
+ | ((in[24 + inpos] & 262143L) << (42 - 18));
+ out[37 + outpos] = ((in[24 + inpos] >>> 18) & 4398046511103L);
+ out[38 + outpos] = (in[24 + inpos] >>> 60)
+ | ((in[25 + inpos] & 274877906943L) << (42 - 38));
+ out[39 + outpos] = (in[25 + inpos] >>> 38)
+ | ((in[26 + inpos] & 65535L) << (42 - 16));
+ out[40 + outpos] = ((in[26 + inpos] >>> 16) & 4398046511103L);
+ out[41 + outpos] = (in[26 + inpos] >>> 58)
+ | ((in[27 + inpos] & 68719476735L) << (42 - 36));
+ out[42 + outpos] = (in[27 + inpos] >>> 36)
+ | ((in[28 + inpos] & 16383L) << (42 - 14));
+ out[43 + outpos] = ((in[28 + inpos] >>> 14) & 4398046511103L);
+ out[44 + outpos] = (in[28 + inpos] >>> 56)
+ | ((in[29 + inpos] & 17179869183L) << (42 - 34));
+ out[45 + outpos] = (in[29 + inpos] >>> 34)
+ | ((in[30 + inpos] & 4095L) << (42 - 12));
+ out[46 + outpos] = ((in[30 + inpos] >>> 12) & 4398046511103L);
+ out[47 + outpos] = (in[30 + inpos] >>> 54)
+ | ((in[31 + inpos] & 4294967295L) << (42 - 32));
+ out[48 + outpos] = (in[31 + inpos] >>> 32)
+ | ((in[32 + inpos] & 1023L) << (42 - 10));
+ out[49 + outpos] = ((in[32 + inpos] >>> 10) & 4398046511103L);
+ out[50 + outpos] = (in[32 + inpos] >>> 52)
+ | ((in[33 + inpos] & 1073741823L) << (42 - 30));
+ out[51 + outpos] = (in[33 + inpos] >>> 30)
+ | ((in[34 + inpos] & 255L) << (42 - 8));
+ out[52 + outpos] = ((in[34 + inpos] >>> 8) & 4398046511103L);
+ out[53 + outpos] = (in[34 + inpos] >>> 50)
+ | ((in[35 + inpos] & 268435455L) << (42 - 28));
+ out[54 + outpos] = (in[35 + inpos] >>> 28)
+ | ((in[36 + inpos] & 63L) << (42 - 6));
+ out[55 + outpos] = ((in[36 + inpos] >>> 6) & 4398046511103L);
+ out[56 + outpos] = (in[36 + inpos] >>> 48)
+ | ((in[37 + inpos] & 67108863L) << (42 - 26));
+ out[57 + outpos] = (in[37 + inpos] >>> 26)
+ | ((in[38 + inpos] & 15L) << (42 - 4));
+ out[58 + outpos] = ((in[38 + inpos] >>> 4) & 4398046511103L);
+ out[59 + outpos] = (in[38 + inpos] >>> 46)
+ | ((in[39 + inpos] & 16777215L) << (42 - 24));
+ out[60 + outpos] = (in[39 + inpos] >>> 24)
+ | ((in[40 + inpos] & 3L) << (42 - 2));
+ out[61 + outpos] = ((in[40 + inpos] >>> 2) & 4398046511103L);
+ out[62 + outpos] = (in[40 + inpos] >>> 44)
+ | ((in[41 + inpos] & 4194303L) << (42 - 22));
+ out[63 + outpos] = (in[41 + inpos] >>> 22);
+ }
+
+ protected static void fastunpack43(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 8796093022207L);
+ out[1 + outpos] = (in[inpos] >>> 43)
+ | ((in[1 + inpos] & 4194303L) << (43 - 22));
+ out[2 + outpos] = (in[1 + inpos] >>> 22)
+ | ((in[2 + inpos] & 1L) << (43 - 1));
+ out[3 + outpos] = ((in[2 + inpos] >>> 1) & 8796093022207L);
+ out[4 + outpos] = (in[2 + inpos] >>> 44)
+ | ((in[3 + inpos] & 8388607L) << (43 - 23));
+ out[5 + outpos] = (in[3 + inpos] >>> 23)
+ | ((in[4 + inpos] & 3L) << (43 - 2));
+ out[6 + outpos] = ((in[4 + inpos] >>> 2) & 8796093022207L);
+ out[7 + outpos] = (in[4 + inpos] >>> 45)
+ | ((in[5 + inpos] & 16777215L) << (43 - 24));
+ out[8 + outpos] = (in[5 + inpos] >>> 24)
+ | ((in[6 + inpos] & 7L) << (43 - 3));
+ out[9 + outpos] = ((in[6 + inpos] >>> 3) & 8796093022207L);
+ out[10 + outpos] = (in[6 + inpos] >>> 46)
+ | ((in[7 + inpos] & 33554431L) << (43 - 25));
+ out[11 + outpos] = (in[7 + inpos] >>> 25)
+ | ((in[8 + inpos] & 15L) << (43 - 4));
+ out[12 + outpos] = ((in[8 + inpos] >>> 4) & 8796093022207L);
+ out[13 + outpos] = (in[8 + inpos] >>> 47)
+ | ((in[9 + inpos] & 67108863L) << (43 - 26));
+ out[14 + outpos] = (in[9 + inpos] >>> 26)
+ | ((in[10 + inpos] & 31L) << (43 - 5));
+ out[15 + outpos] = ((in[10 + inpos] >>> 5) & 8796093022207L);
+ out[16 + outpos] = (in[10 + inpos] >>> 48)
+ | ((in[11 + inpos] & 134217727L) << (43 - 27));
+ out[17 + outpos] = (in[11 + inpos] >>> 27)
+ | ((in[12 + inpos] & 63L) << (43 - 6));
+ out[18 + outpos] = ((in[12 + inpos] >>> 6) & 8796093022207L);
+ out[19 + outpos] = (in[12 + inpos] >>> 49)
+ | ((in[13 + inpos] & 268435455L) << (43 - 28));
+ out[20 + outpos] = (in[13 + inpos] >>> 28)
+ | ((in[14 + inpos] & 127L) << (43 - 7));
+ out[21 + outpos] = ((in[14 + inpos] >>> 7) & 8796093022207L);
+ out[22 + outpos] = (in[14 + inpos] >>> 50)
+ | ((in[15 + inpos] & 536870911L) << (43 - 29));
+ out[23 + outpos] = (in[15 + inpos] >>> 29)
+ | ((in[16 + inpos] & 255L) << (43 - 8));
+ out[24 + outpos] = ((in[16 + inpos] >>> 8) & 8796093022207L);
+ out[25 + outpos] = (in[16 + inpos] >>> 51)
+ | ((in[17 + inpos] & 1073741823L) << (43 - 30));
+ out[26 + outpos] = (in[17 + inpos] >>> 30)
+ | ((in[18 + inpos] & 511L) << (43 - 9));
+ out[27 + outpos] = ((in[18 + inpos] >>> 9) & 8796093022207L);
+ out[28 + outpos] = (in[18 + inpos] >>> 52)
+ | ((in[19 + inpos] & 2147483647L) << (43 - 31));
+ out[29 + outpos] = (in[19 + inpos] >>> 31)
+ | ((in[20 + inpos] & 1023L) << (43 - 10));
+ out[30 + outpos] = ((in[20 + inpos] >>> 10) & 8796093022207L);
+ out[31 + outpos] = (in[20 + inpos] >>> 53)
+ | ((in[21 + inpos] & 4294967295L) << (43 - 32));
+ out[32 + outpos] = (in[21 + inpos] >>> 32)
+ | ((in[22 + inpos] & 2047L) << (43 - 11));
+ out[33 + outpos] = ((in[22 + inpos] >>> 11) & 8796093022207L);
+ out[34 + outpos] = (in[22 + inpos] >>> 54)
+ | ((in[23 + inpos] & 8589934591L) << (43 - 33));
+ out[35 + outpos] = (in[23 + inpos] >>> 33)
+ | ((in[24 + inpos] & 4095L) << (43 - 12));
+ out[36 + outpos] = ((in[24 + inpos] >>> 12) & 8796093022207L);
+ out[37 + outpos] = (in[24 + inpos] >>> 55)
+ | ((in[25 + inpos] & 17179869183L) << (43 - 34));
+ out[38 + outpos] = (in[25 + inpos] >>> 34)
+ | ((in[26 + inpos] & 8191L) << (43 - 13));
+ out[39 + outpos] = ((in[26 + inpos] >>> 13) & 8796093022207L);
+ out[40 + outpos] = (in[26 + inpos] >>> 56)
+ | ((in[27 + inpos] & 34359738367L) << (43 - 35));
+ out[41 + outpos] = (in[27 + inpos] >>> 35)
+ | ((in[28 + inpos] & 16383L) << (43 - 14));
+ out[42 + outpos] = ((in[28 + inpos] >>> 14) & 8796093022207L);
+ out[43 + outpos] = (in[28 + inpos] >>> 57)
+ | ((in[29 + inpos] & 68719476735L) << (43 - 36));
+ out[44 + outpos] = (in[29 + inpos] >>> 36)
+ | ((in[30 + inpos] & 32767L) << (43 - 15));
+ out[45 + outpos] = ((in[30 + inpos] >>> 15) & 8796093022207L);
+ out[46 + outpos] = (in[30 + inpos] >>> 58)
+ | ((in[31 + inpos] & 137438953471L) << (43 - 37));
+ out[47 + outpos] = (in[31 + inpos] >>> 37)
+ | ((in[32 + inpos] & 65535L) << (43 - 16));
+ out[48 + outpos] = ((in[32 + inpos] >>> 16) & 8796093022207L);
+ out[49 + outpos] = (in[32 + inpos] >>> 59)
+ | ((in[33 + inpos] & 274877906943L) << (43 - 38));
+ out[50 + outpos] = (in[33 + inpos] >>> 38)
+ | ((in[34 + inpos] & 131071L) << (43 - 17));
+ out[51 + outpos] = ((in[34 + inpos] >>> 17) & 8796093022207L);
+ out[52 + outpos] = (in[34 + inpos] >>> 60)
+ | ((in[35 + inpos] & 549755813887L) << (43 - 39));
+ out[53 + outpos] = (in[35 + inpos] >>> 39)
+ | ((in[36 + inpos] & 262143L) << (43 - 18));
+ out[54 + outpos] = ((in[36 + inpos] >>> 18) & 8796093022207L);
+ out[55 + outpos] = (in[36 + inpos] >>> 61)
+ | ((in[37 + inpos] & 1099511627775L) << (43 - 40));
+ out[56 + outpos] = (in[37 + inpos] >>> 40)
+ | ((in[38 + inpos] & 524287L) << (43 - 19));
+ out[57 + outpos] = ((in[38 + inpos] >>> 19) & 8796093022207L);
+ out[58 + outpos] = (in[38 + inpos] >>> 62)
+ | ((in[39 + inpos] & 2199023255551L) << (43 - 41));
+ out[59 + outpos] = (in[39 + inpos] >>> 41)
+ | ((in[40 + inpos] & 1048575L) << (43 - 20));
+ out[60 + outpos] = ((in[40 + inpos] >>> 20) & 8796093022207L);
+ out[61 + outpos] = (in[40 + inpos] >>> 63)
+ | ((in[41 + inpos] & 4398046511103L) << (43 - 42));
+ out[62 + outpos] = (in[41 + inpos] >>> 42)
+ | ((in[42 + inpos] & 2097151L) << (43 - 21));
+ out[63 + outpos] = (in[42 + inpos] >>> 21);
+ }
+
+ protected static void fastunpack44(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 17592186044415L);
+ out[1 + outpos] = (in[inpos] >>> 44)
+ | ((in[1 + inpos] & 16777215L) << (44 - 24));
+ out[2 + outpos] = (in[1 + inpos] >>> 24)
+ | ((in[2 + inpos] & 15L) << (44 - 4));
+ out[3 + outpos] = ((in[2 + inpos] >>> 4) & 17592186044415L);
+ out[4 + outpos] = (in[2 + inpos] >>> 48)
+ | ((in[3 + inpos] & 268435455L) << (44 - 28));
+ out[5 + outpos] = (in[3 + inpos] >>> 28)
+ | ((in[4 + inpos] & 255L) << (44 - 8));
+ out[6 + outpos] = ((in[4 + inpos] >>> 8) & 17592186044415L);
+ out[7 + outpos] = (in[4 + inpos] >>> 52)
+ | ((in[5 + inpos] & 4294967295L) << (44 - 32));
+ out[8 + outpos] = (in[5 + inpos] >>> 32)
+ | ((in[6 + inpos] & 4095L) << (44 - 12));
+ out[9 + outpos] = ((in[6 + inpos] >>> 12) & 17592186044415L);
+ out[10 + outpos] = (in[6 + inpos] >>> 56)
+ | ((in[7 + inpos] & 68719476735L) << (44 - 36));
+ out[11 + outpos] = (in[7 + inpos] >>> 36)
+ | ((in[8 + inpos] & 65535L) << (44 - 16));
+ out[12 + outpos] = ((in[8 + inpos] >>> 16) & 17592186044415L);
+ out[13 + outpos] = (in[8 + inpos] >>> 60)
+ | ((in[9 + inpos] & 1099511627775L) << (44 - 40));
+ out[14 + outpos] = (in[9 + inpos] >>> 40)
+ | ((in[10 + inpos] & 1048575L) << (44 - 20));
+ out[15 + outpos] = (in[10 + inpos] >>> 20);
+ out[16 + outpos] = (in[11 + inpos] & 17592186044415L);
+ out[17 + outpos] = (in[11 + inpos] >>> 44)
+ | ((in[12 + inpos] & 16777215L) << (44 - 24));
+ out[18 + outpos] = (in[12 + inpos] >>> 24)
+ | ((in[13 + inpos] & 15L) << (44 - 4));
+ out[19 + outpos] = ((in[13 + inpos] >>> 4) & 17592186044415L);
+ out[20 + outpos] = (in[13 + inpos] >>> 48)
+ | ((in[14 + inpos] & 268435455L) << (44 - 28));
+ out[21 + outpos] = (in[14 + inpos] >>> 28)
+ | ((in[15 + inpos] & 255L) << (44 - 8));
+ out[22 + outpos] = ((in[15 + inpos] >>> 8) & 17592186044415L);
+ out[23 + outpos] = (in[15 + inpos] >>> 52)
+ | ((in[16 + inpos] & 4294967295L) << (44 - 32));
+ out[24 + outpos] = (in[16 + inpos] >>> 32)
+ | ((in[17 + inpos] & 4095L) << (44 - 12));
+ out[25 + outpos] = ((in[17 + inpos] >>> 12) & 17592186044415L);
+ out[26 + outpos] = (in[17 + inpos] >>> 56)
+ | ((in[18 + inpos] & 68719476735L) << (44 - 36));
+ out[27 + outpos] = (in[18 + inpos] >>> 36)
+ | ((in[19 + inpos] & 65535L) << (44 - 16));
+ out[28 + outpos] = ((in[19 + inpos] >>> 16) & 17592186044415L);
+ out[29 + outpos] = (in[19 + inpos] >>> 60)
+ | ((in[20 + inpos] & 1099511627775L) << (44 - 40));
+ out[30 + outpos] = (in[20 + inpos] >>> 40)
+ | ((in[21 + inpos] & 1048575L) << (44 - 20));
+ out[31 + outpos] = (in[21 + inpos] >>> 20);
+ out[32 + outpos] = (in[22 + inpos] & 17592186044415L);
+ out[33 + outpos] = (in[22 + inpos] >>> 44)
+ | ((in[23 + inpos] & 16777215L) << (44 - 24));
+ out[34 + outpos] = (in[23 + inpos] >>> 24)
+ | ((in[24 + inpos] & 15L) << (44 - 4));
+ out[35 + outpos] = ((in[24 + inpos] >>> 4) & 17592186044415L);
+ out[36 + outpos] = (in[24 + inpos] >>> 48)
+ | ((in[25 + inpos] & 268435455L) << (44 - 28));
+ out[37 + outpos] = (in[25 + inpos] >>> 28)
+ | ((in[26 + inpos] & 255L) << (44 - 8));
+ out[38 + outpos] = ((in[26 + inpos] >>> 8) & 17592186044415L);
+ out[39 + outpos] = (in[26 + inpos] >>> 52)
+ | ((in[27 + inpos] & 4294967295L) << (44 - 32));
+ out[40 + outpos] = (in[27 + inpos] >>> 32)
+ | ((in[28 + inpos] & 4095L) << (44 - 12));
+ out[41 + outpos] = ((in[28 + inpos] >>> 12) & 17592186044415L);
+ out[42 + outpos] = (in[28 + inpos] >>> 56)
+ | ((in[29 + inpos] & 68719476735L) << (44 - 36));
+ out[43 + outpos] = (in[29 + inpos] >>> 36)
+ | ((in[30 + inpos] & 65535L) << (44 - 16));
+ out[44 + outpos] = ((in[30 + inpos] >>> 16) & 17592186044415L);
+ out[45 + outpos] = (in[30 + inpos] >>> 60)
+ | ((in[31 + inpos] & 1099511627775L) << (44 - 40));
+ out[46 + outpos] = (in[31 + inpos] >>> 40)
+ | ((in[32 + inpos] & 1048575L) << (44 - 20));
+ out[47 + outpos] = (in[32 + inpos] >>> 20);
+ out[48 + outpos] = (in[33 + inpos] & 17592186044415L);
+ out[49 + outpos] = (in[33 + inpos] >>> 44)
+ | ((in[34 + inpos] & 16777215L) << (44 - 24));
+ out[50 + outpos] = (in[34 + inpos] >>> 24)
+ | ((in[35 + inpos] & 15L) << (44 - 4));
+ out[51 + outpos] = ((in[35 + inpos] >>> 4) & 17592186044415L);
+ out[52 + outpos] = (in[35 + inpos] >>> 48)
+ | ((in[36 + inpos] & 268435455L) << (44 - 28));
+ out[53 + outpos] = (in[36 + inpos] >>> 28)
+ | ((in[37 + inpos] & 255L) << (44 - 8));
+ out[54 + outpos] = ((in[37 + inpos] >>> 8) & 17592186044415L);
+ out[55 + outpos] = (in[37 + inpos] >>> 52)
+ | ((in[38 + inpos] & 4294967295L) << (44 - 32));
+ out[56 + outpos] = (in[38 + inpos] >>> 32)
+ | ((in[39 + inpos] & 4095L) << (44 - 12));
+ out[57 + outpos] = ((in[39 + inpos] >>> 12) & 17592186044415L);
+ out[58 + outpos] = (in[39 + inpos] >>> 56)
+ | ((in[40 + inpos] & 68719476735L) << (44 - 36));
+ out[59 + outpos] = (in[40 + inpos] >>> 36)
+ | ((in[41 + inpos] & 65535L) << (44 - 16));
+ out[60 + outpos] = ((in[41 + inpos] >>> 16) & 17592186044415L);
+ out[61 + outpos] = (in[41 + inpos] >>> 60)
+ | ((in[42 + inpos] & 1099511627775L) << (44 - 40));
+ out[62 + outpos] = (in[42 + inpos] >>> 40)
+ | ((in[43 + inpos] & 1048575L) << (44 - 20));
+ out[63 + outpos] = (in[43 + inpos] >>> 20);
+ }
+
+ protected static void fastunpack45(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 35184372088831L);
+ out[1 + outpos] = (in[inpos] >>> 45)
+ | ((in[1 + inpos] & 67108863L) << (45 - 26));
+ out[2 + outpos] = (in[1 + inpos] >>> 26)
+ | ((in[2 + inpos] & 127L) << (45 - 7));
+ out[3 + outpos] = ((in[2 + inpos] >>> 7) & 35184372088831L);
+ out[4 + outpos] = (in[2 + inpos] >>> 52)
+ | ((in[3 + inpos] & 8589934591L) << (45 - 33));
+ out[5 + outpos] = (in[3 + inpos] >>> 33)
+ | ((in[4 + inpos] & 16383L) << (45 - 14));
+ out[6 + outpos] = ((in[4 + inpos] >>> 14) & 35184372088831L);
+ out[7 + outpos] = (in[4 + inpos] >>> 59)
+ | ((in[5 + inpos] & 1099511627775L) << (45 - 40));
+ out[8 + outpos] = (in[5 + inpos] >>> 40)
+ | ((in[6 + inpos] & 2097151L) << (45 - 21));
+ out[9 + outpos] = (in[6 + inpos] >>> 21)
+ | ((in[7 + inpos] & 3L) << (45 - 2));
+ out[10 + outpos] = ((in[7 + inpos] >>> 2) & 35184372088831L);
+ out[11 + outpos] = (in[7 + inpos] >>> 47)
+ | ((in[8 + inpos] & 268435455L) << (45 - 28));
+ out[12 + outpos] = (in[8 + inpos] >>> 28)
+ | ((in[9 + inpos] & 511L) << (45 - 9));
+ out[13 + outpos] = ((in[9 + inpos] >>> 9) & 35184372088831L);
+ out[14 + outpos] = (in[9 + inpos] >>> 54)
+ | ((in[10 + inpos] & 34359738367L) << (45 - 35));
+ out[15 + outpos] = (in[10 + inpos] >>> 35)
+ | ((in[11 + inpos] & 65535L) << (45 - 16));
+ out[16 + outpos] = ((in[11 + inpos] >>> 16) & 35184372088831L);
+ out[17 + outpos] = (in[11 + inpos] >>> 61)
+ | ((in[12 + inpos] & 4398046511103L) << (45 - 42));
+ out[18 + outpos] = (in[12 + inpos] >>> 42)
+ | ((in[13 + inpos] & 8388607L) << (45 - 23));
+ out[19 + outpos] = (in[13 + inpos] >>> 23)
+ | ((in[14 + inpos] & 15L) << (45 - 4));
+ out[20 + outpos] = ((in[14 + inpos] >>> 4) & 35184372088831L);
+ out[21 + outpos] = (in[14 + inpos] >>> 49)
+ | ((in[15 + inpos] & 1073741823L) << (45 - 30));
+ out[22 + outpos] = (in[15 + inpos] >>> 30)
+ | ((in[16 + inpos] & 2047L) << (45 - 11));
+ out[23 + outpos] = ((in[16 + inpos] >>> 11) & 35184372088831L);
+ out[24 + outpos] = (in[16 + inpos] >>> 56)
+ | ((in[17 + inpos] & 137438953471L) << (45 - 37));
+ out[25 + outpos] = (in[17 + inpos] >>> 37)
+ | ((in[18 + inpos] & 262143L) << (45 - 18));
+ out[26 + outpos] = ((in[18 + inpos] >>> 18) & 35184372088831L);
+ out[27 + outpos] = (in[18 + inpos] >>> 63)
+ | ((in[19 + inpos] & 17592186044415L) << (45 - 44));
+ out[28 + outpos] = (in[19 + inpos] >>> 44)
+ | ((in[20 + inpos] & 33554431L) << (45 - 25));
+ out[29 + outpos] = (in[20 + inpos] >>> 25)
+ | ((in[21 + inpos] & 63L) << (45 - 6));
+ out[30 + outpos] = ((in[21 + inpos] >>> 6) & 35184372088831L);
+ out[31 + outpos] = (in[21 + inpos] >>> 51)
+ | ((in[22 + inpos] & 4294967295L) << (45 - 32));
+ out[32 + outpos] = (in[22 + inpos] >>> 32)
+ | ((in[23 + inpos] & 8191L) << (45 - 13));
+ out[33 + outpos] = ((in[23 + inpos] >>> 13) & 35184372088831L);
+ out[34 + outpos] = (in[23 + inpos] >>> 58)
+ | ((in[24 + inpos] & 549755813887L) << (45 - 39));
+ out[35 + outpos] = (in[24 + inpos] >>> 39)
+ | ((in[25 + inpos] & 1048575L) << (45 - 20));
+ out[36 + outpos] = (in[25 + inpos] >>> 20)
+ | ((in[26 + inpos] & 1L) << (45 - 1));
+ out[37 + outpos] = ((in[26 + inpos] >>> 1) & 35184372088831L);
+ out[38 + outpos] = (in[26 + inpos] >>> 46)
+ | ((in[27 + inpos] & 134217727L) << (45 - 27));
+ out[39 + outpos] = (in[27 + inpos] >>> 27)
+ | ((in[28 + inpos] & 255L) << (45 - 8));
+ out[40 + outpos] = ((in[28 + inpos] >>> 8) & 35184372088831L);
+ out[41 + outpos] = (in[28 + inpos] >>> 53)
+ | ((in[29 + inpos] & 17179869183L) << (45 - 34));
+ out[42 + outpos] = (in[29 + inpos] >>> 34)
+ | ((in[30 + inpos] & 32767L) << (45 - 15));
+ out[43 + outpos] = ((in[30 + inpos] >>> 15) & 35184372088831L);
+ out[44 + outpos] = (in[30 + inpos] >>> 60)
+ | ((in[31 + inpos] & 2199023255551L) << (45 - 41));
+ out[45 + outpos] = (in[31 + inpos] >>> 41)
+ | ((in[32 + inpos] & 4194303L) << (45 - 22));
+ out[46 + outpos] = (in[32 + inpos] >>> 22)
+ | ((in[33 + inpos] & 7L) << (45 - 3));
+ out[47 + outpos] = ((in[33 + inpos] >>> 3) & 35184372088831L);
+ out[48 + outpos] = (in[33 + inpos] >>> 48)
+ | ((in[34 + inpos] & 536870911L) << (45 - 29));
+ out[49 + outpos] = (in[34 + inpos] >>> 29)
+ | ((in[35 + inpos] & 1023L) << (45 - 10));
+ out[50 + outpos] = ((in[35 + inpos] >>> 10) & 35184372088831L);
+ out[51 + outpos] = (in[35 + inpos] >>> 55)
+ | ((in[36 + inpos] & 68719476735L) << (45 - 36));
+ out[52 + outpos] = (in[36 + inpos] >>> 36)
+ | ((in[37 + inpos] & 131071L) << (45 - 17));
+ out[53 + outpos] = ((in[37 + inpos] >>> 17) & 35184372088831L);
+ out[54 + outpos] = (in[37 + inpos] >>> 62)
+ | ((in[38 + inpos] & 8796093022207L) << (45 - 43));
+ out[55 + outpos] = (in[38 + inpos] >>> 43)
+ | ((in[39 + inpos] & 16777215L) << (45 - 24));
+ out[56 + outpos] = (in[39 + inpos] >>> 24)
+ | ((in[40 + inpos] & 31L) << (45 - 5));
+ out[57 + outpos] = ((in[40 + inpos] >>> 5) & 35184372088831L);
+ out[58 + outpos] = (in[40 + inpos] >>> 50)
+ | ((in[41 + inpos] & 2147483647L) << (45 - 31));
+ out[59 + outpos] = (in[41 + inpos] >>> 31)
+ | ((in[42 + inpos] & 4095L) << (45 - 12));
+ out[60 + outpos] = ((in[42 + inpos] >>> 12) & 35184372088831L);
+ out[61 + outpos] = (in[42 + inpos] >>> 57)
+ | ((in[43 + inpos] & 274877906943L) << (45 - 38));
+ out[62 + outpos] = (in[43 + inpos] >>> 38)
+ | ((in[44 + inpos] & 524287L) << (45 - 19));
+ out[63 + outpos] = (in[44 + inpos] >>> 19);
+ }
+
+ protected static void fastunpack46(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 70368744177663L);
+ out[1 + outpos] = (in[inpos] >>> 46)
+ | ((in[1 + inpos] & 268435455L) << (46 - 28));
+ out[2 + outpos] = (in[1 + inpos] >>> 28)
+ | ((in[2 + inpos] & 1023L) << (46 - 10));
+ out[3 + outpos] = ((in[2 + inpos] >>> 10) & 70368744177663L);
+ out[4 + outpos] = (in[2 + inpos] >>> 56)
+ | ((in[3 + inpos] & 274877906943L) << (46 - 38));
+ out[5 + outpos] = (in[3 + inpos] >>> 38)
+ | ((in[4 + inpos] & 1048575L) << (46 - 20));
+ out[6 + outpos] = (in[4 + inpos] >>> 20)
+ | ((in[5 + inpos] & 3L) << (46 - 2));
+ out[7 + outpos] = ((in[5 + inpos] >>> 2) & 70368744177663L);
+ out[8 + outpos] = (in[5 + inpos] >>> 48)
+ | ((in[6 + inpos] & 1073741823L) << (46 - 30));
+ out[9 + outpos] = (in[6 + inpos] >>> 30)
+ | ((in[7 + inpos] & 4095L) << (46 - 12));
+ out[10 + outpos] = ((in[7 + inpos] >>> 12) & 70368744177663L);
+ out[11 + outpos] = (in[7 + inpos] >>> 58)
+ | ((in[8 + inpos] & 1099511627775L) << (46 - 40));
+ out[12 + outpos] = (in[8 + inpos] >>> 40)
+ | ((in[9 + inpos] & 4194303L) << (46 - 22));
+ out[13 + outpos] = (in[9 + inpos] >>> 22)
+ | ((in[10 + inpos] & 15L) << (46 - 4));
+ out[14 + outpos] = ((in[10 + inpos] >>> 4) & 70368744177663L);
+ out[15 + outpos] = (in[10 + inpos] >>> 50)
+ | ((in[11 + inpos] & 4294967295L) << (46 - 32));
+ out[16 + outpos] = (in[11 + inpos] >>> 32)
+ | ((in[12 + inpos] & 16383L) << (46 - 14));
+ out[17 + outpos] = ((in[12 + inpos] >>> 14) & 70368744177663L);
+ out[18 + outpos] = (in[12 + inpos] >>> 60)
+ | ((in[13 + inpos] & 4398046511103L) << (46 - 42));
+ out[19 + outpos] = (in[13 + inpos] >>> 42)
+ | ((in[14 + inpos] & 16777215L) << (46 - 24));
+ out[20 + outpos] = (in[14 + inpos] >>> 24)
+ | ((in[15 + inpos] & 63L) << (46 - 6));
+ out[21 + outpos] = ((in[15 + inpos] >>> 6) & 70368744177663L);
+ out[22 + outpos] = (in[15 + inpos] >>> 52)
+ | ((in[16 + inpos] & 17179869183L) << (46 - 34));
+ out[23 + outpos] = (in[16 + inpos] >>> 34)
+ | ((in[17 + inpos] & 65535L) << (46 - 16));
+ out[24 + outpos] = ((in[17 + inpos] >>> 16) & 70368744177663L);
+ out[25 + outpos] = (in[17 + inpos] >>> 62)
+ | ((in[18 + inpos] & 17592186044415L) << (46 - 44));
+ out[26 + outpos] = (in[18 + inpos] >>> 44)
+ | ((in[19 + inpos] & 67108863L) << (46 - 26));
+ out[27 + outpos] = (in[19 + inpos] >>> 26)
+ | ((in[20 + inpos] & 255L) << (46 - 8));
+ out[28 + outpos] = ((in[20 + inpos] >>> 8) & 70368744177663L);
+ out[29 + outpos] = (in[20 + inpos] >>> 54)
+ | ((in[21 + inpos] & 68719476735L) << (46 - 36));
+ out[30 + outpos] = (in[21 + inpos] >>> 36)
+ | ((in[22 + inpos] & 262143L) << (46 - 18));
+ out[31 + outpos] = (in[22 + inpos] >>> 18);
+ out[32 + outpos] = (in[23 + inpos] & 70368744177663L);
+ out[33 + outpos] = (in[23 + inpos] >>> 46)
+ | ((in[24 + inpos] & 268435455L) << (46 - 28));
+ out[34 + outpos] = (in[24 + inpos] >>> 28)
+ | ((in[25 + inpos] & 1023L) << (46 - 10));
+ out[35 + outpos] = ((in[25 + inpos] >>> 10) & 70368744177663L);
+ out[36 + outpos] = (in[25 + inpos] >>> 56)
+ | ((in[26 + inpos] & 274877906943L) << (46 - 38));
+ out[37 + outpos] = (in[26 + inpos] >>> 38)
+ | ((in[27 + inpos] & 1048575L) << (46 - 20));
+ out[38 + outpos] = (in[27 + inpos] >>> 20)
+ | ((in[28 + inpos] & 3L) << (46 - 2));
+ out[39 + outpos] = ((in[28 + inpos] >>> 2) & 70368744177663L);
+ out[40 + outpos] = (in[28 + inpos] >>> 48)
+ | ((in[29 + inpos] & 1073741823L) << (46 - 30));
+ out[41 + outpos] = (in[29 + inpos] >>> 30)
+ | ((in[30 + inpos] & 4095L) << (46 - 12));
+ out[42 + outpos] = ((in[30 + inpos] >>> 12) & 70368744177663L);
+ out[43 + outpos] = (in[30 + inpos] >>> 58)
+ | ((in[31 + inpos] & 1099511627775L) << (46 - 40));
+ out[44 + outpos] = (in[31 + inpos] >>> 40)
+ | ((in[32 + inpos] & 4194303L) << (46 - 22));
+ out[45 + outpos] = (in[32 + inpos] >>> 22)
+ | ((in[33 + inpos] & 15L) << (46 - 4));
+ out[46 + outpos] = ((in[33 + inpos] >>> 4) & 70368744177663L);
+ out[47 + outpos] = (in[33 + inpos] >>> 50)
+ | ((in[34 + inpos] & 4294967295L) << (46 - 32));
+ out[48 + outpos] = (in[34 + inpos] >>> 32)
+ | ((in[35 + inpos] & 16383L) << (46 - 14));
+ out[49 + outpos] = ((in[35 + inpos] >>> 14) & 70368744177663L);
+ out[50 + outpos] = (in[35 + inpos] >>> 60)
+ | ((in[36 + inpos] & 4398046511103L) << (46 - 42));
+ out[51 + outpos] = (in[36 + inpos] >>> 42)
+ | ((in[37 + inpos] & 16777215L) << (46 - 24));
+ out[52 + outpos] = (in[37 + inpos] >>> 24)
+ | ((in[38 + inpos] & 63L) << (46 - 6));
+ out[53 + outpos] = ((in[38 + inpos] >>> 6) & 70368744177663L);
+ out[54 + outpos] = (in[38 + inpos] >>> 52)
+ | ((in[39 + inpos] & 17179869183L) << (46 - 34));
+ out[55 + outpos] = (in[39 + inpos] >>> 34)
+ | ((in[40 + inpos] & 65535L) << (46 - 16));
+ out[56 + outpos] = ((in[40 + inpos] >>> 16) & 70368744177663L);
+ out[57 + outpos] = (in[40 + inpos] >>> 62)
+ | ((in[41 + inpos] & 17592186044415L) << (46 - 44));
+ out[58 + outpos] = (in[41 + inpos] >>> 44)
+ | ((in[42 + inpos] & 67108863L) << (46 - 26));
+ out[59 + outpos] = (in[42 + inpos] >>> 26)
+ | ((in[43 + inpos] & 255L) << (46 - 8));
+ out[60 + outpos] = ((in[43 + inpos] >>> 8) & 70368744177663L);
+ out[61 + outpos] = (in[43 + inpos] >>> 54)
+ | ((in[44 + inpos] & 68719476735L) << (46 - 36));
+ out[62 + outpos] = (in[44 + inpos] >>> 36)
+ | ((in[45 + inpos] & 262143L) << (46 - 18));
+ out[63 + outpos] = (in[45 + inpos] >>> 18);
+ }
+
+ protected static void fastunpack47(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 140737488355327L);
+ out[1 + outpos] = (in[inpos] >>> 47)
+ | ((in[1 + inpos] & 1073741823L) << (47 - 30));
+ out[2 + outpos] = (in[1 + inpos] >>> 30)
+ | ((in[2 + inpos] & 8191L) << (47 - 13));
+ out[3 + outpos] = ((in[2 + inpos] >>> 13) & 140737488355327L);
+ out[4 + outpos] = (in[2 + inpos] >>> 60)
+ | ((in[3 + inpos] & 8796093022207L) << (47 - 43));
+ out[5 + outpos] = (in[3 + inpos] >>> 43)
+ | ((in[4 + inpos] & 67108863L) << (47 - 26));
+ out[6 + outpos] = (in[4 + inpos] >>> 26)
+ | ((in[5 + inpos] & 511L) << (47 - 9));
+ out[7 + outpos] = ((in[5 + inpos] >>> 9) & 140737488355327L);
+ out[8 + outpos] = (in[5 + inpos] >>> 56)
+ | ((in[6 + inpos] & 549755813887L) << (47 - 39));
+ out[9 + outpos] = (in[6 + inpos] >>> 39)
+ | ((in[7 + inpos] & 4194303L) << (47 - 22));
+ out[10 + outpos] = (in[7 + inpos] >>> 22)
+ | ((in[8 + inpos] & 31L) << (47 - 5));
+ out[11 + outpos] = ((in[8 + inpos] >>> 5) & 140737488355327L);
+ out[12 + outpos] = (in[8 + inpos] >>> 52)
+ | ((in[9 + inpos] & 34359738367L) << (47 - 35));
+ out[13 + outpos] = (in[9 + inpos] >>> 35)
+ | ((in[10 + inpos] & 262143L) << (47 - 18));
+ out[14 + outpos] = (in[10 + inpos] >>> 18)
+ | ((in[11 + inpos] & 1L) << (47 - 1));
+ out[15 + outpos] = ((in[11 + inpos] >>> 1) & 140737488355327L);
+ out[16 + outpos] = (in[11 + inpos] >>> 48)
+ | ((in[12 + inpos] & 2147483647L) << (47 - 31));
+ out[17 + outpos] = (in[12 + inpos] >>> 31)
+ | ((in[13 + inpos] & 16383L) << (47 - 14));
+ out[18 + outpos] = ((in[13 + inpos] >>> 14) & 140737488355327L);
+ out[19 + outpos] = (in[13 + inpos] >>> 61)
+ | ((in[14 + inpos] & 17592186044415L) << (47 - 44));
+ out[20 + outpos] = (in[14 + inpos] >>> 44)
+ | ((in[15 + inpos] & 134217727L) << (47 - 27));
+ out[21 + outpos] = (in[15 + inpos] >>> 27)
+ | ((in[16 + inpos] & 1023L) << (47 - 10));
+ out[22 + outpos] = ((in[16 + inpos] >>> 10) & 140737488355327L);
+ out[23 + outpos] = (in[16 + inpos] >>> 57)
+ | ((in[17 + inpos] & 1099511627775L) << (47 - 40));
+ out[24 + outpos] = (in[17 + inpos] >>> 40)
+ | ((in[18 + inpos] & 8388607L) << (47 - 23));
+ out[25 + outpos] = (in[18 + inpos] >>> 23)
+ | ((in[19 + inpos] & 63L) << (47 - 6));
+ out[26 + outpos] = ((in[19 + inpos] >>> 6) & 140737488355327L);
+ out[27 + outpos] = (in[19 + inpos] >>> 53)
+ | ((in[20 + inpos] & 68719476735L) << (47 - 36));
+ out[28 + outpos] = (in[20 + inpos] >>> 36)
+ | ((in[21 + inpos] & 524287L) << (47 - 19));
+ out[29 + outpos] = (in[21 + inpos] >>> 19)
+ | ((in[22 + inpos] & 3L) << (47 - 2));
+ out[30 + outpos] = ((in[22 + inpos] >>> 2) & 140737488355327L);
+ out[31 + outpos] = (in[22 + inpos] >>> 49)
+ | ((in[23 + inpos] & 4294967295L) << (47 - 32));
+ out[32 + outpos] = (in[23 + inpos] >>> 32)
+ | ((in[24 + inpos] & 32767L) << (47 - 15));
+ out[33 + outpos] = ((in[24 + inpos] >>> 15) & 140737488355327L);
+ out[34 + outpos] = (in[24 + inpos] >>> 62)
+ | ((in[25 + inpos] & 35184372088831L) << (47 - 45));
+ out[35 + outpos] = (in[25 + inpos] >>> 45)
+ | ((in[26 + inpos] & 268435455L) << (47 - 28));
+ out[36 + outpos] = (in[26 + inpos] >>> 28)
+ | ((in[27 + inpos] & 2047L) << (47 - 11));
+ out[37 + outpos] = ((in[27 + inpos] >>> 11) & 140737488355327L);
+ out[38 + outpos] = (in[27 + inpos] >>> 58)
+ | ((in[28 + inpos] & 2199023255551L) << (47 - 41));
+ out[39 + outpos] = (in[28 + inpos] >>> 41)
+ | ((in[29 + inpos] & 16777215L) << (47 - 24));
+ out[40 + outpos] = (in[29 + inpos] >>> 24)
+ | ((in[30 + inpos] & 127L) << (47 - 7));
+ out[41 + outpos] = ((in[30 + inpos] >>> 7) & 140737488355327L);
+ out[42 + outpos] = (in[30 + inpos] >>> 54)
+ | ((in[31 + inpos] & 137438953471L) << (47 - 37));
+ out[43 + outpos] = (in[31 + inpos] >>> 37)
+ | ((in[32 + inpos] & 1048575L) << (47 - 20));
+ out[44 + outpos] = (in[32 + inpos] >>> 20)
+ | ((in[33 + inpos] & 7L) << (47 - 3));
+ out[45 + outpos] = ((in[33 + inpos] >>> 3) & 140737488355327L);
+ out[46 + outpos] = (in[33 + inpos] >>> 50)
+ | ((in[34 + inpos] & 8589934591L) << (47 - 33));
+ out[47 + outpos] = (in[34 + inpos] >>> 33)
+ | ((in[35 + inpos] & 65535L) << (47 - 16));
+ out[48 + outpos] = ((in[35 + inpos] >>> 16) & 140737488355327L);
+ out[49 + outpos] = (in[35 + inpos] >>> 63)
+ | ((in[36 + inpos] & 70368744177663L) << (47 - 46));
+ out[50 + outpos] = (in[36 + inpos] >>> 46)
+ | ((in[37 + inpos] & 536870911L) << (47 - 29));
+ out[51 + outpos] = (in[37 + inpos] >>> 29)
+ | ((in[38 + inpos] & 4095L) << (47 - 12));
+ out[52 + outpos] = ((in[38 + inpos] >>> 12) & 140737488355327L);
+ out[53 + outpos] = (in[38 + inpos] >>> 59)
+ | ((in[39 + inpos] & 4398046511103L) << (47 - 42));
+ out[54 + outpos] = (in[39 + inpos] >>> 42)
+ | ((in[40 + inpos] & 33554431L) << (47 - 25));
+ out[55 + outpos] = (in[40 + inpos] >>> 25)
+ | ((in[41 + inpos] & 255L) << (47 - 8));
+ out[56 + outpos] = ((in[41 + inpos] >>> 8) & 140737488355327L);
+ out[57 + outpos] = (in[41 + inpos] >>> 55)
+ | ((in[42 + inpos] & 274877906943L) << (47 - 38));
+ out[58 + outpos] = (in[42 + inpos] >>> 38)
+ | ((in[43 + inpos] & 2097151L) << (47 - 21));
+ out[59 + outpos] = (in[43 + inpos] >>> 21)
+ | ((in[44 + inpos] & 15L) << (47 - 4));
+ out[60 + outpos] = ((in[44 + inpos] >>> 4) & 140737488355327L);
+ out[61 + outpos] = (in[44 + inpos] >>> 51)
+ | ((in[45 + inpos] & 17179869183L) << (47 - 34));
+ out[62 + outpos] = (in[45 + inpos] >>> 34)
+ | ((in[46 + inpos] & 131071L) << (47 - 17));
+ out[63 + outpos] = (in[46 + inpos] >>> 17);
+ }
+
+ protected static void fastunpack48(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 281474976710655L);
+ out[1 + outpos] = (in[inpos] >>> 48)
+ | ((in[1 + inpos] & 4294967295L) << (48 - 32));
+ out[2 + outpos] = (in[1 + inpos] >>> 32)
+ | ((in[2 + inpos] & 65535L) << (48 - 16));
+ out[3 + outpos] = (in[2 + inpos] >>> 16);
+ out[4 + outpos] = (in[3 + inpos] & 281474976710655L);
+ out[5 + outpos] = (in[3 + inpos] >>> 48)
+ | ((in[4 + inpos] & 4294967295L) << (48 - 32));
+ out[6 + outpos] = (in[4 + inpos] >>> 32)
+ | ((in[5 + inpos] & 65535L) << (48 - 16));
+ out[7 + outpos] = (in[5 + inpos] >>> 16);
+ out[8 + outpos] = (in[6 + inpos] & 281474976710655L);
+ out[9 + outpos] = (in[6 + inpos] >>> 48)
+ | ((in[7 + inpos] & 4294967295L) << (48 - 32));
+ out[10 + outpos] = (in[7 + inpos] >>> 32)
+ | ((in[8 + inpos] & 65535L) << (48 - 16));
+ out[11 + outpos] = (in[8 + inpos] >>> 16);
+ out[12 + outpos] = (in[9 + inpos] & 281474976710655L);
+ out[13 + outpos] = (in[9 + inpos] >>> 48)
+ | ((in[10 + inpos] & 4294967295L) << (48 - 32));
+ out[14 + outpos] = (in[10 + inpos] >>> 32)
+ | ((in[11 + inpos] & 65535L) << (48 - 16));
+ out[15 + outpos] = (in[11 + inpos] >>> 16);
+ out[16 + outpos] = (in[12 + inpos] & 281474976710655L);
+ out[17 + outpos] = (in[12 + inpos] >>> 48)
+ | ((in[13 + inpos] & 4294967295L) << (48 - 32));
+ out[18 + outpos] = (in[13 + inpos] >>> 32)
+ | ((in[14 + inpos] & 65535L) << (48 - 16));
+ out[19 + outpos] = (in[14 + inpos] >>> 16);
+ out[20 + outpos] = (in[15 + inpos] & 281474976710655L);
+ out[21 + outpos] = (in[15 + inpos] >>> 48)
+ | ((in[16 + inpos] & 4294967295L) << (48 - 32));
+ out[22 + outpos] = (in[16 + inpos] >>> 32)
+ | ((in[17 + inpos] & 65535L) << (48 - 16));
+ out[23 + outpos] = (in[17 + inpos] >>> 16);
+ out[24 + outpos] = (in[18 + inpos] & 281474976710655L);
+ out[25 + outpos] = (in[18 + inpos] >>> 48)
+ | ((in[19 + inpos] & 4294967295L) << (48 - 32));
+ out[26 + outpos] = (in[19 + inpos] >>> 32)
+ | ((in[20 + inpos] & 65535L) << (48 - 16));
+ out[27 + outpos] = (in[20 + inpos] >>> 16);
+ out[28 + outpos] = (in[21 + inpos] & 281474976710655L);
+ out[29 + outpos] = (in[21 + inpos] >>> 48)
+ | ((in[22 + inpos] & 4294967295L) << (48 - 32));
+ out[30 + outpos] = (in[22 + inpos] >>> 32)
+ | ((in[23 + inpos] & 65535L) << (48 - 16));
+ out[31 + outpos] = (in[23 + inpos] >>> 16);
+ out[32 + outpos] = (in[24 + inpos] & 281474976710655L);
+ out[33 + outpos] = (in[24 + inpos] >>> 48)
+ | ((in[25 + inpos] & 4294967295L) << (48 - 32));
+ out[34 + outpos] = (in[25 + inpos] >>> 32)
+ | ((in[26 + inpos] & 65535L) << (48 - 16));
+ out[35 + outpos] = (in[26 + inpos] >>> 16);
+ out[36 + outpos] = (in[27 + inpos] & 281474976710655L);
+ out[37 + outpos] = (in[27 + inpos] >>> 48)
+ | ((in[28 + inpos] & 4294967295L) << (48 - 32));
+ out[38 + outpos] = (in[28 + inpos] >>> 32)
+ | ((in[29 + inpos] & 65535L) << (48 - 16));
+ out[39 + outpos] = (in[29 + inpos] >>> 16);
+ out[40 + outpos] = (in[30 + inpos] & 281474976710655L);
+ out[41 + outpos] = (in[30 + inpos] >>> 48)
+ | ((in[31 + inpos] & 4294967295L) << (48 - 32));
+ out[42 + outpos] = (in[31 + inpos] >>> 32)
+ | ((in[32 + inpos] & 65535L) << (48 - 16));
+ out[43 + outpos] = (in[32 + inpos] >>> 16);
+ out[44 + outpos] = (in[33 + inpos] & 281474976710655L);
+ out[45 + outpos] = (in[33 + inpos] >>> 48)
+ | ((in[34 + inpos] & 4294967295L) << (48 - 32));
+ out[46 + outpos] = (in[34 + inpos] >>> 32)
+ | ((in[35 + inpos] & 65535L) << (48 - 16));
+ out[47 + outpos] = (in[35 + inpos] >>> 16);
+ out[48 + outpos] = (in[36 + inpos] & 281474976710655L);
+ out[49 + outpos] = (in[36 + inpos] >>> 48)
+ | ((in[37 + inpos] & 4294967295L) << (48 - 32));
+ out[50 + outpos] = (in[37 + inpos] >>> 32)
+ | ((in[38 + inpos] & 65535L) << (48 - 16));
+ out[51 + outpos] = (in[38 + inpos] >>> 16);
+ out[52 + outpos] = (in[39 + inpos] & 281474976710655L);
+ out[53 + outpos] = (in[39 + inpos] >>> 48)
+ | ((in[40 + inpos] & 4294967295L) << (48 - 32));
+ out[54 + outpos] = (in[40 + inpos] >>> 32)
+ | ((in[41 + inpos] & 65535L) << (48 - 16));
+ out[55 + outpos] = (in[41 + inpos] >>> 16);
+ out[56 + outpos] = (in[42 + inpos] & 281474976710655L);
+ out[57 + outpos] = (in[42 + inpos] >>> 48)
+ | ((in[43 + inpos] & 4294967295L) << (48 - 32));
+ out[58 + outpos] = (in[43 + inpos] >>> 32)
+ | ((in[44 + inpos] & 65535L) << (48 - 16));
+ out[59 + outpos] = (in[44 + inpos] >>> 16);
+ out[60 + outpos] = (in[45 + inpos] & 281474976710655L);
+ out[61 + outpos] = (in[45 + inpos] >>> 48)
+ | ((in[46 + inpos] & 4294967295L) << (48 - 32));
+ out[62 + outpos] = (in[46 + inpos] >>> 32)
+ | ((in[47 + inpos] & 65535L) << (48 - 16));
+ out[63 + outpos] = (in[47 + inpos] >>> 16);
+ }
+
+ protected static void fastunpack49(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 562949953421311L);
+ out[1 + outpos] = (in[inpos] >>> 49)
+ | ((in[1 + inpos] & 17179869183L) << (49 - 34));
+ out[2 + outpos] = (in[1 + inpos] >>> 34)
+ | ((in[2 + inpos] & 524287L) << (49 - 19));
+ out[3 + outpos] = (in[2 + inpos] >>> 19)
+ | ((in[3 + inpos] & 15L) << (49 - 4));
+ out[4 + outpos] = ((in[3 + inpos] >>> 4) & 562949953421311L);
+ out[5 + outpos] = (in[3 + inpos] >>> 53)
+ | ((in[4 + inpos] & 274877906943L) << (49 - 38));
+ out[6 + outpos] = (in[4 + inpos] >>> 38)
+ | ((in[5 + inpos] & 8388607L) << (49 - 23));
+ out[7 + outpos] = (in[5 + inpos] >>> 23)
+ | ((in[6 + inpos] & 255L) << (49 - 8));
+ out[8 + outpos] = ((in[6 + inpos] >>> 8) & 562949953421311L);
+ out[9 + outpos] = (in[6 + inpos] >>> 57)
+ | ((in[7 + inpos] & 4398046511103L) << (49 - 42));
+ out[10 + outpos] = (in[7 + inpos] >>> 42)
+ | ((in[8 + inpos] & 134217727L) << (49 - 27));
+ out[11 + outpos] = (in[8 + inpos] >>> 27)
+ | ((in[9 + inpos] & 4095L) << (49 - 12));
+ out[12 + outpos] = ((in[9 + inpos] >>> 12) & 562949953421311L);
+ out[13 + outpos] = (in[9 + inpos] >>> 61)
+ | ((in[10 + inpos] & 70368744177663L) << (49 - 46));
+ out[14 + outpos] = (in[10 + inpos] >>> 46)
+ | ((in[11 + inpos] & 2147483647L) << (49 - 31));
+ out[15 + outpos] = (in[11 + inpos] >>> 31)
+ | ((in[12 + inpos] & 65535L) << (49 - 16));
+ out[16 + outpos] = (in[12 + inpos] >>> 16)
+ | ((in[13 + inpos] & 1L) << (49 - 1));
+ out[17 + outpos] = ((in[13 + inpos] >>> 1) & 562949953421311L);
+ out[18 + outpos] = (in[13 + inpos] >>> 50)
+ | ((in[14 + inpos] & 34359738367L) << (49 - 35));
+ out[19 + outpos] = (in[14 + inpos] >>> 35)
+ | ((in[15 + inpos] & 1048575L) << (49 - 20));
+ out[20 + outpos] = (in[15 + inpos] >>> 20)
+ | ((in[16 + inpos] & 31L) << (49 - 5));
+ out[21 + outpos] = ((in[16 + inpos] >>> 5) & 562949953421311L);
+ out[22 + outpos] = (in[16 + inpos] >>> 54)
+ | ((in[17 + inpos] & 549755813887L) << (49 - 39));
+ out[23 + outpos] = (in[17 + inpos] >>> 39)
+ | ((in[18 + inpos] & 16777215L) << (49 - 24));
+ out[24 + outpos] = (in[18 + inpos] >>> 24)
+ | ((in[19 + inpos] & 511L) << (49 - 9));
+ out[25 + outpos] = ((in[19 + inpos] >>> 9) & 562949953421311L);
+ out[26 + outpos] = (in[19 + inpos] >>> 58)
+ | ((in[20 + inpos] & 8796093022207L) << (49 - 43));
+ out[27 + outpos] = (in[20 + inpos] >>> 43)
+ | ((in[21 + inpos] & 268435455L) << (49 - 28));
+ out[28 + outpos] = (in[21 + inpos] >>> 28)
+ | ((in[22 + inpos] & 8191L) << (49 - 13));
+ out[29 + outpos] = ((in[22 + inpos] >>> 13) & 562949953421311L);
+ out[30 + outpos] = (in[22 + inpos] >>> 62)
+ | ((in[23 + inpos] & 140737488355327L) << (49 - 47));
+ out[31 + outpos] = (in[23 + inpos] >>> 47)
+ | ((in[24 + inpos] & 4294967295L) << (49 - 32));
+ out[32 + outpos] = (in[24 + inpos] >>> 32)
+ | ((in[25 + inpos] & 131071L) << (49 - 17));
+ out[33 + outpos] = (in[25 + inpos] >>> 17)
+ | ((in[26 + inpos] & 3L) << (49 - 2));
+ out[34 + outpos] = ((in[26 + inpos] >>> 2) & 562949953421311L);
+ out[35 + outpos] = (in[26 + inpos] >>> 51)
+ | ((in[27 + inpos] & 68719476735L) << (49 - 36));
+ out[36 + outpos] = (in[27 + inpos] >>> 36)
+ | ((in[28 + inpos] & 2097151L) << (49 - 21));
+ out[37 + outpos] = (in[28 + inpos] >>> 21)
+ | ((in[29 + inpos] & 63L) << (49 - 6));
+ out[38 + outpos] = ((in[29 + inpos] >>> 6) & 562949953421311L);
+ out[39 + outpos] = (in[29 + inpos] >>> 55)
+ | ((in[30 + inpos] & 1099511627775L) << (49 - 40));
+ out[40 + outpos] = (in[30 + inpos] >>> 40)
+ | ((in[31 + inpos] & 33554431L) << (49 - 25));
+ out[41 + outpos] = (in[31 + inpos] >>> 25)
+ | ((in[32 + inpos] & 1023L) << (49 - 10));
+ out[42 + outpos] = ((in[32 + inpos] >>> 10) & 562949953421311L);
+ out[43 + outpos] = (in[32 + inpos] >>> 59)
+ | ((in[33 + inpos] & 17592186044415L) << (49 - 44));
+ out[44 + outpos] = (in[33 + inpos] >>> 44)
+ | ((in[34 + inpos] & 536870911L) << (49 - 29));
+ out[45 + outpos] = (in[34 + inpos] >>> 29)
+ | ((in[35 + inpos] & 16383L) << (49 - 14));
+ out[46 + outpos] = ((in[35 + inpos] >>> 14) & 562949953421311L);
+ out[47 + outpos] = (in[35 + inpos] >>> 63)
+ | ((in[36 + inpos] & 281474976710655L) << (49 - 48));
+ out[48 + outpos] = (in[36 + inpos] >>> 48)
+ | ((in[37 + inpos] & 8589934591L) << (49 - 33));
+ out[49 + outpos] = (in[37 + inpos] >>> 33)
+ | ((in[38 + inpos] & 262143L) << (49 - 18));
+ out[50 + outpos] = (in[38 + inpos] >>> 18)
+ | ((in[39 + inpos] & 7L) << (49 - 3));
+ out[51 + outpos] = ((in[39 + inpos] >>> 3) & 562949953421311L);
+ out[52 + outpos] = (in[39 + inpos] >>> 52)
+ | ((in[40 + inpos] & 137438953471L) << (49 - 37));
+ out[53 + outpos] = (in[40 + inpos] >>> 37)
+ | ((in[41 + inpos] & 4194303L) << (49 - 22));
+ out[54 + outpos] = (in[41 + inpos] >>> 22)
+ | ((in[42 + inpos] & 127L) << (49 - 7));
+ out[55 + outpos] = ((in[42 + inpos] >>> 7) & 562949953421311L);
+ out[56 + outpos] = (in[42 + inpos] >>> 56)
+ | ((in[43 + inpos] & 2199023255551L) << (49 - 41));
+ out[57 + outpos] = (in[43 + inpos] >>> 41)
+ | ((in[44 + inpos] & 67108863L) << (49 - 26));
+ out[58 + outpos] = (in[44 + inpos] >>> 26)
+ | ((in[45 + inpos] & 2047L) << (49 - 11));
+ out[59 + outpos] = ((in[45 + inpos] >>> 11) & 562949953421311L);
+ out[60 + outpos] = (in[45 + inpos] >>> 60)
+ | ((in[46 + inpos] & 35184372088831L) << (49 - 45));
+ out[61 + outpos] = (in[46 + inpos] >>> 45)
+ | ((in[47 + inpos] & 1073741823L) << (49 - 30));
+ out[62 + outpos] = (in[47 + inpos] >>> 30)
+ | ((in[48 + inpos] & 32767L) << (49 - 15));
+ out[63 + outpos] = (in[48 + inpos] >>> 15);
+ }
+
+ protected static void fastunpack50(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 1125899906842623L);
+ out[1 + outpos] = (in[inpos] >>> 50)
+ | ((in[1 + inpos] & 68719476735L) << (50 - 36));
+ out[2 + outpos] = (in[1 + inpos] >>> 36)
+ | ((in[2 + inpos] & 4194303L) << (50 - 22));
+ out[3 + outpos] = (in[2 + inpos] >>> 22)
+ | ((in[3 + inpos] & 255L) << (50 - 8));
+ out[4 + outpos] = ((in[3 + inpos] >>> 8) & 1125899906842623L);
+ out[5 + outpos] = (in[3 + inpos] >>> 58)
+ | ((in[4 + inpos] & 17592186044415L) << (50 - 44));
+ out[6 + outpos] = (in[4 + inpos] >>> 44)
+ | ((in[5 + inpos] & 1073741823L) << (50 - 30));
+ out[7 + outpos] = (in[5 + inpos] >>> 30)
+ | ((in[6 + inpos] & 65535L) << (50 - 16));
+ out[8 + outpos] = (in[6 + inpos] >>> 16)
+ | ((in[7 + inpos] & 3L) << (50 - 2));
+ out[9 + outpos] = ((in[7 + inpos] >>> 2) & 1125899906842623L);
+ out[10 + outpos] = (in[7 + inpos] >>> 52)
+ | ((in[8 + inpos] & 274877906943L) << (50 - 38));
+ out[11 + outpos] = (in[8 + inpos] >>> 38)
+ | ((in[9 + inpos] & 16777215L) << (50 - 24));
+ out[12 + outpos] = (in[9 + inpos] >>> 24)
+ | ((in[10 + inpos] & 1023L) << (50 - 10));
+ out[13 + outpos] = ((in[10 + inpos] >>> 10) & 1125899906842623L);
+ out[14 + outpos] = (in[10 + inpos] >>> 60)
+ | ((in[11 + inpos] & 70368744177663L) << (50 - 46));
+ out[15 + outpos] = (in[11 + inpos] >>> 46)
+ | ((in[12 + inpos] & 4294967295L) << (50 - 32));
+ out[16 + outpos] = (in[12 + inpos] >>> 32)
+ | ((in[13 + inpos] & 262143L) << (50 - 18));
+ out[17 + outpos] = (in[13 + inpos] >>> 18)
+ | ((in[14 + inpos] & 15L) << (50 - 4));
+ out[18 + outpos] = ((in[14 + inpos] >>> 4) & 1125899906842623L);
+ out[19 + outpos] = (in[14 + inpos] >>> 54)
+ | ((in[15 + inpos] & 1099511627775L) << (50 - 40));
+ out[20 + outpos] = (in[15 + inpos] >>> 40)
+ | ((in[16 + inpos] & 67108863L) << (50 - 26));
+ out[21 + outpos] = (in[16 + inpos] >>> 26)
+ | ((in[17 + inpos] & 4095L) << (50 - 12));
+ out[22 + outpos] = ((in[17 + inpos] >>> 12) & 1125899906842623L);
+ out[23 + outpos] = (in[17 + inpos] >>> 62)
+ | ((in[18 + inpos] & 281474976710655L) << (50 - 48));
+ out[24 + outpos] = (in[18 + inpos] >>> 48)
+ | ((in[19 + inpos] & 17179869183L) << (50 - 34));
+ out[25 + outpos] = (in[19 + inpos] >>> 34)
+ | ((in[20 + inpos] & 1048575L) << (50 - 20));
+ out[26 + outpos] = (in[20 + inpos] >>> 20)
+ | ((in[21 + inpos] & 63L) << (50 - 6));
+ out[27 + outpos] = ((in[21 + inpos] >>> 6) & 1125899906842623L);
+ out[28 + outpos] = (in[21 + inpos] >>> 56)
+ | ((in[22 + inpos] & 4398046511103L) << (50 - 42));
+ out[29 + outpos] = (in[22 + inpos] >>> 42)
+ | ((in[23 + inpos] & 268435455L) << (50 - 28));
+ out[30 + outpos] = (in[23 + inpos] >>> 28)
+ | ((in[24 + inpos] & 16383L) << (50 - 14));
+ out[31 + outpos] = (in[24 + inpos] >>> 14);
+ out[32 + outpos] = (in[25 + inpos] & 1125899906842623L);
+ out[33 + outpos] = (in[25 + inpos] >>> 50)
+ | ((in[26 + inpos] & 68719476735L) << (50 - 36));
+ out[34 + outpos] = (in[26 + inpos] >>> 36)
+ | ((in[27 + inpos] & 4194303L) << (50 - 22));
+ out[35 + outpos] = (in[27 + inpos] >>> 22)
+ | ((in[28 + inpos] & 255L) << (50 - 8));
+ out[36 + outpos] = ((in[28 + inpos] >>> 8) & 1125899906842623L);
+ out[37 + outpos] = (in[28 + inpos] >>> 58)
+ | ((in[29 + inpos] & 17592186044415L) << (50 - 44));
+ out[38 + outpos] = (in[29 + inpos] >>> 44)
+ | ((in[30 + inpos] & 1073741823L) << (50 - 30));
+ out[39 + outpos] = (in[30 + inpos] >>> 30)
+ | ((in[31 + inpos] & 65535L) << (50 - 16));
+ out[40 + outpos] = (in[31 + inpos] >>> 16)
+ | ((in[32 + inpos] & 3L) << (50 - 2));
+ out[41 + outpos] = ((in[32 + inpos] >>> 2) & 1125899906842623L);
+ out[42 + outpos] = (in[32 + inpos] >>> 52)
+ | ((in[33 + inpos] & 274877906943L) << (50 - 38));
+ out[43 + outpos] = (in[33 + inpos] >>> 38)
+ | ((in[34 + inpos] & 16777215L) << (50 - 24));
+ out[44 + outpos] = (in[34 + inpos] >>> 24)
+ | ((in[35 + inpos] & 1023L) << (50 - 10));
+ out[45 + outpos] = ((in[35 + inpos] >>> 10) & 1125899906842623L);
+ out[46 + outpos] = (in[35 + inpos] >>> 60)
+ | ((in[36 + inpos] & 70368744177663L) << (50 - 46));
+ out[47 + outpos] = (in[36 + inpos] >>> 46)
+ | ((in[37 + inpos] & 4294967295L) << (50 - 32));
+ out[48 + outpos] = (in[37 + inpos] >>> 32)
+ | ((in[38 + inpos] & 262143L) << (50 - 18));
+ out[49 + outpos] = (in[38 + inpos] >>> 18)
+ | ((in[39 + inpos] & 15L) << (50 - 4));
+ out[50 + outpos] = ((in[39 + inpos] >>> 4) & 1125899906842623L);
+ out[51 + outpos] = (in[39 + inpos] >>> 54)
+ | ((in[40 + inpos] & 1099511627775L) << (50 - 40));
+ out[52 + outpos] = (in[40 + inpos] >>> 40)
+ | ((in[41 + inpos] & 67108863L) << (50 - 26));
+ out[53 + outpos] = (in[41 + inpos] >>> 26)
+ | ((in[42 + inpos] & 4095L) << (50 - 12));
+ out[54 + outpos] = ((in[42 + inpos] >>> 12) & 1125899906842623L);
+ out[55 + outpos] = (in[42 + inpos] >>> 62)
+ | ((in[43 + inpos] & 281474976710655L) << (50 - 48));
+ out[56 + outpos] = (in[43 + inpos] >>> 48)
+ | ((in[44 + inpos] & 17179869183L) << (50 - 34));
+ out[57 + outpos] = (in[44 + inpos] >>> 34)
+ | ((in[45 + inpos] & 1048575L) << (50 - 20));
+ out[58 + outpos] = (in[45 + inpos] >>> 20)
+ | ((in[46 + inpos] & 63L) << (50 - 6));
+ out[59 + outpos] = ((in[46 + inpos] >>> 6) & 1125899906842623L);
+ out[60 + outpos] = (in[46 + inpos] >>> 56)
+ | ((in[47 + inpos] & 4398046511103L) << (50 - 42));
+ out[61 + outpos] = (in[47 + inpos] >>> 42)
+ | ((in[48 + inpos] & 268435455L) << (50 - 28));
+ out[62 + outpos] = (in[48 + inpos] >>> 28)
+ | ((in[49 + inpos] & 16383L) << (50 - 14));
+ out[63 + outpos] = (in[49 + inpos] >>> 14);
+ }
+
+ protected static void fastunpack51(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 2251799813685247L);
+ out[1 + outpos] = (in[inpos] >>> 51)
+ | ((in[1 + inpos] & 274877906943L) << (51 - 38));
+ out[2 + outpos] = (in[1 + inpos] >>> 38)
+ | ((in[2 + inpos] & 33554431L) << (51 - 25));
+ out[3 + outpos] = (in[2 + inpos] >>> 25)
+ | ((in[3 + inpos] & 4095L) << (51 - 12));
+ out[4 + outpos] = ((in[3 + inpos] >>> 12) & 2251799813685247L);
+ out[5 + outpos] = (in[3 + inpos] >>> 63)
+ | ((in[4 + inpos] & 1125899906842623L) << (51 - 50));
+ out[6 + outpos] = (in[4 + inpos] >>> 50)
+ | ((in[5 + inpos] & 137438953471L) << (51 - 37));
+ out[7 + outpos] = (in[5 + inpos] >>> 37)
+ | ((in[6 + inpos] & 16777215L) << (51 - 24));
+ out[8 + outpos] = (in[6 + inpos] >>> 24)
+ | ((in[7 + inpos] & 2047L) << (51 - 11));
+ out[9 + outpos] = ((in[7 + inpos] >>> 11) & 2251799813685247L);
+ out[10 + outpos] = (in[7 + inpos] >>> 62)
+ | ((in[8 + inpos] & 562949953421311L) << (51 - 49));
+ out[11 + outpos] = (in[8 + inpos] >>> 49)
+ | ((in[9 + inpos] & 68719476735L) << (51 - 36));
+ out[12 + outpos] = (in[9 + inpos] >>> 36)
+ | ((in[10 + inpos] & 8388607L) << (51 - 23));
+ out[13 + outpos] = (in[10 + inpos] >>> 23)
+ | ((in[11 + inpos] & 1023L) << (51 - 10));
+ out[14 + outpos] = ((in[11 + inpos] >>> 10) & 2251799813685247L);
+ out[15 + outpos] = (in[11 + inpos] >>> 61)
+ | ((in[12 + inpos] & 281474976710655L) << (51 - 48));
+ out[16 + outpos] = (in[12 + inpos] >>> 48)
+ | ((in[13 + inpos] & 34359738367L) << (51 - 35));
+ out[17 + outpos] = (in[13 + inpos] >>> 35)
+ | ((in[14 + inpos] & 4194303L) << (51 - 22));
+ out[18 + outpos] = (in[14 + inpos] >>> 22)
+ | ((in[15 + inpos] & 511L) << (51 - 9));
+ out[19 + outpos] = ((in[15 + inpos] >>> 9) & 2251799813685247L);
+ out[20 + outpos] = (in[15 + inpos] >>> 60)
+ | ((in[16 + inpos] & 140737488355327L) << (51 - 47));
+ out[21 + outpos] = (in[16 + inpos] >>> 47)
+ | ((in[17 + inpos] & 17179869183L) << (51 - 34));
+ out[22 + outpos] = (in[17 + inpos] >>> 34)
+ | ((in[18 + inpos] & 2097151L) << (51 - 21));
+ out[23 + outpos] = (in[18 + inpos] >>> 21)
+ | ((in[19 + inpos] & 255L) << (51 - 8));
+ out[24 + outpos] = ((in[19 + inpos] >>> 8) & 2251799813685247L);
+ out[25 + outpos] = (in[19 + inpos] >>> 59)
+ | ((in[20 + inpos] & 70368744177663L) << (51 - 46));
+ out[26 + outpos] = (in[20 + inpos] >>> 46)
+ | ((in[21 + inpos] & 8589934591L) << (51 - 33));
+ out[27 + outpos] = (in[21 + inpos] >>> 33)
+ | ((in[22 + inpos] & 1048575L) << (51 - 20));
+ out[28 + outpos] = (in[22 + inpos] >>> 20)
+ | ((in[23 + inpos] & 127L) << (51 - 7));
+ out[29 + outpos] = ((in[23 + inpos] >>> 7) & 2251799813685247L);
+ out[30 + outpos] = (in[23 + inpos] >>> 58)
+ | ((in[24 + inpos] & 35184372088831L) << (51 - 45));
+ out[31 + outpos] = (in[24 + inpos] >>> 45)
+ | ((in[25 + inpos] & 4294967295L) << (51 - 32));
+ out[32 + outpos] = (in[25 + inpos] >>> 32)
+ | ((in[26 + inpos] & 524287L) << (51 - 19));
+ out[33 + outpos] = (in[26 + inpos] >>> 19)
+ | ((in[27 + inpos] & 63L) << (51 - 6));
+ out[34 + outpos] = ((in[27 + inpos] >>> 6) & 2251799813685247L);
+ out[35 + outpos] = (in[27 + inpos] >>> 57)
+ | ((in[28 + inpos] & 17592186044415L) << (51 - 44));
+ out[36 + outpos] = (in[28 + inpos] >>> 44)
+ | ((in[29 + inpos] & 2147483647L) << (51 - 31));
+ out[37 + outpos] = (in[29 + inpos] >>> 31)
+ | ((in[30 + inpos] & 262143L) << (51 - 18));
+ out[38 + outpos] = (in[30 + inpos] >>> 18)
+ | ((in[31 + inpos] & 31L) << (51 - 5));
+ out[39 + outpos] = ((in[31 + inpos] >>> 5) & 2251799813685247L);
+ out[40 + outpos] = (in[31 + inpos] >>> 56)
+ | ((in[32 + inpos] & 8796093022207L) << (51 - 43));
+ out[41 + outpos] = (in[32 + inpos] >>> 43)
+ | ((in[33 + inpos] & 1073741823L) << (51 - 30));
+ out[42 + outpos] = (in[33 + inpos] >>> 30)
+ | ((in[34 + inpos] & 131071L) << (51 - 17));
+ out[43 + outpos] = (in[34 + inpos] >>> 17)
+ | ((in[35 + inpos] & 15L) << (51 - 4));
+ out[44 + outpos] = ((in[35 + inpos] >>> 4) & 2251799813685247L);
+ out[45 + outpos] = (in[35 + inpos] >>> 55)
+ | ((in[36 + inpos] & 4398046511103L) << (51 - 42));
+ out[46 + outpos] = (in[36 + inpos] >>> 42)
+ | ((in[37 + inpos] & 536870911L) << (51 - 29));
+ out[47 + outpos] = (in[37 + inpos] >>> 29)
+ | ((in[38 + inpos] & 65535L) << (51 - 16));
+ out[48 + outpos] = (in[38 + inpos] >>> 16)
+ | ((in[39 + inpos] & 7L) << (51 - 3));
+ out[49 + outpos] = ((in[39 + inpos] >>> 3) & 2251799813685247L);
+ out[50 + outpos] = (in[39 + inpos] >>> 54)
+ | ((in[40 + inpos] & 2199023255551L) << (51 - 41));
+ out[51 + outpos] = (in[40 + inpos] >>> 41)
+ | ((in[41 + inpos] & 268435455L) << (51 - 28));
+ out[52 + outpos] = (in[41 + inpos] >>> 28)
+ | ((in[42 + inpos] & 32767L) << (51 - 15));
+ out[53 + outpos] = (in[42 + inpos] >>> 15)
+ | ((in[43 + inpos] & 3L) << (51 - 2));
+ out[54 + outpos] = ((in[43 + inpos] >>> 2) & 2251799813685247L);
+ out[55 + outpos] = (in[43 + inpos] >>> 53)
+ | ((in[44 + inpos] & 1099511627775L) << (51 - 40));
+ out[56 + outpos] = (in[44 + inpos] >>> 40)
+ | ((in[45 + inpos] & 134217727L) << (51 - 27));
+ out[57 + outpos] = (in[45 + inpos] >>> 27)
+ | ((in[46 + inpos] & 16383L) << (51 - 14));
+ out[58 + outpos] = (in[46 + inpos] >>> 14)
+ | ((in[47 + inpos] & 1L) << (51 - 1));
+ out[59 + outpos] = ((in[47 + inpos] >>> 1) & 2251799813685247L);
+ out[60 + outpos] = (in[47 + inpos] >>> 52)
+ | ((in[48 + inpos] & 549755813887L) << (51 - 39));
+ out[61 + outpos] = (in[48 + inpos] >>> 39)
+ | ((in[49 + inpos] & 67108863L) << (51 - 26));
+ out[62 + outpos] = (in[49 + inpos] >>> 26)
+ | ((in[50 + inpos] & 8191L) << (51 - 13));
+ out[63 + outpos] = (in[50 + inpos] >>> 13);
+ }
+
+ protected static void fastunpack52(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 4503599627370495L);
+ out[1 + outpos] = (in[inpos] >>> 52)
+ | ((in[1 + inpos] & 1099511627775L) << (52 - 40));
+ out[2 + outpos] = (in[1 + inpos] >>> 40)
+ | ((in[2 + inpos] & 268435455L) << (52 - 28));
+ out[3 + outpos] = (in[2 + inpos] >>> 28)
+ | ((in[3 + inpos] & 65535L) << (52 - 16));
+ out[4 + outpos] = (in[3 + inpos] >>> 16)
+ | ((in[4 + inpos] & 15L) << (52 - 4));
+ out[5 + outpos] = ((in[4 + inpos] >>> 4) & 4503599627370495L);
+ out[6 + outpos] = (in[4 + inpos] >>> 56)
+ | ((in[5 + inpos] & 17592186044415L) << (52 - 44));
+ out[7 + outpos] = (in[5 + inpos] >>> 44)
+ | ((in[6 + inpos] & 4294967295L) << (52 - 32));
+ out[8 + outpos] = (in[6 + inpos] >>> 32)
+ | ((in[7 + inpos] & 1048575L) << (52 - 20));
+ out[9 + outpos] = (in[7 + inpos] >>> 20)
+ | ((in[8 + inpos] & 255L) << (52 - 8));
+ out[10 + outpos] = ((in[8 + inpos] >>> 8) & 4503599627370495L);
+ out[11 + outpos] = (in[8 + inpos] >>> 60)
+ | ((in[9 + inpos] & 281474976710655L) << (52 - 48));
+ out[12 + outpos] = (in[9 + inpos] >>> 48)
+ | ((in[10 + inpos] & 68719476735L) << (52 - 36));
+ out[13 + outpos] = (in[10 + inpos] >>> 36)
+ | ((in[11 + inpos] & 16777215L) << (52 - 24));
+ out[14 + outpos] = (in[11 + inpos] >>> 24)
+ | ((in[12 + inpos] & 4095L) << (52 - 12));
+ out[15 + outpos] = (in[12 + inpos] >>> 12);
+ out[16 + outpos] = (in[13 + inpos] & 4503599627370495L);
+ out[17 + outpos] = (in[13 + inpos] >>> 52)
+ | ((in[14 + inpos] & 1099511627775L) << (52 - 40));
+ out[18 + outpos] = (in[14 + inpos] >>> 40)
+ | ((in[15 + inpos] & 268435455L) << (52 - 28));
+ out[19 + outpos] = (in[15 + inpos] >>> 28)
+ | ((in[16 + inpos] & 65535L) << (52 - 16));
+ out[20 + outpos] = (in[16 + inpos] >>> 16)
+ | ((in[17 + inpos] & 15L) << (52 - 4));
+ out[21 + outpos] = ((in[17 + inpos] >>> 4) & 4503599627370495L);
+ out[22 + outpos] = (in[17 + inpos] >>> 56)
+ | ((in[18 + inpos] & 17592186044415L) << (52 - 44));
+ out[23 + outpos] = (in[18 + inpos] >>> 44)
+ | ((in[19 + inpos] & 4294967295L) << (52 - 32));
+ out[24 + outpos] = (in[19 + inpos] >>> 32)
+ | ((in[20 + inpos] & 1048575L) << (52 - 20));
+ out[25 + outpos] = (in[20 + inpos] >>> 20)
+ | ((in[21 + inpos] & 255L) << (52 - 8));
+ out[26 + outpos] = ((in[21 + inpos] >>> 8) & 4503599627370495L);
+ out[27 + outpos] = (in[21 + inpos] >>> 60)
+ | ((in[22 + inpos] & 281474976710655L) << (52 - 48));
+ out[28 + outpos] = (in[22 + inpos] >>> 48)
+ | ((in[23 + inpos] & 68719476735L) << (52 - 36));
+ out[29 + outpos] = (in[23 + inpos] >>> 36)
+ | ((in[24 + inpos] & 16777215L) << (52 - 24));
+ out[30 + outpos] = (in[24 + inpos] >>> 24)
+ | ((in[25 + inpos] & 4095L) << (52 - 12));
+ out[31 + outpos] = (in[25 + inpos] >>> 12);
+ out[32 + outpos] = (in[26 + inpos] & 4503599627370495L);
+ out[33 + outpos] = (in[26 + inpos] >>> 52)
+ | ((in[27 + inpos] & 1099511627775L) << (52 - 40));
+ out[34 + outpos] = (in[27 + inpos] >>> 40)
+ | ((in[28 + inpos] & 268435455L) << (52 - 28));
+ out[35 + outpos] = (in[28 + inpos] >>> 28)
+ | ((in[29 + inpos] & 65535L) << (52 - 16));
+ out[36 + outpos] = (in[29 + inpos] >>> 16)
+ | ((in[30 + inpos] & 15L) << (52 - 4));
+ out[37 + outpos] = ((in[30 + inpos] >>> 4) & 4503599627370495L);
+ out[38 + outpos] = (in[30 + inpos] >>> 56)
+ | ((in[31 + inpos] & 17592186044415L) << (52 - 44));
+ out[39 + outpos] = (in[31 + inpos] >>> 44)
+ | ((in[32 + inpos] & 4294967295L) << (52 - 32));
+ out[40 + outpos] = (in[32 + inpos] >>> 32)
+ | ((in[33 + inpos] & 1048575L) << (52 - 20));
+ out[41 + outpos] = (in[33 + inpos] >>> 20)
+ | ((in[34 + inpos] & 255L) << (52 - 8));
+ out[42 + outpos] = ((in[34 + inpos] >>> 8) & 4503599627370495L);
+ out[43 + outpos] = (in[34 + inpos] >>> 60)
+ | ((in[35 + inpos] & 281474976710655L) << (52 - 48));
+ out[44 + outpos] = (in[35 + inpos] >>> 48)
+ | ((in[36 + inpos] & 68719476735L) << (52 - 36));
+ out[45 + outpos] = (in[36 + inpos] >>> 36)
+ | ((in[37 + inpos] & 16777215L) << (52 - 24));
+ out[46 + outpos] = (in[37 + inpos] >>> 24)
+ | ((in[38 + inpos] & 4095L) << (52 - 12));
+ out[47 + outpos] = (in[38 + inpos] >>> 12);
+ out[48 + outpos] = (in[39 + inpos] & 4503599627370495L);
+ out[49 + outpos] = (in[39 + inpos] >>> 52)
+ | ((in[40 + inpos] & 1099511627775L) << (52 - 40));
+ out[50 + outpos] = (in[40 + inpos] >>> 40)
+ | ((in[41 + inpos] & 268435455L) << (52 - 28));
+ out[51 + outpos] = (in[41 + inpos] >>> 28)
+ | ((in[42 + inpos] & 65535L) << (52 - 16));
+ out[52 + outpos] = (in[42 + inpos] >>> 16)
+ | ((in[43 + inpos] & 15L) << (52 - 4));
+ out[53 + outpos] = ((in[43 + inpos] >>> 4) & 4503599627370495L);
+ out[54 + outpos] = (in[43 + inpos] >>> 56)
+ | ((in[44 + inpos] & 17592186044415L) << (52 - 44));
+ out[55 + outpos] = (in[44 + inpos] >>> 44)
+ | ((in[45 + inpos] & 4294967295L) << (52 - 32));
+ out[56 + outpos] = (in[45 + inpos] >>> 32)
+ | ((in[46 + inpos] & 1048575L) << (52 - 20));
+ out[57 + outpos] = (in[46 + inpos] >>> 20)
+ | ((in[47 + inpos] & 255L) << (52 - 8));
+ out[58 + outpos] = ((in[47 + inpos] >>> 8) & 4503599627370495L);
+ out[59 + outpos] = (in[47 + inpos] >>> 60)
+ | ((in[48 + inpos] & 281474976710655L) << (52 - 48));
+ out[60 + outpos] = (in[48 + inpos] >>> 48)
+ | ((in[49 + inpos] & 68719476735L) << (52 - 36));
+ out[61 + outpos] = (in[49 + inpos] >>> 36)
+ | ((in[50 + inpos] & 16777215L) << (52 - 24));
+ out[62 + outpos] = (in[50 + inpos] >>> 24)
+ | ((in[51 + inpos] & 4095L) << (52 - 12));
+ out[63 + outpos] = (in[51 + inpos] >>> 12);
+ }
+
+ protected static void fastunpack53(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 9007199254740991L);
+ out[1 + outpos] = (in[inpos] >>> 53)
+ | ((in[1 + inpos] & 4398046511103L) << (53 - 42));
+ out[2 + outpos] = (in[1 + inpos] >>> 42)
+ | ((in[2 + inpos] & 2147483647L) << (53 - 31));
+ out[3 + outpos] = (in[2 + inpos] >>> 31)
+ | ((in[3 + inpos] & 1048575L) << (53 - 20));
+ out[4 + outpos] = (in[3 + inpos] >>> 20)
+ | ((in[4 + inpos] & 511L) << (53 - 9));
+ out[5 + outpos] = ((in[4 + inpos] >>> 9) & 9007199254740991L);
+ out[6 + outpos] = (in[4 + inpos] >>> 62)
+ | ((in[5 + inpos] & 2251799813685247L) << (53 - 51));
+ out[7 + outpos] = (in[5 + inpos] >>> 51)
+ | ((in[6 + inpos] & 1099511627775L) << (53 - 40));
+ out[8 + outpos] = (in[6 + inpos] >>> 40)
+ | ((in[7 + inpos] & 536870911L) << (53 - 29));
+ out[9 + outpos] = (in[7 + inpos] >>> 29)
+ | ((in[8 + inpos] & 262143L) << (53 - 18));
+ out[10 + outpos] = (in[8 + inpos] >>> 18)
+ | ((in[9 + inpos] & 127L) << (53 - 7));
+ out[11 + outpos] = ((in[9 + inpos] >>> 7) & 9007199254740991L);
+ out[12 + outpos] = (in[9 + inpos] >>> 60)
+ | ((in[10 + inpos] & 562949953421311L) << (53 - 49));
+ out[13 + outpos] = (in[10 + inpos] >>> 49)
+ | ((in[11 + inpos] & 274877906943L) << (53 - 38));
+ out[14 + outpos] = (in[11 + inpos] >>> 38)
+ | ((in[12 + inpos] & 134217727L) << (53 - 27));
+ out[15 + outpos] = (in[12 + inpos] >>> 27)
+ | ((in[13 + inpos] & 65535L) << (53 - 16));
+ out[16 + outpos] = (in[13 + inpos] >>> 16)
+ | ((in[14 + inpos] & 31L) << (53 - 5));
+ out[17 + outpos] = ((in[14 + inpos] >>> 5) & 9007199254740991L);
+ out[18 + outpos] = (in[14 + inpos] >>> 58)
+ | ((in[15 + inpos] & 140737488355327L) << (53 - 47));
+ out[19 + outpos] = (in[15 + inpos] >>> 47)
+ | ((in[16 + inpos] & 68719476735L) << (53 - 36));
+ out[20 + outpos] = (in[16 + inpos] >>> 36)
+ | ((in[17 + inpos] & 33554431L) << (53 - 25));
+ out[21 + outpos] = (in[17 + inpos] >>> 25)
+ | ((in[18 + inpos] & 16383L) << (53 - 14));
+ out[22 + outpos] = (in[18 + inpos] >>> 14)
+ | ((in[19 + inpos] & 7L) << (53 - 3));
+ out[23 + outpos] = ((in[19 + inpos] >>> 3) & 9007199254740991L);
+ out[24 + outpos] = (in[19 + inpos] >>> 56)
+ | ((in[20 + inpos] & 35184372088831L) << (53 - 45));
+ out[25 + outpos] = (in[20 + inpos] >>> 45)
+ | ((in[21 + inpos] & 17179869183L) << (53 - 34));
+ out[26 + outpos] = (in[21 + inpos] >>> 34)
+ | ((in[22 + inpos] & 8388607L) << (53 - 23));
+ out[27 + outpos] = (in[22 + inpos] >>> 23)
+ | ((in[23 + inpos] & 4095L) << (53 - 12));
+ out[28 + outpos] = (in[23 + inpos] >>> 12)
+ | ((in[24 + inpos] & 1L) << (53 - 1));
+ out[29 + outpos] = ((in[24 + inpos] >>> 1) & 9007199254740991L);
+ out[30 + outpos] = (in[24 + inpos] >>> 54)
+ | ((in[25 + inpos] & 8796093022207L) << (53 - 43));
+ out[31 + outpos] = (in[25 + inpos] >>> 43)
+ | ((in[26 + inpos] & 4294967295L) << (53 - 32));
+ out[32 + outpos] = (in[26 + inpos] >>> 32)
+ | ((in[27 + inpos] & 2097151L) << (53 - 21));
+ out[33 + outpos] = (in[27 + inpos] >>> 21)
+ | ((in[28 + inpos] & 1023L) << (53 - 10));
+ out[34 + outpos] = ((in[28 + inpos] >>> 10) & 9007199254740991L);
+ out[35 + outpos] = (in[28 + inpos] >>> 63)
+ | ((in[29 + inpos] & 4503599627370495L) << (53 - 52));
+ out[36 + outpos] = (in[29 + inpos] >>> 52)
+ | ((in[30 + inpos] & 2199023255551L) << (53 - 41));
+ out[37 + outpos] = (in[30 + inpos] >>> 41)
+ | ((in[31 + inpos] & 1073741823L) << (53 - 30));
+ out[38 + outpos] = (in[31 + inpos] >>> 30)
+ | ((in[32 + inpos] & 524287L) << (53 - 19));
+ out[39 + outpos] = (in[32 + inpos] >>> 19)
+ | ((in[33 + inpos] & 255L) << (53 - 8));
+ out[40 + outpos] = ((in[33 + inpos] >>> 8) & 9007199254740991L);
+ out[41 + outpos] = (in[33 + inpos] >>> 61)
+ | ((in[34 + inpos] & 1125899906842623L) << (53 - 50));
+ out[42 + outpos] = (in[34 + inpos] >>> 50)
+ | ((in[35 + inpos] & 549755813887L) << (53 - 39));
+ out[43 + outpos] = (in[35 + inpos] >>> 39)
+ | ((in[36 + inpos] & 268435455L) << (53 - 28));
+ out[44 + outpos] = (in[36 + inpos] >>> 28)
+ | ((in[37 + inpos] & 131071L) << (53 - 17));
+ out[45 + outpos] = (in[37 + inpos] >>> 17)
+ | ((in[38 + inpos] & 63L) << (53 - 6));
+ out[46 + outpos] = ((in[38 + inpos] >>> 6) & 9007199254740991L);
+ out[47 + outpos] = (in[38 + inpos] >>> 59)
+ | ((in[39 + inpos] & 281474976710655L) << (53 - 48));
+ out[48 + outpos] = (in[39 + inpos] >>> 48)
+ | ((in[40 + inpos] & 137438953471L) << (53 - 37));
+ out[49 + outpos] = (in[40 + inpos] >>> 37)
+ | ((in[41 + inpos] & 67108863L) << (53 - 26));
+ out[50 + outpos] = (in[41 + inpos] >>> 26)
+ | ((in[42 + inpos] & 32767L) << (53 - 15));
+ out[51 + outpos] = (in[42 + inpos] >>> 15)
+ | ((in[43 + inpos] & 15L) << (53 - 4));
+ out[52 + outpos] = ((in[43 + inpos] >>> 4) & 9007199254740991L);
+ out[53 + outpos] = (in[43 + inpos] >>> 57)
+ | ((in[44 + inpos] & 70368744177663L) << (53 - 46));
+ out[54 + outpos] = (in[44 + inpos] >>> 46)
+ | ((in[45 + inpos] & 34359738367L) << (53 - 35));
+ out[55 + outpos] = (in[45 + inpos] >>> 35)
+ | ((in[46 + inpos] & 16777215L) << (53 - 24));
+ out[56 + outpos] = (in[46 + inpos] >>> 24)
+ | ((in[47 + inpos] & 8191L) << (53 - 13));
+ out[57 + outpos] = (in[47 + inpos] >>> 13)
+ | ((in[48 + inpos] & 3L) << (53 - 2));
+ out[58 + outpos] = ((in[48 + inpos] >>> 2) & 9007199254740991L);
+ out[59 + outpos] = (in[48 + inpos] >>> 55)
+ | ((in[49 + inpos] & 17592186044415L) << (53 - 44));
+ out[60 + outpos] = (in[49 + inpos] >>> 44)
+ | ((in[50 + inpos] & 8589934591L) << (53 - 33));
+ out[61 + outpos] = (in[50 + inpos] >>> 33)
+ | ((in[51 + inpos] & 4194303L) << (53 - 22));
+ out[62 + outpos] = (in[51 + inpos] >>> 22)
+ | ((in[52 + inpos] & 2047L) << (53 - 11));
+ out[63 + outpos] = (in[52 + inpos] >>> 11);
+ }
+
+ protected static void fastunpack54(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 18014398509481983L);
+ out[1 + outpos] = (in[inpos] >>> 54)
+ | ((in[1 + inpos] & 17592186044415L) << (54 - 44));
+ out[2 + outpos] = (in[1 + inpos] >>> 44)
+ | ((in[2 + inpos] & 17179869183L) << (54 - 34));
+ out[3 + outpos] = (in[2 + inpos] >>> 34)
+ | ((in[3 + inpos] & 16777215L) << (54 - 24));
+ out[4 + outpos] = (in[3 + inpos] >>> 24)
+ | ((in[4 + inpos] & 16383L) << (54 - 14));
+ out[5 + outpos] = (in[4 + inpos] >>> 14)
+ | ((in[5 + inpos] & 15L) << (54 - 4));
+ out[6 + outpos] = ((in[5 + inpos] >>> 4) & 18014398509481983L);
+ out[7 + outpos] = (in[5 + inpos] >>> 58)
+ | ((in[6 + inpos] & 281474976710655L) << (54 - 48));
+ out[8 + outpos] = (in[6 + inpos] >>> 48)
+ | ((in[7 + inpos] & 274877906943L) << (54 - 38));
+ out[9 + outpos] = (in[7 + inpos] >>> 38)
+ | ((in[8 + inpos] & 268435455L) << (54 - 28));
+ out[10 + outpos] = (in[8 + inpos] >>> 28)
+ | ((in[9 + inpos] & 262143L) << (54 - 18));
+ out[11 + outpos] = (in[9 + inpos] >>> 18)
+ | ((in[10 + inpos] & 255L) << (54 - 8));
+ out[12 + outpos] = ((in[10 + inpos] >>> 8) & 18014398509481983L);
+ out[13 + outpos] = (in[10 + inpos] >>> 62)
+ | ((in[11 + inpos] & 4503599627370495L) << (54 - 52));
+ out[14 + outpos] = (in[11 + inpos] >>> 52)
+ | ((in[12 + inpos] & 4398046511103L) << (54 - 42));
+ out[15 + outpos] = (in[12 + inpos] >>> 42)
+ | ((in[13 + inpos] & 4294967295L) << (54 - 32));
+ out[16 + outpos] = (in[13 + inpos] >>> 32)
+ | ((in[14 + inpos] & 4194303L) << (54 - 22));
+ out[17 + outpos] = (in[14 + inpos] >>> 22)
+ | ((in[15 + inpos] & 4095L) << (54 - 12));
+ out[18 + outpos] = (in[15 + inpos] >>> 12)
+ | ((in[16 + inpos] & 3L) << (54 - 2));
+ out[19 + outpos] = ((in[16 + inpos] >>> 2) & 18014398509481983L);
+ out[20 + outpos] = (in[16 + inpos] >>> 56)
+ | ((in[17 + inpos] & 70368744177663L) << (54 - 46));
+ out[21 + outpos] = (in[17 + inpos] >>> 46)
+ | ((in[18 + inpos] & 68719476735L) << (54 - 36));
+ out[22 + outpos] = (in[18 + inpos] >>> 36)
+ | ((in[19 + inpos] & 67108863L) << (54 - 26));
+ out[23 + outpos] = (in[19 + inpos] >>> 26)
+ | ((in[20 + inpos] & 65535L) << (54 - 16));
+ out[24 + outpos] = (in[20 + inpos] >>> 16)
+ | ((in[21 + inpos] & 63L) << (54 - 6));
+ out[25 + outpos] = ((in[21 + inpos] >>> 6) & 18014398509481983L);
+ out[26 + outpos] = (in[21 + inpos] >>> 60)
+ | ((in[22 + inpos] & 1125899906842623L) << (54 - 50));
+ out[27 + outpos] = (in[22 + inpos] >>> 50)
+ | ((in[23 + inpos] & 1099511627775L) << (54 - 40));
+ out[28 + outpos] = (in[23 + inpos] >>> 40)
+ | ((in[24 + inpos] & 1073741823L) << (54 - 30));
+ out[29 + outpos] = (in[24 + inpos] >>> 30)
+ | ((in[25 + inpos] & 1048575L) << (54 - 20));
+ out[30 + outpos] = (in[25 + inpos] >>> 20)
+ | ((in[26 + inpos] & 1023L) << (54 - 10));
+ out[31 + outpos] = (in[26 + inpos] >>> 10);
+ out[32 + outpos] = (in[27 + inpos] & 18014398509481983L);
+ out[33 + outpos] = (in[27 + inpos] >>> 54)
+ | ((in[28 + inpos] & 17592186044415L) << (54 - 44));
+ out[34 + outpos] = (in[28 + inpos] >>> 44)
+ | ((in[29 + inpos] & 17179869183L) << (54 - 34));
+ out[35 + outpos] = (in[29 + inpos] >>> 34)
+ | ((in[30 + inpos] & 16777215L) << (54 - 24));
+ out[36 + outpos] = (in[30 + inpos] >>> 24)
+ | ((in[31 + inpos] & 16383L) << (54 - 14));
+ out[37 + outpos] = (in[31 + inpos] >>> 14)
+ | ((in[32 + inpos] & 15L) << (54 - 4));
+ out[38 + outpos] = ((in[32 + inpos] >>> 4) & 18014398509481983L);
+ out[39 + outpos] = (in[32 + inpos] >>> 58)
+ | ((in[33 + inpos] & 281474976710655L) << (54 - 48));
+ out[40 + outpos] = (in[33 + inpos] >>> 48)
+ | ((in[34 + inpos] & 274877906943L) << (54 - 38));
+ out[41 + outpos] = (in[34 + inpos] >>> 38)
+ | ((in[35 + inpos] & 268435455L) << (54 - 28));
+ out[42 + outpos] = (in[35 + inpos] >>> 28)
+ | ((in[36 + inpos] & 262143L) << (54 - 18));
+ out[43 + outpos] = (in[36 + inpos] >>> 18)
+ | ((in[37 + inpos] & 255L) << (54 - 8));
+ out[44 + outpos] = ((in[37 + inpos] >>> 8) & 18014398509481983L);
+ out[45 + outpos] = (in[37 + inpos] >>> 62)
+ | ((in[38 + inpos] & 4503599627370495L) << (54 - 52));
+ out[46 + outpos] = (in[38 + inpos] >>> 52)
+ | ((in[39 + inpos] & 4398046511103L) << (54 - 42));
+ out[47 + outpos] = (in[39 + inpos] >>> 42)
+ | ((in[40 + inpos] & 4294967295L) << (54 - 32));
+ out[48 + outpos] = (in[40 + inpos] >>> 32)
+ | ((in[41 + inpos] & 4194303L) << (54 - 22));
+ out[49 + outpos] = (in[41 + inpos] >>> 22)
+ | ((in[42 + inpos] & 4095L) << (54 - 12));
+ out[50 + outpos] = (in[42 + inpos] >>> 12)
+ | ((in[43 + inpos] & 3L) << (54 - 2));
+ out[51 + outpos] = ((in[43 + inpos] >>> 2) & 18014398509481983L);
+ out[52 + outpos] = (in[43 + inpos] >>> 56)
+ | ((in[44 + inpos] & 70368744177663L) << (54 - 46));
+ out[53 + outpos] = (in[44 + inpos] >>> 46)
+ | ((in[45 + inpos] & 68719476735L) << (54 - 36));
+ out[54 + outpos] = (in[45 + inpos] >>> 36)
+ | ((in[46 + inpos] & 67108863L) << (54 - 26));
+ out[55 + outpos] = (in[46 + inpos] >>> 26)
+ | ((in[47 + inpos] & 65535L) << (54 - 16));
+ out[56 + outpos] = (in[47 + inpos] >>> 16)
+ | ((in[48 + inpos] & 63L) << (54 - 6));
+ out[57 + outpos] = ((in[48 + inpos] >>> 6) & 18014398509481983L);
+ out[58 + outpos] = (in[48 + inpos] >>> 60)
+ | ((in[49 + inpos] & 1125899906842623L) << (54 - 50));
+ out[59 + outpos] = (in[49 + inpos] >>> 50)
+ | ((in[50 + inpos] & 1099511627775L) << (54 - 40));
+ out[60 + outpos] = (in[50 + inpos] >>> 40)
+ | ((in[51 + inpos] & 1073741823L) << (54 - 30));
+ out[61 + outpos] = (in[51 + inpos] >>> 30)
+ | ((in[52 + inpos] & 1048575L) << (54 - 20));
+ out[62 + outpos] = (in[52 + inpos] >>> 20)
+ | ((in[53 + inpos] & 1023L) << (54 - 10));
+ out[63 + outpos] = (in[53 + inpos] >>> 10);
+ }
+
+ protected static void fastunpack55(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 36028797018963967L);
+ out[1 + outpos] = (in[inpos] >>> 55)
+ | ((in[1 + inpos] & 70368744177663L) << (55 - 46));
+ out[2 + outpos] = (in[1 + inpos] >>> 46)
+ | ((in[2 + inpos] & 137438953471L) << (55 - 37));
+ out[3 + outpos] = (in[2 + inpos] >>> 37)
+ | ((in[3 + inpos] & 268435455L) << (55 - 28));
+ out[4 + outpos] = (in[3 + inpos] >>> 28)
+ | ((in[4 + inpos] & 524287L) << (55 - 19));
+ out[5 + outpos] = (in[4 + inpos] >>> 19)
+ | ((in[5 + inpos] & 1023L) << (55 - 10));
+ out[6 + outpos] = (in[5 + inpos] >>> 10)
+ | ((in[6 + inpos] & 1L) << (55 - 1));
+ out[7 + outpos] = ((in[6 + inpos] >>> 1) & 36028797018963967L);
+ out[8 + outpos] = (in[6 + inpos] >>> 56)
+ | ((in[7 + inpos] & 140737488355327L) << (55 - 47));
+ out[9 + outpos] = (in[7 + inpos] >>> 47)
+ | ((in[8 + inpos] & 274877906943L) << (55 - 38));
+ out[10 + outpos] = (in[8 + inpos] >>> 38)
+ | ((in[9 + inpos] & 536870911L) << (55 - 29));
+ out[11 + outpos] = (in[9 + inpos] >>> 29)
+ | ((in[10 + inpos] & 1048575L) << (55 - 20));
+ out[12 + outpos] = (in[10 + inpos] >>> 20)
+ | ((in[11 + inpos] & 2047L) << (55 - 11));
+ out[13 + outpos] = (in[11 + inpos] >>> 11)
+ | ((in[12 + inpos] & 3L) << (55 - 2));
+ out[14 + outpos] = ((in[12 + inpos] >>> 2) & 36028797018963967L);
+ out[15 + outpos] = (in[12 + inpos] >>> 57)
+ | ((in[13 + inpos] & 281474976710655L) << (55 - 48));
+ out[16 + outpos] = (in[13 + inpos] >>> 48)
+ | ((in[14 + inpos] & 549755813887L) << (55 - 39));
+ out[17 + outpos] = (in[14 + inpos] >>> 39)
+ | ((in[15 + inpos] & 1073741823L) << (55 - 30));
+ out[18 + outpos] = (in[15 + inpos] >>> 30)
+ | ((in[16 + inpos] & 2097151L) << (55 - 21));
+ out[19 + outpos] = (in[16 + inpos] >>> 21)
+ | ((in[17 + inpos] & 4095L) << (55 - 12));
+ out[20 + outpos] = (in[17 + inpos] >>> 12)
+ | ((in[18 + inpos] & 7L) << (55 - 3));
+ out[21 + outpos] = ((in[18 + inpos] >>> 3) & 36028797018963967L);
+ out[22 + outpos] = (in[18 + inpos] >>> 58)
+ | ((in[19 + inpos] & 562949953421311L) << (55 - 49));
+ out[23 + outpos] = (in[19 + inpos] >>> 49)
+ | ((in[20 + inpos] & 1099511627775L) << (55 - 40));
+ out[24 + outpos] = (in[20 + inpos] >>> 40)
+ | ((in[21 + inpos] & 2147483647L) << (55 - 31));
+ out[25 + outpos] = (in[21 + inpos] >>> 31)
+ | ((in[22 + inpos] & 4194303L) << (55 - 22));
+ out[26 + outpos] = (in[22 + inpos] >>> 22)
+ | ((in[23 + inpos] & 8191L) << (55 - 13));
+ out[27 + outpos] = (in[23 + inpos] >>> 13)
+ | ((in[24 + inpos] & 15L) << (55 - 4));
+ out[28 + outpos] = ((in[24 + inpos] >>> 4) & 36028797018963967L);
+ out[29 + outpos] = (in[24 + inpos] >>> 59)
+ | ((in[25 + inpos] & 1125899906842623L) << (55 - 50));
+ out[30 + outpos] = (in[25 + inpos] >>> 50)
+ | ((in[26 + inpos] & 2199023255551L) << (55 - 41));
+ out[31 + outpos] = (in[26 + inpos] >>> 41)
+ | ((in[27 + inpos] & 4294967295L) << (55 - 32));
+ out[32 + outpos] = (in[27 + inpos] >>> 32)
+ | ((in[28 + inpos] & 8388607L) << (55 - 23));
+ out[33 + outpos] = (in[28 + inpos] >>> 23)
+ | ((in[29 + inpos] & 16383L) << (55 - 14));
+ out[34 + outpos] = (in[29 + inpos] >>> 14)
+ | ((in[30 + inpos] & 31L) << (55 - 5));
+ out[35 + outpos] = ((in[30 + inpos] >>> 5) & 36028797018963967L);
+ out[36 + outpos] = (in[30 + inpos] >>> 60)
+ | ((in[31 + inpos] & 2251799813685247L) << (55 - 51));
+ out[37 + outpos] = (in[31 + inpos] >>> 51)
+ | ((in[32 + inpos] & 4398046511103L) << (55 - 42));
+ out[38 + outpos] = (in[32 + inpos] >>> 42)
+ | ((in[33 + inpos] & 8589934591L) << (55 - 33));
+ out[39 + outpos] = (in[33 + inpos] >>> 33)
+ | ((in[34 + inpos] & 16777215L) << (55 - 24));
+ out[40 + outpos] = (in[34 + inpos] >>> 24)
+ | ((in[35 + inpos] & 32767L) << (55 - 15));
+ out[41 + outpos] = (in[35 + inpos] >>> 15)
+ | ((in[36 + inpos] & 63L) << (55 - 6));
+ out[42 + outpos] = ((in[36 + inpos] >>> 6) & 36028797018963967L);
+ out[43 + outpos] = (in[36 + inpos] >>> 61)
+ | ((in[37 + inpos] & 4503599627370495L) << (55 - 52));
+ out[44 + outpos] = (in[37 + inpos] >>> 52)
+ | ((in[38 + inpos] & 8796093022207L) << (55 - 43));
+ out[45 + outpos] = (in[38 + inpos] >>> 43)
+ | ((in[39 + inpos] & 17179869183L) << (55 - 34));
+ out[46 + outpos] = (in[39 + inpos] >>> 34)
+ | ((in[40 + inpos] & 33554431L) << (55 - 25));
+ out[47 + outpos] = (in[40 + inpos] >>> 25)
+ | ((in[41 + inpos] & 65535L) << (55 - 16));
+ out[48 + outpos] = (in[41 + inpos] >>> 16)
+ | ((in[42 + inpos] & 127L) << (55 - 7));
+ out[49 + outpos] = ((in[42 + inpos] >>> 7) & 36028797018963967L);
+ out[50 + outpos] = (in[42 + inpos] >>> 62)
+ | ((in[43 + inpos] & 9007199254740991L) << (55 - 53));
+ out[51 + outpos] = (in[43 + inpos] >>> 53)
+ | ((in[44 + inpos] & 17592186044415L) << (55 - 44));
+ out[52 + outpos] = (in[44 + inpos] >>> 44)
+ | ((in[45 + inpos] & 34359738367L) << (55 - 35));
+ out[53 + outpos] = (in[45 + inpos] >>> 35)
+ | ((in[46 + inpos] & 67108863L) << (55 - 26));
+ out[54 + outpos] = (in[46 + inpos] >>> 26)
+ | ((in[47 + inpos] & 131071L) << (55 - 17));
+ out[55 + outpos] = (in[47 + inpos] >>> 17)
+ | ((in[48 + inpos] & 255L) << (55 - 8));
+ out[56 + outpos] = ((in[48 + inpos] >>> 8) & 36028797018963967L);
+ out[57 + outpos] = (in[48 + inpos] >>> 63)
+ | ((in[49 + inpos] & 18014398509481983L) << (55 - 54));
+ out[58 + outpos] = (in[49 + inpos] >>> 54)
+ | ((in[50 + inpos] & 35184372088831L) << (55 - 45));
+ out[59 + outpos] = (in[50 + inpos] >>> 45)
+ | ((in[51 + inpos] & 68719476735L) << (55 - 36));
+ out[60 + outpos] = (in[51 + inpos] >>> 36)
+ | ((in[52 + inpos] & 134217727L) << (55 - 27));
+ out[61 + outpos] = (in[52 + inpos] >>> 27)
+ | ((in[53 + inpos] & 262143L) << (55 - 18));
+ out[62 + outpos] = (in[53 + inpos] >>> 18)
+ | ((in[54 + inpos] & 511L) << (55 - 9));
+ out[63 + outpos] = (in[54 + inpos] >>> 9);
+ }
+
+ protected static void fastunpack56(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 72057594037927935L);
+ out[1 + outpos] = (in[inpos] >>> 56)
+ | ((in[1 + inpos] & 281474976710655L) << (56 - 48));
+ out[2 + outpos] = (in[1 + inpos] >>> 48)
+ | ((in[2 + inpos] & 1099511627775L) << (56 - 40));
+ out[3 + outpos] = (in[2 + inpos] >>> 40)
+ | ((in[3 + inpos] & 4294967295L) << (56 - 32));
+ out[4 + outpos] = (in[3 + inpos] >>> 32)
+ | ((in[4 + inpos] & 16777215L) << (56 - 24));
+ out[5 + outpos] = (in[4 + inpos] >>> 24)
+ | ((in[5 + inpos] & 65535L) << (56 - 16));
+ out[6 + outpos] = (in[5 + inpos] >>> 16)
+ | ((in[6 + inpos] & 255L) << (56 - 8));
+ out[7 + outpos] = (in[6 + inpos] >>> 8);
+ out[8 + outpos] = (in[7 + inpos] & 72057594037927935L);
+ out[9 + outpos] = (in[7 + inpos] >>> 56)
+ | ((in[8 + inpos] & 281474976710655L) << (56 - 48));
+ out[10 + outpos] = (in[8 + inpos] >>> 48)
+ | ((in[9 + inpos] & 1099511627775L) << (56 - 40));
+ out[11 + outpos] = (in[9 + inpos] >>> 40)
+ | ((in[10 + inpos] & 4294967295L) << (56 - 32));
+ out[12 + outpos] = (in[10 + inpos] >>> 32)
+ | ((in[11 + inpos] & 16777215L) << (56 - 24));
+ out[13 + outpos] = (in[11 + inpos] >>> 24)
+ | ((in[12 + inpos] & 65535L) << (56 - 16));
+ out[14 + outpos] = (in[12 + inpos] >>> 16)
+ | ((in[13 + inpos] & 255L) << (56 - 8));
+ out[15 + outpos] = (in[13 + inpos] >>> 8);
+ out[16 + outpos] = (in[14 + inpos] & 72057594037927935L);
+ out[17 + outpos] = (in[14 + inpos] >>> 56)
+ | ((in[15 + inpos] & 281474976710655L) << (56 - 48));
+ out[18 + outpos] = (in[15 + inpos] >>> 48)
+ | ((in[16 + inpos] & 1099511627775L) << (56 - 40));
+ out[19 + outpos] = (in[16 + inpos] >>> 40)
+ | ((in[17 + inpos] & 4294967295L) << (56 - 32));
+ out[20 + outpos] = (in[17 + inpos] >>> 32)
+ | ((in[18 + inpos] & 16777215L) << (56 - 24));
+ out[21 + outpos] = (in[18 + inpos] >>> 24)
+ | ((in[19 + inpos] & 65535L) << (56 - 16));
+ out[22 + outpos] = (in[19 + inpos] >>> 16)
+ | ((in[20 + inpos] & 255L) << (56 - 8));
+ out[23 + outpos] = (in[20 + inpos] >>> 8);
+ out[24 + outpos] = (in[21 + inpos] & 72057594037927935L);
+ out[25 + outpos] = (in[21 + inpos] >>> 56)
+ | ((in[22 + inpos] & 281474976710655L) << (56 - 48));
+ out[26 + outpos] = (in[22 + inpos] >>> 48)
+ | ((in[23 + inpos] & 1099511627775L) << (56 - 40));
+ out[27 + outpos] = (in[23 + inpos] >>> 40)
+ | ((in[24 + inpos] & 4294967295L) << (56 - 32));
+ out[28 + outpos] = (in[24 + inpos] >>> 32)
+ | ((in[25 + inpos] & 16777215L) << (56 - 24));
+ out[29 + outpos] = (in[25 + inpos] >>> 24)
+ | ((in[26 + inpos] & 65535L) << (56 - 16));
+ out[30 + outpos] = (in[26 + inpos] >>> 16)
+ | ((in[27 + inpos] & 255L) << (56 - 8));
+ out[31 + outpos] = (in[27 + inpos] >>> 8);
+ out[32 + outpos] = (in[28 + inpos] & 72057594037927935L);
+ out[33 + outpos] = (in[28 + inpos] >>> 56)
+ | ((in[29 + inpos] & 281474976710655L) << (56 - 48));
+ out[34 + outpos] = (in[29 + inpos] >>> 48)
+ | ((in[30 + inpos] & 1099511627775L) << (56 - 40));
+ out[35 + outpos] = (in[30 + inpos] >>> 40)
+ | ((in[31 + inpos] & 4294967295L) << (56 - 32));
+ out[36 + outpos] = (in[31 + inpos] >>> 32)
+ | ((in[32 + inpos] & 16777215L) << (56 - 24));
+ out[37 + outpos] = (in[32 + inpos] >>> 24)
+ | ((in[33 + inpos] & 65535L) << (56 - 16));
+ out[38 + outpos] = (in[33 + inpos] >>> 16)
+ | ((in[34 + inpos] & 255L) << (56 - 8));
+ out[39 + outpos] = (in[34 + inpos] >>> 8);
+ out[40 + outpos] = (in[35 + inpos] & 72057594037927935L);
+ out[41 + outpos] = (in[35 + inpos] >>> 56)
+ | ((in[36 + inpos] & 281474976710655L) << (56 - 48));
+ out[42 + outpos] = (in[36 + inpos] >>> 48)
+ | ((in[37 + inpos] & 1099511627775L) << (56 - 40));
+ out[43 + outpos] = (in[37 + inpos] >>> 40)
+ | ((in[38 + inpos] & 4294967295L) << (56 - 32));
+ out[44 + outpos] = (in[38 + inpos] >>> 32)
+ | ((in[39 + inpos] & 16777215L) << (56 - 24));
+ out[45 + outpos] = (in[39 + inpos] >>> 24)
+ | ((in[40 + inpos] & 65535L) << (56 - 16));
+ out[46 + outpos] = (in[40 + inpos] >>> 16)
+ | ((in[41 + inpos] & 255L) << (56 - 8));
+ out[47 + outpos] = (in[41 + inpos] >>> 8);
+ out[48 + outpos] = (in[42 + inpos] & 72057594037927935L);
+ out[49 + outpos] = (in[42 + inpos] >>> 56)
+ | ((in[43 + inpos] & 281474976710655L) << (56 - 48));
+ out[50 + outpos] = (in[43 + inpos] >>> 48)
+ | ((in[44 + inpos] & 1099511627775L) << (56 - 40));
+ out[51 + outpos] = (in[44 + inpos] >>> 40)
+ | ((in[45 + inpos] & 4294967295L) << (56 - 32));
+ out[52 + outpos] = (in[45 + inpos] >>> 32)
+ | ((in[46 + inpos] & 16777215L) << (56 - 24));
+ out[53 + outpos] = (in[46 + inpos] >>> 24)
+ | ((in[47 + inpos] & 65535L) << (56 - 16));
+ out[54 + outpos] = (in[47 + inpos] >>> 16)
+ | ((in[48 + inpos] & 255L) << (56 - 8));
+ out[55 + outpos] = (in[48 + inpos] >>> 8);
+ out[56 + outpos] = (in[49 + inpos] & 72057594037927935L);
+ out[57 + outpos] = (in[49 + inpos] >>> 56)
+ | ((in[50 + inpos] & 281474976710655L) << (56 - 48));
+ out[58 + outpos] = (in[50 + inpos] >>> 48)
+ | ((in[51 + inpos] & 1099511627775L) << (56 - 40));
+ out[59 + outpos] = (in[51 + inpos] >>> 40)
+ | ((in[52 + inpos] & 4294967295L) << (56 - 32));
+ out[60 + outpos] = (in[52 + inpos] >>> 32)
+ | ((in[53 + inpos] & 16777215L) << (56 - 24));
+ out[61 + outpos] = (in[53 + inpos] >>> 24)
+ | ((in[54 + inpos] & 65535L) << (56 - 16));
+ out[62 + outpos] = (in[54 + inpos] >>> 16)
+ | ((in[55 + inpos] & 255L) << (56 - 8));
+ out[63 + outpos] = (in[55 + inpos] >>> 8);
+ }
+
+ protected static void fastunpack57(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 144115188075855871L);
+ out[1 + outpos] = (in[inpos] >>> 57)
+ | ((in[1 + inpos] & 1125899906842623L) << (57 - 50));
+ out[2 + outpos] = (in[1 + inpos] >>> 50)
+ | ((in[2 + inpos] & 8796093022207L) << (57 - 43));
+ out[3 + outpos] = (in[2 + inpos] >>> 43)
+ | ((in[3 + inpos] & 68719476735L) << (57 - 36));
+ out[4 + outpos] = (in[3 + inpos] >>> 36)
+ | ((in[4 + inpos] & 536870911L) << (57 - 29));
+ out[5 + outpos] = (in[4 + inpos] >>> 29)
+ | ((in[5 + inpos] & 4194303L) << (57 - 22));
+ out[6 + outpos] = (in[5 + inpos] >>> 22)
+ | ((in[6 + inpos] & 32767L) << (57 - 15));
+ out[7 + outpos] = (in[6 + inpos] >>> 15)
+ | ((in[7 + inpos] & 255L) << (57 - 8));
+ out[8 + outpos] = (in[7 + inpos] >>> 8)
+ | ((in[8 + inpos] & 1L) << (57 - 1));
+ out[9 + outpos] = ((in[8 + inpos] >>> 1) & 144115188075855871L);
+ out[10 + outpos] = (in[8 + inpos] >>> 58)
+ | ((in[9 + inpos] & 2251799813685247L) << (57 - 51));
+ out[11 + outpos] = (in[9 + inpos] >>> 51)
+ | ((in[10 + inpos] & 17592186044415L) << (57 - 44));
+ out[12 + outpos] = (in[10 + inpos] >>> 44)
+ | ((in[11 + inpos] & 137438953471L) << (57 - 37));
+ out[13 + outpos] = (in[11 + inpos] >>> 37)
+ | ((in[12 + inpos] & 1073741823L) << (57 - 30));
+ out[14 + outpos] = (in[12 + inpos] >>> 30)
+ | ((in[13 + inpos] & 8388607L) << (57 - 23));
+ out[15 + outpos] = (in[13 + inpos] >>> 23)
+ | ((in[14 + inpos] & 65535L) << (57 - 16));
+ out[16 + outpos] = (in[14 + inpos] >>> 16)
+ | ((in[15 + inpos] & 511L) << (57 - 9));
+ out[17 + outpos] = (in[15 + inpos] >>> 9)
+ | ((in[16 + inpos] & 3L) << (57 - 2));
+ out[18 + outpos] = ((in[16 + inpos] >>> 2) & 144115188075855871L);
+ out[19 + outpos] = (in[16 + inpos] >>> 59)
+ | ((in[17 + inpos] & 4503599627370495L) << (57 - 52));
+ out[20 + outpos] = (in[17 + inpos] >>> 52)
+ | ((in[18 + inpos] & 35184372088831L) << (57 - 45));
+ out[21 + outpos] = (in[18 + inpos] >>> 45)
+ | ((in[19 + inpos] & 274877906943L) << (57 - 38));
+ out[22 + outpos] = (in[19 + inpos] >>> 38)
+ | ((in[20 + inpos] & 2147483647L) << (57 - 31));
+ out[23 + outpos] = (in[20 + inpos] >>> 31)
+ | ((in[21 + inpos] & 16777215L) << (57 - 24));
+ out[24 + outpos] = (in[21 + inpos] >>> 24)
+ | ((in[22 + inpos] & 131071L) << (57 - 17));
+ out[25 + outpos] = (in[22 + inpos] >>> 17)
+ | ((in[23 + inpos] & 1023L) << (57 - 10));
+ out[26 + outpos] = (in[23 + inpos] >>> 10)
+ | ((in[24 + inpos] & 7L) << (57 - 3));
+ out[27 + outpos] = ((in[24 + inpos] >>> 3) & 144115188075855871L);
+ out[28 + outpos] = (in[24 + inpos] >>> 60)
+ | ((in[25 + inpos] & 9007199254740991L) << (57 - 53));
+ out[29 + outpos] = (in[25 + inpos] >>> 53)
+ | ((in[26 + inpos] & 70368744177663L) << (57 - 46));
+ out[30 + outpos] = (in[26 + inpos] >>> 46)
+ | ((in[27 + inpos] & 549755813887L) << (57 - 39));
+ out[31 + outpos] = (in[27 + inpos] >>> 39)
+ | ((in[28 + inpos] & 4294967295L) << (57 - 32));
+ out[32 + outpos] = (in[28 + inpos] >>> 32)
+ | ((in[29 + inpos] & 33554431L) << (57 - 25));
+ out[33 + outpos] = (in[29 + inpos] >>> 25)
+ | ((in[30 + inpos] & 262143L) << (57 - 18));
+ out[34 + outpos] = (in[30 + inpos] >>> 18)
+ | ((in[31 + inpos] & 2047L) << (57 - 11));
+ out[35 + outpos] = (in[31 + inpos] >>> 11)
+ | ((in[32 + inpos] & 15L) << (57 - 4));
+ out[36 + outpos] = ((in[32 + inpos] >>> 4) & 144115188075855871L);
+ out[37 + outpos] = (in[32 + inpos] >>> 61)
+ | ((in[33 + inpos] & 18014398509481983L) << (57 - 54));
+ out[38 + outpos] = (in[33 + inpos] >>> 54)
+ | ((in[34 + inpos] & 140737488355327L) << (57 - 47));
+ out[39 + outpos] = (in[34 + inpos] >>> 47)
+ | ((in[35 + inpos] & 1099511627775L) << (57 - 40));
+ out[40 + outpos] = (in[35 + inpos] >>> 40)
+ | ((in[36 + inpos] & 8589934591L) << (57 - 33));
+ out[41 + outpos] = (in[36 + inpos] >>> 33)
+ | ((in[37 + inpos] & 67108863L) << (57 - 26));
+ out[42 + outpos] = (in[37 + inpos] >>> 26)
+ | ((in[38 + inpos] & 524287L) << (57 - 19));
+ out[43 + outpos] = (in[38 + inpos] >>> 19)
+ | ((in[39 + inpos] & 4095L) << (57 - 12));
+ out[44 + outpos] = (in[39 + inpos] >>> 12)
+ | ((in[40 + inpos] & 31L) << (57 - 5));
+ out[45 + outpos] = ((in[40 + inpos] >>> 5) & 144115188075855871L);
+ out[46 + outpos] = (in[40 + inpos] >>> 62)
+ | ((in[41 + inpos] & 36028797018963967L) << (57 - 55));
+ out[47 + outpos] = (in[41 + inpos] >>> 55)
+ | ((in[42 + inpos] & 281474976710655L) << (57 - 48));
+ out[48 + outpos] = (in[42 + inpos] >>> 48)
+ | ((in[43 + inpos] & 2199023255551L) << (57 - 41));
+ out[49 + outpos] = (in[43 + inpos] >>> 41)
+ | ((in[44 + inpos] & 17179869183L) << (57 - 34));
+ out[50 + outpos] = (in[44 + inpos] >>> 34)
+ | ((in[45 + inpos] & 134217727L) << (57 - 27));
+ out[51 + outpos] = (in[45 + inpos] >>> 27)
+ | ((in[46 + inpos] & 1048575L) << (57 - 20));
+ out[52 + outpos] = (in[46 + inpos] >>> 20)
+ | ((in[47 + inpos] & 8191L) << (57 - 13));
+ out[53 + outpos] = (in[47 + inpos] >>> 13)
+ | ((in[48 + inpos] & 63L) << (57 - 6));
+ out[54 + outpos] = ((in[48 + inpos] >>> 6) & 144115188075855871L);
+ out[55 + outpos] = (in[48 + inpos] >>> 63)
+ | ((in[49 + inpos] & 72057594037927935L) << (57 - 56));
+ out[56 + outpos] = (in[49 + inpos] >>> 56)
+ | ((in[50 + inpos] & 562949953421311L) << (57 - 49));
+ out[57 + outpos] = (in[50 + inpos] >>> 49)
+ | ((in[51 + inpos] & 4398046511103L) << (57 - 42));
+ out[58 + outpos] = (in[51 + inpos] >>> 42)
+ | ((in[52 + inpos] & 34359738367L) << (57 - 35));
+ out[59 + outpos] = (in[52 + inpos] >>> 35)
+ | ((in[53 + inpos] & 268435455L) << (57 - 28));
+ out[60 + outpos] = (in[53 + inpos] >>> 28)
+ | ((in[54 + inpos] & 2097151L) << (57 - 21));
+ out[61 + outpos] = (in[54 + inpos] >>> 21)
+ | ((in[55 + inpos] & 16383L) << (57 - 14));
+ out[62 + outpos] = (in[55 + inpos] >>> 14)
+ | ((in[56 + inpos] & 127L) << (57 - 7));
+ out[63 + outpos] = (in[56 + inpos] >>> 7);
+ }
+
+ protected static void fastunpack58(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 288230376151711743L);
+ out[1 + outpos] = (in[inpos] >>> 58)
+ | ((in[1 + inpos] & 4503599627370495L) << (58 - 52));
+ out[2 + outpos] = (in[1 + inpos] >>> 52)
+ | ((in[2 + inpos] & 70368744177663L) << (58 - 46));
+ out[3 + outpos] = (in[2 + inpos] >>> 46)
+ | ((in[3 + inpos] & 1099511627775L) << (58 - 40));
+ out[4 + outpos] = (in[3 + inpos] >>> 40)
+ | ((in[4 + inpos] & 17179869183L) << (58 - 34));
+ out[5 + outpos] = (in[4 + inpos] >>> 34)
+ | ((in[5 + inpos] & 268435455L) << (58 - 28));
+ out[6 + outpos] = (in[5 + inpos] >>> 28)
+ | ((in[6 + inpos] & 4194303L) << (58 - 22));
+ out[7 + outpos] = (in[6 + inpos] >>> 22)
+ | ((in[7 + inpos] & 65535L) << (58 - 16));
+ out[8 + outpos] = (in[7 + inpos] >>> 16)
+ | ((in[8 + inpos] & 1023L) << (58 - 10));
+ out[9 + outpos] = (in[8 + inpos] >>> 10)
+ | ((in[9 + inpos] & 15L) << (58 - 4));
+ out[10 + outpos] = ((in[9 + inpos] >>> 4) & 288230376151711743L);
+ out[11 + outpos] = (in[9 + inpos] >>> 62)
+ | ((in[10 + inpos] & 72057594037927935L) << (58 - 56));
+ out[12 + outpos] = (in[10 + inpos] >>> 56)
+ | ((in[11 + inpos] & 1125899906842623L) << (58 - 50));
+ out[13 + outpos] = (in[11 + inpos] >>> 50)
+ | ((in[12 + inpos] & 17592186044415L) << (58 - 44));
+ out[14 + outpos] = (in[12 + inpos] >>> 44)
+ | ((in[13 + inpos] & 274877906943L) << (58 - 38));
+ out[15 + outpos] = (in[13 + inpos] >>> 38)
+ | ((in[14 + inpos] & 4294967295L) << (58 - 32));
+ out[16 + outpos] = (in[14 + inpos] >>> 32)
+ | ((in[15 + inpos] & 67108863L) << (58 - 26));
+ out[17 + outpos] = (in[15 + inpos] >>> 26)
+ | ((in[16 + inpos] & 1048575L) << (58 - 20));
+ out[18 + outpos] = (in[16 + inpos] >>> 20)
+ | ((in[17 + inpos] & 16383L) << (58 - 14));
+ out[19 + outpos] = (in[17 + inpos] >>> 14)
+ | ((in[18 + inpos] & 255L) << (58 - 8));
+ out[20 + outpos] = (in[18 + inpos] >>> 8)
+ | ((in[19 + inpos] & 3L) << (58 - 2));
+ out[21 + outpos] = ((in[19 + inpos] >>> 2) & 288230376151711743L);
+ out[22 + outpos] = (in[19 + inpos] >>> 60)
+ | ((in[20 + inpos] & 18014398509481983L) << (58 - 54));
+ out[23 + outpos] = (in[20 + inpos] >>> 54)
+ | ((in[21 + inpos] & 281474976710655L) << (58 - 48));
+ out[24 + outpos] = (in[21 + inpos] >>> 48)
+ | ((in[22 + inpos] & 4398046511103L) << (58 - 42));
+ out[25 + outpos] = (in[22 + inpos] >>> 42)
+ | ((in[23 + inpos] & 68719476735L) << (58 - 36));
+ out[26 + outpos] = (in[23 + inpos] >>> 36)
+ | ((in[24 + inpos] & 1073741823L) << (58 - 30));
+ out[27 + outpos] = (in[24 + inpos] >>> 30)
+ | ((in[25 + inpos] & 16777215L) << (58 - 24));
+ out[28 + outpos] = (in[25 + inpos] >>> 24)
+ | ((in[26 + inpos] & 262143L) << (58 - 18));
+ out[29 + outpos] = (in[26 + inpos] >>> 18)
+ | ((in[27 + inpos] & 4095L) << (58 - 12));
+ out[30 + outpos] = (in[27 + inpos] >>> 12)
+ | ((in[28 + inpos] & 63L) << (58 - 6));
+ out[31 + outpos] = (in[28 + inpos] >>> 6);
+ out[32 + outpos] = (in[29 + inpos] & 288230376151711743L);
+ out[33 + outpos] = (in[29 + inpos] >>> 58)
+ | ((in[30 + inpos] & 4503599627370495L) << (58 - 52));
+ out[34 + outpos] = (in[30 + inpos] >>> 52)
+ | ((in[31 + inpos] & 70368744177663L) << (58 - 46));
+ out[35 + outpos] = (in[31 + inpos] >>> 46)
+ | ((in[32 + inpos] & 1099511627775L) << (58 - 40));
+ out[36 + outpos] = (in[32 + inpos] >>> 40)
+ | ((in[33 + inpos] & 17179869183L) << (58 - 34));
+ out[37 + outpos] = (in[33 + inpos] >>> 34)
+ | ((in[34 + inpos] & 268435455L) << (58 - 28));
+ out[38 + outpos] = (in[34 + inpos] >>> 28)
+ | ((in[35 + inpos] & 4194303L) << (58 - 22));
+ out[39 + outpos] = (in[35 + inpos] >>> 22)
+ | ((in[36 + inpos] & 65535L) << (58 - 16));
+ out[40 + outpos] = (in[36 + inpos] >>> 16)
+ | ((in[37 + inpos] & 1023L) << (58 - 10));
+ out[41 + outpos] = (in[37 + inpos] >>> 10)
+ | ((in[38 + inpos] & 15L) << (58 - 4));
+ out[42 + outpos] = ((in[38 + inpos] >>> 4) & 288230376151711743L);
+ out[43 + outpos] = (in[38 + inpos] >>> 62)
+ | ((in[39 + inpos] & 72057594037927935L) << (58 - 56));
+ out[44 + outpos] = (in[39 + inpos] >>> 56)
+ | ((in[40 + inpos] & 1125899906842623L) << (58 - 50));
+ out[45 + outpos] = (in[40 + inpos] >>> 50)
+ | ((in[41 + inpos] & 17592186044415L) << (58 - 44));
+ out[46 + outpos] = (in[41 + inpos] >>> 44)
+ | ((in[42 + inpos] & 274877906943L) << (58 - 38));
+ out[47 + outpos] = (in[42 + inpos] >>> 38)
+ | ((in[43 + inpos] & 4294967295L) << (58 - 32));
+ out[48 + outpos] = (in[43 + inpos] >>> 32)
+ | ((in[44 + inpos] & 67108863L) << (58 - 26));
+ out[49 + outpos] = (in[44 + inpos] >>> 26)
+ | ((in[45 + inpos] & 1048575L) << (58 - 20));
+ out[50 + outpos] = (in[45 + inpos] >>> 20)
+ | ((in[46 + inpos] & 16383L) << (58 - 14));
+ out[51 + outpos] = (in[46 + inpos] >>> 14)
+ | ((in[47 + inpos] & 255L) << (58 - 8));
+ out[52 + outpos] = (in[47 + inpos] >>> 8)
+ | ((in[48 + inpos] & 3L) << (58 - 2));
+ out[53 + outpos] = ((in[48 + inpos] >>> 2) & 288230376151711743L);
+ out[54 + outpos] = (in[48 + inpos] >>> 60)
+ | ((in[49 + inpos] & 18014398509481983L) << (58 - 54));
+ out[55 + outpos] = (in[49 + inpos] >>> 54)
+ | ((in[50 + inpos] & 281474976710655L) << (58 - 48));
+ out[56 + outpos] = (in[50 + inpos] >>> 48)
+ | ((in[51 + inpos] & 4398046511103L) << (58 - 42));
+ out[57 + outpos] = (in[51 + inpos] >>> 42)
+ | ((in[52 + inpos] & 68719476735L) << (58 - 36));
+ out[58 + outpos] = (in[52 + inpos] >>> 36)
+ | ((in[53 + inpos] & 1073741823L) << (58 - 30));
+ out[59 + outpos] = (in[53 + inpos] >>> 30)
+ | ((in[54 + inpos] & 16777215L) << (58 - 24));
+ out[60 + outpos] = (in[54 + inpos] >>> 24)
+ | ((in[55 + inpos] & 262143L) << (58 - 18));
+ out[61 + outpos] = (in[55 + inpos] >>> 18)
+ | ((in[56 + inpos] & 4095L) << (58 - 12));
+ out[62 + outpos] = (in[56 + inpos] >>> 12)
+ | ((in[57 + inpos] & 63L) << (58 - 6));
+ out[63 + outpos] = (in[57 + inpos] >>> 6);
+ }
+
+ protected static void fastunpack59(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 576460752303423487L);
+ out[1 + outpos] = (in[inpos] >>> 59)
+ | ((in[1 + inpos] & 18014398509481983L) << (59 - 54));
+ out[2 + outpos] = (in[1 + inpos] >>> 54)
+ | ((in[2 + inpos] & 562949953421311L) << (59 - 49));
+ out[3 + outpos] = (in[2 + inpos] >>> 49)
+ | ((in[3 + inpos] & 17592186044415L) << (59 - 44));
+ out[4 + outpos] = (in[3 + inpos] >>> 44)
+ | ((in[4 + inpos] & 549755813887L) << (59 - 39));
+ out[5 + outpos] = (in[4 + inpos] >>> 39)
+ | ((in[5 + inpos] & 17179869183L) << (59 - 34));
+ out[6 + outpos] = (in[5 + inpos] >>> 34)
+ | ((in[6 + inpos] & 536870911L) << (59 - 29));
+ out[7 + outpos] = (in[6 + inpos] >>> 29)
+ | ((in[7 + inpos] & 16777215L) << (59 - 24));
+ out[8 + outpos] = (in[7 + inpos] >>> 24)
+ | ((in[8 + inpos] & 524287L) << (59 - 19));
+ out[9 + outpos] = (in[8 + inpos] >>> 19)
+ | ((in[9 + inpos] & 16383L) << (59 - 14));
+ out[10 + outpos] = (in[9 + inpos] >>> 14)
+ | ((in[10 + inpos] & 511L) << (59 - 9));
+ out[11 + outpos] = (in[10 + inpos] >>> 9)
+ | ((in[11 + inpos] & 15L) << (59 - 4));
+ out[12 + outpos] = ((in[11 + inpos] >>> 4) & 576460752303423487L);
+ out[13 + outpos] = (in[11 + inpos] >>> 63)
+ | ((in[12 + inpos] & 288230376151711743L) << (59 - 58));
+ out[14 + outpos] = (in[12 + inpos] >>> 58)
+ | ((in[13 + inpos] & 9007199254740991L) << (59 - 53));
+ out[15 + outpos] = (in[13 + inpos] >>> 53)
+ | ((in[14 + inpos] & 281474976710655L) << (59 - 48));
+ out[16 + outpos] = (in[14 + inpos] >>> 48)
+ | ((in[15 + inpos] & 8796093022207L) << (59 - 43));
+ out[17 + outpos] = (in[15 + inpos] >>> 43)
+ | ((in[16 + inpos] & 274877906943L) << (59 - 38));
+ out[18 + outpos] = (in[16 + inpos] >>> 38)
+ | ((in[17 + inpos] & 8589934591L) << (59 - 33));
+ out[19 + outpos] = (in[17 + inpos] >>> 33)
+ | ((in[18 + inpos] & 268435455L) << (59 - 28));
+ out[20 + outpos] = (in[18 + inpos] >>> 28)
+ | ((in[19 + inpos] & 8388607L) << (59 - 23));
+ out[21 + outpos] = (in[19 + inpos] >>> 23)
+ | ((in[20 + inpos] & 262143L) << (59 - 18));
+ out[22 + outpos] = (in[20 + inpos] >>> 18)
+ | ((in[21 + inpos] & 8191L) << (59 - 13));
+ out[23 + outpos] = (in[21 + inpos] >>> 13)
+ | ((in[22 + inpos] & 255L) << (59 - 8));
+ out[24 + outpos] = (in[22 + inpos] >>> 8)
+ | ((in[23 + inpos] & 7L) << (59 - 3));
+ out[25 + outpos] = ((in[23 + inpos] >>> 3) & 576460752303423487L);
+ out[26 + outpos] = (in[23 + inpos] >>> 62)
+ | ((in[24 + inpos] & 144115188075855871L) << (59 - 57));
+ out[27 + outpos] = (in[24 + inpos] >>> 57)
+ | ((in[25 + inpos] & 4503599627370495L) << (59 - 52));
+ out[28 + outpos] = (in[25 + inpos] >>> 52)
+ | ((in[26 + inpos] & 140737488355327L) << (59 - 47));
+ out[29 + outpos] = (in[26 + inpos] >>> 47)
+ | ((in[27 + inpos] & 4398046511103L) << (59 - 42));
+ out[30 + outpos] = (in[27 + inpos] >>> 42)
+ | ((in[28 + inpos] & 137438953471L) << (59 - 37));
+ out[31 + outpos] = (in[28 + inpos] >>> 37)
+ | ((in[29 + inpos] & 4294967295L) << (59 - 32));
+ out[32 + outpos] = (in[29 + inpos] >>> 32)
+ | ((in[30 + inpos] & 134217727L) << (59 - 27));
+ out[33 + outpos] = (in[30 + inpos] >>> 27)
+ | ((in[31 + inpos] & 4194303L) << (59 - 22));
+ out[34 + outpos] = (in[31 + inpos] >>> 22)
+ | ((in[32 + inpos] & 131071L) << (59 - 17));
+ out[35 + outpos] = (in[32 + inpos] >>> 17)
+ | ((in[33 + inpos] & 4095L) << (59 - 12));
+ out[36 + outpos] = (in[33 + inpos] >>> 12)
+ | ((in[34 + inpos] & 127L) << (59 - 7));
+ out[37 + outpos] = (in[34 + inpos] >>> 7)
+ | ((in[35 + inpos] & 3L) << (59 - 2));
+ out[38 + outpos] = ((in[35 + inpos] >>> 2) & 576460752303423487L);
+ out[39 + outpos] = (in[35 + inpos] >>> 61)
+ | ((in[36 + inpos] & 72057594037927935L) << (59 - 56));
+ out[40 + outpos] = (in[36 + inpos] >>> 56)
+ | ((in[37 + inpos] & 2251799813685247L) << (59 - 51));
+ out[41 + outpos] = (in[37 + inpos] >>> 51)
+ | ((in[38 + inpos] & 70368744177663L) << (59 - 46));
+ out[42 + outpos] = (in[38 + inpos] >>> 46)
+ | ((in[39 + inpos] & 2199023255551L) << (59 - 41));
+ out[43 + outpos] = (in[39 + inpos] >>> 41)
+ | ((in[40 + inpos] & 68719476735L) << (59 - 36));
+ out[44 + outpos] = (in[40 + inpos] >>> 36)
+ | ((in[41 + inpos] & 2147483647L) << (59 - 31));
+ out[45 + outpos] = (in[41 + inpos] >>> 31)
+ | ((in[42 + inpos] & 67108863L) << (59 - 26));
+ out[46 + outpos] = (in[42 + inpos] >>> 26)
+ | ((in[43 + inpos] & 2097151L) << (59 - 21));
+ out[47 + outpos] = (in[43 + inpos] >>> 21)
+ | ((in[44 + inpos] & 65535L) << (59 - 16));
+ out[48 + outpos] = (in[44 + inpos] >>> 16)
+ | ((in[45 + inpos] & 2047L) << (59 - 11));
+ out[49 + outpos] = (in[45 + inpos] >>> 11)
+ | ((in[46 + inpos] & 63L) << (59 - 6));
+ out[50 + outpos] = (in[46 + inpos] >>> 6)
+ | ((in[47 + inpos] & 1L) << (59 - 1));
+ out[51 + outpos] = ((in[47 + inpos] >>> 1) & 576460752303423487L);
+ out[52 + outpos] = (in[47 + inpos] >>> 60)
+ | ((in[48 + inpos] & 36028797018963967L) << (59 - 55));
+ out[53 + outpos] = (in[48 + inpos] >>> 55)
+ | ((in[49 + inpos] & 1125899906842623L) << (59 - 50));
+ out[54 + outpos] = (in[49 + inpos] >>> 50)
+ | ((in[50 + inpos] & 35184372088831L) << (59 - 45));
+ out[55 + outpos] = (in[50 + inpos] >>> 45)
+ | ((in[51 + inpos] & 1099511627775L) << (59 - 40));
+ out[56 + outpos] = (in[51 + inpos] >>> 40)
+ | ((in[52 + inpos] & 34359738367L) << (59 - 35));
+ out[57 + outpos] = (in[52 + inpos] >>> 35)
+ | ((in[53 + inpos] & 1073741823L) << (59 - 30));
+ out[58 + outpos] = (in[53 + inpos] >>> 30)
+ | ((in[54 + inpos] & 33554431L) << (59 - 25));
+ out[59 + outpos] = (in[54 + inpos] >>> 25)
+ | ((in[55 + inpos] & 1048575L) << (59 - 20));
+ out[60 + outpos] = (in[55 + inpos] >>> 20)
+ | ((in[56 + inpos] & 32767L) << (59 - 15));
+ out[61 + outpos] = (in[56 + inpos] >>> 15)
+ | ((in[57 + inpos] & 1023L) << (59 - 10));
+ out[62 + outpos] = (in[57 + inpos] >>> 10)
+ | ((in[58 + inpos] & 31L) << (59 - 5));
+ out[63 + outpos] = (in[58 + inpos] >>> 5);
+ }
+
+ protected static void fastunpack60(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 1152921504606846975L);
+ out[1 + outpos] = (in[inpos] >>> 60)
+ | ((in[1 + inpos] & 72057594037927935L) << (60 - 56));
+ out[2 + outpos] = (in[1 + inpos] >>> 56)
+ | ((in[2 + inpos] & 4503599627370495L) << (60 - 52));
+ out[3 + outpos] = (in[2 + inpos] >>> 52)
+ | ((in[3 + inpos] & 281474976710655L) << (60 - 48));
+ out[4 + outpos] = (in[3 + inpos] >>> 48)
+ | ((in[4 + inpos] & 17592186044415L) << (60 - 44));
+ out[5 + outpos] = (in[4 + inpos] >>> 44)
+ | ((in[5 + inpos] & 1099511627775L) << (60 - 40));
+ out[6 + outpos] = (in[5 + inpos] >>> 40)
+ | ((in[6 + inpos] & 68719476735L) << (60 - 36));
+ out[7 + outpos] = (in[6 + inpos] >>> 36)
+ | ((in[7 + inpos] & 4294967295L) << (60 - 32));
+ out[8 + outpos] = (in[7 + inpos] >>> 32)
+ | ((in[8 + inpos] & 268435455L) << (60 - 28));
+ out[9 + outpos] = (in[8 + inpos] >>> 28)
+ | ((in[9 + inpos] & 16777215L) << (60 - 24));
+ out[10 + outpos] = (in[9 + inpos] >>> 24)
+ | ((in[10 + inpos] & 1048575L) << (60 - 20));
+ out[11 + outpos] = (in[10 + inpos] >>> 20)
+ | ((in[11 + inpos] & 65535L) << (60 - 16));
+ out[12 + outpos] = (in[11 + inpos] >>> 16)
+ | ((in[12 + inpos] & 4095L) << (60 - 12));
+ out[13 + outpos] = (in[12 + inpos] >>> 12)
+ | ((in[13 + inpos] & 255L) << (60 - 8));
+ out[14 + outpos] = (in[13 + inpos] >>> 8)
+ | ((in[14 + inpos] & 15L) << (60 - 4));
+ out[15 + outpos] = (in[14 + inpos] >>> 4);
+ out[16 + outpos] = (in[15 + inpos] & 1152921504606846975L);
+ out[17 + outpos] = (in[15 + inpos] >>> 60)
+ | ((in[16 + inpos] & 72057594037927935L) << (60 - 56));
+ out[18 + outpos] = (in[16 + inpos] >>> 56)
+ | ((in[17 + inpos] & 4503599627370495L) << (60 - 52));
+ out[19 + outpos] = (in[17 + inpos] >>> 52)
+ | ((in[18 + inpos] & 281474976710655L) << (60 - 48));
+ out[20 + outpos] = (in[18 + inpos] >>> 48)
+ | ((in[19 + inpos] & 17592186044415L) << (60 - 44));
+ out[21 + outpos] = (in[19 + inpos] >>> 44)
+ | ((in[20 + inpos] & 1099511627775L) << (60 - 40));
+ out[22 + outpos] = (in[20 + inpos] >>> 40)
+ | ((in[21 + inpos] & 68719476735L) << (60 - 36));
+ out[23 + outpos] = (in[21 + inpos] >>> 36)
+ | ((in[22 + inpos] & 4294967295L) << (60 - 32));
+ out[24 + outpos] = (in[22 + inpos] >>> 32)
+ | ((in[23 + inpos] & 268435455L) << (60 - 28));
+ out[25 + outpos] = (in[23 + inpos] >>> 28)
+ | ((in[24 + inpos] & 16777215L) << (60 - 24));
+ out[26 + outpos] = (in[24 + inpos] >>> 24)
+ | ((in[25 + inpos] & 1048575L) << (60 - 20));
+ out[27 + outpos] = (in[25 + inpos] >>> 20)
+ | ((in[26 + inpos] & 65535L) << (60 - 16));
+ out[28 + outpos] = (in[26 + inpos] >>> 16)
+ | ((in[27 + inpos] & 4095L) << (60 - 12));
+ out[29 + outpos] = (in[27 + inpos] >>> 12)
+ | ((in[28 + inpos] & 255L) << (60 - 8));
+ out[30 + outpos] = (in[28 + inpos] >>> 8)
+ | ((in[29 + inpos] & 15L) << (60 - 4));
+ out[31 + outpos] = (in[29 + inpos] >>> 4);
+ out[32 + outpos] = (in[30 + inpos] & 1152921504606846975L);
+ out[33 + outpos] = (in[30 + inpos] >>> 60)
+ | ((in[31 + inpos] & 72057594037927935L) << (60 - 56));
+ out[34 + outpos] = (in[31 + inpos] >>> 56)
+ | ((in[32 + inpos] & 4503599627370495L) << (60 - 52));
+ out[35 + outpos] = (in[32 + inpos] >>> 52)
+ | ((in[33 + inpos] & 281474976710655L) << (60 - 48));
+ out[36 + outpos] = (in[33 + inpos] >>> 48)
+ | ((in[34 + inpos] & 17592186044415L) << (60 - 44));
+ out[37 + outpos] = (in[34 + inpos] >>> 44)
+ | ((in[35 + inpos] & 1099511627775L) << (60 - 40));
+ out[38 + outpos] = (in[35 + inpos] >>> 40)
+ | ((in[36 + inpos] & 68719476735L) << (60 - 36));
+ out[39 + outpos] = (in[36 + inpos] >>> 36)
+ | ((in[37 + inpos] & 4294967295L) << (60 - 32));
+ out[40 + outpos] = (in[37 + inpos] >>> 32)
+ | ((in[38 + inpos] & 268435455L) << (60 - 28));
+ out[41 + outpos] = (in[38 + inpos] >>> 28)
+ | ((in[39 + inpos] & 16777215L) << (60 - 24));
+ out[42 + outpos] = (in[39 + inpos] >>> 24)
+ | ((in[40 + inpos] & 1048575L) << (60 - 20));
+ out[43 + outpos] = (in[40 + inpos] >>> 20)
+ | ((in[41 + inpos] & 65535L) << (60 - 16));
+ out[44 + outpos] = (in[41 + inpos] >>> 16)
+ | ((in[42 + inpos] & 4095L) << (60 - 12));
+ out[45 + outpos] = (in[42 + inpos] >>> 12)
+ | ((in[43 + inpos] & 255L) << (60 - 8));
+ out[46 + outpos] = (in[43 + inpos] >>> 8)
+ | ((in[44 + inpos] & 15L) << (60 - 4));
+ out[47 + outpos] = (in[44 + inpos] >>> 4);
+ out[48 + outpos] = (in[45 + inpos] & 1152921504606846975L);
+ out[49 + outpos] = (in[45 + inpos] >>> 60)
+ | ((in[46 + inpos] & 72057594037927935L) << (60 - 56));
+ out[50 + outpos] = (in[46 + inpos] >>> 56)
+ | ((in[47 + inpos] & 4503599627370495L) << (60 - 52));
+ out[51 + outpos] = (in[47 + inpos] >>> 52)
+ | ((in[48 + inpos] & 281474976710655L) << (60 - 48));
+ out[52 + outpos] = (in[48 + inpos] >>> 48)
+ | ((in[49 + inpos] & 17592186044415L) << (60 - 44));
+ out[53 + outpos] = (in[49 + inpos] >>> 44)
+ | ((in[50 + inpos] & 1099511627775L) << (60 - 40));
+ out[54 + outpos] = (in[50 + inpos] >>> 40)
+ | ((in[51 + inpos] & 68719476735L) << (60 - 36));
+ out[55 + outpos] = (in[51 + inpos] >>> 36)
+ | ((in[52 + inpos] & 4294967295L) << (60 - 32));
+ out[56 + outpos] = (in[52 + inpos] >>> 32)
+ | ((in[53 + inpos] & 268435455L) << (60 - 28));
+ out[57 + outpos] = (in[53 + inpos] >>> 28)
+ | ((in[54 + inpos] & 16777215L) << (60 - 24));
+ out[58 + outpos] = (in[54 + inpos] >>> 24)
+ | ((in[55 + inpos] & 1048575L) << (60 - 20));
+ out[59 + outpos] = (in[55 + inpos] >>> 20)
+ | ((in[56 + inpos] & 65535L) << (60 - 16));
+ out[60 + outpos] = (in[56 + inpos] >>> 16)
+ | ((in[57 + inpos] & 4095L) << (60 - 12));
+ out[61 + outpos] = (in[57 + inpos] >>> 12)
+ | ((in[58 + inpos] & 255L) << (60 - 8));
+ out[62 + outpos] = (in[58 + inpos] >>> 8)
+ | ((in[59 + inpos] & 15L) << (60 - 4));
+ out[63 + outpos] = (in[59 + inpos] >>> 4);
+ }
+
+ protected static void fastunpack61(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 2305843009213693951L);
+ out[1 + outpos] = (in[inpos] >>> 61)
+ | ((in[1 + inpos] & 288230376151711743L) << (61 - 58));
+ out[2 + outpos] = (in[1 + inpos] >>> 58)
+ | ((in[2 + inpos] & 36028797018963967L) << (61 - 55));
+ out[3 + outpos] = (in[2 + inpos] >>> 55)
+ | ((in[3 + inpos] & 4503599627370495L) << (61 - 52));
+ out[4 + outpos] = (in[3 + inpos] >>> 52)
+ | ((in[4 + inpos] & 562949953421311L) << (61 - 49));
+ out[5 + outpos] = (in[4 + inpos] >>> 49)
+ | ((in[5 + inpos] & 70368744177663L) << (61 - 46));
+ out[6 + outpos] = (in[5 + inpos] >>> 46)
+ | ((in[6 + inpos] & 8796093022207L) << (61 - 43));
+ out[7 + outpos] = (in[6 + inpos] >>> 43)
+ | ((in[7 + inpos] & 1099511627775L) << (61 - 40));
+ out[8 + outpos] = (in[7 + inpos] >>> 40)
+ | ((in[8 + inpos] & 137438953471L) << (61 - 37));
+ out[9 + outpos] = (in[8 + inpos] >>> 37)
+ | ((in[9 + inpos] & 17179869183L) << (61 - 34));
+ out[10 + outpos] = (in[9 + inpos] >>> 34)
+ | ((in[10 + inpos] & 2147483647L) << (61 - 31));
+ out[11 + outpos] = (in[10 + inpos] >>> 31)
+ | ((in[11 + inpos] & 268435455L) << (61 - 28));
+ out[12 + outpos] = (in[11 + inpos] >>> 28)
+ | ((in[12 + inpos] & 33554431L) << (61 - 25));
+ out[13 + outpos] = (in[12 + inpos] >>> 25)
+ | ((in[13 + inpos] & 4194303L) << (61 - 22));
+ out[14 + outpos] = (in[13 + inpos] >>> 22)
+ | ((in[14 + inpos] & 524287L) << (61 - 19));
+ out[15 + outpos] = (in[14 + inpos] >>> 19)
+ | ((in[15 + inpos] & 65535L) << (61 - 16));
+ out[16 + outpos] = (in[15 + inpos] >>> 16)
+ | ((in[16 + inpos] & 8191L) << (61 - 13));
+ out[17 + outpos] = (in[16 + inpos] >>> 13)
+ | ((in[17 + inpos] & 1023L) << (61 - 10));
+ out[18 + outpos] = (in[17 + inpos] >>> 10)
+ | ((in[18 + inpos] & 127L) << (61 - 7));
+ out[19 + outpos] = (in[18 + inpos] >>> 7)
+ | ((in[19 + inpos] & 15L) << (61 - 4));
+ out[20 + outpos] = (in[19 + inpos] >>> 4)
+ | ((in[20 + inpos] & 1L) << (61 - 1));
+ out[21 + outpos] = ((in[20 + inpos] >>> 1) & 2305843009213693951L);
+ out[22 + outpos] = (in[20 + inpos] >>> 62)
+ | ((in[21 + inpos] & 576460752303423487L) << (61 - 59));
+ out[23 + outpos] = (in[21 + inpos] >>> 59)
+ | ((in[22 + inpos] & 72057594037927935L) << (61 - 56));
+ out[24 + outpos] = (in[22 + inpos] >>> 56)
+ | ((in[23 + inpos] & 9007199254740991L) << (61 - 53));
+ out[25 + outpos] = (in[23 + inpos] >>> 53)
+ | ((in[24 + inpos] & 1125899906842623L) << (61 - 50));
+ out[26 + outpos] = (in[24 + inpos] >>> 50)
+ | ((in[25 + inpos] & 140737488355327L) << (61 - 47));
+ out[27 + outpos] = (in[25 + inpos] >>> 47)
+ | ((in[26 + inpos] & 17592186044415L) << (61 - 44));
+ out[28 + outpos] = (in[26 + inpos] >>> 44)
+ | ((in[27 + inpos] & 2199023255551L) << (61 - 41));
+ out[29 + outpos] = (in[27 + inpos] >>> 41)
+ | ((in[28 + inpos] & 274877906943L) << (61 - 38));
+ out[30 + outpos] = (in[28 + inpos] >>> 38)
+ | ((in[29 + inpos] & 34359738367L) << (61 - 35));
+ out[31 + outpos] = (in[29 + inpos] >>> 35)
+ | ((in[30 + inpos] & 4294967295L) << (61 - 32));
+ out[32 + outpos] = (in[30 + inpos] >>> 32)
+ | ((in[31 + inpos] & 536870911L) << (61 - 29));
+ out[33 + outpos] = (in[31 + inpos] >>> 29)
+ | ((in[32 + inpos] & 67108863L) << (61 - 26));
+ out[34 + outpos] = (in[32 + inpos] >>> 26)
+ | ((in[33 + inpos] & 8388607L) << (61 - 23));
+ out[35 + outpos] = (in[33 + inpos] >>> 23)
+ | ((in[34 + inpos] & 1048575L) << (61 - 20));
+ out[36 + outpos] = (in[34 + inpos] >>> 20)
+ | ((in[35 + inpos] & 131071L) << (61 - 17));
+ out[37 + outpos] = (in[35 + inpos] >>> 17)
+ | ((in[36 + inpos] & 16383L) << (61 - 14));
+ out[38 + outpos] = (in[36 + inpos] >>> 14)
+ | ((in[37 + inpos] & 2047L) << (61 - 11));
+ out[39 + outpos] = (in[37 + inpos] >>> 11)
+ | ((in[38 + inpos] & 255L) << (61 - 8));
+ out[40 + outpos] = (in[38 + inpos] >>> 8)
+ | ((in[39 + inpos] & 31L) << (61 - 5));
+ out[41 + outpos] = (in[39 + inpos] >>> 5)
+ | ((in[40 + inpos] & 3L) << (61 - 2));
+ out[42 + outpos] = ((in[40 + inpos] >>> 2) & 2305843009213693951L);
+ out[43 + outpos] = (in[40 + inpos] >>> 63)
+ | ((in[41 + inpos] & 1152921504606846975L) << (61 - 60));
+ out[44 + outpos] = (in[41 + inpos] >>> 60)
+ | ((in[42 + inpos] & 144115188075855871L) << (61 - 57));
+ out[45 + outpos] = (in[42 + inpos] >>> 57)
+ | ((in[43 + inpos] & 18014398509481983L) << (61 - 54));
+ out[46 + outpos] = (in[43 + inpos] >>> 54)
+ | ((in[44 + inpos] & 2251799813685247L) << (61 - 51));
+ out[47 + outpos] = (in[44 + inpos] >>> 51)
+ | ((in[45 + inpos] & 281474976710655L) << (61 - 48));
+ out[48 + outpos] = (in[45 + inpos] >>> 48)
+ | ((in[46 + inpos] & 35184372088831L) << (61 - 45));
+ out[49 + outpos] = (in[46 + inpos] >>> 45)
+ | ((in[47 + inpos] & 4398046511103L) << (61 - 42));
+ out[50 + outpos] = (in[47 + inpos] >>> 42)
+ | ((in[48 + inpos] & 549755813887L) << (61 - 39));
+ out[51 + outpos] = (in[48 + inpos] >>> 39)
+ | ((in[49 + inpos] & 68719476735L) << (61 - 36));
+ out[52 + outpos] = (in[49 + inpos] >>> 36)
+ | ((in[50 + inpos] & 8589934591L) << (61 - 33));
+ out[53 + outpos] = (in[50 + inpos] >>> 33)
+ | ((in[51 + inpos] & 1073741823L) << (61 - 30));
+ out[54 + outpos] = (in[51 + inpos] >>> 30)
+ | ((in[52 + inpos] & 134217727L) << (61 - 27));
+ out[55 + outpos] = (in[52 + inpos] >>> 27)
+ | ((in[53 + inpos] & 16777215L) << (61 - 24));
+ out[56 + outpos] = (in[53 + inpos] >>> 24)
+ | ((in[54 + inpos] & 2097151L) << (61 - 21));
+ out[57 + outpos] = (in[54 + inpos] >>> 21)
+ | ((in[55 + inpos] & 262143L) << (61 - 18));
+ out[58 + outpos] = (in[55 + inpos] >>> 18)
+ | ((in[56 + inpos] & 32767L) << (61 - 15));
+ out[59 + outpos] = (in[56 + inpos] >>> 15)
+ | ((in[57 + inpos] & 4095L) << (61 - 12));
+ out[60 + outpos] = (in[57 + inpos] >>> 12)
+ | ((in[58 + inpos] & 511L) << (61 - 9));
+ out[61 + outpos] = (in[58 + inpos] >>> 9)
+ | ((in[59 + inpos] & 63L) << (61 - 6));
+ out[62 + outpos] = (in[59 + inpos] >>> 6)
+ | ((in[60 + inpos] & 7L) << (61 - 3));
+ out[63 + outpos] = (in[60 + inpos] >>> 3);
+ }
+
+ protected static void fastunpack62(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 4611686018427387903L);
+ out[1 + outpos] = (in[inpos] >>> 62)
+ | ((in[1 + inpos] & 1152921504606846975L) << (62 - 60));
+ out[2 + outpos] = (in[1 + inpos] >>> 60)
+ | ((in[2 + inpos] & 288230376151711743L) << (62 - 58));
+ out[3 + outpos] = (in[2 + inpos] >>> 58)
+ | ((in[3 + inpos] & 72057594037927935L) << (62 - 56));
+ out[4 + outpos] = (in[3 + inpos] >>> 56)
+ | ((in[4 + inpos] & 18014398509481983L) << (62 - 54));
+ out[5 + outpos] = (in[4 + inpos] >>> 54)
+ | ((in[5 + inpos] & 4503599627370495L) << (62 - 52));
+ out[6 + outpos] = (in[5 + inpos] >>> 52)
+ | ((in[6 + inpos] & 1125899906842623L) << (62 - 50));
+ out[7 + outpos] = (in[6 + inpos] >>> 50)
+ | ((in[7 + inpos] & 281474976710655L) << (62 - 48));
+ out[8 + outpos] = (in[7 + inpos] >>> 48)
+ | ((in[8 + inpos] & 70368744177663L) << (62 - 46));
+ out[9 + outpos] = (in[8 + inpos] >>> 46)
+ | ((in[9 + inpos] & 17592186044415L) << (62 - 44));
+ out[10 + outpos] = (in[9 + inpos] >>> 44)
+ | ((in[10 + inpos] & 4398046511103L) << (62 - 42));
+ out[11 + outpos] = (in[10 + inpos] >>> 42)
+ | ((in[11 + inpos] & 1099511627775L) << (62 - 40));
+ out[12 + outpos] = (in[11 + inpos] >>> 40)
+ | ((in[12 + inpos] & 274877906943L) << (62 - 38));
+ out[13 + outpos] = (in[12 + inpos] >>> 38)
+ | ((in[13 + inpos] & 68719476735L) << (62 - 36));
+ out[14 + outpos] = (in[13 + inpos] >>> 36)
+ | ((in[14 + inpos] & 17179869183L) << (62 - 34));
+ out[15 + outpos] = (in[14 + inpos] >>> 34)
+ | ((in[15 + inpos] & 4294967295L) << (62 - 32));
+ out[16 + outpos] = (in[15 + inpos] >>> 32)
+ | ((in[16 + inpos] & 1073741823L) << (62 - 30));
+ out[17 + outpos] = (in[16 + inpos] >>> 30)
+ | ((in[17 + inpos] & 268435455L) << (62 - 28));
+ out[18 + outpos] = (in[17 + inpos] >>> 28)
+ | ((in[18 + inpos] & 67108863L) << (62 - 26));
+ out[19 + outpos] = (in[18 + inpos] >>> 26)
+ | ((in[19 + inpos] & 16777215L) << (62 - 24));
+ out[20 + outpos] = (in[19 + inpos] >>> 24)
+ | ((in[20 + inpos] & 4194303L) << (62 - 22));
+ out[21 + outpos] = (in[20 + inpos] >>> 22)
+ | ((in[21 + inpos] & 1048575L) << (62 - 20));
+ out[22 + outpos] = (in[21 + inpos] >>> 20)
+ | ((in[22 + inpos] & 262143L) << (62 - 18));
+ out[23 + outpos] = (in[22 + inpos] >>> 18)
+ | ((in[23 + inpos] & 65535L) << (62 - 16));
+ out[24 + outpos] = (in[23 + inpos] >>> 16)
+ | ((in[24 + inpos] & 16383L) << (62 - 14));
+ out[25 + outpos] = (in[24 + inpos] >>> 14)
+ | ((in[25 + inpos] & 4095L) << (62 - 12));
+ out[26 + outpos] = (in[25 + inpos] >>> 12)
+ | ((in[26 + inpos] & 1023L) << (62 - 10));
+ out[27 + outpos] = (in[26 + inpos] >>> 10)
+ | ((in[27 + inpos] & 255L) << (62 - 8));
+ out[28 + outpos] = (in[27 + inpos] >>> 8)
+ | ((in[28 + inpos] & 63L) << (62 - 6));
+ out[29 + outpos] = (in[28 + inpos] >>> 6)
+ | ((in[29 + inpos] & 15L) << (62 - 4));
+ out[30 + outpos] = (in[29 + inpos] >>> 4)
+ | ((in[30 + inpos] & 3L) << (62 - 2));
+ out[31 + outpos] = (in[30 + inpos] >>> 2);
+ out[32 + outpos] = (in[31 + inpos] & 4611686018427387903L);
+ out[33 + outpos] = (in[31 + inpos] >>> 62)
+ | ((in[32 + inpos] & 1152921504606846975L) << (62 - 60));
+ out[34 + outpos] = (in[32 + inpos] >>> 60)
+ | ((in[33 + inpos] & 288230376151711743L) << (62 - 58));
+ out[35 + outpos] = (in[33 + inpos] >>> 58)
+ | ((in[34 + inpos] & 72057594037927935L) << (62 - 56));
+ out[36 + outpos] = (in[34 + inpos] >>> 56)
+ | ((in[35 + inpos] & 18014398509481983L) << (62 - 54));
+ out[37 + outpos] = (in[35 + inpos] >>> 54)
+ | ((in[36 + inpos] & 4503599627370495L) << (62 - 52));
+ out[38 + outpos] = (in[36 + inpos] >>> 52)
+ | ((in[37 + inpos] & 1125899906842623L) << (62 - 50));
+ out[39 + outpos] = (in[37 + inpos] >>> 50)
+ | ((in[38 + inpos] & 281474976710655L) << (62 - 48));
+ out[40 + outpos] = (in[38 + inpos] >>> 48)
+ | ((in[39 + inpos] & 70368744177663L) << (62 - 46));
+ out[41 + outpos] = (in[39 + inpos] >>> 46)
+ | ((in[40 + inpos] & 17592186044415L) << (62 - 44));
+ out[42 + outpos] = (in[40 + inpos] >>> 44)
+ | ((in[41 + inpos] & 4398046511103L) << (62 - 42));
+ out[43 + outpos] = (in[41 + inpos] >>> 42)
+ | ((in[42 + inpos] & 1099511627775L) << (62 - 40));
+ out[44 + outpos] = (in[42 + inpos] >>> 40)
+ | ((in[43 + inpos] & 274877906943L) << (62 - 38));
+ out[45 + outpos] = (in[43 + inpos] >>> 38)
+ | ((in[44 + inpos] & 68719476735L) << (62 - 36));
+ out[46 + outpos] = (in[44 + inpos] >>> 36)
+ | ((in[45 + inpos] & 17179869183L) << (62 - 34));
+ out[47 + outpos] = (in[45 + inpos] >>> 34)
+ | ((in[46 + inpos] & 4294967295L) << (62 - 32));
+ out[48 + outpos] = (in[46 + inpos] >>> 32)
+ | ((in[47 + inpos] & 1073741823L) << (62 - 30));
+ out[49 + outpos] = (in[47 + inpos] >>> 30)
+ | ((in[48 + inpos] & 268435455L) << (62 - 28));
+ out[50 + outpos] = (in[48 + inpos] >>> 28)
+ | ((in[49 + inpos] & 67108863L) << (62 - 26));
+ out[51 + outpos] = (in[49 + inpos] >>> 26)
+ | ((in[50 + inpos] & 16777215L) << (62 - 24));
+ out[52 + outpos] = (in[50 + inpos] >>> 24)
+ | ((in[51 + inpos] & 4194303L) << (62 - 22));
+ out[53 + outpos] = (in[51 + inpos] >>> 22)
+ | ((in[52 + inpos] & 1048575L) << (62 - 20));
+ out[54 + outpos] = (in[52 + inpos] >>> 20)
+ | ((in[53 + inpos] & 262143L) << (62 - 18));
+ out[55 + outpos] = (in[53 + inpos] >>> 18)
+ | ((in[54 + inpos] & 65535L) << (62 - 16));
+ out[56 + outpos] = (in[54 + inpos] >>> 16)
+ | ((in[55 + inpos] & 16383L) << (62 - 14));
+ out[57 + outpos] = (in[55 + inpos] >>> 14)
+ | ((in[56 + inpos] & 4095L) << (62 - 12));
+ out[58 + outpos] = (in[56 + inpos] >>> 12)
+ | ((in[57 + inpos] & 1023L) << (62 - 10));
+ out[59 + outpos] = (in[57 + inpos] >>> 10)
+ | ((in[58 + inpos] & 255L) << (62 - 8));
+ out[60 + outpos] = (in[58 + inpos] >>> 8)
+ | ((in[59 + inpos] & 63L) << (62 - 6));
+ out[61 + outpos] = (in[59 + inpos] >>> 6)
+ | ((in[60 + inpos] & 15L) << (62 - 4));
+ out[62 + outpos] = (in[60 + inpos] >>> 4)
+ | ((in[61 + inpos] & 3L) << (62 - 2));
+ out[63 + outpos] = (in[61 + inpos] >>> 2);
+ }
+
+ protected static void fastunpack63(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ out[outpos] = (in[inpos] & 9223372036854775807L);
+ out[1 + outpos] = (in[inpos] >>> 63)
+ | ((in[1 + inpos] & 4611686018427387903L) << (63 - 62));
+ out[2 + outpos] = (in[1 + inpos] >>> 62)
+ | ((in[2 + inpos] & 2305843009213693951L) << (63 - 61));
+ out[3 + outpos] = (in[2 + inpos] >>> 61)
+ | ((in[3 + inpos] & 1152921504606846975L) << (63 - 60));
+ out[4 + outpos] = (in[3 + inpos] >>> 60)
+ | ((in[4 + inpos] & 576460752303423487L) << (63 - 59));
+ out[5 + outpos] = (in[4 + inpos] >>> 59)
+ | ((in[5 + inpos] & 288230376151711743L) << (63 - 58));
+ out[6 + outpos] = (in[5 + inpos] >>> 58)
+ | ((in[6 + inpos] & 144115188075855871L) << (63 - 57));
+ out[7 + outpos] = (in[6 + inpos] >>> 57)
+ | ((in[7 + inpos] & 72057594037927935L) << (63 - 56));
+ out[8 + outpos] = (in[7 + inpos] >>> 56)
+ | ((in[8 + inpos] & 36028797018963967L) << (63 - 55));
+ out[9 + outpos] = (in[8 + inpos] >>> 55)
+ | ((in[9 + inpos] & 18014398509481983L) << (63 - 54));
+ out[10 + outpos] = (in[9 + inpos] >>> 54)
+ | ((in[10 + inpos] & 9007199254740991L) << (63 - 53));
+ out[11 + outpos] = (in[10 + inpos] >>> 53)
+ | ((in[11 + inpos] & 4503599627370495L) << (63 - 52));
+ out[12 + outpos] = (in[11 + inpos] >>> 52)
+ | ((in[12 + inpos] & 2251799813685247L) << (63 - 51));
+ out[13 + outpos] = (in[12 + inpos] >>> 51)
+ | ((in[13 + inpos] & 1125899906842623L) << (63 - 50));
+ out[14 + outpos] = (in[13 + inpos] >>> 50)
+ | ((in[14 + inpos] & 562949953421311L) << (63 - 49));
+ out[15 + outpos] = (in[14 + inpos] >>> 49)
+ | ((in[15 + inpos] & 281474976710655L) << (63 - 48));
+ out[16 + outpos] = (in[15 + inpos] >>> 48)
+ | ((in[16 + inpos] & 140737488355327L) << (63 - 47));
+ out[17 + outpos] = (in[16 + inpos] >>> 47)
+ | ((in[17 + inpos] & 70368744177663L) << (63 - 46));
+ out[18 + outpos] = (in[17 + inpos] >>> 46)
+ | ((in[18 + inpos] & 35184372088831L) << (63 - 45));
+ out[19 + outpos] = (in[18 + inpos] >>> 45)
+ | ((in[19 + inpos] & 17592186044415L) << (63 - 44));
+ out[20 + outpos] = (in[19 + inpos] >>> 44)
+ | ((in[20 + inpos] & 8796093022207L) << (63 - 43));
+ out[21 + outpos] = (in[20 + inpos] >>> 43)
+ | ((in[21 + inpos] & 4398046511103L) << (63 - 42));
+ out[22 + outpos] = (in[21 + inpos] >>> 42)
+ | ((in[22 + inpos] & 2199023255551L) << (63 - 41));
+ out[23 + outpos] = (in[22 + inpos] >>> 41)
+ | ((in[23 + inpos] & 1099511627775L) << (63 - 40));
+ out[24 + outpos] = (in[23 + inpos] >>> 40)
+ | ((in[24 + inpos] & 549755813887L) << (63 - 39));
+ out[25 + outpos] = (in[24 + inpos] >>> 39)
+ | ((in[25 + inpos] & 274877906943L) << (63 - 38));
+ out[26 + outpos] = (in[25 + inpos] >>> 38)
+ | ((in[26 + inpos] & 137438953471L) << (63 - 37));
+ out[27 + outpos] = (in[26 + inpos] >>> 37)
+ | ((in[27 + inpos] & 68719476735L) << (63 - 36));
+ out[28 + outpos] = (in[27 + inpos] >>> 36)
+ | ((in[28 + inpos] & 34359738367L) << (63 - 35));
+ out[29 + outpos] = (in[28 + inpos] >>> 35)
+ | ((in[29 + inpos] & 17179869183L) << (63 - 34));
+ out[30 + outpos] = (in[29 + inpos] >>> 34)
+ | ((in[30 + inpos] & 8589934591L) << (63 - 33));
+ out[31 + outpos] = (in[30 + inpos] >>> 33)
+ | ((in[31 + inpos] & 4294967295L) << (63 - 32));
+ out[32 + outpos] = (in[31 + inpos] >>> 32)
+ | ((in[32 + inpos] & 2147483647L) << (63 - 31));
+ out[33 + outpos] = (in[32 + inpos] >>> 31)
+ | ((in[33 + inpos] & 1073741823L) << (63 - 30));
+ out[34 + outpos] = (in[33 + inpos] >>> 30)
+ | ((in[34 + inpos] & 536870911L) << (63 - 29));
+ out[35 + outpos] = (in[34 + inpos] >>> 29)
+ | ((in[35 + inpos] & 268435455L) << (63 - 28));
+ out[36 + outpos] = (in[35 + inpos] >>> 28)
+ | ((in[36 + inpos] & 134217727L) << (63 - 27));
+ out[37 + outpos] = (in[36 + inpos] >>> 27)
+ | ((in[37 + inpos] & 67108863L) << (63 - 26));
+ out[38 + outpos] = (in[37 + inpos] >>> 26)
+ | ((in[38 + inpos] & 33554431L) << (63 - 25));
+ out[39 + outpos] = (in[38 + inpos] >>> 25)
+ | ((in[39 + inpos] & 16777215L) << (63 - 24));
+ out[40 + outpos] = (in[39 + inpos] >>> 24)
+ | ((in[40 + inpos] & 8388607L) << (63 - 23));
+ out[41 + outpos] = (in[40 + inpos] >>> 23)
+ | ((in[41 + inpos] & 4194303L) << (63 - 22));
+ out[42 + outpos] = (in[41 + inpos] >>> 22)
+ | ((in[42 + inpos] & 2097151L) << (63 - 21));
+ out[43 + outpos] = (in[42 + inpos] >>> 21)
+ | ((in[43 + inpos] & 1048575L) << (63 - 20));
+ out[44 + outpos] = (in[43 + inpos] >>> 20)
+ | ((in[44 + inpos] & 524287L) << (63 - 19));
+ out[45 + outpos] = (in[44 + inpos] >>> 19)
+ | ((in[45 + inpos] & 262143L) << (63 - 18));
+ out[46 + outpos] = (in[45 + inpos] >>> 18)
+ | ((in[46 + inpos] & 131071L) << (63 - 17));
+ out[47 + outpos] = (in[46 + inpos] >>> 17)
+ | ((in[47 + inpos] & 65535L) << (63 - 16));
+ out[48 + outpos] = (in[47 + inpos] >>> 16)
+ | ((in[48 + inpos] & 32767L) << (63 - 15));
+ out[49 + outpos] = (in[48 + inpos] >>> 15)
+ | ((in[49 + inpos] & 16383L) << (63 - 14));
+ out[50 + outpos] = (in[49 + inpos] >>> 14)
+ | ((in[50 + inpos] & 8191L) << (63 - 13));
+ out[51 + outpos] = (in[50 + inpos] >>> 13)
+ | ((in[51 + inpos] & 4095L) << (63 - 12));
+ out[52 + outpos] = (in[51 + inpos] >>> 12)
+ | ((in[52 + inpos] & 2047L) << (63 - 11));
+ out[53 + outpos] = (in[52 + inpos] >>> 11)
+ | ((in[53 + inpos] & 1023L) << (63 - 10));
+ out[54 + outpos] = (in[53 + inpos] >>> 10)
+ | ((in[54 + inpos] & 511L) << (63 - 9));
+ out[55 + outpos] = (in[54 + inpos] >>> 9)
+ | ((in[55 + inpos] & 255L) << (63 - 8));
+ out[56 + outpos] = (in[55 + inpos] >>> 8)
+ | ((in[56 + inpos] & 127L) << (63 - 7));
+ out[57 + outpos] = (in[56 + inpos] >>> 7)
+ | ((in[57 + inpos] & 63L) << (63 - 6));
+ out[58 + outpos] = (in[57 + inpos] >>> 6)
+ | ((in[58 + inpos] & 31L) << (63 - 5));
+ out[59 + outpos] = (in[58 + inpos] >>> 5)
+ | ((in[59 + inpos] & 15L) << (63 - 4));
+ out[60 + outpos] = (in[59 + inpos] >>> 4)
+ | ((in[60 + inpos] & 7L) << (63 - 3));
+ out[61 + outpos] = (in[60 + inpos] >>> 3)
+ | ((in[61 + inpos] & 3L) << (63 - 2));
+ out[62 + outpos] = (in[61 + inpos] >>> 2)
+ | ((in[62 + inpos] & 1L) << (63 - 1));
+ out[63 + outpos] = (in[62 + inpos] >>> 1);
+ }
+
+ protected static void fastunpack64(final long[] in, int inpos,
+ final long[] out, int outpos) {
+ System.arraycopy(in, inpos, out, outpos, 64);
+ }
+
+ protected static void slowunpack(final long[] in, int inpos,
+ final long[] out, int outpos, final int bit) {
+ int bucket = 0;
+ int shift = 0;
+ for (int i = 0 ; i < 64 ; i++) {
+ if (shift >= 64) {
+ bucket++;
+ shift -= 64;
+
+ if (shift > 0) {
+ // There is some leftovers from previous input in the next bucket
+ out[outpos + i - 1] |= (in[inpos + bucket] << (bit - shift) & ((1L << bit) - 1));
+ }
+ }
+ out[outpos + i] = ((in[inpos + bucket] >>> shift) & ((1L << bit) - 1));
+
+ shift += bit;
+ }
+ }
+}
diff --git a/src/main/java/me/lemire/longcompression/LongCODEC.java b/src/main/java/me/lemire/longcompression/LongCODEC.java
new file mode 100644
index 0000000..0951ffd
--- /dev/null
+++ b/src/main/java/me/lemire/longcompression/LongCODEC.java
@@ -0,0 +1,62 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+
+package me.lemire.longcompression;
+
+import me.lemire.integercompression.IntWrapper;
+
+/**
+ * Interface describing a standard CODEC to compress longs.
+ *
+ * @author Benoit Lacelle
+ *
+ */
+public interface LongCODEC {
+ /**
+ * Compress data from an array to another array.
+ *
+ * Both inpos and outpos are modified to represent how much data was
+ * read and written to. If 12 longs (inlength = 12) are compressed to 3
+ * longs, then inpos will be incremented by 12 while outpos will be
+ * incremented by 3. We use IntWrapper to pass the values by reference.
+ *
+ * @param in
+ * input array
+ * @param inpos
+ * where to start reading in the array
+ * @param inlength
+ * how many longs to compress
+ * @param out
+ * output array
+ * @param outpos
+ * where to write in the output array
+ */
+ public void compress(long[] in, IntWrapper inpos, int inlength,
+ long[] out, IntWrapper outpos);
+
+ /**
+ * Uncompress data from an array to another array.
+ *
+ * Both inpos and outpos parameters are modified to indicate new
+ * positions after read/write.
+ *
+ * @param in
+ * array containing data in compressed form
+ * @param inpos
+ * where to start reading in the array
+ * @param inlength
+ * length of the compressed data (ignored by some
+ * schemes)
+ * @param out
+ * array where to write the uncompressed output
+ * @param outpos
+ * where to start writing the uncompressed output in out
+ */
+ public void uncompress(long[] in, IntWrapper inpos, int inlength,
+ long[] out, IntWrapper outpos);
+
+}
diff --git a/src/main/java/me/lemire/longcompression/LongComposition.java b/src/main/java/me/lemire/longcompression/LongComposition.java
new file mode 100644
index 0000000..5111a51
--- /dev/null
+++ b/src/main/java/me/lemire/longcompression/LongComposition.java
@@ -0,0 +1,71 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+package me.lemire.longcompression;
+
+import me.lemire.integercompression.IntWrapper;
+
+/**
+ * Helper class to compose schemes.
+ *
+ * @author Benoit Lacelle
+ */
+public class LongComposition implements LongCODEC {
+ LongCODEC F1, F2;
+
+ /**
+ * Compose a scheme from a first one (f1) and a second one (f2). The
+ * first one is called first and then the second one tries to compress
+ * whatever remains from the first run.
+ *
+ * By convention, the first scheme should be such that if, during
+ * decoding, a 32-bit zero is first encountered, then there is no
+ * output.
+ *
+ * @param f1
+ * first codec
+ * @param f2
+ * second codec
+ */
+ public LongComposition(LongCODEC f1, LongCODEC f2) {
+ F1 = f1;
+ F2 = f2;
+ }
+
+ @Override
+ public void compress(long[] in, IntWrapper inpos, int inlength,
+ long[] out, IntWrapper outpos) {
+ if (inlength == 0) {
+ return;
+ }
+ int inposInit = inpos.get();
+ int outposInit = outpos.get();
+ F1.compress(in, inpos, inlength, out, outpos);
+ if (outpos.get() == outposInit) {
+ out[outposInit] = 0;
+ outpos.increment();
+ }
+ inlength -= inpos.get() - inposInit;
+ F2.compress(in, inpos, inlength, out, outpos);
+ }
+
+ @Override
+ public void uncompress(long[] in, IntWrapper inpos, int inlength,
+ long[] out, IntWrapper outpos) {
+ if (inlength == 0)
+ return;
+ final int init = inpos.get();
+ F1.uncompress(in, inpos, inlength, out, outpos);
+ inlength -= inpos.get() - init;
+ F2.uncompress(in, inpos, inlength, out, outpos);
+ }
+
+ @Override
+ public String toString() {
+ return F1.toString() + " + " + F2.toString();
+ }
+
+}
diff --git a/src/main/java/me/lemire/longcompression/LongCompressor.java b/src/main/java/me/lemire/longcompression/LongCompressor.java
new file mode 100644
index 0000000..246647f
--- /dev/null
+++ b/src/main/java/me/lemire/longcompression/LongCompressor.java
@@ -0,0 +1,68 @@
+package me.lemire.longcompression;
+
+import java.util.Arrays;
+
+import me.lemire.integercompression.IntWrapper;
+
+/**
+ * This is a convenience class that wraps a codec to provide
+ * a "friendly" API.
+ *
+ * @author Benoit Lacelle
+ */
+public class LongCompressor {
+
+ SkippableLongCODEC codec;
+
+ /**
+ * Constructor wrapping a codec.
+ *
+ * @param c the underlying codec
+ */
+ public LongCompressor(SkippableLongCODEC c) {
+ codec = c;
+ }
+
+ /**
+ * Constructor with default codec.
+ */
+ public LongCompressor() {
+ codec = new SkippableLongComposition(new LongBinaryPacking(),
+ new LongVariableByte());
+ }
+
+ /**
+ * Compress an array and returns the compressed result as a new array.
+ *
+ * @param input array to be compressed
+ * @return compressed array
+ */
+ public long[] compress(long[] input) {
+ int maxCompressedLength = codec.maxHeadlessCompressedLength(new IntWrapper(0), input.length);
+ long[] compressed = new long[maxCompressedLength + 1]; // +1 to store the length of the input
+ // Store at index=0 the length of the input, hence enabling .headlessCompress
+ compressed[0] = input.length;
+ IntWrapper outpos = new IntWrapper(1);
+ codec.headlessCompress(input, new IntWrapper(0), input.length, compressed, outpos);
+ compressed = Arrays.copyOf(compressed,outpos.intValue());
+ return compressed;
+ }
+
+ /**
+ * Uncompress an array and returns the uncompressed result as a new array.
+ *
+ * @param compressed compressed array
+ * @return uncompressed array
+ */
+ public long[] uncompress(long[] compressed) {
+ // Read at index=0 the length of the input, hence enabling .headlessUncompress
+ long[] decompressed = new long[(int) compressed[0]];
+ IntWrapper inpos = new IntWrapper(1);
+ codec.headlessUncompress(compressed, inpos,
+ compressed.length - inpos.intValue(),
+ decompressed, new IntWrapper(0),
+ decompressed.length);
+ return decompressed;
+ }
+
+}
diff --git a/src/main/java/me/lemire/longcompression/LongJustCopy.java b/src/main/java/me/lemire/longcompression/LongJustCopy.java
new file mode 100644
index 0000000..95abc1e
--- /dev/null
+++ b/src/main/java/me/lemire/longcompression/LongJustCopy.java
@@ -0,0 +1,58 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+
+package me.lemire.longcompression;
+
+import me.lemire.integercompression.IntWrapper;
+
+/**
+ * @author Benoit lacelle
+ *
+ */
+public final class LongJustCopy implements LongCODEC, SkippableLongCODEC {
+
+ @Override
+ public void headlessCompress(long[] in, IntWrapper inpos, int inlength,
+ long[] out, IntWrapper outpos) {
+ System.arraycopy(in, inpos.get(), out, outpos.get(), inlength);
+ inpos.add(inlength);
+ outpos.add(inlength);
+ }
+
+ @Override
+ public void uncompress(long[] in, IntWrapper inpos, int inlength,
+ long[] out, IntWrapper outpos) {
+ headlessUncompress(in,inpos,inlength,out,outpos,inlength);
+ }
+
+ @Override
+ public String toString() {
+ return this.getClass().getSimpleName();
+ }
+
+ @Override
+ public void headlessUncompress(long[] in, IntWrapper inpos, int inlength,
+ long[] out, IntWrapper outpos, int num) {
+ System.arraycopy(in, inpos.get(), out, outpos.get(), num);
+ inpos.add(num);
+ outpos.add(num);
+
+ }
+
+ @Override
+ public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) {
+ compressedPositions.add(inlength);
+ return inlength;
+ }
+
+ @Override
+ public void compress(long[] in, IntWrapper inpos, int inlength,
+ long[] out, IntWrapper outpos) {
+ headlessCompress(in,inpos,inlength,out,outpos);
+ }
+
+}
diff --git a/src/main/java/me/lemire/longcompression/LongUtil.java b/src/main/java/me/lemire/longcompression/LongUtil.java
new file mode 100644
index 0000000..7bdce83
--- /dev/null
+++ b/src/main/java/me/lemire/longcompression/LongUtil.java
@@ -0,0 +1,52 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+
+package me.lemire.longcompression;
+
+/**
+ * These are unofficial helpers related to long compression
+ *
+ * @author Benoit Lacelle
+ *
+ */
+@Deprecated
+public class LongUtil {
+
+ /**
+ * Compute the maximum of the integer logarithms (ceil(log(x+1)) of a range
+ * of value
+ *
+ * @param i
+ * source array
+ * @param pos
+ * starting position
+ * @param length
+ * number of integers to consider
+ * @return integer logarithm
+ */
+ public static int maxbits(long[] i, int pos, int length) {
+ long mask = 0;
+ for (int k = pos; k < pos + length; ++k)
+ mask |= i[k];
+ return bits(mask);
+ }
+
+ /**
+ * Compute the integer logarithms (ceil(log(x+1)) of a value
+ *
+ * @param i
+ * source value
+ * @return integer logarithm
+ */
+ public static int bits(long i) {
+ return 64 - Long.numberOfLeadingZeros(i);
+ }
+
+ protected static String longToBinaryWithLeading(long l) {
+ return String.format("%64s", Long.toBinaryString(l)).replace(' ', '0');
+ }
+}
diff --git a/src/main/java/me/lemire/longcompression/LongVariableByte.java b/src/main/java/me/lemire/longcompression/LongVariableByte.java
new file mode 100644
index 0000000..63c194b
--- /dev/null
+++ b/src/main/java/me/lemire/longcompression/LongVariableByte.java
@@ -0,0 +1,348 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+package me.lemire.longcompression;
+
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.nio.LongBuffer;
+
+import me.lemire.integercompression.IntWrapper;
+
+/**
+ * Implementation of variable-byte. For best performance, use it using the
+ * ByteLongCODEC interface.
+ *
+ * Note that this does not use differential coding: if you are working on sorted
+ * lists, you must compute the deltas separately.
+ *
+ * @author Benoit Lacelle
+ */
+public class LongVariableByte implements LongCODEC, ByteLongCODEC, SkippableLongCODEC {
+ private static final int MAX_BYTES_PER_INT = 10;
+
+ private static byte extract7bits(int i, long val) {
+ return (byte) ((val >>> (7 * i)) & ((1 << 7) - 1));
+ }
+
+ private static byte extract7bitsmaskless(int i, long val) {
+ return (byte) ((val >>> (7 * i)));
+ }
+ @Override
+ public void compress(long[] in, IntWrapper inpos, int inlength, long[] out,
+ IntWrapper outpos) {
+ headlessCompress(in, inpos, inlength, out, outpos);
+ }
+
+ @Override
+ public void headlessCompress(long[] in, IntWrapper inpos, int inlength, long[] out,
+ IntWrapper outpos) {
+ if (inlength == 0)
+ return;
+ // Worst case: we write 10 bytes per long, hence 2 longs for a long, hence 16 bytes per long
+ ByteBuffer buf = makeBuffer(inlength * 16);
+ buf.order(ByteOrder.LITTLE_ENDIAN);
+ for (int k = inpos.get(); k < inpos.get() + inlength; ++k) {
+ final long val = in[k];
+ if (val >= 0 && val < (1 << 7)) {
+ buf.put((byte) (val | (1 << 7)));
+ } else if (val >= 0 && val < (1 << 14)) {
+ buf.put((byte) extract7bits(0, val));
+ buf.put((byte) (extract7bitsmaskless(1, (val)) | (1 << 7)));
+ } else if (val >= 0 && val < (1 << 21)) {
+ buf.put((byte) extract7bits(0, val));
+ buf.put((byte) extract7bits(1, val));
+ buf.put((byte) (extract7bitsmaskless(2, (val)) | (1 << 7)));
+ } else if (val >= 0 && val < (1 << 28)) {
+ buf.put((byte) extract7bits(0, val));
+ buf.put((byte) extract7bits(1, val));
+ buf.put((byte) extract7bits(2, val));
+ buf.put((byte) (extract7bitsmaskless(3, (val)) | (1 << 7)));
+ } else if (val >= 0 && val < (1L << 35)) {
+ buf.put((byte) extract7bits(0, val));
+ buf.put((byte) extract7bits(1, val));
+ buf.put((byte) extract7bits(2, val));
+ buf.put((byte) extract7bits(3, val));
+ buf.put((byte) (extract7bitsmaskless(4, (val)) | (1 << 7)));
+ } else if (val >= 0 && val < (1L << 42)) {
+ buf.put((byte) extract7bits(0, val));
+ buf.put((byte) extract7bits(1, val));
+ buf.put((byte) extract7bits(2, val));
+ buf.put((byte) extract7bits(3, val));
+ buf.put((byte) extract7bits(4, val));
+ buf.put((byte) (extract7bitsmaskless(5, (val)) | (1 << 7)));
+ } else if (val >= 0 && val < (1L << 49)) {
+ buf.put((byte) extract7bits(0, val));
+ buf.put((byte) extract7bits(1, val));
+ buf.put((byte) extract7bits(2, val));
+ buf.put((byte) extract7bits(3, val));
+ buf.put((byte) extract7bits(4, val));
+ buf.put((byte) extract7bits(5, val));
+ buf.put((byte) (extract7bitsmaskless(6, (val)) | (1 << 7)));
+ } else if (val >= 0 && val < (1L << 56)) {
+ buf.put((byte) extract7bits(0, val));
+ buf.put((byte) extract7bits(1, val));
+ buf.put((byte) extract7bits(2, val));
+ buf.put((byte) extract7bits(3, val));
+ buf.put((byte) extract7bits(4, val));
+ buf.put((byte) extract7bits(5, val));
+ buf.put((byte) extract7bits(6, val));
+ buf.put((byte) (extract7bitsmaskless(7, (val)) | (1 << 7)));
+ } else if (val >= 0) {
+ buf.put((byte) extract7bits(0, val));
+ buf.put((byte) extract7bits(1, val));
+ buf.put((byte) extract7bits(2, val));
+ buf.put((byte) extract7bits(3, val));
+ buf.put((byte) extract7bits(4, val));
+ buf.put((byte) extract7bits(5, val));
+ buf.put((byte) extract7bits(6, val));
+ buf.put((byte) extract7bits(7, val));
+ buf.put((byte) (extract7bitsmaskless(8, (val)) | (1 << 7)));
+ } else {
+ buf.put((byte) extract7bits(0, val));
+ buf.put((byte) extract7bits(1, val));
+ buf.put((byte) extract7bits(2, val));
+ buf.put((byte) extract7bits(3, val));
+ buf.put((byte) extract7bits(4, val));
+ buf.put((byte) extract7bits(5, val));
+ buf.put((byte) extract7bits(6, val));
+ buf.put((byte) extract7bits(7, val));
+ buf.put((byte) extract7bits(8, val));
+ buf.put((byte) (extract7bitsmaskless(9, (val)) | (1 << 7)));
+ }
+ }
+ while (buf.position() % 8 != 0)
+ buf.put((byte) 0);
+ final int length = buf.position();
+ buf.flip();
+ LongBuffer ibuf = buf.asLongBuffer();
+ ibuf.get(out, outpos.get(), length / 8);
+ outpos.add(length / 8);
+ inpos.add(inlength);
+ }
+
+ @Override
+ public void compress(long[] in, IntWrapper inpos, int inlength, byte[] out,
+ IntWrapper outpos) {
+ if (inlength == 0)
+ return;
+ int outpostmp = outpos.get();
+ for (int k = inpos.get(); k < inpos.get() + inlength; ++k) {
+ final long val = in[k];
+ if (val >= 0 && val < (1 << 7)) {
+ out[outpostmp++] = (byte) (val | (1 << 7));
+ } else if (val >= 0 && val < (1 << 14)) {
+ out[outpostmp++] = (byte) extract7bits(0, val);
+ out[outpostmp++] = (byte) (extract7bitsmaskless(1, (val)) | (1 << 7));
+ } else if (val >= 0 && val < (1 << 21)) {
+ out[outpostmp++] = (byte) extract7bits(0, val);
+ out[outpostmp++] = (byte) extract7bits(1, val);
+ out[outpostmp++] = (byte) (extract7bitsmaskless(2, (val)) | (1 << 7));
+ } else if (val >= 0 && val < (1 << 28)) {
+ out[outpostmp++] = (byte) extract7bits(0, val);
+ out[outpostmp++] = (byte) extract7bits(1, val);
+ out[outpostmp++] = (byte) extract7bits(2, val);
+ out[outpostmp++] = (byte) (extract7bitsmaskless(3, (val)) | (1 << 7));
+ } else if (val >= 0 && val < (1L << 35)) {
+ out[outpostmp++] = (byte) extract7bits(0, val);
+ out[outpostmp++] = (byte) extract7bits(1, val);
+ out[outpostmp++] = (byte) extract7bits(2, val);
+ out[outpostmp++] = (byte) extract7bits(3, val);
+ out[outpostmp++] = (byte) (extract7bitsmaskless(4, (val)) | (1 << 7));
+ } else if (val >= 0 && val < (1L << 42)) {
+ out[outpostmp++] = (byte) extract7bits(0, val);
+ out[outpostmp++] = (byte) extract7bits(1, val);
+ out[outpostmp++] = (byte) extract7bits(2, val);
+ out[outpostmp++] = (byte) extract7bits(3, val);
+ out[outpostmp++] = (byte) extract7bits(4, val);
+ out[outpostmp++] = (byte) (extract7bitsmaskless(5, (val)) | (1 << 7));
+ } else if (val >= 0 && val < (1L << 49)) {
+ out[outpostmp++] = (byte) extract7bits(0, val);
+ out[outpostmp++] = (byte) extract7bits(1, val);
+ out[outpostmp++] = (byte) extract7bits(2, val);
+ out[outpostmp++] = (byte) extract7bits(3, val);
+ out[outpostmp++] = (byte) extract7bits(4, val);
+ out[outpostmp++] = (byte) extract7bits(5, val);
+ out[outpostmp++] = (byte) (extract7bitsmaskless(6, (val)) | (1 << 7));
+ } else if (val >= 0 && val < (1L << 56)) {
+ out[outpostmp++] = (byte) extract7bits(0, val);
+ out[outpostmp++] = (byte) extract7bits(1, val);
+ out[outpostmp++] = (byte) extract7bits(2, val);
+ out[outpostmp++] = (byte) extract7bits(3, val);
+ out[outpostmp++] = (byte) extract7bits(4, val);
+ out[outpostmp++] = (byte) extract7bits(5, val);
+ out[outpostmp++] = (byte) extract7bits(6, val);
+ out[outpostmp++] = (byte) (extract7bitsmaskless(7, (val)) | (1 << 7));
+ } else if (val >= 0) {
+ out[outpostmp++] = (byte) extract7bits(0, val);
+ out[outpostmp++] = (byte) extract7bits(1, val);
+ out[outpostmp++] = (byte) extract7bits(2, val);
+ out[outpostmp++] = (byte) extract7bits(3, val);
+ out[outpostmp++] = (byte) extract7bits(4, val);
+ out[outpostmp++] = (byte) extract7bits(5, val);
+ out[outpostmp++] = (byte) extract7bits(6, val);
+ out[outpostmp++] = (byte) extract7bits(7, val);
+ out[outpostmp++] = (byte) (extract7bitsmaskless(8, (val)) | (1 << 7));
+ } else {
+ out[outpostmp++] = (byte) extract7bits(0, val);
+ out[outpostmp++] = (byte) extract7bits(1, val);
+ out[outpostmp++] = (byte) extract7bits(2, val);
+ out[outpostmp++] = (byte) extract7bits(3, val);
+ out[outpostmp++] = (byte) extract7bits(4, val);
+ out[outpostmp++] = (byte) extract7bits(5, val);
+ out[outpostmp++] = (byte) extract7bits(6, val);
+ out[outpostmp++] = (byte) extract7bits(7, val);
+ out[outpostmp++] = (byte) extract7bits(8, val);
+ out[outpostmp++] = (byte) (extract7bitsmaskless(9, (val)) | (1 << 7));
+ }
+ }
+ outpos.set(outpostmp);
+ inpos.add(inlength);
+ }
+
+ @Override
+ public void uncompress(long[] in, IntWrapper inpos, int inlength, long[] out,
+ IntWrapper outpos) {
+ int s = 0;
+ long val = 0;
+ int p = inpos.get();
+ int finalp = inpos.get() + inlength;
+ int tmpoutpos = outpos.get();
+ for (long v = 0, shift = 0; p < finalp;) {
+ val = in[p];
+ long c = (byte) (val >>> s);
+ // Shift to next byte
+ s += 8;
+ // Shift to next long if s==64
+ p += s>>6;
+ // Cycle from 63 to 0
+ s = s & 63;
+ v += ((c & 127) << shift);
+ if ((c & 128) == 128) {
+ out[tmpoutpos++] = v;
+ v = 0;
+ shift = 0;
+ } else
+ shift += 7;
+ assert shift < 64;
+ }
+ outpos.set(tmpoutpos);
+ inpos.add(inlength);
+ }
+
+ @Override
+ public void uncompress(byte[] in, IntWrapper inpos, int inlength,
+ long[] out, IntWrapper outpos) {
+ int p = inpos.get();
+ int finalp = inpos.get() + inlength;
+ int tmpoutpos = outpos.get();
+ for (long v = 0; p < finalp; out[tmpoutpos++] = v) {
+ v = in[p] & 0x7F;
+ if (in[p] < 0) {
+ p += 1;
+ continue;
+ }
+ v = ((in[p + 1] & 0x7F) << 7) | v;
+ if (in[p + 1] < 0) {
+ p += 2;
+ continue;
+ }
+ v = ((in[p + 2] & 0x7F) << 14) | v;
+ if (in[p + 2] < 0 ) {
+ p += 3;
+ continue;
+ }
+ v = ((in[p + 3] & 0x7F) << 21) | v;
+ if (in[p + 3] < 0) {
+ p += 4;
+ continue;
+ }
+ v = (((long) in[p + 4] & 0x7F) << 28) | v;
+ if (in[p + 4] < 0) {
+ p += 5;
+ continue;
+ }
+ v = (((long) in[p + 5] & 0x7F) << 35) | v;
+ if (in[p + 5] < 0) {
+ p += 6;
+ continue;
+ }
+ v = (((long) in[p + 6] & 0x7F) << 42) | v;
+ if (in[p + 6] < 0) {
+ p += 7;
+ continue;
+ }
+ v = (((long) in[p + 7] & 0x7F) << 49) | v;
+ if (in[p + 7] < 0) {
+ p += 8;
+ continue;
+ }
+ v = (((long) in[p + 8] & 0x7F) << 56) | v;
+ if (in[p + 8] < 0) {
+ p += 9;
+ continue;
+ }
+ v = (((long) in[p + 9] & 0x7F) << 63) | v;
+ p += 10;
+ }
+ outpos.set(tmpoutpos);
+ inpos.add(p);
+ }
+
+ @Override
+ public String toString() {
+ return this.getClass().getSimpleName();
+ }
+
+ @Override
+ public void headlessUncompress(long[] in, IntWrapper inpos, int inlength, long[] out,
+ IntWrapper outpos, int num) {
+ int s = 0;
+ long val = 0;
+ int p = inpos.get();
+ int tmpoutpos = outpos.get();
+ int finaloutpos = num + tmpoutpos;
+ for (long v = 0, shift = 0; tmpoutpos < finaloutpos;) {
+ val = in[p];
+ long c = val >>> s;
+ // Shift to next byte
+ s += 8;
+ // Shift to next long if s == 64
+ p += s>>6;
+ // Cycle from 63 to 0
+ s = s & 63;
+ v += ((c & 127) << shift);
+ if ((c & 128) == 128) {
+ out[tmpoutpos++] = v;
+ v = 0;
+ shift = 0;
+ } else
+ shift += 7;
+ assert shift < 64;
+ }
+ outpos.set(tmpoutpos);
+ inpos.set(p + (s!=0 ? 1 : 0));
+ }
+
+ @Override
+ public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) {
+ int maxLengthInBytes = inlength * MAX_BYTES_PER_INT;
+ int maxLengthInLongs = (maxLengthInBytes + Long.BYTES - 1) / Long.BYTES;
+ compressedPositions.add(inlength);
+ return maxLengthInLongs;
+ }
+
+ /**
+ * Creates a new buffer of the requested size.
+ *
+ * In case you need a different way to allocate buffers, you can override this method
+ * with a custom behavior. The default implementation allocates a new Java direct
+ * {@link ByteBuffer} on each invocation.
+ */
+ protected ByteBuffer makeBuffer(int sizeInBytes) {
+ return ByteBuffer.allocateDirect(sizeInBytes);
+ }
+}
diff --git a/src/main/java/me/lemire/longcompression/RoaringIntPacking.java b/src/main/java/me/lemire/longcompression/RoaringIntPacking.java
new file mode 100644
index 0000000..d6b6baa
--- /dev/null
+++ b/src/main/java/me/lemire/longcompression/RoaringIntPacking.java
@@ -0,0 +1,46 @@
+/*
+ * (c) the authors Licensed under the Apache License, Version 2.0.
+ */
+package me.lemire.longcompression;
+
+/**
+ * Used to hold the logic packing 2 integers in a long, and separating a long in two integers. It is
+ * useful in {@link Roaring64NavigableMap} as the implementation split the input long in two
+ * integers, one used as key of a NavigableMap while the other is added in a Bitmap
+ *
+ * @author Benoit Lacelle
+ *
+ */
+// Duplicated from RoaringBitmap
+class RoaringIntPacking {
+
+ /**
+ *
+ * @param id any long, positive or negative
+ * @return an int holding the 32 highest order bits of information of the input long
+ */
+ public static int high(long id) {
+ return (int) (id >> 32);
+ }
+
+ /**
+ *
+ * @param id any long, positive or negative
+ * @return an int holding the 32 lowest order bits of information of the input long
+ */
+ public static int low(long id) {
+ return (int) id;
+ }
+
+ /**
+ *
+ * @param high an integer representing the highest order bits of the output long
+ * @param low an integer representing the lowest order bits of the output long
+ * @return a long packing together the integers as computed by
+ * {@link RoaringIntPacking#high(long)} and {@link RoaringIntPacking#low(long)}
+ */
+ // https://stackoverflow.com/questions/12772939/java-storing-two-ints-in-a-long
+ public static long pack(int high, int low) {
+ return (((long) high) << 32) | (low & 0xffffffffL);
+ }
+}
diff --git a/src/main/java/me/lemire/longcompression/SkippableLongCODEC.java b/src/main/java/me/lemire/longcompression/SkippableLongCODEC.java
new file mode 100644
index 0000000..33fd562
--- /dev/null
+++ b/src/main/java/me/lemire/longcompression/SkippableLongCODEC.java
@@ -0,0 +1,87 @@
+/**
+ * This is code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+
+package me.lemire.longcompression;
+
+import me.lemire.integercompression.IntWrapper;
+
+/**
+ * Interface describing a standard CODEC to compress longs. This is a
+ * variation on the LongCODEC interface meant to be used for random access
+ * (i.e., given a large array, you can segment it and decode just the subarray you need).
+ *
+ * The main difference is that we must specify the number of longs we wish to
+ * decode. This information should be stored elsewhere.
+ *
+ * This interface was designed by the Terrier team for their search engine.
+ *
+ * @author Benoit Lacelle
+ *
+ */
+public interface SkippableLongCODEC {
+ /**
+ * Compress data from an array to another array.
+ *
+ * Both inpos and outpos are modified to represent how much data was read
+ * and written to. If 12 longs (inlength = 12) are compressed to 3 longs, then
+ * inpos will be incremented by 12 while outpos will be incremented by 3. We
+ * use IntWrapper to pass the values by reference.
+ *
+ * @param in
+ * input array
+ * @param inpos
+ * where to start reading in the array
+ * @param inlength
+ * how many longs to compress
+ * @param out
+ * output array
+ * @param outpos
+ * where to write in the output array
+ */
+ public void headlessCompress(long[] in, IntWrapper inpos, int inlength, long[] out,
+ IntWrapper outpos);
+
+ /**
+ * Uncompress data from an array to another array.
+ *
+ * Both inpos and outpos parameters are modified to indicate new positions
+ * after read/write.
+ *
+ * @param in
+ * array containing data in compressed form
+ * @param inpos
+ * where to start reading in the array
+ * @param inlength
+ * length of the compressed data (ignored by some schemes)
+ * @param out
+ * array where to write the uncompressed output
+ * @param outpos
+ * where to start writing the uncompressed output in out
+ * @param num
+ * number of longs we want to decode, the actual number of longs decoded can be less
+ */
+ public void headlessUncompress(long[] in, IntWrapper inpos, int inlength, long[] out,
+ IntWrapper outpos, int num);
+
+ /**
+ * Compute the maximum number of longs that might be required to store
+ * the compressed form of a given input array segment, without headers.
+ *
+ * This is useful to pre-allocate the output buffer before calling
+ * {@link #headlessCompress(long[], IntWrapper, int, long[], IntWrapper)}.
+ *
+ *
+ * @param compressedPositions
+ * since not all schemes compress every input integer, this parameter
+ * returns how many input integers will actually be compressed.
+ * This is useful when composing multiple schemes.
+ * @param inlength
+ * number of longs to be compressed
+ * @return the maximum number of longs needed in the output array
+ */
+ int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength);
+}
diff --git a/src/main/java/me/lemire/longcompression/SkippableLongComposition.java b/src/main/java/me/lemire/longcompression/SkippableLongComposition.java
new file mode 100644
index 0000000..eb03b72
--- /dev/null
+++ b/src/main/java/me/lemire/longcompression/SkippableLongComposition.java
@@ -0,0 +1,82 @@
+/**
+ * This is code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+package me.lemire.longcompression;
+
+import me.lemire.integercompression.IntWrapper;
+
+/**
+ * Helper class to compose schemes.
+ *
+ * @author Benoit Lacelle
+ */
+public class SkippableLongComposition implements SkippableLongCODEC {
+ SkippableLongCODEC F1, F2;
+
+ /**
+ * Compose a scheme from a first one (f1) and a second one (f2). The first
+ * one is called first and then the second one tries to compress whatever
+ * remains from the first run.
+ *
+ * By convention, the first scheme should be such that if, during decoding,
+ * a 32-bit zero is first encountered, then there is no output.
+ *
+ * @param f1
+ * first codec
+ * @param f2
+ * second codec
+ */
+ public SkippableLongComposition(SkippableLongCODEC f1,
+ SkippableLongCODEC f2) {
+ F1 = f1;
+ F2 = f2;
+ }
+
+ @Override
+ public void headlessCompress(long[] in, IntWrapper inpos, int inlength, long[] out,
+ IntWrapper outpos) {
+ int init = inpos.get();
+ int outposInit = outpos.get();
+ F1.headlessCompress(in, inpos, inlength, out, outpos);
+ if (outpos.get() == outposInit) {
+ out[outposInit] = 0;
+ outpos.increment();
+ }
+ inlength -= inpos.get() - init;
+ F2.headlessCompress(in, inpos, inlength, out, outpos);
+ }
+
+ @Override
+ public void headlessUncompress(long[] in, IntWrapper inpos, int inlength, long[] out,
+ IntWrapper outpos, int num) {
+ int init = inpos.get();
+ int outposInit = outpos.get();
+
+ F1.headlessUncompress(in, inpos, inlength, out, outpos, num);
+ if (inpos.get() == init) {
+ inpos.increment();
+ }
+ inlength -= inpos.get() - init;
+ num -= outpos.get() - outposInit;
+ F2.headlessUncompress(in, inpos, inlength, out, outpos, num);
+ }
+
+ @Override
+ public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) {
+ int init = compressedPositions.get();
+ int maxLength = F1.maxHeadlessCompressedLength(compressedPositions, inlength);
+ maxLength += 1; // Add +1 for the potential F2 header. Question: is this header actually needed in the headless version?
+ inlength -= compressedPositions.get() - init;
+ maxLength += F2.maxHeadlessCompressedLength(compressedPositions, inlength);
+ return maxLength;
+ }
+
+ @Override
+ public String toString() {
+ return F1.toString() + "+" + F2.toString();
+ }
+
+}
diff --git a/src/main/java/me/lemire/longcompression/differential/LongDelta.java b/src/main/java/me/lemire/longcompression/differential/LongDelta.java
new file mode 100644
index 0000000..8399f94
--- /dev/null
+++ b/src/main/java/me/lemire/longcompression/differential/LongDelta.java
@@ -0,0 +1,150 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+
+package me.lemire.longcompression.differential;
+
+/**
+ * Generic class to compute differential coding.
+ *
+ * @author Benoit lacelle
+ *
+ */
+public final class LongDelta {
+
+ /**
+ * Apply differential coding (in-place).
+ *
+ * @param data
+ * data to be modified
+ */
+ public static void delta(long[] data) {
+ for (int i = data.length - 1; i > 0; --i) {
+ data[i] -= data[i - 1];
+ }
+ }
+
+ /**
+ * Apply differential coding (in-place) given an initial value.
+ *
+ * @param data
+ * data to be modified
+ * @param start
+ * starting index
+ * @param length
+ * number of integers to process
+ * @param init
+ * initial value
+ * @return next initial vale
+ */
+ public static long delta(long[] data, int start, int length, int init) {
+ final long nextinit = data[start + length - 1];
+ for (int i = length - 1; i > 0; --i) {
+ data[start + i] -= data[start + i - 1];
+ }
+ data[start] -= init;
+ return nextinit;
+ }
+
+ /**
+ * Compute differential coding given an initial value. Output is written
+ * to a provided array: must have length "length" or better.
+ *
+ * @param data
+ * data to be modified
+ * @param start
+ * starting index
+ * @param length
+ * number of integers to process
+ * @param init
+ * initial value
+ * @param out
+ * output array
+ * @return next initial vale
+ */
+ public static long delta(long[] data, int start, int length, int init,
+ long[] out) {
+ for (int i = length - 1; i > 0; --i) {
+ out[i] = data[start + i] - data[start + i - 1];
+ }
+ out[0] = data[start] - init;
+ return data[start + length - 1];
+ }
+
+ /**
+ * Undo differential coding (in-place). Effectively computes a prefix
+ * sum.
+ *
+ * @param data
+ * to be modified.
+ */
+ public static void inverseDelta(long[] data) {
+ for (int i = 1; i < data.length; ++i) {
+ data[i] += data[i - 1];
+ }
+ }
+
+ /**
+ * Undo differential coding (in-place). Effectively computes a prefix
+ * sum. Like inverseDelta, only faster.
+ *
+ * @param data
+ * to be modified
+ */
+ public static void fastinverseDelta(long[] data) {
+ int sz0 = data.length / 4 * 4;
+ int i = 1;
+ if (sz0 >= 4) {
+ long a = data[0];
+ for (; i < sz0 - 4; i += 4) {
+ a = data[i] += a;
+ a = data[i + 1] += a;
+ a = data[i + 2] += a;
+ a = data[i + 3] += a;
+ }
+ }
+
+ for (; i < data.length; ++i) {
+ data[i] += data[i - 1];
+ }
+ }
+
+ /**
+ * Undo differential coding (in-place). Effectively computes a prefix
+ * sum. Like inverseDelta, only faster. Uses an initial value.
+ *
+ * @param data
+ * to be modified
+ * @param start
+ * starting index
+ * @param length
+ * number of integers to process
+ * @param init
+ * initial value
+ * @return next initial value
+ */
+ public static long fastinverseDelta(long[] data, int start, int length,
+ int init) {
+ data[start] += init;
+ int sz0 = length / 4 * 4;
+ int i = 1;
+ if (sz0 >= 4) {
+ long a = data[start];
+ for (; i < sz0 - 4; i += 4) {
+ a = data[start + i] += a;
+ a = data[start + i + 1] += a;
+ a = data[start + i + 2] += a;
+ a = data[start + i + 3] += a;
+ }
+ }
+
+ for (; i != length; ++i) {
+ data[start + i] += data[start + i - 1];
+ }
+ return data[start + length - 1];
+ }
+
+}
diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java
new file mode 100644
index 0000000..4d652dd
--- /dev/null
+++ b/src/main/java/module-info.java
@@ -0,0 +1,14 @@
+// Copyright (C) 2022 Intel Corporation
+
+// SPDX-License-Identifier: Apache-2.0
+module me.lemire.integercompression {
+ // Optional at runtime: only consumers of the vector package (VectorFastPFOR)
+ // need jdk.incubator.vector resolved (e.g. --add-modules jdk.incubator.vector).
+ // Scalar consumers resolve without it.
+ requires static jdk.incubator.vector;
+ exports me.lemire.integercompression;
+ exports me.lemire.longcompression;
+ exports me.lemire.longcompression.differential;
+ exports me.lemire.integercompression.differential;
+ exports me.lemire.integercompression.vector;
+}
diff --git a/src/test/java/me/lemire/integercompression/AdhocTest.java b/src/test/java/me/lemire/integercompression/AdhocTest.java
new file mode 100644
index 0000000..ee911b3
--- /dev/null
+++ b/src/test/java/me/lemire/integercompression/AdhocTest.java
@@ -0,0 +1,156 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+
+package me.lemire.integercompression;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import me.lemire.integercompression.differential.*;
+
+import static me.lemire.integercompression.TestUtils.*;
+
+import java.util.Arrays;
+
+/**
+ * Collection of adhoc tests.
+ */
+@SuppressWarnings({ "static-method" })
+public class AdhocTest {
+
+ @Test
+ public void testIssue59() {
+ FastPFOR128 fastpfor = new FastPFOR128();
+
+ int N = 9984;
+ int[] data = new int[N];
+ for (var i = 0; i < N; i += 150) {
+ data[i] = i;
+ }
+
+ int[] compressedoutput1 = new int[N + 1024];
+
+ IntWrapper inputoffset1 = new IntWrapper(0);
+ IntWrapper outputoffset1 = new IntWrapper(0);
+
+ fastpfor.compress(data, inputoffset1, N, compressedoutput1, outputoffset1);
+ int compressedsize1 = outputoffset1.get();
+
+ int[] recovered1 = new int[N];
+ inputoffset1 = new IntWrapper(0);
+ outputoffset1 = new IntWrapper(0);
+ fastpfor.uncompress(compressedoutput1, outputoffset1, compressedsize1, recovered1, inputoffset1);
+ Assert.assertArrayEquals(data, recovered1);
+
+ int[] compressedoutput2 = new int[N + 1024];
+
+ IntWrapper inputoffset2 = new IntWrapper(0);
+ IntWrapper outputoffset2 = new IntWrapper(0);
+
+ fastpfor.compress(data, inputoffset2, N, compressedoutput2, outputoffset2);
+ int compressedsize2 = outputoffset2.get();
+
+ int[] recovered2 = new int[N];
+ inputoffset2 = new IntWrapper(0);
+ outputoffset2 = new IntWrapper(0);
+ fastpfor.uncompress(compressedoutput2, outputoffset2, compressedsize2, recovered2, inputoffset2);
+ Assert.assertArrayEquals(data, recovered2);
+ }
+
+ @Test
+ public void testIssue29() {
+ for(int x = 0; x < 64; x++) {
+ int[] a = {2, 3, 4, 5};
+ int[] b = new int[90];
+ int[] c = new int[a.length];
+ IntegerCODEC codec = new Composition(new BinaryPacking(), new VariableByte());
+
+ IntWrapper aOffset = new IntWrapper(0);
+ IntWrapper bOffset = new IntWrapper(x);
+ codec.compress(a, aOffset, a.length, b, bOffset);
+ int len = bOffset.get() - x;
+ bOffset.set(x);
+ IntWrapper cOffset = new IntWrapper(0);
+ codec.uncompress(b, bOffset, len, c, cOffset);
+ Assert.assertArrayEquals(a,c);
+ }
+ }
+
+ /**
+ *
+ */
+ @Test
+ public void testIssue29b() {
+ for(int x = 0; x < 64; x++) {
+ SkippableIntegerCODEC codec = new SkippableComposition(new BinaryPacking(), new VariableByte());
+ int[] a = {2, 3, 4, 5};
+ int[] b = new int[x + codec.maxHeadlessCompressedLength(new IntWrapper(0), a.length)];
+ int[] c = new int[a.length];
+ IntWrapper aOffset = new IntWrapper(0);
+ IntWrapper bOffset = new IntWrapper(x);
+ codec.headlessCompress(a, aOffset, a.length, b, bOffset);
+ int len = bOffset.get() - x;
+ bOffset.set(x);
+ IntWrapper cOffset = new IntWrapper(0);
+ codec.headlessUncompress(b, bOffset, len, c, cOffset, a.length);
+ Assert.assertArrayEquals(a,c);
+ }
+ }
+
+
+ /**
+ *
+ */
+ @Test
+ public void testIssue41() {
+ for (int x = 0; x < 64; x++) {
+ SkippableIntegratedIntegerCODEC codec = new SkippableIntegratedComposition(new IntegratedBinaryPacking(),
+ new IntegratedVariableByte());
+ int[] a = { 2, 3, 4, 5 };
+ int[] b = new int[x + codec.maxHeadlessCompressedLength(new IntWrapper(0), a.length)];
+ int[] c = new int[a.length];
+ IntWrapper aOffset = new IntWrapper(0);
+ IntWrapper bOffset = new IntWrapper(x);
+ IntWrapper initValue = new IntWrapper(0);
+
+ codec.headlessCompress(a, aOffset, a.length, b, bOffset, initValue);
+ int len = bOffset.get() - x;
+ bOffset.set(x);
+ IntWrapper cOffset = new IntWrapper(0);
+ initValue = new IntWrapper(0);
+ codec.headlessUncompress(b, bOffset, len, c, cOffset, a.length, initValue);
+ Assert.assertArrayEquals(a, c);
+ }
+ }
+
+ @Test
+ public void biggerCompressedArray0() {
+ // No problem: for comparison.
+ IntegerCODEC c = new Composition(new FastPFOR128(), new VariableByte());
+ assertSymmetry(c, 0, 16384);
+ c = new Composition(new FastPFOR(), new VariableByte());
+ assertSymmetry(c, 0, 16384);
+ }
+
+ @Test
+ public void biggerCompressedArray1() {
+ // Compressed array is bigger than original, because of VariableByte.
+ IntegerCODEC c = new VariableByte();
+ assertSymmetry(c, -1);
+ }
+
+ @Test
+ public void biggerCompressedArray2() {
+ // Compressed array is bigger than original, because of Composition.
+ IntegerCODEC c = new Composition(new FastPFOR128(), new VariableByte());
+ assertSymmetry(c, 65535, 65535);
+ c = new Composition(new FastPFOR(), new VariableByte());
+ assertSymmetry(c, 65535, 65535);
+ }
+
+
+}
diff --git a/src/test/java/me/lemire/integercompression/BasicTest.java b/src/test/java/me/lemire/integercompression/BasicTest.java
new file mode 100644
index 0000000..51f90ee
--- /dev/null
+++ b/src/test/java/me/lemire/integercompression/BasicTest.java
@@ -0,0 +1,687 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+
+package me.lemire.integercompression;
+
+import java.util.Arrays;
+import java.util.Random;
+
+import me.lemire.integercompression.differential.Delta;
+import me.lemire.integercompression.differential.IntegratedBinaryPacking;
+import me.lemire.integercompression.differential.IntegratedComposition;
+import me.lemire.integercompression.differential.IntegratedIntegerCODEC;
+import me.lemire.integercompression.differential.IntegratedVariableByte;
+import me.lemire.integercompression.differential.XorBinaryPacking;
+import me.lemire.integercompression.synth.ClusteredDataGenerator;
+import me.lemire.integercompression.vector.VectorBinaryPacking;
+import me.lemire.integercompression.vector.VectorFastPFOR;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Just some basic sanity tests.
+ *
+ * @author Daniel Lemire
+ */
+@SuppressWarnings({ "static-method" })
+public class BasicTest {
+ final IntegerCODEC[] codecs = {
+ new IntegratedComposition(new IntegratedBinaryPacking(),
+ new IntegratedVariableByte()),
+ new JustCopy(),
+ new VariableByte(),
+ new GroupSimple9(),
+ new IntegratedVariableByte(),
+ new Composition(new BinaryPacking(), new VariableByte()),
+ new Composition(new NewPFD(), new VariableByte()),
+ new Composition(new NewPFDS16(), new VariableByte()),
+ new Composition(new OptPFDS9(), new VariableByte()),
+ new Composition(new OptPFDS16(), new VariableByte()),
+ new Composition(new FastPFOR128(), new VariableByte()),
+ new Composition(new FastPFOR(), new VariableByte()),
+ new Composition(new VectorFastPFOR(), new VariableByte()),
+ new Composition(new VectorBinaryPacking(), new VariableByte()),
+ new Simple9(),
+ new Simple16(),
+ new GroupSimple9(),
+ new Composition(new XorBinaryPacking(), new VariableByte()),
+ new Composition(new DeltaZigzagBinaryPacking(),
+ new DeltaZigzagVariableByte()) };
+
+ /**
+ * This tests with a compressed array with various offset
+ */
+ @Test
+ public void saulTest() {
+ for (IntegerCODEC C : codecs) {
+ for (int x = 0; x < 50; ++x) {
+ int[] a = { 2, 3, 4, 5 };
+ int[] b = new int[90];
+ int[] c = new int[a.length];
+
+ IntWrapper aOffset = new IntWrapper(0);
+ IntWrapper bOffset = new IntWrapper(x);
+ C.compress(a, aOffset, a.length, b, bOffset);
+ int len = bOffset.get() - x;
+
+ bOffset.set(x);
+ IntWrapper cOffset = new IntWrapper(0);
+ C.uncompress(b, bOffset, len, c, cOffset);
+ if(!Arrays.equals(a, c)) {
+ System.out.println("Problem with "+C);
+ }
+ assertArrayEquals(a, c);
+
+ }
+ }
+ }
+ /**
+ *
+ */
+ @Test
+ public void varyingLengthTest() {
+ int N = 4096;
+ int[] data = new int[N];
+ for (int k = 0; k < N; ++k)
+ data[k] = k;
+ for (IntegerCODEC c : codecs) {
+ System.out.println("[BasicTest.varyingLengthTest] codec = " + c);
+ for (int L = 1; L <= 128; L++) {
+ int[] comp = TestUtils.compress(c, Arrays.copyOf(data, L));
+ int[] answer = TestUtils.uncompress(c, comp, L);
+ for (int k = 0; k < L; ++k)
+ if (answer[k] != data[k])
+ throw new RuntimeException("bug");
+ }
+ for (int L = 128; L <= N; L *= 2) {
+ int[] comp = TestUtils.compress(c, Arrays.copyOf(data, L));
+ int[] answer = TestUtils.uncompress(c, comp, L);
+ for (int k = 0; k < L; ++k)
+ if (answer[k] != data[k]) {
+ System.out.println(Arrays.toString(Arrays.copyOf(
+ answer, L)));
+ System.out.println(Arrays.toString(Arrays.copyOf(data,
+ L)));
+ throw new RuntimeException("bug");
+ }
+ }
+
+ }
+ }
+
+ /**
+ *
+ */
+ @Test
+ public void varyingLengthTest2() {
+ int N = 128;
+ int[] data = new int[N];
+ data[127] = -1;
+ for (IntegerCODEC c : codecs) {
+ System.out.println("[BasicTest.varyingLengthTest2] codec = " + c);
+ try {
+ // CODEC Simple9 is limited to "small" integers.
+ if (c.getClass().equals(
+ Class.forName("me.lemire.integercompression.Simple9")))
+ continue;
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ }
+ try {
+ // CODEC Simple16 is limited to "small" integers.
+ if (c.getClass().equals(
+ Class.forName("me.lemire.integercompression.Simple16")))
+ continue;
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ }
+ try {
+ // CODEC GroupSimple9 is limited to "small" integers.
+ if (c.getClass().equals(
+ Class.forName("me.lemire.integercompression.GroupSimple9")))
+ continue;
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ }
+
+ for (int L = 1; L <= 128; L++) {
+ int[] comp = TestUtils.compress(c, Arrays.copyOf(data, L));
+ int[] answer = TestUtils.uncompress(c, comp, L);
+ for (int k = 0; k < L; ++k)
+ if (answer[k] != data[k])
+ throw new RuntimeException("bug");
+ }
+ for (int L = 128; L <= N; L *= 2) {
+ int[] comp = TestUtils.compress(c, Arrays.copyOf(data, L));
+ int[] answer = TestUtils.uncompress(c, comp, L);
+ for (int k = 0; k < L; ++k)
+ if (answer[k] != data[k])
+ throw new RuntimeException("bug");
+ }
+
+ }
+ }
+
+ /**
+ *
+ */
+ @Test
+ public void checkDeltaZigzagVB() {
+ DeltaZigzagVariableByte codec = new DeltaZigzagVariableByte();
+ DeltaZigzagVariableByte codeco = new DeltaZigzagVariableByte();
+
+ testZeroInZeroOut(codec);
+ test(codec, codeco, 5, 10);
+ test(codec, codeco, 5, 14);
+ test(codec, codeco, 2, 18);
+ }
+
+ /**
+ *
+ */
+ @Test
+ public void checkDeltaZigzagPacking() {
+ DeltaZigzagBinaryPacking codec = new DeltaZigzagBinaryPacking();
+ testZeroInZeroOut(codec);
+ testSpurious(codec);
+
+ IntegerCODEC compo = new Composition(new DeltaZigzagBinaryPacking(),
+ new VariableByte());
+ IntegerCODEC compo2 = new Composition(new DeltaZigzagBinaryPacking(),
+ new VariableByte());
+
+ testZeroInZeroOut(compo);
+ testUnsorted(compo);
+ test(compo, compo2, 5, 10);
+ test(compo, compo2, 5, 14);
+ test(compo, compo2, 2, 18);
+ }
+
+ /**
+ *
+ */
+ @Test
+ public void checkXorBinaryPacking() {
+ testZeroInZeroOut(new XorBinaryPacking());
+ testSpurious(new XorBinaryPacking());
+ }
+
+ /**
+ *
+ */
+ @Test
+ public void checkXorBinaryPacking1() {
+ IntegerCODEC c = new IntegratedComposition(new XorBinaryPacking(),
+ new IntegratedVariableByte());
+ testZeroInZeroOut(c);
+ }
+
+ /**
+ *
+ */
+ @Test
+ public void checkXorBinaryPacking2() {
+ IntegerCODEC c = new IntegratedComposition(new XorBinaryPacking(),
+ new IntegratedVariableByte());
+ testUnsorted(c);
+ }
+
+ /**
+ *
+ */
+ @Test
+ public void checkXorBinaryPacking3() {
+ IntegerCODEC c = new IntegratedComposition(new XorBinaryPacking(),
+ new IntegratedVariableByte());
+ IntegerCODEC co = new IntegratedComposition(new XorBinaryPacking(),
+ new IntegratedVariableByte());
+ test(c, co, 5, 10);
+ test(c, co, 5, 14);
+ test(c, co, 2, 18);
+ }
+
+ /**
+ * Verify bitpacking.
+ */
+ @Test
+ public void verifyBitPacking() {
+ final int N = 32;
+ final int TIMES = 1000;
+ Random r = new Random();
+ int[] data = new int[N];
+ int[] compressed = new int[N];
+ int[] uncompressed = new int[N];
+ for (int bit = 0; bit < 31; ++bit) {
+ for (int t = 0; t < TIMES; ++t) {
+ for (int k = 0; k < N; ++k) {
+ data[k] = r.nextInt(1 << bit);
+ }
+ BitPacking.fastpack(data, 0, compressed, 0, bit);
+ BitPacking.fastunpack(compressed, 0, uncompressed, 0, bit);
+ assertArrayEquals(uncompressed, data);
+ }
+ }
+ }
+
+ /**
+ * Verify bitpacking without mask.
+ */
+ @Test
+ public void verifyWithoutMask() {
+ final int N = 32;
+ final int TIMES = 1000;
+ Random r = new Random();
+ int[] data = new int[N];
+ int[] compressed = new int[N];
+ int[] uncompressed = new int[N];
+ for (int bit = 0; bit < 31; ++bit) {
+ for (int t = 0; t < TIMES; ++t) {
+ for (int k = 0; k < N; ++k) {
+ data[k] = r.nextInt(1 << bit);
+ }
+ BitPacking.fastpackwithoutmask(data, 0, compressed, 0, bit);
+ BitPacking.fastunpack(compressed, 0, uncompressed, 0, bit);
+ assertArrayEquals(uncompressed, data);
+ }
+ }
+ }
+
+ /**
+ * @param array
+ * some array
+ * @param mask
+ * provided mask
+ */
+ public static void maskArray(int[] array, int mask) {
+ for (int i = 0, end = array.length; i < end; ++i) {
+ array[i] &= mask;
+ }
+ }
+
+ /**
+ * Verify bitpacking with exception.
+ */
+ @Test
+ public void verifyWithExceptions() {
+ final int N = 32;
+ final int TIMES = 1000;
+ Random r = new Random();
+ int[] data = new int[N];
+ int[] compressed = new int[N];
+ int[] uncompressed = new int[N];
+ for (int bit = 0; bit < 31; ++bit) {
+ for (int t = 0; t < TIMES; ++t) {
+ for (int k = 0; k < N; ++k) {
+ data[k] = r.nextInt();
+ }
+ BitPacking.fastpack(data, 0, compressed, 0, bit);
+ BitPacking.fastunpack(compressed, 0, uncompressed, 0, bit);
+
+ // Check assertions.
+ maskArray(data, ((1 << bit) - 1));
+ assertArrayEquals(data, uncompressed);
+ }
+ }
+ }
+
+ /**
+ * check that the codecs can be inverted.
+ */
+ @Test
+ public void basictest() {
+ test(5, 10);
+ test(5, 14);
+ test(2, 18);
+ }
+
+ /**
+ * check that there is no spurious output.
+ */
+ @Test
+ public void spuriousouttest() {
+ testSpurious(new IntegratedBinaryPacking());
+ testSpurious(new BinaryPacking());
+ testSpurious(new NewPFD());
+ testSpurious(new NewPFDS9());
+ testSpurious(new NewPFDS16());
+ testSpurious(new OptPFD());
+ testSpurious(new OptPFDS9());
+ testSpurious(new OptPFDS16());
+ testSpurious(new FastPFOR128());
+ testSpurious(new FastPFOR());
+ }
+
+ /**
+ * check that an empty array generates an empty array after compression.
+ */
+ @Test
+ public void zeroinzerouttest() {
+ testZeroInZeroOut(new IntegratedBinaryPacking());
+ testZeroInZeroOut(new IntegratedVariableByte());
+ testZeroInZeroOut(new BinaryPacking());
+ testZeroInZeroOut(new NewPFD());
+ testZeroInZeroOut(new NewPFDS9());
+ testZeroInZeroOut(new NewPFDS16());
+ testZeroInZeroOut(new OptPFD());
+ testZeroInZeroOut(new OptPFDS9());
+ testZeroInZeroOut(new OptPFDS16());
+ testZeroInZeroOut(new FastPFOR128());
+ testZeroInZeroOut(new FastPFOR());
+ testZeroInZeroOut(new VariableByte());
+ testZeroInZeroOut(new Composition(new IntegratedBinaryPacking(),
+ new VariableByte()));
+ testZeroInZeroOut(new Composition(new BinaryPacking(),
+ new VariableByte()));
+ testZeroInZeroOut(new Composition(new NewPFD(), new VariableByte()));
+ testZeroInZeroOut(new Composition(new NewPFDS9(), new VariableByte()));
+ testZeroInZeroOut(new Composition(new NewPFDS16(), new VariableByte()));
+ testZeroInZeroOut(new Composition(new OptPFD(), new VariableByte()));
+ testZeroInZeroOut(new Composition(new OptPFDS9(), new VariableByte()));
+ testZeroInZeroOut(new Composition(new OptPFDS16(), new VariableByte()));
+ testZeroInZeroOut(new Composition(new FastPFOR128(), new VariableByte()));
+ testZeroInZeroOut(new Composition(new FastPFOR(), new VariableByte()));
+
+ testZeroInZeroOut(new IntegratedComposition(
+ new IntegratedBinaryPacking(), new IntegratedVariableByte()));
+ }
+
+ private static void testSpurious(IntegerCODEC c) {
+ int[] x = new int[1024];
+ int[] y = new int[0];
+ IntWrapper i0 = new IntWrapper(0);
+ IntWrapper i1 = new IntWrapper(0);
+ for (int inlength = 0; inlength < 32; ++inlength) {
+ c.compress(x, i0, inlength, y, i1);
+ assertEquals(0, i1.intValue());
+ }
+ }
+
+ private static void testZeroInZeroOut(IntegerCODEC c) {
+ int[] x = new int[0];
+ int[] y = new int[0];
+ IntWrapper i0 = new IntWrapper(0);
+ IntWrapper i1 = new IntWrapper(0);
+ c.compress(x, i0, 0, y, i1);
+ assertEquals(0, i1.intValue());
+
+ int[] out = new int[0];
+ IntWrapper outpos = new IntWrapper(0);
+ c.uncompress(y, i1, 0, out, outpos);
+ assertEquals(0, outpos.intValue());
+ }
+
+ private static void test(IntegerCODEC c, IntegerCODEC co, int N, int nbr) {
+ ClusteredDataGenerator cdg = new ClusteredDataGenerator();
+ for (int sparsity = 1; sparsity < 31 - nbr; sparsity += 4) {
+ int[][] data = new int[N][];
+ int max = (1 << (nbr + sparsity));
+ for (int k = 0; k < N; ++k) {
+ data[k] = cdg.generateClustered((1 << nbr), max);
+ }
+ testCodec(c, co, data, max);
+ }
+ }
+
+ private static void test(int N, int nbr) {
+ ClusteredDataGenerator cdg = new ClusteredDataGenerator();
+ System.out.println("[BasicTest.test] N = " + N + " " + nbr);
+ for (int sparsity = 1; sparsity < 31 - nbr; sparsity += 4) {
+ int[][] data = new int[N][];
+ int max = (1 << (nbr + sparsity));
+ for (int k = 0; k < N; ++k) {
+ data[k] = cdg.generateClustered((1 << nbr), max);
+ }
+
+ testCodec(new IntegratedComposition(new IntegratedBinaryPacking(),
+ new IntegratedVariableByte()),
+ new IntegratedComposition(new IntegratedBinaryPacking(),
+ new IntegratedVariableByte()), data, max);
+ testCodec(new JustCopy(), new JustCopy(), data, max);
+ testCodec(new VariableByte(), new VariableByte(), data, max);
+ testCodec(new IntegratedVariableByte(),
+ new IntegratedVariableByte(), data, max);
+ testCodec(new Composition(new BinaryPacking(), new VariableByte()),
+ new Composition(new BinaryPacking(), new VariableByte()),
+ data, max);
+ testCodec(new Composition(new NewPFD(), new VariableByte()),
+ new Composition(new NewPFD(), new VariableByte()), data,
+ max);
+ testCodec(new Composition(new NewPFDS9(), new VariableByte()),
+ new Composition(new NewPFDS9(), new VariableByte()), data,
+ max);
+ testCodec(new Composition(new NewPFDS16(), new VariableByte()),
+ new Composition(new NewPFDS16(), new VariableByte()), data,
+ max);
+ testCodec(new Composition(new OptPFD(), new VariableByte()),
+ new Composition(new OptPFD(), new VariableByte()), data,
+ max);
+ testCodec(new Composition(new OptPFDS9(), new VariableByte()),
+ new Composition(new OptPFDS9(), new VariableByte()), data,
+ max);
+ testCodec(new Composition(new OptPFDS16(), new VariableByte()),
+ new Composition(new OptPFDS16(), new VariableByte()), data,
+ max);
+ testCodec(new Composition(new FastPFOR128(), new VariableByte()),
+ new Composition(new FastPFOR128(), new VariableByte()),
+ data, max);
+ testCodec(new Composition(new FastPFOR(), new VariableByte()),
+ new Composition(new FastPFOR(), new VariableByte()),
+ data, max);
+ testCodec(new Simple9(), new Simple9(), data, max);
+ }
+ }
+
+ private static void testCodec(IntegerCODEC c, IntegerCODEC co,
+ int[][] data, int max) {
+ int N = data.length;
+ int maxlength = 0;
+ for (int k = 0; k < N; ++k) {
+ if (data[k].length > maxlength)
+ maxlength = data[k].length;
+ }
+ int[] buffer = new int[maxlength + 1024];
+ int[] dataout = new int[4 * maxlength + 1024];
+ // 4x + 1024 to account for the possibility of some negative
+ // compression.
+ IntWrapper inpos = new IntWrapper();
+ IntWrapper outpos = new IntWrapper();
+ for (int k = 0; k < N; ++k) {
+ int[] backupdata = Arrays.copyOf(data[k], data[k].length);
+
+ inpos.set(1);
+ outpos.set(0);
+ if (!(c instanceof IntegratedIntegerCODEC)) {
+ Delta.delta(backupdata);
+ }
+ c.compress(backupdata, inpos, backupdata.length - inpos.get(),
+ dataout, outpos);
+ final int thiscompsize = outpos.get() + 1;
+ inpos.set(0);
+ outpos.set(1);
+ buffer[0] = backupdata[0];
+ co.uncompress(dataout, inpos, thiscompsize - 1, buffer, outpos);
+ if (!(c instanceof IntegratedIntegerCODEC))
+ Delta.fastinverseDelta(buffer);
+
+ // Check assertions.
+ assertEquals("length is not match", outpos.get(), data[k].length);
+ int[] bufferCutout = Arrays.copyOf(buffer, outpos.get());
+ assertArrayEquals("failed to reconstruct original data", data[k],
+ bufferCutout);
+ }
+ }
+
+ /**
+ * Test for unsorted array.
+ */
+ @Test
+ public void testUnsortedExample() {
+ testUnsorted(new VariableByte());
+ testUnsorted(new IntegratedVariableByte());
+ testUnsorted(new Composition(new BinaryPacking(), new VariableByte()));
+ testUnsorted(new Composition(new NewPFD(), new VariableByte()));
+ testUnsorted(new Composition(new NewPFDS9(), new VariableByte()));
+ testUnsorted(new Composition(new NewPFDS16(), new VariableByte()));
+ testUnsorted(new Composition(new OptPFD(), new VariableByte()));
+ testUnsorted(new Composition(new OptPFDS9(), new VariableByte()));
+ testUnsorted(new Composition(new OptPFDS16(), new VariableByte()));
+ testUnsorted(new Composition(new FastPFOR128(), new VariableByte()));
+ testUnsorted(new Composition(new FastPFOR(), new VariableByte()));
+
+ testUnsorted(new IntegratedComposition(new IntegratedBinaryPacking(),
+ new IntegratedVariableByte()));
+ testUnsorted(new Composition(new IntegratedBinaryPacking(),
+ new VariableByte()));
+
+ testUnsorted2(new VariableByte());
+ testUnsorted2(new IntegratedVariableByte());
+ testUnsorted2(new Composition(new BinaryPacking(), new VariableByte()));
+ testUnsorted2(new Composition(new NewPFD(), new VariableByte()));
+ testUnsorted2(new Composition(new NewPFDS9(), new VariableByte()));
+ testUnsorted2(new Composition(new NewPFDS16(), new VariableByte()));
+ testUnsorted2(new Composition(new OptPFD(), new VariableByte()));
+ testUnsorted2(new Composition(new OptPFDS9(), new VariableByte()));
+ testUnsorted2(new Composition(new OptPFDS16(), new VariableByte()));
+ testUnsorted2(new Composition(new FastPFOR128(), new VariableByte()));
+ testUnsorted2(new Composition(new FastPFOR(), new VariableByte()));
+
+ testUnsorted3(new IntegratedComposition(new IntegratedBinaryPacking(),
+ new IntegratedVariableByte()));
+ testUnsorted3(new Composition(new IntegratedBinaryPacking(),
+ new VariableByte()));
+ testUnsorted3(new VariableByte());
+ testUnsorted3(new IntegratedVariableByte());
+ testUnsorted3(new Composition(new BinaryPacking(), new VariableByte()));
+ testUnsorted3(new Composition(new NewPFD(), new VariableByte()));
+ testUnsorted3(new Composition(new NewPFDS9(), new VariableByte()));
+ testUnsorted3(new Composition(new NewPFDS16(), new VariableByte()));
+ testUnsorted3(new Composition(new OptPFD(), new VariableByte()));
+ testUnsorted3(new Composition(new OptPFDS9(), new VariableByte()));
+ testUnsorted3(new Composition(new OptPFDS16(), new VariableByte()));
+ testUnsorted3(new Composition(new FastPFOR128(), new VariableByte()));
+ testUnsorted3(new Composition(new FastPFOR(), new VariableByte()));
+
+ testUnsorted2(new IntegratedComposition(new IntegratedBinaryPacking(),
+ new IntegratedVariableByte()));
+ testUnsorted2(new Composition(new IntegratedBinaryPacking(),
+ new VariableByte()));
+
+ }
+
+ /**
+ * @param codec
+ * provided codec
+ */
+ public void testUnsorted(IntegerCODEC codec) {
+ int[] lengths = { 133, 1026, 1333333 };
+ for (int N : lengths) {
+ int[] data = new int[N];
+ // initialize the data (most will be small)
+ for (int k = 0; k < N; k += 1)
+ data[k] = 3;
+ // throw some larger values
+ for (int k = 0; k < N; k += 5)
+ data[k] = 100;
+ for (int k = 0; k < N; k += 533)
+ data[k] = 10000;
+ data[5] = -311;
+ // could need more compressing
+ int[] compressed = new int[(int) Math.ceil(N * 1.01) + 1024];
+ IntWrapper inputoffset = new IntWrapper(0);
+ IntWrapper outputoffset = new IntWrapper(0);
+ codec.compress(data, inputoffset, data.length, compressed,
+ outputoffset);
+ // we can repack the data: (optional)
+ compressed = Arrays.copyOf(compressed, outputoffset.intValue());
+
+ int[] recovered = new int[N];
+ IntWrapper recoffset = new IntWrapper(0);
+ codec.uncompress(compressed, new IntWrapper(0), compressed.length,
+ recovered, recoffset);
+ assertArrayEquals(data, recovered);
+ }
+ }
+
+ private void testUnsorted2(IntegerCODEC codec) {
+ int[] data = new int[128];
+ data[5] = -1;
+ int[] compressed = new int[1024];
+ IntWrapper inputoffset = new IntWrapper(0);
+ IntWrapper outputoffset = new IntWrapper(0);
+ codec.compress(data, inputoffset, data.length, compressed, outputoffset);
+ // we can repack the data: (optional)
+ compressed = Arrays.copyOf(compressed, outputoffset.intValue());
+
+ int[] recovered = new int[128];
+ IntWrapper recoffset = new IntWrapper(0);
+ codec.uncompress(compressed, new IntWrapper(0), compressed.length,
+ recovered, recoffset);
+ assertArrayEquals(data, recovered);
+ }
+
+ private void testUnsorted3(IntegerCODEC codec) {
+ int[] data = new int[128];
+ data[127] = -1;
+ int[] compressed = new int[1024];
+ IntWrapper inputoffset = new IntWrapper(0);
+ IntWrapper outputoffset = new IntWrapper(0);
+ codec.compress(data, inputoffset, data.length, compressed, outputoffset);
+ // we can repack the data: (optional)
+ compressed = Arrays.copyOf(compressed, outputoffset.intValue());
+
+ int[] recovered = new int[128];
+ IntWrapper recoffset = new IntWrapper(0);
+ codec.uncompress(compressed, new IntWrapper(0), compressed.length,
+ recovered, recoffset);
+ assertArrayEquals(data, recovered);
+ }
+
+ /**
+ *
+ */
+ @Test
+ public void fastPforTest() {
+ // proposed by Stefan Ackermann (https://github.com/Stivo)
+ FastPFOR codec1 = new FastPFOR();
+ FastPFOR codec2 = new FastPFOR();
+ int N = FastPFOR.BLOCK_SIZE;
+ int[] data = new int[N];
+ for (int i = 0; i < N; i++)
+ data[i] = 0;
+ data[126] = -1;
+ int[] comp = TestUtils.compress(codec1, Arrays.copyOf(data, N));
+ int[] answer = TestUtils.uncompress(codec2, comp, N);
+ for (int k = 0; k < N; ++k)
+ if (answer[k] != data[k])
+ throw new RuntimeException("bug " + k + " " + answer[k]
+ + " != " + data[k]);
+ }
+
+ /**
+ *
+ */
+ @Test
+ public void fastPfor128Test() {
+ // proposed by Stefan Ackermann (https://github.com/Stivo)
+ FastPFOR128 codec1 = new FastPFOR128();
+ FastPFOR128 codec2 = new FastPFOR128();
+ int N = FastPFOR128.BLOCK_SIZE;
+ int[] data = new int[N];
+ for (int i = 0; i < N; i++)
+ data[i] = 0;
+ data[126] = -1;
+ int[] comp = TestUtils.compress(codec1, Arrays.copyOf(data, N));
+ int[] answer = TestUtils.uncompress(codec2, comp, N);
+ for (int k = 0; k < N; ++k)
+ if (answer[k] != data[k])
+ throw new RuntimeException("bug " + k + " " + answer[k]
+ + " != " + data[k]);
+ }
+
+}
diff --git a/src/test/java/me/lemire/integercompression/BoundaryTest.java b/src/test/java/me/lemire/integercompression/BoundaryTest.java
new file mode 100644
index 0000000..128b431
--- /dev/null
+++ b/src/test/java/me/lemire/integercompression/BoundaryTest.java
@@ -0,0 +1,98 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+
+package me.lemire.integercompression;
+
+import java.util.Arrays;
+
+import me.lemire.integercompression.differential.IntegratedBinaryPacking;
+import me.lemire.integercompression.differential.IntegratedComposition;
+import me.lemire.integercompression.differential.IntegratedVariableByte;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * @author lemire
+ *
+ */
+@SuppressWarnings({ "static-method" })
+public class BoundaryTest {
+ private static void compressAndUncompress(int length, IntegerCODEC c) {
+ // Initialize array.
+ int[] source = new int[length];
+ for (int i = 0; i < source.length; ++i) {
+ source[i] = i;
+ }
+
+ // Compress an array.
+ int[] compressed = new int[length];
+ IntWrapper c_inpos = new IntWrapper(0);
+ IntWrapper c_outpos = new IntWrapper(0);
+ c.compress(source, c_inpos, source.length, compressed, c_outpos);
+ assertTrue(c_outpos.get() <= length);
+
+ // Uncompress an array.
+ int[] uncompressed = new int[length];
+ IntWrapper u_inpos = new IntWrapper(0);
+ IntWrapper u_outpos = new IntWrapper(0);
+ c.uncompress(compressed, u_inpos, c_outpos.get(), uncompressed,
+ u_outpos);
+
+ // Compare between uncompressed and original arrays.
+ int[] target = Arrays.copyOf(uncompressed, u_outpos.get());
+ if (!Arrays.equals(source, target)) {
+ System.out.println("problem with length = " + length + " and " + c);
+ System.out.println(Arrays.toString(source));
+ System.out.println(Arrays.toString(target));
+ }
+ assertArrayEquals(source, target);
+ }
+ private static void around32(IntegerCODEC c) {
+ compressAndUncompress(31, c);
+ compressAndUncompress(32, c);
+ compressAndUncompress(33, c);
+ }
+
+
+ private static void around128(IntegerCODEC c) {
+ compressAndUncompress(127, c);
+ compressAndUncompress(128, c);
+ compressAndUncompress(129, c);
+ }
+
+ private static void around256(IntegerCODEC c) {
+ compressAndUncompress(255, c);
+ compressAndUncompress(256, c);
+ compressAndUncompress(257, c);
+ }
+
+ private static void testBoundary(IntegerCODEC c) {
+ around32(c);
+ around128(c);
+ around256(c);
+ }
+
+
+ /**
+ */
+ @Test
+ public void testIntegratedComposition() {
+ IntegratedComposition c = new IntegratedComposition(
+ new IntegratedBinaryPacking(), new IntegratedVariableByte());
+ testBoundary(c);
+ }
+
+ /**
+ */
+ @Test
+ public void testComposition() {
+ Composition c = new Composition(new BinaryPacking(), new VariableByte());
+ testBoundary(c);
+ }
+}
diff --git a/src/test/java/me/lemire/integercompression/ByteBasicTest.java b/src/test/java/me/lemire/integercompression/ByteBasicTest.java
new file mode 100644
index 0000000..2b2d4f1
--- /dev/null
+++ b/src/test/java/me/lemire/integercompression/ByteBasicTest.java
@@ -0,0 +1,121 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+
+package me.lemire.integercompression;
+
+import java.util.Arrays;
+
+import me.lemire.integercompression.differential.IntegratedVariableByte;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+
+/**
+ * Just some basic sanity tests.
+ *
+ * @author Daniel Lemire
+ */
+@SuppressWarnings({ "static-method" })
+public class ByteBasicTest {
+ ByteIntegerCODEC[] codecs = {
+ new VariableByte(),
+ new IntegratedVariableByte(),
+ };
+
+ /**
+ *
+ */
+ @Test
+ public void saulTest() {
+ for (ByteIntegerCODEC C : codecs) {
+ for (int x = 0; x < 50 * 4; ++x) {
+ int[] a = { 2, 3, 4, 5 };
+ byte[] b = new byte[90*4];
+ int[] c = new int[a.length];
+
+ IntWrapper aOffset = new IntWrapper(0);
+ IntWrapper bOffset = new IntWrapper(x);
+ C.compress(a, aOffset, a.length, b, bOffset);
+ int len = bOffset.get() - x;
+
+ bOffset.set(x);
+ IntWrapper cOffset = new IntWrapper(0);
+ C.uncompress(b, bOffset, len, c, cOffset);
+ if(!Arrays.equals(a, c)) {
+ System.out.println("Problem with "+C);
+ }
+ assertArrayEquals(a, c);
+ }
+ }
+ }
+ /**
+ *
+ */
+ @Test
+ public void varyingLengthTest() {
+ int N = 4096;
+ int[] data = new int[N];
+ for (int k = 0; k < N; ++k)
+ data[k] = k;
+ for (ByteIntegerCODEC c : codecs) {
+ for (int L = 1; L <= 128; L++) {
+ byte[] comp = TestUtils.compress(c, Arrays.copyOf(data, L));
+ int[] answer = TestUtils.uncompress(c, comp, L);
+ for (int k = 0; k < L; ++k)
+ if (answer[k] != data[k])
+ throw new RuntimeException("bug "+c.toString()+" "+k+" "+answer[k]+" "+data[k]);
+ }
+ for (int L = 128; L <= N; L *= 2) {
+ byte[] comp = TestUtils.compress(c, Arrays.copyOf(data, L));
+ int[] answer = TestUtils.uncompress(c, comp, L);
+ for (int k = 0; k < L; ++k)
+ if (answer[k] != data[k])
+ throw new RuntimeException("bug");
+ }
+
+ }
+ }
+
+ /**
+ *
+ */
+ @Test
+ public void varyingLengthTest2() {
+ int N = 128;
+ int[] data = new int[N];
+ data[127] = -1;
+ for (ByteIntegerCODEC c : codecs) {
+ try {
+ // CODEC Simple9 is limited to "small" integers.
+ if (c.getClass().equals(
+ Class.forName("me.lemire.integercompression.Simple9")))
+ continue;
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ }
+ for (int L = 1; L <= 128; L++) {
+ byte[] comp = TestUtils.compress(c, Arrays.copyOf(data, L));
+ int[] answer = TestUtils.uncompress(c, comp, L);
+ for (int k = 0; k < L; ++k)
+ if (answer[k] != data[k])
+ throw new RuntimeException("bug at k = "+k+" "+answer[k]+" "+data[k]);
+ }
+ for (int L = 128; L <= N; L *= 2) {
+ byte[] comp = TestUtils.compress(c, Arrays.copyOf(data, L));
+ int[] answer = TestUtils.uncompress(c, comp, L);
+ for (int k = 0; k < L; ++k)
+ if (answer[k] != data[k])
+ throw new RuntimeException("bug");
+ }
+
+ }
+ }
+
+
+}
diff --git a/src/test/java/me/lemire/integercompression/DeltaZigzagEncodingTest.java b/src/test/java/me/lemire/integercompression/DeltaZigzagEncodingTest.java
new file mode 100644
index 0000000..ae42c1d
--- /dev/null
+++ b/src/test/java/me/lemire/integercompression/DeltaZigzagEncodingTest.java
@@ -0,0 +1,124 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+
+package me.lemire.integercompression;
+
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+/**
+ * @author lemire
+ *
+ */
+@SuppressWarnings({ "static-method" })
+public class DeltaZigzagEncodingTest {
+
+ protected static int zigzagEncode(DeltaZigzagEncoding.Encoder e, int value) {
+ e.setContextValue(0);
+ return e.encodeInt(value);
+ }
+
+ protected static int zigzagDecode(DeltaZigzagEncoding.Decoder d, int value) {
+ d.setContextValue(0);
+ return d.decodeInt(value);
+ }
+
+ protected static void checkEncode(
+ DeltaZigzagEncoding.Encoder e,
+ int[] data,
+ int[] expected)
+ {
+ assertArrayEquals(expected, e.encodeArray(data));
+ assertEquals(data[data.length - 1], e.getContextValue());
+ }
+
+ protected static void checkDecode(
+ DeltaZigzagEncoding.Decoder d,
+ int[] data,
+ int[] expected)
+ {
+ int[] r = d.decodeArray(data);
+ assertArrayEquals(expected, r);
+ assertEquals(r[r.length - 1], d.getContextValue());
+ }
+ /**
+ *
+ */
+ @Test
+ public void checkZigzagEncode() {
+ DeltaZigzagEncoding.Encoder e = new DeltaZigzagEncoding.Encoder(0);
+ assertEquals(0, zigzagEncode(e, 0));
+ assertEquals(2, zigzagEncode(e, 1));
+ assertEquals(4, zigzagEncode(e, 2));
+ assertEquals(6, zigzagEncode(e, 3));
+ assertEquals(1, zigzagEncode(e, -1));
+ assertEquals(3, zigzagEncode(e, -2));
+ assertEquals(5, zigzagEncode(e, -3));
+ }
+ /**
+ *
+ */
+ @Test
+ public void checkZigzagDecoder() {
+ DeltaZigzagEncoding.Decoder d = new DeltaZigzagEncoding.Decoder(0);
+ assertEquals( 0, zigzagDecode(d, 0));
+ assertEquals(-1, zigzagDecode(d, 1));
+ assertEquals( 1, zigzagDecode(d, 2));
+ assertEquals(-2, zigzagDecode(d, 3));
+ assertEquals( 2, zigzagDecode(d, 4));
+ assertEquals(-3, zigzagDecode(d, 5));
+ }
+ /**
+ *
+ */
+ @Test
+ public void checkEncodeSimple() {
+ DeltaZigzagEncoding.Encoder e = new DeltaZigzagEncoding.Encoder(0);
+ checkEncode(e,
+ new int[]{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 },
+ new int[]{ 0, 2, 2, 2, 2, 2, 2, 2, 2, 2 });
+ }
+ /**
+ *
+ */
+ @Test
+ public void checkDecodeSimple() {
+ DeltaZigzagEncoding.Decoder d = new DeltaZigzagEncoding.Decoder(0);
+ checkDecode(d,
+ new int[]{ 0, 2, 2, 2, 2, 2, 2, 2, 2, 2 },
+ new int[]{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 });
+ }
+
+ protected static class SpotChecker {
+
+ private final static DeltaZigzagEncoding.Encoder encoder =
+ new DeltaZigzagEncoding.Encoder(0);
+
+ private final static DeltaZigzagEncoding.Decoder decoder =
+ new DeltaZigzagEncoding.Decoder(0);
+
+ public void check(int value) {
+ SpotChecker.encoder.setContextValue(0);
+ SpotChecker.decoder.setContextValue(0);
+ int value2 = SpotChecker.decoder.decodeInt(SpotChecker.encoder.encodeInt(value));
+ assertEquals(value, value2);
+ }
+ }
+
+ /**
+ *
+ */
+ @Test
+ public void checkSpots() {
+ SpotChecker c = new SpotChecker();
+ c.check(0);
+ c.check(1);
+ c.check(1375228800);
+ c.check(1 << 30);
+ c.check(1 << 31);
+ }
+}
diff --git a/src/test/java/me/lemire/integercompression/ExampleTest.java b/src/test/java/me/lemire/integercompression/ExampleTest.java
new file mode 100644
index 0000000..c63c69b
--- /dev/null
+++ b/src/test/java/me/lemire/integercompression/ExampleTest.java
@@ -0,0 +1,319 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+
+package me.lemire.integercompression;
+
+import me.lemire.integercompression.differential.*;
+import java.util.*;
+
+import org.junit.Test;
+
+/**
+ *
+ *
+ */
+public class ExampleTest {
+ /**
+ *
+ */
+ @Test
+
+ public void superSimpleExample() {
+ IntegratedIntCompressor iic = new IntegratedIntCompressor();
+ int[] data = new int[2342351];
+ for (int k = 0; k < data.length; ++k)
+ data[k] = k;
+ System.out.println("Compressing " + data.length + " integers using friendly interface");
+ int[] compressed = iic.compress(data);
+ int[] recov = iic.uncompress(compressed);
+ System.out
+ .println("compressed from " + data.length * 4 / 1024 + "KB to " + compressed.length * 4 / 1024 + "KB");
+ if (!Arrays.equals(recov, data))
+ throw new RuntimeException("bug");
+ }
+
+ /**
+ *
+ */
+ @Test
+
+ public void basicExample() {
+ int[] data = new int[2342351];
+ System.out.println("Compressing " + data.length + " integers in one go");
+ // data should be sorted for best
+ // results
+ for (int k = 0; k < data.length; ++k)
+ data[k] = k;
+ // Very important: the data is in sorted order!!! If not, you
+ // will get very poor compression with IntegratedBinaryPacking,
+ // you should use another CODEC.
+
+ // next we compose a CODEC. Most of the processing
+ // will be done with binary packing, and leftovers will
+ // be processed using variable byte
+ IntegratedIntegerCODEC codec = new IntegratedComposition(new IntegratedBinaryPacking(),
+ new IntegratedVariableByte());
+ // output vector should be large enough...
+ int[] compressed = new int[data.length + 1024];
+ // compressed might not be large enough in some cases
+ // if you get java.lang.ArrayIndexOutOfBoundsException, try
+ // allocating more memory
+
+ /**
+ *
+ * compressing
+ *
+ */
+ IntWrapper inputoffset = new IntWrapper(0);
+ IntWrapper outputoffset = new IntWrapper(0);
+ codec.compress(data, inputoffset, data.length, compressed, outputoffset);
+ // got it!
+ // inputoffset should be at data.length but outputoffset tells
+ // us where we are...
+ System.out.println(
+ "compressed from " + data.length * 4 / 1024 + "KB to " + outputoffset.intValue() * 4 / 1024 + "KB");
+ // we can repack the data: (optional)
+ compressed = Arrays.copyOf(compressed, outputoffset.intValue());
+
+ /**
+ *
+ * now uncompressing
+ *
+ * This assumes that we otherwise know how many integers have been
+ * compressed. See basicExampleHeadless for a more general case.
+ */
+ int[] recovered = new int[data.length];
+ IntWrapper recoffset = new IntWrapper(0);
+ codec.uncompress(compressed, new IntWrapper(0), compressed.length, recovered, recoffset);
+ if (Arrays.equals(data, recovered))
+ System.out.println("data is recovered without loss");
+ else
+ throw new RuntimeException("bug"); // could use assert
+ System.out.println();
+ }
+
+ /**
+ * Like the basicExample, but we store the input array size manually.
+ */
+ @Test
+ public void basicExampleHeadless() {
+ int[] data = new int[2342351];
+ System.out.println("Compressing " + data.length + " integers in one go using the headless approach");
+ // data should be sorted for best
+ // results
+ for (int k = 0; k < data.length; ++k)
+ data[k] = k;
+ // Very important: the data is in sorted order!!! If not, you
+ // will get very poor compression with IntegratedBinaryPacking,
+ // you should use another CODEC.
+
+ // next we compose a CODEC. Most of the processing
+ // will be done with binary packing, and leftovers will
+ // be processed using variable byte
+ SkippableIntegratedComposition codec = new SkippableIntegratedComposition(new IntegratedBinaryPacking(),
+ new IntegratedVariableByte());
+ int[] compressed = new int[codec.maxHeadlessCompressedLength(new IntWrapper(0), data.length)];
+
+ /**
+ *
+ * compressing
+ *
+ */
+ IntWrapper inputoffset = new IntWrapper(0);
+ IntWrapper outputoffset = new IntWrapper(1);
+ compressed[0] = data.length; // we manually store how many integers we
+ codec.headlessCompress(data, inputoffset, data.length, compressed, outputoffset, new IntWrapper(0));
+ // got it!
+ // inputoffset should be at data.length but outputoffset tells
+ // us where we are...
+ System.out.println(
+ "compressed from " + data.length * 4 / 1024 + "KB to " + outputoffset.intValue() * 4 / 1024 + "KB");
+ // we can repack the data: (optional)
+ compressed = Arrays.copyOf(compressed, outputoffset.intValue());
+
+ /**
+ *
+ * now uncompressing
+ *
+ */
+ int howmany = compressed[0];// we manually stored the number of
+ // compressed integers
+ int[] recovered = new int[howmany];
+ IntWrapper recoffset = new IntWrapper(0);
+ codec.headlessUncompress(compressed, new IntWrapper(1), compressed.length, recovered, recoffset, howmany, new IntWrapper(0));
+ if (Arrays.equals(data, recovered))
+ System.out.println("data is recovered without loss");
+ else
+ throw new RuntimeException("bug"); // could use assert
+ System.out.println();
+ }
+
+ /**
+ * This is an example to show you can compress unsorted integers as long as
+ * most are small.
+ */
+ @Test
+ public void unsortedExample() {
+ final int N = 1333333;
+ int[] data = new int[N];
+ // initialize the data (most will be small
+ for (int k = 0; k < N; k += 1)
+ data[k] = 3;
+ // throw some larger values
+ for (int k = 0; k < N; k += 5)
+ data[k] = 100;
+ for (int k = 0; k < N; k += 533)
+ data[k] = 10000;
+ int[] compressed = new int[N + 1024];// could need more
+ IntegerCODEC codec = new Composition(new FastPFOR(), new VariableByte());
+ // compressing
+ IntWrapper inputoffset = new IntWrapper(0);
+ IntWrapper outputoffset = new IntWrapper(0);
+ codec.compress(data, inputoffset, data.length, compressed, outputoffset);
+ System.out.println("compressed unsorted integers from " + data.length * 4 / 1024 + "KB to "
+ + outputoffset.intValue() * 4 / 1024 + "KB");
+ // we can repack the data: (optional)
+ compressed = Arrays.copyOf(compressed, outputoffset.intValue());
+
+ int[] recovered = new int[N];
+ IntWrapper recoffset = new IntWrapper(0);
+ codec.uncompress(compressed, new IntWrapper(0), compressed.length, recovered, recoffset);
+ if (Arrays.equals(data, recovered))
+ System.out.println("data is recovered without loss");
+ else
+ throw new RuntimeException("bug"); // could use assert
+ System.out.println();
+
+ }
+
+ /**
+ * This is like the basic example, but we show how to process larger arrays
+ * in chunks.
+ *
+ * Some of this code was written by Pavel Klinov.
+ */
+ @Test
+ public void advancedExample() {
+ int TotalSize = 2342351; // some arbitrary number
+ int ChunkSize = 16384; // size of each chunk, choose a multiple of 128
+ System.out.println("Compressing " + TotalSize + " integers using chunks of " + ChunkSize + " integers ("
+ + ChunkSize * 4 / 1024 + "KB)");
+ System.out.println("(It is often better for applications to work in chunks fitting in CPU cache.)");
+ int[] data = new int[TotalSize];
+ // data should be sorted for best
+ // results
+ for (int k = 0; k < data.length; ++k)
+ data[k] = k;
+ // next we compose a CODEC. Most of the processing
+ // will be done with binary packing, and leftovers will
+ // be processed using variable byte, using variable byte
+ // only for the last chunk!
+ IntegratedIntegerCODEC regularcodec = new IntegratedBinaryPacking();
+ IntegratedVariableByte ivb = new IntegratedVariableByte();
+ IntegratedIntegerCODEC lastcodec = new IntegratedComposition(regularcodec, ivb);
+ // output vector should be large enough...
+ int[] compressed = new int[TotalSize + 1024];
+
+ /**
+ *
+ * compressing
+ *
+ */
+ IntWrapper inputoffset = new IntWrapper(0);
+ IntWrapper outputoffset = new IntWrapper(0);
+ for (int k = 0; k < TotalSize / ChunkSize; ++k)
+ regularcodec.compress(data, inputoffset, ChunkSize, compressed, outputoffset);
+ lastcodec.compress(data, inputoffset, TotalSize % ChunkSize, compressed, outputoffset);
+ // got it!
+ // inputoffset should be at data.length but outputoffset tells
+ // us where we are...
+ System.out.println(
+ "compressed from " + data.length * 4 / 1024 + "KB to " + outputoffset.intValue() * 4 / 1024 + "KB");
+ // we can repack the data:
+ compressed = Arrays.copyOf(compressed, outputoffset.intValue());
+
+ /**
+ *
+ * now uncompressing
+ *
+ * We are *not* assuming that the original array length is known,
+ * however we assume that the chunk size (ChunkSize) is known.
+ *
+ */
+ int[] recovered = new int[ChunkSize];
+ IntWrapper compoff = new IntWrapper(0);
+ IntWrapper recoffset;
+ int currentpos = 0;
+
+ while (compoff.get() < compressed.length) {
+ recoffset = new IntWrapper(0);
+ regularcodec.uncompress(compressed, compoff, compressed.length - compoff.get(), recovered, recoffset);
+
+ if (recoffset.get() < ChunkSize) {// last chunk detected
+ ivb.uncompress(compressed, compoff, compressed.length - compoff.get(), recovered, recoffset);
+ }
+ for (int i = 0; i < recoffset.get(); ++i) {
+ if (data[currentpos + i] != recovered[i])
+ throw new RuntimeException("bug"); // could use assert
+ }
+ currentpos += recoffset.get();
+ }
+ System.out.println("data is recovered without loss");
+ System.out.println();
+
+ }
+
+ /**
+ * Demo of the headless approach where we must supply the array length
+ */
+ @Test
+ public void headlessDemo() {
+ System.out.println("Compressing arrays with minimal header...");
+ int[] uncompressed1 = { 1, 2, 1, 3, 1 };
+ int[] uncompressed2 = { 3, 2, 4, 6, 1 };
+
+ SkippableIntegerCODEC codec = new SkippableComposition(new BinaryPacking(), new VariableByte());
+
+ int maxCompressedLength = codec.maxHeadlessCompressedLength(new IntWrapper(0), uncompressed1.length)
+ + codec.maxHeadlessCompressedLength(new IntWrapper(0), uncompressed2.length);
+ int[] compressed = new int[maxCompressedLength];
+
+ // compressing
+ IntWrapper outPos = new IntWrapper();
+
+ IntWrapper previous = new IntWrapper();
+
+ codec.headlessCompress(uncompressed1, new IntWrapper(), uncompressed1.length, compressed, outPos);
+ int length1 = outPos.get() - previous.get();
+ previous = new IntWrapper(outPos.get());
+ codec.headlessCompress(uncompressed2, new IntWrapper(), uncompressed2.length, compressed, outPos);
+ int length2 = outPos.get() - previous.get();
+
+ compressed = Arrays.copyOf(compressed, length1 + length2);
+ System.out
+ .println("compressed unsorted integers from " + uncompressed1.length * 4 + "B to " + length1 * 4 + "B");
+ System.out
+ .println("compressed unsorted integers from " + uncompressed2.length * 4 + "B to " + length2 * 4 + "B");
+ System.out.println("Total compressed output " + compressed.length);
+
+ int[] recovered1 = new int[uncompressed1.length];
+ int[] recovered2 = new int[uncompressed1.length];
+ IntWrapper inPos = new IntWrapper();
+ System.out.println("Decoding first array starting at pos = " + inPos);
+ codec.headlessUncompress(compressed, inPos, compressed.length, recovered1, new IntWrapper(0),
+ uncompressed1.length);
+ System.out.println("Decoding second array starting at pos = " + inPos);
+ codec.headlessUncompress(compressed, inPos, compressed.length, recovered2, new IntWrapper(0),
+ uncompressed2.length);
+ if (!Arrays.equals(uncompressed1, recovered1))
+ throw new RuntimeException("First array does not match.");
+ if (!Arrays.equals(uncompressed2, recovered2))
+ throw new RuntimeException("Second array does not match.");
+ System.out.println("The arrays match, your code is probably ok.");
+
+ }
+}
diff --git a/src/test/java/me/lemire/integercompression/IntCompressorTest.java b/src/test/java/me/lemire/integercompression/IntCompressorTest.java
new file mode 100644
index 0000000..79e51fc
--- /dev/null
+++ b/src/test/java/me/lemire/integercompression/IntCompressorTest.java
@@ -0,0 +1,84 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+
+package me.lemire.integercompression;
+
+import java.util.Arrays;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import me.lemire.integercompression.differential.IntegratedBinaryPacking;
+import me.lemire.integercompression.differential.IntegratedIntCompressor;
+import me.lemire.integercompression.differential.IntegratedVariableByte;
+import me.lemire.integercompression.differential.SkippableIntegratedComposition;
+
+/**
+ * Testing IntCompressor objects.
+ */
+public class IntCompressorTest {
+ IntegratedIntCompressor[] iic = {
+ new IntegratedIntCompressor(new IntegratedVariableByte()),
+ new IntegratedIntCompressor(
+ new SkippableIntegratedComposition(
+ new IntegratedBinaryPacking(),
+ new IntegratedVariableByte())) };
+ IntCompressor[] ic = {
+ new IntCompressor(new VariableByte()),
+ new IntCompressor(new SkippableComposition(new BinaryPacking(),
+ new VariableByte())) };
+
+ /**
+ *
+ */
+ @Test
+ public void basicTest() {
+ for (int N = 1; N <= 10000; N *= 10) {
+ int[] orig = new int[N];
+ for (int k = 0; k < N; k++)
+ orig[k] = 3 * k + 5;
+ for (IntCompressor i : ic) {
+ int[] comp = i.compress(orig);
+ int[] back = i.uncompress(comp);
+ Assert.assertArrayEquals(back, orig);
+ }
+ }
+
+ }
+ /**
+ *
+ */
+ @Test
+ public void superSimpleExample() {
+ IntegratedIntCompressor iic = new IntegratedIntCompressor();
+ int[] data = new int[2342351];
+ for(int k = 0; k < data.length; ++k)
+ data[k] = k;
+ System.out.println("Compressing "+data.length+" integers using friendly interface");
+ int[] compressed = iic.compress(data);
+ int[] recov = iic.uncompress(compressed);
+ System.out.println("compressed from "+data.length*4/1024+"KB to "+compressed.length*4/1024+"KB");
+ if(!Arrays.equals(recov,data)) throw new RuntimeException("bug");
+ }
+
+ /**
+ *
+ */
+ @Test
+ public void basicIntegratedTest() {
+ for (int N = 1; N <= 10000; N *= 10) {
+ int[] orig = new int[N];
+ for (int k = 0; k < N; k++)
+ orig[k] = 3 * k + 5;
+ for (IntegratedIntCompressor i : iic) {
+ int[] comp = i.compress(orig);
+ int[] back = i.uncompress(comp);
+ Assert.assertArrayEquals(back, orig);
+ }
+ }
+ }
+}
diff --git a/src/test/java/me/lemire/integercompression/ResourcedTest.java b/src/test/java/me/lemire/integercompression/ResourcedTest.java
new file mode 100644
index 0000000..8316129
--- /dev/null
+++ b/src/test/java/me/lemire/integercompression/ResourcedTest.java
@@ -0,0 +1,88 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+
+package me.lemire.integercompression;
+
+import java.util.ArrayList;
+import me.lemire.integercompression.differential.IntegratedIntCompressor;
+import me.lemire.integercompression.differential.SkippableIntegratedIntegerCODEC;
+
+import java.io.BufferedReader;
+import java.io.File;
+import org.junit.Assert;
+import java.io.FileReader;
+import java.io.IOException;
+
+import org.junit.Test;
+
+/**
+ * Tests with resources
+ *
+ */
+public class ResourcedTest {
+ SkippableIntegerCODEC[] codecs = { new JustCopy(), new VariableByte(),
+ new SkippableComposition(new BinaryPacking(), new VariableByte()),
+ new SkippableComposition(new NewPFD(), new VariableByte()),
+ new SkippableComposition(new NewPFDS9(), new VariableByte()),
+ new SkippableComposition(new NewPFDS16(), new VariableByte()),
+ new SkippableComposition(new OptPFD(), new VariableByte()),
+ new SkippableComposition(new OptPFDS9(), new VariableByte()),
+ new SkippableComposition(new OptPFDS16(), new VariableByte()),
+ new SkippableComposition(new FastPFOR128(), new VariableByte()),
+ new SkippableComposition(new FastPFOR(), new VariableByte()), new Simple9(), new Simple16() };
+
+ /**
+ * @throws IOException
+ * if the resource cannot be accessed (should be considered a
+ * bug)
+ *
+ */
+ @Test
+ public void IntCompressorTest() throws IOException {
+ // next line requires Java8?
+ // int[] data =
+ // Files.lines(Paths.get("integers.txt")).mapToInt(Integer::parseInt).toArray();
+ File f = new File("src/test/resources/integers.txt");
+ System.out.println("loading test data from "+ f.getAbsolutePath());
+ BufferedReader bfr = new BufferedReader(new FileReader(f));
+ String line;
+ ArrayList ai = new ArrayList();
+ while ((line = bfr.readLine()) != null) {
+ ai.add(Integer.parseInt(line));
+ }
+ bfr.close();
+ int[] data = new int[ai.size()];
+ for (int k = 0; k < data.length; ++k)
+ data[k] = ai.get(k).intValue();
+ ai = null;
+ // finally!
+ {
+ IntegratedIntCompressor iic = new IntegratedIntCompressor();
+ int[] compressed = iic.compress(data);
+ int[] recovered = iic.uncompress(compressed);
+ Assert.assertArrayEquals(recovered, data);
+ }
+ for (SkippableIntegerCODEC C : codecs) {
+ IntCompressor iic = new IntCompressor(C);
+ int[] compressed = iic.compress(data);
+ int[] recovered = iic.uncompress(compressed);
+ Assert.assertArrayEquals(recovered, data);
+
+ }
+ for (SkippableIntegerCODEC C : codecs) {
+ if (C instanceof SkippableIntegratedIntegerCODEC) {
+ IntegratedIntCompressor iic = new IntegratedIntCompressor((SkippableIntegratedIntegerCODEC) C);
+ int[] compressed = iic.compress(data);
+ int[] recovered = iic.uncompress(compressed);
+ Assert.assertArrayEquals(recovered, data);
+ }
+
+ }
+
+ }
+
+}
diff --git a/src/test/java/me/lemire/integercompression/SkippableBasicTest.java b/src/test/java/me/lemire/integercompression/SkippableBasicTest.java
new file mode 100644
index 0000000..252cfea
--- /dev/null
+++ b/src/test/java/me/lemire/integercompression/SkippableBasicTest.java
@@ -0,0 +1,294 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+
+package me.lemire.integercompression;
+
+import java.util.Arrays;
+
+import me.lemire.integercompression.differential.IntegratedBinaryPacking;
+import me.lemire.integercompression.differential.IntegratedVariableByte;
+import me.lemire.integercompression.differential.SkippableIntegratedComposition;
+import me.lemire.integercompression.differential.SkippableIntegratedIntegerCODEC;
+import me.lemire.integercompression.vector.VectorBinaryPacking;
+import me.lemire.integercompression.vector.VectorFastPFOR;
+import org.junit.Test;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * Just some basic sanity tests.
+ *
+ * @author Daniel Lemire
+ */
+@SuppressWarnings({ "static-method" })
+public class SkippableBasicTest {
+ final SkippableIntegerCODEC[] codecs = {
+ new JustCopy(),
+ new VariableByte(),
+ new SkippableComposition(new BinaryPacking(), new VariableByte()),
+ new SkippableComposition(new NewPFD(), new VariableByte()),
+ new SkippableComposition(new NewPFDS9(), new VariableByte()),
+ new SkippableComposition(new NewPFDS16(), new VariableByte()),
+ new SkippableComposition(new OptPFD(), new VariableByte()),
+ new SkippableComposition(new OptPFDS9(), new VariableByte()),
+ new SkippableComposition(new OptPFDS16(), new VariableByte()),
+ new SkippableComposition(new FastPFOR128(), new VariableByte()),
+ new SkippableComposition(new FastPFOR(), new VariableByte()),
+ new SkippableComposition(new VectorFastPFOR(), new VariableByte()),
+ new SkippableComposition(new VectorBinaryPacking(), new VariableByte()),
+ new Simple9(),
+ new Simple16() };
+
+
+ /**
+ *
+ */
+ @Test
+ public void consistentTest() {
+ int N = 4096;
+ int[] data = new int[N];
+ int[] rev = new int[N];
+ for (int k = 0; k < N; ++k)
+ data[k] = k % 128;
+ for (SkippableIntegerCODEC c : codecs) {
+ System.out.println("[SkippeableBasicTest.consistentTest] codec = "
+ + c);
+ for (int n = 0; n <= N; ++n) {
+ IntWrapper inPos = new IntWrapper();
+ IntWrapper outPos = new IntWrapper();
+ int[] outBuf = new int[c.maxHeadlessCompressedLength(new IntWrapper(0), n)];
+
+ c.headlessCompress(data, inPos, n, outBuf, outPos);
+
+ IntWrapper inPoso = new IntWrapper();
+ IntWrapper outPoso = new IntWrapper();
+ c.headlessUncompress(outBuf, inPoso, outPos.get(), rev,
+ outPoso, n);
+ if (outPoso.get() != n) {
+ throw new RuntimeException("bug "+n);
+ }
+ if (inPoso.get() != outPos.get()) {
+ throw new RuntimeException("bug "+n+" "+inPoso.get()+" "+outPos.get());
+ }
+ for (int j = 0; j < n; ++j)
+ if (data[j] != rev[j]) {
+ throw new RuntimeException("bug");
+ }
+ }
+ }
+ }
+
+
+ /**
+ *
+ */
+ @Test
+ public void varyingLengthTest() {
+ int N = 4096;
+ int[] data = new int[N];
+ for (int k = 0; k < N; ++k)
+ data[k] = k;
+ for (SkippableIntegerCODEC c : codecs) {
+ System.out.println("[SkippeableBasicTest.varyingLengthTest] codec = "+c);
+ for (int L = 1; L <= 128; L++) {
+ int[] comp = TestUtils.compressHeadless(c, Arrays.copyOf(data, L));
+ int[] answer = TestUtils.uncompressHeadless(c, comp, L);
+ for (int k = 0; k < L; ++k)
+ if (answer[k] != data[k])
+ throw new RuntimeException("bug "+c.toString()+" "+k+" "+answer[k]+" "+data[k]);
+ }
+ for (int L = 128; L <= N; L *= 2) {
+ int[] comp = TestUtils.compressHeadless(c, Arrays.copyOf(data, L));
+ int[] answer = TestUtils.uncompressHeadless(c, comp, L);
+ for (int k = 0; k < L; ++k)
+ if (answer[k] != data[k])
+ throw new RuntimeException("bug");
+ }
+
+ }
+ }
+
+ /**
+ *
+ */
+ @Test
+ public void varyingLengthTest2() {
+ int N = 128;
+ int[] data = new int[N];
+ data[127] = -1;
+ for (SkippableIntegerCODEC c : codecs) {
+ System.out.println("[SkippeableBasicTest.varyingLengthTest2] codec = "+c);
+
+ try {
+ // CODEC Simple9 is limited to "small" integers.
+ if (c.getClass().equals(
+ Class.forName("me.lemire.integercompression.Simple9")))
+ continue;
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ }
+ try {
+ // CODEC Simple16 is limited to "small" integers.
+ if (c.getClass().equals(
+ Class.forName("me.lemire.integercompression.Simple16")))
+ continue;
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ }
+ for (int L = 1; L <= 128; L++) {
+ int[] comp = TestUtils.compressHeadless(c, Arrays.copyOf(data, L));
+ int[] answer = TestUtils.uncompressHeadless(c, comp, L);
+ for (int k = 0; k < L; ++k)
+ if (answer[k] != data[k])
+ throw new RuntimeException("bug at k = "+k+" "+answer[k]+" "+data[k]+" for "+c.toString());
+ }
+ for (int L = 128; L <= N; L *= 2) {
+ int[] comp = TestUtils.compressHeadless(c, Arrays.copyOf(data, L));
+ int[] answer = TestUtils.uncompressHeadless(c, comp, L);
+ for (int k = 0; k < L; ++k)
+ if (answer[k] != data[k])
+ throw new RuntimeException("bug");
+ }
+
+ }
+ }
+
+ @Test
+ public void testMaxHeadlessCompressedLength() {
+ testMaxHeadlessCompressedLength(new IntegratedBinaryPacking(), 16 * IntegratedBinaryPacking.BLOCK_SIZE);
+ testMaxHeadlessCompressedLength(new IntegratedVariableByte(), 128);
+ testMaxHeadlessCompressedLength(new SkippableIntegratedComposition(new IntegratedBinaryPacking(), new IntegratedVariableByte()), 16 * IntegratedBinaryPacking.BLOCK_SIZE + 10);
+
+ testMaxHeadlessCompressedLength(new BinaryPacking(), 16 * BinaryPacking.BLOCK_SIZE, 32);
+ testMaxHeadlessCompressedLength(new VariableByte(), 128, 32);
+ testMaxHeadlessCompressedLength(new SkippableComposition(new BinaryPacking(), new VariableByte()), 16 * BinaryPacking.BLOCK_SIZE + 10, 32);
+ testMaxHeadlessCompressedLength(new VectorBinaryPacking(), 4 * VectorBinaryPacking.BLOCK_SIZE, 32);
+ testMaxHeadlessCompressedLength(new SkippableComposition(new VectorBinaryPacking(), new VariableByte()), 4 * VectorBinaryPacking.BLOCK_SIZE + 10, 32);
+ testMaxHeadlessCompressedLength(new JustCopy(), 128, 32);
+ testMaxHeadlessCompressedLength(new Simple9(), 128, 28);
+ testMaxHeadlessCompressedLength(new Simple16(), 128, 28);
+ testMaxHeadlessCompressedLength(new GroupSimple9(), 128, 28);
+ testMaxHeadlessCompressedLength(new OptPFD(), 4 * OptPFD.BLOCK_SIZE, 32);
+ testMaxHeadlessCompressedLength(new SkippableComposition(new OptPFD(), new VariableByte()), 4 * OptPFD.BLOCK_SIZE + 10, 32);
+ testMaxHeadlessCompressedLength(new OptPFDS9(), 4 * OptPFDS9.BLOCK_SIZE, 32);
+ testMaxHeadlessCompressedLength(new SkippableComposition(new OptPFDS9(), new VariableByte()), 4 * OptPFDS9.BLOCK_SIZE + 10, 32);
+ testMaxHeadlessCompressedLength(new OptPFDS16(), 4 * OptPFDS16.BLOCK_SIZE, 32);
+ testMaxHeadlessCompressedLength(new SkippableComposition(new OptPFDS9(), new VariableByte()), 4 * OptPFDS16.BLOCK_SIZE + 10, 32);
+ testMaxHeadlessCompressedLength(new NewPFD(), 4 * NewPFD.BLOCK_SIZE, 32);
+ testMaxHeadlessCompressedLength(new SkippableComposition(new NewPFD(), new VariableByte()), 4 * NewPFD.BLOCK_SIZE + 10, 32);
+ testMaxHeadlessCompressedLength(new NewPFDS9(), 4 * NewPFDS9.BLOCK_SIZE, 32);
+ testMaxHeadlessCompressedLength(new SkippableComposition(new NewPFDS9(), new VariableByte()), 4 * NewPFDS9.BLOCK_SIZE + 10, 32);
+ testMaxHeadlessCompressedLength(new NewPFDS16(), 4 * NewPFDS16.BLOCK_SIZE, 32);
+ testMaxHeadlessCompressedLength(new SkippableComposition(new NewPFDS16(), new VariableByte()), 4 * NewPFDS16.BLOCK_SIZE + 10, 32);
+
+ int fastPfor128PageSize = FastPFOR128.BLOCK_SIZE * 4; // smaller page size than the default to speed up the test
+ testMaxHeadlessCompressedLength(new FastPFOR128(fastPfor128PageSize), 2 * fastPfor128PageSize, 32);
+ testMaxHeadlessCompressedLength(new SkippableComposition(new FastPFOR128(fastPfor128PageSize), new VariableByte()), 2 * fastPfor128PageSize + 10, 32);
+ int fastPforPageSize = FastPFOR.BLOCK_SIZE * 4; // smaller page size than the default to speed up the test
+ testMaxHeadlessCompressedLength(new FastPFOR(fastPforPageSize), 2 * fastPforPageSize, 32);
+ testMaxHeadlessCompressedLength(new SkippableComposition(new FastPFOR(fastPforPageSize), new VariableByte()), 2 * fastPforPageSize + 10, 32);
+ }
+
+ private static void testMaxHeadlessCompressedLength(SkippableIntegratedIntegerCODEC codec, int inlengthTo) {
+ // We test the worst-case scenario by making all deltas and the initial value negative.
+ int delta = -1;
+ int value = delta;
+
+ for (int inlength = 0; inlength < inlengthTo; ++inlength) {
+ int[] input = new int[inlength];
+ for (int i = 0; i < inlength; i++) {
+ input[i] = value;
+ value += delta;
+ }
+
+ int maxOutputLength = codec.maxHeadlessCompressedLength(new IntWrapper(), inlength);
+ int[] output = new int[maxOutputLength];
+ IntWrapper outPos = new IntWrapper();
+
+ codec.headlessCompress(input, new IntWrapper(), inlength, output, outPos, new IntWrapper());
+ // If we reach this point, no exception was thrown, which means the calculated output length was sufficient.
+
+ assertTrue(maxOutputLength <= outPos.get() + 1); // +1 because SkippableIntegratedComposition always adds one extra integer for the potential header
+ }
+ }
+
+ private static void testMaxHeadlessCompressedLength(SkippableIntegerCODEC codec, int inlengthTo, int maxBitWidth) {
+ // Some schemes ignore bit widths between 21 and 31. Therefore, in addition to maxBitWidth - 1, we also test 20.
+ assertTrue(maxBitWidth >= 20);
+ int[] regularValueBitWidths = { 20, maxBitWidth - 1 };
+
+ for (int inlength = 0; inlength < inlengthTo; ++inlength) {
+ int[] input = new int[inlength];
+
+ int maxOutputLength = codec.maxHeadlessCompressedLength(new IntWrapper(), inlength);
+ int[] output = new int[maxOutputLength];
+
+ for (int exceptionCount = 0; exceptionCount < inlength; exceptionCount++) {
+ int exception = maxBitWidth == 32 ? -1 : (1 << maxBitWidth) - 1;
+
+ for (int regularValueBitWidth : regularValueBitWidths) {
+ int regularValue = regularValueBitWidth == 32 ? -1 : (1 << regularValueBitWidth) - 1;
+
+ Arrays.fill(input, 0, exceptionCount, exception);
+ Arrays.fill(input, exceptionCount, input.length, regularValue);
+
+ codec.headlessCompress(input, new IntWrapper(), inlength, output, new IntWrapper());
+ // If we reach this point, no exception was thrown, which means the calculated output length was sufficient.
+ }
+ }
+ }
+ }
+
+ @Test
+ public void testUncompressOutputOffset_SkippableComposition() {
+ for (int offset : new int[] {0, 1, 6}) {
+ SkippableComposition codec = new SkippableComposition(new BinaryPacking(), new VariableByte());
+
+ int[] input = { 2, 3, 4, 5 };
+ int[] compressed = new int[codec.maxHeadlessCompressedLength(new IntWrapper(0), input.length)];
+ int[] uncompressed = new int[offset + input.length];
+
+ IntWrapper inputOffset = new IntWrapper(0);
+ IntWrapper compressedOffset = new IntWrapper(0);
+
+ codec.headlessCompress(input, inputOffset, input.length, compressed, compressedOffset);
+
+ int compressedLength = compressedOffset.get();
+ IntWrapper uncompressedOffset = new IntWrapper(offset);
+ compressedOffset = new IntWrapper(0);
+ codec.headlessUncompress(compressed, compressedOffset, compressedLength, uncompressed, uncompressedOffset, input.length);
+
+ assertArrayEquals(input, Arrays.copyOfRange(uncompressed, offset, offset + input.length));
+ }
+ }
+
+ @Test
+ public void testUncompressOutputOffset_SkippableIntegratedComposition() {
+ for (int offset : new int[] {0, 1, 6}) {
+ SkippableIntegratedComposition codec = new SkippableIntegratedComposition(new IntegratedBinaryPacking(), new IntegratedVariableByte());
+
+ int[] input = { 2, 3, 4, 5 };
+ int[] compressed = new int[codec.maxHeadlessCompressedLength(new IntWrapper(0), input.length)];
+ int[] uncompressed = new int[offset + input.length];
+
+ IntWrapper inputOffset = new IntWrapper(0);
+ IntWrapper compressedOffset = new IntWrapper(0);
+ IntWrapper initValue = new IntWrapper(0);
+
+ codec.headlessCompress(input, inputOffset, input.length, compressed, compressedOffset, initValue);
+
+ int compressedLength = compressedOffset.get();
+ IntWrapper uncompressedOffset = new IntWrapper(offset);
+ compressedOffset = new IntWrapper(0);
+ initValue = new IntWrapper(0);
+ codec.headlessUncompress(compressed, compressedOffset, compressedLength, uncompressed, uncompressedOffset, input.length, initValue);
+
+ assertArrayEquals(input, Arrays.copyOfRange(uncompressed, offset, offset + input.length));
+ }
+ }
+}
diff --git a/src/test/java/me/lemire/integercompression/TestUtils.java b/src/test/java/me/lemire/integercompression/TestUtils.java
new file mode 100644
index 0000000..b3cbff3
--- /dev/null
+++ b/src/test/java/me/lemire/integercompression/TestUtils.java
@@ -0,0 +1,184 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+
+package me.lemire.integercompression;
+
+import java.util.Arrays;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Static utility methods for test.
+ */
+public class TestUtils {
+
+ /**
+ *
+ */
+ @Test
+ public void testPacking() {
+ int[] outputarray = new int[32];
+ for(int b = 1; b < 32; ++b) {
+ int[] data = new int[32];
+ int[] newdata = new int[32];
+ int mask = (1< maxlength)
+ maxlength = data[k].length;
+ }
+ long[] buffer = new long[maxlength + 1024];
+ long[] dataout = new long[4 * maxlength + 1024];
+ // 4x + 1024 to account for the possibility of some negative
+ // compression.
+ IntWrapper inpos = new IntWrapper();
+ IntWrapper outpos = new IntWrapper();
+ for (int k = 0; k < N; ++k) {
+ long[] backupdata = Arrays.copyOf(data[k], data[k].length);
+
+ inpos.set(1);
+ outpos.set(0);
+ if (!(c instanceof IntegratedLongCODEC)) {
+ LongDelta.delta(backupdata);
+ }
+ c.compress(backupdata, inpos, backupdata.length - inpos.get(),
+ dataout, outpos);
+ final int thiscompsize = outpos.get() + 1;
+ inpos.set(0);
+ outpos.set(1);
+ buffer[0] = backupdata[0];
+ co.uncompress(dataout, inpos, thiscompsize - 1, buffer, outpos);
+ if (!(c instanceof IntegratedLongCODEC))
+ LongDelta.fastinverseDelta(buffer);
+
+ // Check assertions.
+ assertEquals("length is not match", outpos.get(), data[k].length);
+ long[] bufferCutout = Arrays.copyOf(buffer, outpos.get());
+ assertArrayEquals("failed to reconstruct original data", data[k],
+ bufferCutout);
+ }
+ }
+
+ /**
+ * @param codec
+ * provided codec
+ */
+ public void testUnsorted(LongCODEC codec) {
+ int[] lengths = { 133, 1026, 1333333 };
+ for (int N : lengths) {
+ long[] data = new long[N];
+ // initialize the data (most will be small)
+ for (int k = 0; k < N; k += 1)
+ data[k] = 3;
+ // throw some larger values
+ for (int k = 0; k < N; k += 5)
+ data[k] = 100;
+ for (int k = 0; k < N; k += 533)
+ data[k] = 10000;
+ data[5] = -311;
+ // could need more compressing
+ long[] compressed = new long[(int) Math.ceil(N * 1.01) + 1024];
+ IntWrapper inputoffset = new IntWrapper(0);
+ IntWrapper outputoffset = new IntWrapper(0);
+ codec.compress(data, inputoffset, data.length, compressed,
+ outputoffset);
+ // we can repack the data: (optional)
+ compressed = Arrays.copyOf(compressed, outputoffset.intValue());
+
+ long[] recovered = new long[N];
+ IntWrapper recoffset = new IntWrapper(0);
+ codec.uncompress(compressed, new IntWrapper(0), compressed.length,
+ recovered, recoffset);
+ assertArrayEquals(data, recovered);
+ }
+ }
+
+ private void testUnsorted2(LongCODEC codec) {
+ long[] data = new long[128];
+ data[5] = -1;
+ long[] compressed = new long[1024];
+ IntWrapper inputoffset = new IntWrapper(0);
+ IntWrapper outputoffset = new IntWrapper(0);
+ codec.compress(data, inputoffset, data.length, compressed, outputoffset);
+ // we can repack the data: (optional)
+ compressed = Arrays.copyOf(compressed, outputoffset.intValue());
+
+ long[] recovered = new long[128];
+ IntWrapper recoffset = new IntWrapper(0);
+ codec.uncompress(compressed, new IntWrapper(0), compressed.length,
+ recovered, recoffset);
+ assertArrayEquals(data, recovered);
+ }
+
+ private void testUnsorted3(LongCODEC codec) {
+ long[] data = new long[128];
+ data[127] = -1;
+ long[] compressed = new long[1024];
+ IntWrapper inputoffset = new IntWrapper(0);
+ IntWrapper outputoffset = new IntWrapper(0);
+ codec.compress(data, inputoffset, data.length, compressed, outputoffset);
+ // we can repack the data: (optional)
+ compressed = Arrays.copyOf(compressed, outputoffset.intValue());
+
+ long[] recovered = new long[128];
+ IntWrapper recoffset = new IntWrapper(0);
+ codec.uncompress(compressed, new IntWrapper(0), compressed.length,
+ recovered, recoffset);
+ assertArrayEquals(data, recovered);
+ }
+
+ /**
+ *
+ */
+ @Test
+ public void fastPforTest() {
+ // proposed by Stefan Ackermann (https://github.com/Stivo)
+ for (LongCODEC codec : codecs) {
+ int N = FastPFOR.BLOCK_SIZE;
+ long[] data = new long[N];
+ for (int i = 0; i < N; i++)
+ data[i] = 0;
+ data[126] = -1;
+ long[] comp = LongTestUtils.compress(codec, Arrays.copyOf(data, N));
+ long[] answer = LongTestUtils.uncompress(codec, comp, N);
+ for (int k = 0; k < N; ++k)
+ if (answer[k] != data[k]) {
+ long[] comp2 = LongTestUtils.compress(codec, Arrays.copyOf(data, N));
+ long[] answer2 = LongTestUtils.uncompress(codec, comp2, N);
+ throw new RuntimeException("bug " + k + " " + answer[k]
+ + " != " + data[k]);
+ }
+ }
+ }
+
+ /**
+ *
+ */
+ @Test
+ public void fastPfor128Test() {
+ // proposed by Stefan Ackermann (https://github.com/Stivo)
+ for (LongCODEC codec : codecs) {
+ int N = FastPFOR128.BLOCK_SIZE;
+ long[] data = new long[N];
+ for (int i = 0; i < N; i++)
+ data[i] = 0;
+ data[126] = -1;
+ long[] comp = LongTestUtils.compress(codec, Arrays.copyOf(data, N));
+ long[] answer = LongTestUtils.uncompress(codec, comp, N);
+ for (int k = 0; k < N; ++k)
+ if (answer[k] != data[k])
+ throw new RuntimeException("bug " + k + " " + answer[k]
+ + " != " + data[k]);
+ }
+ }
+
+}
diff --git a/src/test/java/me/lemire/longcompression/LongDeltaTest.java b/src/test/java/me/lemire/longcompression/LongDeltaTest.java
new file mode 100644
index 0000000..bfa1e6f
--- /dev/null
+++ b/src/test/java/me/lemire/longcompression/LongDeltaTest.java
@@ -0,0 +1,23 @@
+package me.lemire.longcompression;
+
+import me.lemire.longcompression.differential.LongDelta;
+import org.junit.Test;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertNotNull;
+
+public class LongDeltaTest {
+ @Test
+ public void testEmptyArrayFastInverseDelta() {
+ LongCompressor compressor = new LongCompressor();
+ long[] input = new long[0];
+
+ LongDelta.delta(input);
+ long[] compressed = compressor.compress(input);
+ long[] result = compressor.uncompress(compressed);
+ LongDelta.fastinverseDelta(result);
+
+ assertNotNull(result);
+ assertArrayEquals(input, result);
+ }
+}
diff --git a/src/test/java/me/lemire/longcompression/LongTestUtils.java b/src/test/java/me/lemire/longcompression/LongTestUtils.java
new file mode 100644
index 0000000..b7d9c63
--- /dev/null
+++ b/src/test/java/me/lemire/longcompression/LongTestUtils.java
@@ -0,0 +1,133 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+
+package me.lemire.longcompression;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.util.Arrays;
+
+import me.lemire.integercompression.IntWrapper;
+
+/**
+ * Static utility methods for test.
+ */
+public class LongTestUtils {
+
+ protected static void dumpIntArray(long[] data, String label) {
+ System.out.print(label);
+ for (int i = 0; i < data.length; ++i) {
+ if (i % 6 == 0) {
+ System.out.println();
+ }
+ System.out.format(" %1$11d", data[i]);
+ }
+ System.out.println();
+ }
+
+ protected static void dumpIntArrayAsHex(long[] data, String label) {
+ System.out.print(label);
+ for (int i = 0; i < data.length; ++i) {
+ if (i % 8 == 0) {
+ System.out.println();
+ }
+ System.out.format(" %1$08X", data[i]);
+ }
+ System.out.println();
+ }
+
+ /**
+ * Check that compress and uncompress keep original array.
+ *
+ * @param codec CODEC to test.
+ * @param orig original integers
+ */
+ public static void assertSymmetry(LongCODEC codec, long... orig) {
+ // There are some cases that compressed array is bigger than original
+ // array. So output array for compress must be larger.
+ //
+ // Example:
+ // - VariableByte compresses an array like [ -1 ].
+ // - Composition compresses a short array.
+ final int EXTEND = 1;
+
+ long[] compressed = new long[orig.length + EXTEND];
+ IntWrapper c_inpos = new IntWrapper(0);
+ IntWrapper c_outpos = new IntWrapper(0);
+ codec.compress(orig, c_inpos, orig.length, compressed,
+ c_outpos);
+
+ assertTrue(c_outpos.get() <= orig.length + EXTEND);
+
+ // Uncompress an array.
+ long[] uncompressed = new long[orig.length];
+ IntWrapper u_inpos = new IntWrapper(0);
+ IntWrapper u_outpos = new IntWrapper(0);
+ codec.uncompress(compressed, u_inpos, c_outpos.get(),
+ uncompressed, u_outpos);
+
+ // Compare between uncompressed and orig arrays.
+ long[] target = Arrays.copyOf(uncompressed, u_outpos.get());
+ assertArrayEquals(orig, target);
+ }
+
+ protected static long[] compress(LongCODEC codec, long[] data) {
+ long[] outBuf = new long[data.length * 8];
+ IntWrapper inPos = new IntWrapper();
+ IntWrapper outPos = new IntWrapper();
+ codec.compress(data, inPos, data.length, outBuf, outPos);
+ return Arrays.copyOf(outBuf, outPos.get());
+ }
+
+ protected static long[] uncompress(LongCODEC codec, long[] data, int len) {
+ long[] outBuf = new long[len + 1024];
+ IntWrapper inPos = new IntWrapper();
+ IntWrapper outPos = new IntWrapper();
+ codec.uncompress(data, inPos, data.length, outBuf, outPos);
+ return Arrays.copyOf(outBuf, outPos.get());
+ }
+
+
+
+ protected static byte[] compress(ByteLongCODEC codec, long[] data) {
+ byte[] outBuf = new byte[data.length * 4 * 4];
+ IntWrapper inPos = new IntWrapper();
+ IntWrapper outPos = new IntWrapper();
+ codec.compress(data, inPos, data.length, outBuf, outPos);
+ return Arrays.copyOf(outBuf, outPos.get());
+ }
+
+ protected static long[] uncompress(ByteLongCODEC codec, byte[] data, int len) {
+ long[] outBuf = new long[len + 1024];
+ IntWrapper inPos = new IntWrapper();
+ IntWrapper outPos = new IntWrapper();
+ codec.uncompress(data, inPos, data.length, outBuf, outPos);
+ return Arrays.copyOf(outBuf, outPos.get());
+ }
+
+ protected static long[] compressHeadless(SkippableLongCODEC codec, long[] data) {
+ long[] outBuf = new long[codec.maxHeadlessCompressedLength(new IntWrapper(0), data.length)];
+ IntWrapper inPos = new IntWrapper();
+ IntWrapper outPos = new IntWrapper();
+ codec.headlessCompress(data, inPos, data.length, outBuf, outPos);
+ return Arrays.copyOf(outBuf, outPos.get());
+ }
+
+ protected static long[] uncompressHeadless(SkippableLongCODEC codec, long[] data, int len) {
+ long[] outBuf = new long[len + 1024];
+ IntWrapper inPos = new IntWrapper();
+ IntWrapper outPos = new IntWrapper();
+ codec.headlessUncompress(data, inPos, data.length, outBuf, outPos,len);
+ if(outPos.get() < len) throw new RuntimeException("Insufficient output.");
+ return Arrays.copyOf(outBuf, outPos.get());
+ }
+
+ public static String longToBinaryWithLeading(long l) {
+ return String.format("%64s", Long.toBinaryString(l)).replace(' ', '0');
+ }
+}
diff --git a/src/test/java/me/lemire/longcompression/SkippableLongBasicTest.java b/src/test/java/me/lemire/longcompression/SkippableLongBasicTest.java
new file mode 100644
index 0000000..c4b7e01
--- /dev/null
+++ b/src/test/java/me/lemire/longcompression/SkippableLongBasicTest.java
@@ -0,0 +1,194 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+
+package me.lemire.longcompression;
+
+import java.util.Arrays;
+
+import org.junit.Test;
+
+import me.lemire.integercompression.IntWrapper;
+import me.lemire.integercompression.TestUtils;
+import me.lemire.integercompression.VariableByte;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * Just some basic sanity tests.
+ *
+ * @author Benoit Lacelle
+ */
+@SuppressWarnings({ "static-method" })
+public class SkippableLongBasicTest {
+ final SkippableLongCODEC[] codecs = {
+ new LongJustCopy(),
+ new LongVariableByte(),
+ new SkippableLongComposition(new LongBinaryPacking(), new LongVariableByte()), };
+
+
+ /**
+ *
+ */
+ @Test
+ public void consistentTest() {
+ int N = 4096;
+ long[] data = new long[N];
+ long[] rev = new long[N];
+ for (int k = 0; k < N; ++k)
+ data[k] = k % 128;
+ for (SkippableLongCODEC c : codecs) {
+ System.out.println("[SkippeableBasicTest.consistentTest] codec = "
+ + c);
+ for (int n = 0; n <= N; ++n) {
+ IntWrapper inPos = new IntWrapper();
+ IntWrapper outPos = new IntWrapper();
+ long[] outBuf = new long[c.maxHeadlessCompressedLength(new IntWrapper(0), n)];
+
+ c.headlessCompress(data, inPos, n, outBuf, outPos);
+
+ IntWrapper inPoso = new IntWrapper();
+ IntWrapper outPoso = new IntWrapper();
+ c.headlessUncompress(outBuf, inPoso, outPos.get(), rev,
+ outPoso, n);
+ if (outPoso.get() != n) {
+ throw new RuntimeException("bug "+n);
+ }
+ if (inPoso.get() != outPos.get()) {
+ throw new RuntimeException("bug "+n+" "+inPoso.get()+" "+outPos.get());
+ }
+ for (int j = 0; j < n; ++j)
+ if (data[j] != rev[j]) {
+ throw new RuntimeException("bug");
+ }
+ }
+ }
+ }
+
+
+ /**
+ *
+ */
+ @Test
+ public void varyingLengthTest() {
+ int N = 4096;
+ long[] data = new long[N];
+ for (int k = 0; k < N; ++k)
+ data[k] = k;
+ for (SkippableLongCODEC c : codecs) {
+ System.out.println("[SkippeableBasicTest.varyingLengthTest] codec = "+c);
+ for (int L = 1; L <= 128; L++) {
+ long[] comp = LongTestUtils.compressHeadless(c, Arrays.copyOf(data, L));
+ long[] answer = LongTestUtils.uncompressHeadless(c, comp, L);
+ for (int k = 0; k < L; ++k)
+ if (answer[k] != data[k])
+ throw new RuntimeException("bug "+c.toString()+" "+k+" "+answer[k]+" "+data[k]);
+ }
+ for (int L = 128; L <= N; L *= 2) {
+ long[] comp = LongTestUtils.compressHeadless(c, Arrays.copyOf(data, L));
+ long[] answer = LongTestUtils.uncompressHeadless(c, comp, L);
+ for (int k = 0; k < L; ++k)
+ if (answer[k] != data[k])
+ throw new RuntimeException("bug");
+ }
+
+ }
+ }
+
+ /**
+ *
+ */
+ @Test
+ public void varyingLengthTest2() {
+ int N = 128;
+ long[] data = new long[N];
+ data[127] = -1;
+ for (SkippableLongCODEC c : codecs) {
+ System.out.println("[SkippeableBasicTest.varyingLengthTest2] codec = "+c);
+
+ try {
+ // CODEC Simple9 is limited to "small" integers.
+ if (c.getClass().equals(
+ Class.forName("me.lemire.integercompression.Simple9")))
+ continue;
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ }
+ try {
+ // CODEC Simple16 is limited to "small" integers.
+ if (c.getClass().equals(
+ Class.forName("me.lemire.integercompression.Simple16")))
+ continue;
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ }
+ for (int L = 1; L <= 128; L++) {
+ long[] comp = LongTestUtils.compressHeadless(c, Arrays.copyOf(data, L));
+ long[] answer = LongTestUtils.uncompressHeadless(c, comp, L);
+ for (int k = 0; k < L; ++k)
+ if (answer[k] != data[k]) {
+ throw new RuntimeException("L=" + L + ": bug at k = "+k+" "+answer[k]+" "+data[k]+" for "+c.toString());
+ }
+ }
+ for (int L = 128; L <= N; L *= 2) {
+ long[] comp = LongTestUtils.compressHeadless(c, Arrays.copyOf(data, L));
+ long[] answer = LongTestUtils.uncompressHeadless(c, comp, L);
+ for (int k = 0; k < L; ++k)
+ if (answer[k] != data[k])
+ throw new RuntimeException("bug");
+ }
+
+ }
+ }
+
+ @Test
+ public void testMaxHeadlessCompressedLength() {
+ testMaxHeadlessCompressedLength(new LongJustCopy(), 128);
+ testMaxHeadlessCompressedLength(new LongBinaryPacking(), 16 * LongBinaryPacking.BLOCK_SIZE);
+ testMaxHeadlessCompressedLength(new LongVariableByte(), 128);
+ testMaxHeadlessCompressedLength(new SkippableLongComposition(new LongBinaryPacking(), new LongVariableByte()), 16 * LongBinaryPacking.BLOCK_SIZE + 10);
+ }
+
+ private static void testMaxHeadlessCompressedLength(SkippableLongCODEC codec, int inlengthTo) {
+ for (int inlength = 0; inlength < inlengthTo; ++inlength) {
+ long[] input = new long[inlength];
+ Arrays.fill(input, -1L);
+
+ int maxOutputLength = codec.maxHeadlessCompressedLength(new IntWrapper(), inlength);
+ long[] output = new long[maxOutputLength];
+ IntWrapper outPos = new IntWrapper();
+
+ codec.headlessCompress(input, new IntWrapper(), inlength, output, outPos);
+ // If we reach this point, no exception was thrown, which means the calculated output length was sufficient.
+
+ assertTrue(maxOutputLength <= outPos.get() + 1); // +1 because SkippableLongComposition always adds one extra integer for the potential header
+ }
+ }
+
+ @Test
+ public void testUncompressOutputOffset_SkippableLongComposition() {
+ for (int offset : new int[] {0, 1, 6}) {
+ SkippableLongComposition codec = new SkippableLongComposition(new LongBinaryPacking(), new LongVariableByte());
+
+ long[] input = { 2, 3, 4, 5 };
+ long[] compressed = new long[codec.maxHeadlessCompressedLength(new IntWrapper(0), input.length)];
+ long[] uncompressed = new long[offset + input.length];
+
+ IntWrapper inputOffset = new IntWrapper(0);
+ IntWrapper compressedOffset = new IntWrapper(0);
+
+ codec.headlessCompress(input, inputOffset, input.length, compressed, compressedOffset);
+
+ int compressedLength = compressedOffset.get();
+ IntWrapper uncompressedOffset = new IntWrapper(offset);
+ compressedOffset = new IntWrapper(0);
+ codec.headlessUncompress(compressed, compressedOffset, compressedLength, uncompressed, uncompressedOffset, input.length);
+
+ assertArrayEquals(input, Arrays.copyOfRange(uncompressed, offset, offset + input.length));
+ }
+ }
+}
diff --git a/src/test/java/me/lemire/longcompression/TestLongAs2IntsCodec.java b/src/test/java/me/lemire/longcompression/TestLongAs2IntsCodec.java
new file mode 100644
index 0000000..bddff2a
--- /dev/null
+++ b/src/test/java/me/lemire/longcompression/TestLongAs2IntsCodec.java
@@ -0,0 +1,31 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+
+package me.lemire.longcompression;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * Edge-cases having caused issue specifically with LongVariableByte.
+ *
+ * @author Benoit Lacelle
+ */
+public class TestLongAs2IntsCodec extends ATestLongCODEC {
+ final LongAs2IntsCodec codec = new LongAs2IntsCodec();
+
+ @Override
+ public LongCODEC getCodec() {
+ return codec;
+ }
+
+ @Test
+ public void testCodec_intermediateHighPowerOfTwo() {
+ Assert.assertEquals(3, LongTestUtils.compress((LongCODEC) codec, new long[] { 1L << 42 }).length);
+ }
+
+}
diff --git a/src/test/java/me/lemire/longcompression/TestLongBinaryPacking.java b/src/test/java/me/lemire/longcompression/TestLongBinaryPacking.java
new file mode 100644
index 0000000..ecc3f2e
--- /dev/null
+++ b/src/test/java/me/lemire/longcompression/TestLongBinaryPacking.java
@@ -0,0 +1,26 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+
+package me.lemire.longcompression;
+
+import org.junit.Ignore;
+
+/**
+ * Edge-cases having caused issue specifically with LongBinaryPacking.
+ *
+ * @author Benoit Lacelle
+ */
+@Ignore("Parent class tests are not valid as LongBinaryPacking process by chunks of 64 longs")
+public class TestLongBinaryPacking extends ATestLongCODEC {
+ final LongBinaryPacking codec = new LongBinaryPacking();
+
+ @Override
+ public LongCODEC getCodec() {
+ return codec;
+ }
+
+}
diff --git a/src/test/java/me/lemire/longcompression/TestLongBitPacking.java b/src/test/java/me/lemire/longcompression/TestLongBitPacking.java
new file mode 100644
index 0000000..a713faa
--- /dev/null
+++ b/src/test/java/me/lemire/longcompression/TestLongBitPacking.java
@@ -0,0 +1,140 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+
+package me.lemire.longcompression;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+
+import java.util.Arrays;
+import java.util.Random;
+
+import org.junit.Test;
+
+/**
+ * Validates the unrolled {@link LongBitPacking} kernels.
+ */
+public class TestLongBitPacking {
+
+ private static final int BLOCK = 64;
+ private static final int TRIALS = 64;
+
+ private static long[] randomBlock(Random random, int bit) {
+ long mask;
+ if (bit == 64) {
+ mask = -1L;
+ } else {
+ mask = (1L << bit) - 1;
+ }
+ long[] data = new long[BLOCK];
+ for (int i = 0; i < BLOCK; i++) {
+ data[i] = random.nextLong() & mask;
+ }
+ return data;
+ }
+
+ @Test
+ public void roundTrip() {
+ Random random = new Random(0);
+ for (int bit = 0; bit <= 64; bit++) {
+ for (int trial = 0; trial < TRIALS; trial++) {
+ long[] data = randomBlock(random, bit);
+ long[] packed = new long[bit];
+ LongBitPacking.fastpackwithoutmask(data, 0, packed, 0, bit);
+ long[] unpacked = new long[BLOCK];
+ LongBitPacking.fastunpack(packed, 0, unpacked, 0, bit);
+ assertArrayEquals("bit width " + bit, data, unpacked);
+ }
+ }
+ }
+
+ @Test
+ public void layoutMatchesSlowPack() {
+ Random random = new Random(1);
+ for (int bit = 1; bit < 64; bit++) {
+ for (int trial = 0; trial < TRIALS; trial++) {
+ long[] data = randomBlock(random, bit);
+ long[] fast = new long[bit];
+ long[] slow = new long[bit];
+ LongBitPacking.fastpackwithoutmask(data, 0, fast, 0, bit);
+ LongBitPacking.slowpackwithoutmask(data, 0, slow, 0, bit);
+ assertArrayEquals("bit width " + bit, slow, fast);
+ }
+ }
+ }
+
+ @Test
+ public void layoutMatchesSlowUnpack() {
+ Random random = new Random(2);
+ for (int bit = 1; bit < 64; bit++) {
+ for (int trial = 0; trial < TRIALS; trial++) {
+ long[] data = randomBlock(random, bit);
+ long[] packed = new long[bit];
+ LongBitPacking.slowpackwithoutmask(data, 0, packed, 0, bit);
+ long[] fast = new long[BLOCK];
+ long[] slow = new long[BLOCK];
+ LongBitPacking.fastunpack(packed, 0, fast, 0, bit);
+ LongBitPacking.slowunpack(packed, 0, slow, 0, bit);
+ assertArrayEquals("bit width " + bit, slow, fast);
+ }
+ }
+ }
+
+ @Test
+ public void extremeValues() {
+ for (int bit = 0; bit <= 64; bit++) {
+ long mask;
+ if (bit == 64) {
+ mask = -1L;
+ } else {
+ mask = (1L << bit) - 1;
+ }
+ long[] data = new long[BLOCK];
+ Arrays.fill(data, mask);
+ long[] packed = new long[bit];
+ LongBitPacking.fastpackwithoutmask(data, 0, packed, 0, bit);
+ long[] unpacked = new long[BLOCK];
+ LongBitPacking.fastunpack(packed, 0, unpacked, 0, bit);
+ assertArrayEquals("bit width " + bit, data, unpacked);
+ if (bit > 0 && bit < 64) {
+ long[] slow = new long[bit];
+ LongBitPacking.slowpackwithoutmask(data, 0, slow, 0, bit);
+ assertArrayEquals("bit width " + bit, slow, packed);
+ }
+ }
+ }
+
+ @Test
+ public void roundTripWithOffsets() {
+ Random random = new Random(3);
+ int inOffset = 7;
+ int outOffset = 5;
+ long sentinel = 0x5555555555555555L;
+ for (int bit = 0; bit <= 64; bit++) {
+ long[] data = randomBlock(random, bit);
+ long[] in = new long[BLOCK + inOffset];
+ System.arraycopy(data, 0, in, inOffset, BLOCK);
+ long[] packed = new long[bit + outOffset];
+ Arrays.fill(packed, 0, outOffset, sentinel);
+ LongBitPacking.fastpackwithoutmask(in, inOffset, packed, outOffset, bit);
+ long[] unpacked = new long[BLOCK + inOffset];
+ Arrays.fill(unpacked, 0, inOffset, sentinel);
+ LongBitPacking.fastunpack(packed, outOffset, unpacked, inOffset, bit);
+ long[] result = new long[BLOCK];
+ System.arraycopy(unpacked, inOffset, result, 0, BLOCK);
+ assertArrayEquals("bit width " + bit, data, result);
+ for (int i = 0; i < outOffset; i++) {
+ assertEquals("pack wrote before outpos at bit " + bit,
+ sentinel, packed[i]);
+ }
+ for (int i = 0; i < inOffset; i++) {
+ assertEquals("unpack wrote before outpos at bit " + bit,
+ sentinel, unpacked[i]);
+ }
+ }
+ }
+}
diff --git a/src/test/java/me/lemire/longcompression/TestLongVariableByte.java b/src/test/java/me/lemire/longcompression/TestLongVariableByte.java
new file mode 100644
index 0000000..3cb2a49
--- /dev/null
+++ b/src/test/java/me/lemire/longcompression/TestLongVariableByte.java
@@ -0,0 +1,40 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+
+package me.lemire.longcompression;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * Edge-cases having caused issue specifically with LongVariableByte.
+ *
+ * @author Benoit Lacelle
+ */
+public class TestLongVariableByte extends ATestLongCODEC {
+ final LongVariableByte codec = new LongVariableByte();
+
+ @Override
+ public LongCODEC getCodec() {
+ return codec;
+ }
+
+ @Test
+ public void testCodec_allBitWidths() {
+ for (int bitWidth = 0; bitWidth <= 64; bitWidth++) {
+ long value = bitWidth == 0 ? 0 : 1L << (bitWidth - 1);
+
+ int expectedSizeInBytes = Math.max(1, (bitWidth + 6) / 7);
+ int expectedSizeInLongs = (expectedSizeInBytes > 8) ? 2 : 1;
+
+ Assert.assertEquals(expectedSizeInLongs, LongTestUtils.compress((LongCODEC) codec, new long[] { value }).length);
+ Assert.assertEquals(expectedSizeInBytes, LongTestUtils.compress((ByteLongCODEC) codec, new long[] { value }).length);
+ Assert.assertEquals(expectedSizeInLongs,
+ LongTestUtils.compressHeadless((SkippableLongCODEC) codec, new long[] { value }).length);
+ }
+ }
+}
diff --git a/src/test/java/me/lemire/longcompression/synth/LongClusteredDataGenerator.java b/src/test/java/me/lemire/longcompression/synth/LongClusteredDataGenerator.java
new file mode 100644
index 0000000..c964f6f
--- /dev/null
+++ b/src/test/java/me/lemire/longcompression/synth/LongClusteredDataGenerator.java
@@ -0,0 +1,91 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+package me.lemire.longcompression.synth;
+
+import me.lemire.integercompression.synth.ClusteredDataGenerator;
+
+/**
+ * This class will generate lists of random longs based on the clustered
+ * model:
+ *
+ * Reference: Vo Ngoc Anh and Alistair Moffat. 2010. Index compression using
+ * 64-bit words. Softw. Pract. Exper.40, 2 (February 2010), 131-147.
+ *
+ * @author Benoit Lacelle
+ * @see ClusteredDataGenerator
+ */
+public class LongClusteredDataGenerator {
+
+ final LongUniformDataGenerator unidg = new LongUniformDataGenerator();
+
+ /**
+ * Creating random array generator.
+ */
+ public LongClusteredDataGenerator() {
+ }
+
+ void fillUniform(long[] array, int offset, int length, long Min, long Max) {
+ long[] v = this.unidg.generateUniform(length, Max - Min);
+ for (int k = 0; k < v.length; ++k)
+ array[k + offset] = Min + v[k];
+ }
+
+ void fillClustered(long[] array, int offset, int length, long Min, long Max) {
+ final long range = Max - Min;
+ if ((range == length) || (length <= 10)) {
+ fillUniform(array, offset, length, Min, Max);
+ return;
+ }
+ final long cut = length
+ / 2
+ + ((range - length - 1 > 0) ? (long)this.unidg.rand
+ .nextDouble() * (range - length - 1) : 0);
+ final double p = this.unidg.rand.nextDouble();
+ if (p < 0.25) {
+ fillUniform(array, offset, length / 2, Min, Min + cut);
+ fillClustered(array, offset + length / 2, length
+ - length / 2, Min + cut, Max);
+ } else if (p < 0.5) {
+ fillClustered(array, offset, length / 2, Min, Min + cut);
+ fillUniform(array, offset + length / 2, length - length
+ / 2, Min + cut, Max);
+ } else {
+ fillClustered(array, offset, length / 2, Min, Min + cut);
+ fillClustered(array, offset + length / 2, length
+ - length / 2, Min + cut, Max);
+ }
+ }
+
+ /**
+ * generates randomly N distinct integers from 0 to Max.
+ *
+ * @param N
+ * number of integers to generate
+ * @param Max
+ * maximal value of the integers
+ * @return array containing the integers
+ */
+ public long[] generateClustered(int N, long Max) {
+ long[] array = new long[N];
+ fillClustered(array, 0, N, 0, Max);
+ return array;
+ }
+
+ /**
+ * Little test program.
+ *
+ * @param args
+ * arguments are ignored
+ */
+ public static void main(final String[] args) {
+ long[] example = (new LongClusteredDataGenerator())
+ .generateClustered(20, 1000);
+ for (int k = 0; k < example.length; ++k)
+ System.out.println(example[k]);
+ }
+
+}
diff --git a/src/test/java/me/lemire/longcompression/synth/LongUniformDataGenerator.java b/src/test/java/me/lemire/longcompression/synth/LongUniformDataGenerator.java
new file mode 100644
index 0000000..4aa797b
--- /dev/null
+++ b/src/test/java/me/lemire/longcompression/synth/LongUniformDataGenerator.java
@@ -0,0 +1,125 @@
+/**
+ * This code is released under the
+ * Apache License Version 2.0 http://www.apache.org/licenses/.
+ *
+ * (c) Daniel Lemire, http://lemire.me/en/
+ */
+package me.lemire.longcompression.synth;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Random;
+import java.util.Set;
+
+import org.roaringbitmap.longlong.Roaring64Bitmap;
+
+import me.lemire.integercompression.synth.UniformDataGenerator;
+
+/**
+ * This class will generate "uniform" lists of random longs.
+ *
+ * @author Benoit Lacelle
+ * @see UniformDataGenerator
+ */
+public class LongUniformDataGenerator {
+ /**
+ * construct generator of random arrays.
+ */
+ public LongUniformDataGenerator() {
+ this.rand = new Random();
+ }
+
+ /**
+ * @param seed
+ * random seed
+ */
+ public LongUniformDataGenerator(final int seed) {
+ this.rand = new Random(seed);
+ }
+
+ /**
+ * generates randomly N distinct longs from 0 to Max.
+ */
+ long[] generateUniformHash(int N, long Max) {
+ if (N > Max)
+ throw new RuntimeException("not possible");
+ long[] ans = new long[N];
+ Set s = new HashSet<>();
+ while (s.size() < N)
+ s.add((long) (this.rand.nextDouble() * Max));
+ Iterator i = s.iterator();
+ for (int k = 0; k < N; ++k)
+ ans[k] = i.next().longValue();
+ Arrays.sort(ans);
+ return ans;
+ }
+
+ /**
+ * output all longs from the range [0,Max) that are not in the array
+ */
+ static long[] negate(long[] x, long Max) {
+ int newLength = saturatedCast(Max - x.length);
+ long[] ans = new long[newLength];
+ int i = 0;
+ int c = 0;
+ for (int j = 0; j < x.length; ++j) {
+ long v = x[j];
+ for (; i < v; ++i)
+ ans[c++] = i;
+ ++i;
+ }
+ while (c < ans.length)
+ ans[c++] = i++;
+ return ans;
+ }
+
+ private static int saturatedCast(long toInt) {
+ if (toInt > Integer.MAX_VALUE) {
+ return Integer.MAX_VALUE;
+ } else {
+ return (int) toInt;
+ }
+ }
+
+ /**
+ * generates randomly N distinct longs from 0 to Max.
+ *
+ * @param N
+ * number of longs to generate
+ * @param Max
+ * bound on the value of longs
+ * @return an array containing randomly selected longs
+ */
+ public long[] generateUniform(int N, long Max) {
+ assert N >= 0;
+ assert Max >= 0;
+ if (N * 2 > Max) {
+ return negate(generateUniform(saturatedCast(Max - N), Max), Max);
+ }
+ if (2048 * N > Max)
+ return generateUniformBitmap(N, Max);
+ return generateUniformHash(N, Max);
+ }
+
+ /**
+ * generates randomly N distinct longs from 0 to Max.
+ */
+ long[] generateUniformBitmap(int N, long Max) {
+ if (N > Max)
+ throw new RuntimeException("not possible");
+ Roaring64Bitmap bs = new Roaring64Bitmap();
+ int cardinality = 0;
+ while (cardinality < N) {
+ long v = (long) (rand.nextDouble() * Max);
+ if (!bs.contains(v)) {
+ bs.add(v);
+ cardinality++;
+ }
+ }
+ return bs.toArray();
+ }
+
+ Random rand = new Random();
+
+}
\ No newline at end of file
diff --git a/src/test/resources/integers.txt b/src/test/resources/integers.txt
new file mode 100644
index 0000000..06a56d3
--- /dev/null
+++ b/src/test/resources/integers.txt
@@ -0,0 +1,130657 @@
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+15
+30
+31
+9
+32
+19
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+4
+43
+44
+45
+19
+46
+47
+48
+49
+50
+9
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+16
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+9
+12
+86
+87
+88
+89
+90
+91
+92
+10
+93
+77
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+43
+20
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+89
+129
+130
+131
+132
+133
+19
+134
+19
+135
+136
+137
+138
+139
+140
+141
+142
+143
+57
+89
+20
+43
+144
+14
+145
+32
+43
+14
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+43
+158
+159
+160
+161
+43
+162
+163
+164
+165
+57
+166
+167
+168
+169
+170
+171
+172
+19
+173
+174
+9
+175
+19
+14
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+104
+189
+190
+25
+191
+19
+4
+192
+193
+194
+195
+32
+196
+197
+198
+199
+200
+201
+202
+12
+203
+204
+205
+206
+207
+48
+208
+2
+209
+4
+164
+104
+210
+211
+212
+2
+213
+214
+215
+216
+217
+2
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+19
+12
+3
+233
+234
+235
+236
+237
+48
+238
+239
+213
+240
+241
+22
+242
+243
+244
+245
+246
+247
+248
+249
+57
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+248
+269
+270
+271
+272
+273
+3
+57
+19
+46
+274
+275
+276
+213
+277
+278
+43
+279
+280
+281
+282
+283
+283
+248
+284
+213
+213
+2
+285
+43
+32
+286
+284
+287
+288
+289
+290
+15
+291
+292
+293
+57
+294
+60
+295
+296
+297
+179
+298
+299
+29
+300
+284
+301
+302
+303
+213
+213
+304
+305
+89
+306
+307
+308
+248
+99
+309
+19
+188
+310
+311
+19
+312
+313
+314
+155
+22
+213
+248
+315
+176
+316
+317
+318
+319
+320
+19
+57
+248
+321
+322
+323
+324
+325
+43
+326
+327
+303
+328
+329
+330
+15
+248
+303
+331
+332
+333
+205
+334
+335
+14
+336
+337
+283
+43
+338
+339
+340
+341
+57
+342
+343
+337
+43
+344
+345
+346
+284
+347
+337
+348
+349
+14
+350
+46
+337
+351
+352
+286
+353
+43
+15
+354
+355
+356
+357
+358
+359
+238
+9
+360
+361
+164
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+114
+380
+15
+381
+382
+43
+383
+384
+385
+386
+387
+388
+389
+179
+390
+358
+20
+391
+392
+349
+393
+9
+394
+395
+396
+397
+14
+398
+399
+210
+32
+400
+401
+20
+402
+403
+404
+405
+406
+407
+408
+409
+345
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+14
+48
+2
+420
+421
+422
+423
+424
+425
+426
+427
+228
+428
+20
+429
+430
+431
+432
+433
+434
+435
+9
+14
+436
+25
+437
+438
+32
+439
+440
+32
+441
+442
+443
+444
+137
+345
+445
+20
+446
+447
+448
+449
+450
+451
+452
+48
+453
+454
+455
+456
+457
+458
+459
+16
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+137
+470
+17
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+15
+482
+483
+484
+317
+485
+486
+19
+487
+488
+489
+490
+2
+491
+492
+369
+493
+494
+495
+496
+497
+9
+498
+499
+32
+500
+501
+502
+213
+14
+503
+77
+504
+505
+345
+506
+507
+508
+12
+509
+20
+510
+43
+511
+512
+115
+513
+514
+515
+176
+516
+15
+517
+518
+2
+519
+3
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+19
+530
+531
+532
+155
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+345
+115
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+354
+555
+556
+357
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+541
+568
+57
+569
+14
+66
+570
+15
+109
+249
+571
+572
+15
+573
+574
+575
+576
+201
+577
+578
+579
+274
+580
+581
+582
+583
+584
+585
+196
+586
+201
+342
+587
+588
+39
+589
+590
+140
+591
+592
+593
+594
+43
+595
+596
+597
+598
+9
+286
+599
+600
+601
+228
+602
+603
+604
+200
+605
+196
+606
+607
+608
+509
+609
+610
+10
+17
+611
+248
+612
+613
+614
+197
+615
+616
+617
+618
+48
+619
+286
+620
+621
+622
+509
+623
+20
+48
+624
+9
+625
+626
+15
+627
+628
+43
+337
+629
+630
+631
+632
+43
+633
+14
+634
+635
+14
+636
+637
+2
+4
+43
+638
+639
+640
+19
+52
+641
+248
+642
+643
+644
+284
+3
+645
+2
+646
+647
+19
+648
+649
+145
+650
+43
+651
+652
+653
+654
+655
+656
+657
+658
+659
+660
+661
+196
+662
+358
+663
+345
+19
+554
+664
+528
+665
+666
+667
+331
+19
+668
+669
+670
+671
+672
+673
+155
+491
+674
+675
+676
+57
+2
+677
+678
+679
+680
+140
+398
+681
+554
+682
+14
+683
+493
+684
+597
+685
+213
+686
+687
+688
+213
+689
+4
+690
+665
+284
+691
+692
+398
+693
+694
+270
+695
+141
+19
+696
+303
+697
+19
+698
+699
+337
+248
+700
+22
+4
+701
+702
+96
+286
+703
+704
+705
+706
+237
+707
+708
+48
+57
+709
+710
+20
+48
+213
+711
+712
+713
+270
+714
+715
+284
+155
+716
+717
+718
+4
+345
+719
+720
+721
+34
+722
+20
+723
+724
+725
+726
+15
+727
+728
+729
+730
+22
+731
+732
+733
+734
+735
+736
+286
+737
+20
+738
+739
+740
+270
+19
+741
+742
+743
+744
+196
+745
+746
+747
+10
+748
+749
+665
+249
+750
+751
+155
+752
+753
+19
+754
+248
+249
+755
+756
+757
+758
+759
+760
+60
+761
+762
+763
+213
+764
+765
+766
+345
+767
+768
+707
+769
+284
+770
+771
+772
+323
+773
+774
+775
+776
+137
+777
+778
+176
+779
+780
+781
+782
+16
+783
+784
+785
+786
+43
+787
+788
+789
+232
+790
+791
+792
+793
+794
+379
+795
+2
+796
+57
+797
+798
+178
+799
+178
+188
+800
+801
+802
+803
+804
+805
+806
+141
+807
+808
+15
+809
+15
+209
+3
+810
+811
+812
+813
+814
+48
+665
+815
+286
+25
+586
+816
+34
+817
+818
+819
+820
+821
+822
+823
+824
+825
+826
+827
+828
+829
+830
+831
+832
+32
+833
+14
+834
+835
+15
+836
+837
+20
+838
+839
+840
+137
+841
+842
+843
+844
+845
+80
+846
+847
+848
+849
+323
+208
+155
+357
+850
+851
+852
+853
+3
+284
+854
+855
+32
+856
+201
+857
+399
+858
+859
+860
+861
+2
+48
+862
+863
+864
+745
+43
+865
+866
+845
+867
+868
+869
+870
+871
+19
+872
+873
+286
+874
+875
+876
+20
+877
+878
+879
+880
+201
+323
+881
+882
+883
+884
+885
+43
+886
+35
+887
+25
+888
+889
+890
+19
+891
+892
+893
+894
+895
+896
+48
+897
+898
+899
+900
+57
+901
+902
+903
+904
+566
+43
+905
+906
+907
+908
+32
+909
+99
+15
+910
+911
+721
+912
+913
+914
+915
+916
+917
+918
+554
+564
+919
+920
+317
+564
+921
+922
+923
+924
+10
+925
+665
+926
+10
+201
+927
+928
+929
+930
+931
+932
+933
+10
+934
+201
+20
+935
+936
+416
+937
+936
+938
+357
+19
+939
+940
+941
+942
+943
+249
+201
+554
+944
+945
+946
+77
+2
+947
+948
+949
+950
+951
+952
+9
+953
+954
+955
+956
+741
+957
+958
+959
+677
+960
+80
+43
+196
+961
+57
+962
+963
+354
+964
+658
+965
+966
+967
+968
+969
+970
+971
+286
+14
+2
+19
+972
+973
+974
+975
+976
+22
+977
+978
+979
+980
+981
+982
+983
+77
+984
+985
+986
+17
+2
+987
+155
+20
+34
+988
+989
+43
+990
+991
+9
+992
+993
+14
+994
+19
+115
+995
+57
+996
+3
+720
+997
+437
+2
+998
+999
+1000
+1001
+184
+1002
+1003
+1004
+15
+1005
+1006
+1007
+1008
+34
+1009
+1010
+1011
+1012
+1013
+1014
+1015
+1016
+67
+910
+1017
+1018
+1019
+19
+1020
+1021
+1022
+1023
+1024
+1025
+1026
+32
+19
+1027
+1028
+1029
+140
+1030
+1031
+1032
+1033
+1034
+1035
+1036
+1037
+1038
+1039
+1040
+165
+1041
+1042
+1043
+1044
+658
+1045
+4
+1046
+14
+1047
+1048
+1049
+1050
+9
+34
+1051
+1052
+1053
+713
+1054
+1055
+1056
+1057
+1058
+1059
+1060
+76
+1061
+1062
+19
+1063
+1064
+9
+1065
+736
+345
+1066
+15
+1067
+428
+1068
+1069
+286
+1070
+1071
+1072
+1073
+1074
+185
+1075
+1076
+57
+1077
+179
+1078
+1079
+703
+14
+1080
+1081
+491
+1082
+57
+1083
+1084
+1085
+1086
+1087
+1088
+788
+1089
+17
+1090
+1091
+1092
+1093
+1094
+692
+1095
+43
+1096
+180
+9
+19
+1097
+57
+14
+1098
+1099
+1100
+1101
+1102
+188
+1103
+1104
+89
+22
+1105
+286
+1106
+1107
+1108
+1109
+658
+1110
+1111
+1112
+1113
+1114
+1115
+57
+33
+1116
+373
+1117
+20
+1118
+32
+959
+179
+1119
+17
+114
+1120
+77
+1121
+1122
+1123
+1124
+1125
+1126
+1127
+1128
+1129
+1130
+713
+57
+60
+671
+109
+1131
+1132
+57
+1133
+1134
+14
+1135
+1136
+1137
+301
+1138
+228
+1139
+249
+1140
+1141
+10
+137
+1142
+927
+1143
+1144
+43
+57
+464
+1145
+1146
+1147
+1148
+1149
+286
+1150
+1151
+1152
+19
+379
+1153
+20
+9
+1154
+32
+200
+1155
+1156
+1157
+16
+222
+1158
+358
+1082
+32
+1159
+1082
+1160
+1161
+1162
+1163
+1164
+1165
+1166
+1167
+1168
+1169
+677
+915
+1170
+1171
+1172
+1173
+1174
+20
+1175
+1176
+15
+1177
+1178
+19
+1179
+1180
+323
+1181
+15
+1182
+1183
+1184
+1185
+1186
+1187
+1188
+1189
+1013
+1190
+237
+1191
+1192
+210
+1193
+4
+658
+1194
+1195
+32
+548
+201
+248
+19
+112
+1196
+1197
+1198
+1199
+323
+1200
+1112
+112
+910
+1201
+286
+707
+1202
+57
+1203
+1204
+317
+1205
+1206
+43
+1207
+15
+303
+1208
+15
+14
+1209
+1021
+1210
+1211
+1212
+43
+1213
+303
+1214
+19
+279
+9
+1215
+1216
+1217
+1218
+1219
+1220
+1221
+1011
+1222
+1105
+32
+1223
+1224
+1225
+1226
+1227
+1228
+1229
+1230
+43
+1231
+284
+1232
+10
+4
+1233
+43
+349
+19
+845
+43
+1234
+1235
+213
+1236
+248
+493
+141
+1237
+1238
+1239
+1240
+1241
+1242
+1243
+1244
+35
+284
+1245
+19
+14
+284
+1246
+1247
+1248
+57
+1249
+1224
+20
+32
+1250
+19
+57
+379
+274
+32
+1251
+337
+1252
+213
+1253
+1254
+1255
+43
+91
+323
+201
+1256
+1257
+1258
+1259
+196
+1260
+1261
+3
+19
+1262
+1263
+15
+20
+48
+1264
+99
+42
+303
+1265
+1266
+1267
+345
+1268
+770
+370
+1269
+1270
+10
+239
+1271
+1272
+15
+1273
+1274
+1275
+1276
+1277
+141
+1278
+1279
+1280
+1281
+849
+1282
+278
+1283
+1284
+464
+373
+1285
+303
+1286
+345
+10
+15
+509
+1287
+1262
+1288
+862
+286
+1289
+1290
+1291
+1292
+809
+514
+1047
+583
+1293
+3
+337
+1294
+201
+484
+1295
+1296
+1297
+1298
+1299
+1300
+237
+1301
+209
+1302
+1303
+872
+1304
+1305
+1306
+4
+1307
+15
+393
+15
+15
+57
+1308
+1309
+1310
+19
+1311
+910
+1312
+1313
+1314
+1315
+322
+20
+1316
+1317
+1318
+1319
+1300
+2
+15
+1320
+10
+699
+1321
+1322
+1323
+1324
+337
+57
+1325
+1326
+1327
+417
+1328
+1329
+32
+1330
+1331
+1021
+286
+1332
+533
+284
+1333
+1334
+1335
+57
+184
+1336
+822
+398
+1337
+1338
+57
+57
+20
+1339
+1340
+1341
+14
+1342
+1300
+1343
+1344
+1345
+155
+15
+1346
+269
+248
+1347
+1348
+2
+1349
+1350
+1048
+1351
+1352
+222
+303
+1353
+1354
+1355
+705
+1356
+1357
+43
+1358
+1359
+1360
+134
+1186
+1361
+1362
+1047
+188
+1363
+164
+1364
+1365
+1366
+32
+1367
+1368
+1369
+2
+22
+1370
+1371
+1372
+358
+842
+1373
+849
+1374
+15
+2
+1375
+1376
+1377
+1378
+1379
+790
+123
+201
+1380
+1381
+1382
+1383
+1384
+1385
+9
+1386
+1387
+1388
+1389
+1390
+9
+155
+1391
+1392
+1393
+1394
+1395
+281
+286
+1396
+1397
+1398
+1399
+1400
+1401
+725
+721
+1402
+1403
+89
+1404
+32
+15
+1405
+1406
+1407
+1408
+1409
+1410
+9
+1411
+317
+46
+1412
+1413
+1414
+1415
+1416
+352
+188
+1417
+1418
+647
+188
+1419
+1420
+1421
+1422
+1423
+43
+1424
+1091
+1425
+1426
+1427
+89
+1428
+1429
+1430
+1431
+77
+43
+1432
+1433
+862
+1434
+1435
+9
+495
+1436
+48
+1437
+1438
+554
+1439
+1440
+32
+971
+1441
+1425
+1442
+1443
+802
+155
+1444
+1445
+1446
+711
+1447
+1448
+57
+1449
+1450
+872
+1451
+1452
+1453
+1454
+1455
+249
+15
+1456
+1457
+1458
+43
+1459
+9
+1460
+1461
+1462
+1463
+1464
+501
+1465
+14
+1466
+1467
+1468
+1469
+1470
+1471
+1472
+1473
+43
+1474
+1475
+1476
+345
+1477
+1478
+1479
+1480
+1481
+1482
+696
+1483
+1484
+1485
+1486
+1487
+32
+1488
+248
+1489
+1490
+1491
+1492
+849
+1493
+228
+1494
+1495
+48
+17
+1496
+19
+286
+1497
+1498
+1499
+1500
+1501
+1502
+111
+10
+1503
+1504
+1384
+1505
+1506
+1507
+1508
+284
+1509
+1510
+331
+1511
+1512
+1396
+213
+32
+1513
+1514
+1515
+248
+1516
+4
+1517
+337
+1518
+244
+1519
+20
+1520
+1300
+1521
+1522
+1523
+43
+1524
+1525
+1526
+1245
+32
+32
+1527
+1528
+43
+597
+1465
+1465
+1364
+1529
+1530
+1531
+1437
+554
+188
+1532
+43
+1533
+958
+1534
+317
+1535
+1536
+1537
+1538
+528
+1384
+1539
+1540
+1541
+1542
+22
+597
+1543
+14
+1544
+19
+19
+1245
+1545
+1546
+1547
+1548
+1444
+1082
+14
+1549
+19
+70
+10
+1550
+57
+178
+1551
+1552
+1553
+1554
+1555
+15
+1556
+1557
+1558
+188
+845
+1559
+1560
+1561
+1562
+1563
+1564
+398
+1565
+1566
+1567
+178
+1568
+25
+9
+1077
+1021
+43
+1569
+1570
+1571
+1572
+1573
+989
+1212
+245
+1574
+1575
+1576
+286
+1577
+1578
+828
+1579
+1580
+1574
+9
+1581
+648
+237
+179
+1582
+1425
+193
+1583
+1584
+1234
+1569
+57
+1585
+1586
+713
+1587
+1588
+1224
+20
+1589
+138
+845
+1590
+1591
+1592
+1593
+43
+1594
+658
+1595
+1011
+1596
+1597
+1598
+1599
+15
+1600
+1601
+1149
+1602
+1603
+1604
+1605
+1606
+1607
+1608
+1609
+57
+178
+1610
+1251
+43
+1042
+738
+1611
+9
+1612
+1613
+1614
+43
+1615
+1580
+1452
+1616
+1617
+286
+1618
+1619
+1620
+1621
+1622
+1623
+1624
+1625
+842
+349
+1626
+213
+966
+1627
+822
+1628
+1629
+1630
+1631
+201
+1632
+1633
+1634
+1635
+1636
+1637
+19
+1638
+57
+12
+2
+178
+1639
+16
+15
+1640
+57
+1641
+1642
+1643
+1644
+1645
+1646
+303
+1647
+1648
+936
+19
+1649
+1650
+1651
+317
+1652
+213
+349
+1653
+365
+1654
+1655
+436
+1376
+1656
+1657
+1658
+1659
+1660
+1661
+1662
+38
+34
+14
+1663
+1664
+248
+1665
+32
+1666
+19
+1667
+284
+1668
+1669
+1670
+1671
+48
+1672
+57
+286
+1673
+274
+1674
+1675
+20
+1596
+1676
+57
+1677
+1678
+1679
+1680
+1681
+703
+1682
+1683
+213
+1684
+1685
+1686
+442
+43
+1220
+373
+1687
+1688
+1689
+1690
+1691
+1692
+1217
+379
+597
+15
+1693
+43
+1694
+248
+1262
+446
+48
+15
+536
+586
+402
+1695
+1696
+1697
+337
+1698
+22
+1699
+115
+1700
+1701
+1702
+1703
+1704
+20
+491
+1705
+1107
+1706
+34
+1707
+1708
+1149
+1709
+15
+1710
+1711
+1712
+1713
+57
+15
+1714
+1715
+14
+284
+1454
+764
+1716
+2
+1717
+1718
+1719
+358
+1720
+1721
+1722
+1723
+1724
+1425
+1725
+1726
+19
+43
+1727
+14
+1728
+1524
+586
+528
+305
+703
+1729
+1730
+337
+1731
+1732
+795
+1733
+1734
+1735
+1736
+286
+1737
+1738
+179
+1739
+152
+1740
+1741
+1742
+20
+1743
+1744
+1745
+1746
+1425
+654
+1747
+648
+495
+1112
+1748
+1749
+10
+1750
+1751
+1752
+1753
+201
+1754
+430
+1755
+1756
+1757
+2
+790
+15
+1758
+48
+1759
+1760
+1761
+1762
+114
+872
+1763
+1764
+201
+416
+1765
+1317
+1766
+1767
+936
+1768
+1769
+1770
+1771
+1772
+1773
+1774
+1234
+1775
+981
+1776
+1777
+1778
+1779
+1780
+1781
+1782
+1783
+1310
+665
+1784
+1785
+15
+1786
+1787
+345
+358
+1788
+29
+1789
+317
+43
+15
+9
+1790
+491
+1791
+415
+1792
+316
+9
+566
+1793
+43
+188
+1794
+1243
+1743
+1795
+155
+1796
+554
+1797
+208
+1798
+514
+1799
+32
+1800
+1801
+1802
+741
+1803
+1804
+1805
+201
+1806
+1807
+1808
+1809
+1300
+1810
+1100
+1811
+442
+1812
+1813
+276
+286
+32
+19
+1425
+1814
+354
+201
+1815
+237
+1816
+1817
+43
+1818
+19
+323
+34
+1819
+1820
+1821
+1822
+1823
+1824
+1825
+36
+1826
+1827
+1828
+1829
+1830
+1823
+1831
+1832
+1833
+1834
+201
+1835
+1836
+142
+1837
+1838
+1839
+1840
+1841
+411
+411
+1842
+1843
+1844
+1845
+369
+1300
+1846
+1847
+357
+1848
+586
+1849
+1850
+1851
+1852
+1853
+1854
+1855
+1856
+1857
+1858
+1859
+15
+1860
+1861
+1862
+1863
+1864
+284
+16
+1865
+1866
+1867
+1868
+1869
+1465
+1870
+1871
+1872
+15
+1873
+1874
+1875
+1876
+1877
+1878
+1879
+1880
+822
+1881
+14
+286
+14
+9
+1882
+1883
+1884
+1885
+14
+1886
+77
+3
+1887
+1888
+286
+14
+1889
+1890
+1100
+1891
+14
+1892
+1893
+1894
+15
+1895
+1896
+554
+43
+1897
+1010
+48
+1898
+708
+1899
+1208
+43
+1900
+1169
+1100
+1901
+1902
+1903
+299
+53
+66
+15
+1904
+1905
+1906
+1907
+1908
+16
+1909
+10
+1910
+671
+1369
+1465
+1911
+1912
+1913
+1655
+1914
+1915
+1916
+104
+1083
+1917
+213
+4
+1918
+1287
+1919
+213
+1920
+39
+1921
+1922
+1923
+43
+201
+1924
+1925
+1926
+43
+43
+1927
+1928
+112
+1929
+1930
+358
+1931
+248
+1932
+1933
+1934
+354
+694
+1907
+1935
+9
+213
+1936
+1937
+1938
+1939
+1940
+20
+178
+1941
+32
+20
+1942
+43
+1943
+1944
+35
+43
+1945
+286
+1946
+276
+1947
+1948
+1949
+1950
+19
+1951
+284
+1952
+14
+337
+1524
+1953
+713
+1513
+1954
+248
+284
+1149
+1955
+1956
+201
+1957
+1958
+1959
+43
+53
+1960
+1961
+1962
+1963
+1091
+1964
+303
+1965
+1966
+1863
+2
+1967
+1968
+1969
+354
+1970
+1971
+99
+1021
+1972
+665
+284
+1973
+1386
+286
+337
+1974
+1975
+1976
+1977
+1978
+1979
+269
+9
+1980
+1981
+337
+32
+1982
+1983
+1984
+713
+1985
+1986
+99
+176
+19
+910
+597
+303
+303
+1987
+1988
+1989
+1990
+32
+1991
+1992
+303
+213
+201
+1993
+237
+1994
+1995
+492
+1996
+155
+761
+1997
+1998
+1999
+2000
+2001
+2002
+2003
+2004
+2005
+2006
+2007
+2008
+2009
+1566
+1224
+1234
+99
+2010
+22
+2011
+936
+2012
+2013
+2014
+2015
+2016
+2017
+590
+2018
+2019
+2020
+15
+43
+2021
+415
+2022
+576
+10
+15
+1543
+48
+2023
+2024
+1684
+2025
+2026
+2027
+2028
+2029
+284
+2030
+248
+2031
+2032
+2033
+2034
+2035
+43
+2036
+2037
+2038
+2039
+2040
+57
+2041
+2042
+2043
+2044
+713
+188
+2045
+694
+586
+1221
+286
+2046
+2047
+2048
+1502
+2049
+554
+2050
+32
+2051
+249
+916
+2052
+2053
+2054
+38
+43
+2055
+2056
+2057
+910
+2058
+2059
+491
+2060
+2061
+170
+2062
+2063
+22
+2064
+2065
+270
+2066
+2067
+2040
+201
+2068
+32
+1542
+2069
+554
+2070
+19
+2071
+2072
+2073
+2074
+2075
+2076
+845
+2077
+201
+2078
+2079
+15
+2080
+77
+12
+2081
+2082
+2083
+57
+694
+2084
+345
+89
+597
+1047
+2085
+867
+2086
+2087
+2088
+1386
+2089
+14
+2090
+2091
+2092
+201
+2093
+373
+10
+764
+2094
+2095
+2096
+2097
+1584
+46
+2098
+9
+2099
+2100
+286
+89
+2101
+2102
+2103
+2104
+2105
+2106
+2107
+2108
+245
+2109
+179
+597
+2110
+1131
+2111
+25
+2112
+665
+2113
+201
+201
+2114
+2115
+2116
+197
+2117
+2118
+2119
+2120
+80
+2121
+176
+2122
+509
+1502
+2123
+2124
+179
+1502
+1047
+2125
+1698
+2126
+2127
+2128
+43
+2129
+2130
+2131
+2132
+2133
+1585
+2134
+2135
+573
+2136
+2137
+2138
+2139
+536
+2140
+2141
+2142
+647
+222
+2143
+2144
+2145
+2146
+2147
+89
+2148
+176
+2149
+2150
+2151
+22
+2152
+2153
+15
+2154
+286
+76
+2155
+2156
+77
+2157
+1522
+2158
+283
+36
+48
+1415
+178
+19
+1533
+1655
+2159
+2160
+43
+2161
+99
+2162
+2163
+2164
+2165
+1169
+2166
+3
+2167
+25
+2168
+138
+2169
+2170
+43
+1514
+2171
+2172
+188
+2173
+2174
+231
+1234
+2175
+21
+155
+2176
+2177
+2178
+2179
+2180
+2181
+2182
+2183
+2184
+2185
+2186
+2187
+2188
+2189
+2190
+2191
+10
+2192
+43
+2193
+2194
+179
+647
+77
+2009
+99
+2195
+2196
+2197
+19
+2198
+2199
+989
+2200
+238
+2201
+286
+2202
+1019
+2203
+22
+2204
+2205
+2206
+209
+188
+2207
+20
+2208
+2209
+155
+2210
+35
+2211
+2212
+15
+48
+2213
+155
+519
+2214
+2215
+3
+2216
+2217
+14
+1010
+2218
+345
+179
+2219
+2220
+188
+2221
+2222
+1091
+57
+2223
+2224
+2225
+2226
+2227
+2228
+2229
+2230
+2231
+201
+2232
+2233
+286
+2234
+2235
+237
+2236
+155
+292
+2237
+10
+791
+2238
+43
+20
+2239
+2240
+2241
+2242
+2243
+2244
+15
+2245
+196
+201
+379
+77
+2246
+2247
+1169
+16
+2248
+2249
+910
+2250
+2251
+9
+2252
+2253
+2254
+48
+2255
+2256
+1100
+2257
+2258
+2259
+2260
+2261
+2262
+2263
+2264
+2185
+2260
+2265
+2266
+57
+2267
+2268
+2269
+491
+89
+2270
+430
+541
+2271
+222
+616
+2272
+2273
+2274
+2275
+713
+2276
+700
+2277
+2278
+48
+2279
+77
+2280
+2281
+2282
+2283
+2284
+19
+43
+201
+15
+2285
+2286
+2287
+2288
+10
+2289
+616
+2290
+586
+2291
+398
+2292
+2293
+2294
+2295
+48
+2296
+411
+2297
+25
+349
+2298
+2299
+1829
+2300
+14
+15
+2301
+10
+2302
+1245
+2303
+2304
+19
+2305
+29
+2306
+598
+2307
+2308
+2309
+1765
+4
+815
+9
+2310
+345
+228
+741
+2311
+2
+2312
+2313
+19
+32
+2314
+2315
+2316
+1529
+590
+1116
+2317
+2318
+2319
+2320
+2321
+2322
+2
+2323
+2324
+2325
+2326
+2327
+2328
+179
+22
+2329
+2330
+2331
+2332
+2333
+2334
+201
+57
+2335
+1775
+2336
+2337
+188
+25
+2338
+14
+2339
+2340
+2341
+2342
+2343
+2344
+2345
+2346
+2347
+2348
+2349
+2042
+57
+2350
+2351
+2352
+2353
+2354
+2355
+35
+176
+2356
+2357
+155
+2358
+2359
+2360
+369
+20
+2361
+9
+1710
+1203
+369
+34
+2362
+57
+34
+2363
+2364
+2365
+536
+2366
+2367
+694
+2368
+2369
+43
+2370
+910
+2371
+141
+2372
+2373
+43
+2374
+2375
+25
+2376
+2377
+2378
+286
+2379
+2380
+19
+286
+2381
+2382
+2383
+20
+2384
+2385
+2386
+2387
+2388
+57
+2197
+3
+2389
+790
+165
+2390
+2391
+15
+1458
+2341
+741
+201
+710
+1038
+43
+2392
+2393
+2394
+188
+484
+2395
+1012
+2396
+2397
+4
+2398
+2399
+2400
+155
+2401
+2402
+283
+3
+2403
+2404
+2405
+2406
+2407
+2408
+209
+238
+2409
+179
+2410
+2411
+2412
+43
+11
+2413
+2414
+2415
+2416
+2417
+2418
+1082
+9
+2419
+2
+2420
+2421
+2422
+2423
+2424
+2425
+2426
+2427
+1364
+2428
+2429
+14
+2430
+43
+176
+201
+2431
+354
+9
+1049
+35
+2432
+2433
+1680
+57
+2434
+104
+2435
+2
+1765
+2135
+411
+397
+2436
+2437
+2438
+2439
+663
+2440
+1454
+43
+2441
+989
+1508
+32
+2442
+2443
+2281
+283
+564
+2444
+436
+155
+2445
+2446
+283
+188
+2447
+15
+2448
+2449
+1765
+2450
+491
+2451
+2452
+2453
+2454
+2455
+2456
+1710
+15
+1809
+43
+2457
+2458
+20
+2459
+2460
+2461
+14
+2462
+2410
+1385
+2463
+2464
+2465
+1790
+1436
+2466
+2467
+2468
+188
+35
+2140
+2469
+2399
+2470
+14
+2471
+2472
+19
+2473
+2474
+741
+1415
+9
+2475
+2476
+16
+2477
+2478
+34
+43
+2479
+2480
+14
+2481
+57
+10
+14
+2482
+554
+2483
+30
+2484
+416
+828
+1425
+2485
+155
+2486
+2487
+672
+2488
+19
+2489
+1124
+665
+2490
+19
+57
+2491
+2410
+2492
+707
+2493
+60
+249
+495
+286
+738
+2494
+16
+2495
+2496
+2497
+57
+2498
+1683
+2499
+815
+2500
+89
+188
+2501
+1867
+2502
+915
+237
+2503
+597
+2504
+2505
+19
+2506
+2507
+2508
+2509
+2510
+2511
+2512
+2513
+60
+2514
+2515
+19
+10
+2260
+2516
+2517
+2518
+2519
+2520
+2521
+99
+35
+2522
+788
+2523
+2524
+2525
+2526
+2527
+2528
+19
+1212
+2529
+2530
+2531
+2532
+201
+1425
+2533
+2534
+2535
+2536
+2537
+10
+272
+2538
+2539
+2540
+66
+2541
+10
+2122
+2542
+323
+2543
+2544
+48
+2545
+1248
+20
+2546
+2547
+1994
+2548
+2549
+2550
+671
+2551
+2552
+48
+1112
+222
+1175
+48
+2553
+2554
+2555
+1384
+43
+2556
+245
+2557
+2558
+2559
+1013
+2560
+201
+2561
+2562
+15
+15
+2563
+2564
+2565
+2566
+2567
+1901
+2568
+1286
+397
+2569
+2570
+2571
+155
+2572
+2287
+259
+179
+2573
+2574
+2575
+2576
+342
+2577
+2578
+286
+2579
+20
+34
+1559
+32
+2580
+989
+2581
+694
+1134
+2582
+2583
+2584
+2585
+484
+297
+2430
+2586
+2587
+105
+373
+2588
+2589
+3
+15
+2590
+2591
+2592
+2593
+2594
+705
+2595
+2596
+57
+2015
+2597
+2598
+2599
+188
+228
+2600
+2601
+1300
+2602
+2603
+2604
+2605
+2606
+1085
+12
+677
+2607
+1578
+2608
+2609
+2610
+1578
+57
+2611
+2612
+2613
+379
+1502
+2614
+2615
+1013
+493
+2616
+491
+671
+2617
+9
+15
+2618
+2
+2619
+2620
+15
+2
+2621
+2622
+457
+2623
+2624
+43
+14
+2625
+696
+2308
+2626
+2627
+2628
+2629
+137
+1870
+2630
+554
+237
+2631
+2632
+2633
+2634
+2635
+2636
+2637
+2638
+2639
+2640
+1291
+1855
+201
+286
+2641
+38
+2642
+2643
+2644
+57
+2645
+2547
+2646
+2318
+222
+345
+19
+104
+2647
+2648
+369
+2649
+342
+2650
+358
+43
+2651
+2652
+301
+677
+2653
+1047
+2654
+57
+845
+2655
+1107
+2656
+2657
+859
+2658
+2659
+123
+2660
+2661
+2662
+14
+1913
+32
+668
+2430
+2663
+2664
+274
+354
+2665
+1992
+2666
+2667
+2668
+2669
+2670
+180
+2671
+1822
+19
+2672
+2673
+22
+402
+2674
+32
+2675
+201
+2676
+2677
+2678
+2655
+2679
+2680
+138
+2681
+2682
+2121
+9
+2683
+286
+397
+2684
+2685
+2686
+770
+34
+2687
+2688
+1870
+2689
+2690
+2686
+554
+43
+286
+19
+2691
+2692
+2693
+1310
+2694
+2695
+2696
+1051
+2697
+2698
+19
+57
+2699
+791
+2700
+2701
+2702
+2703
+188
+2058
+2704
+317
+2705
+2706
+2707
+193
+484
+2708
+2709
+16
+17
+2710
+2711
+2712
+2713
+2714
+2715
+2716
+2717
+2718
+1437
+2719
+2720
+15
+2721
+2722
+2723
+2724
+2725
+509
+1570
+2726
+2727
+2728
+138
+2729
+16
+1716
+2730
+1513
+1287
+2731
+2732
+2733
+193
+2040
+2734
+2735
+2736
+2737
+910
+2738
+43
+2739
+34
+2740
+14
+2741
+2742
+20
+554
+2743
+2744
+597
+707
+2745
+2746
+721
+2747
+333
+2748
+2749
+2750
+2751
+15
+2752
+2753
+57
+2754
+2755
+2756
+20
+2757
+2758
+7
+2759
+2760
+2761
+2762
+2763
+286
+10
+2764
+3
+2765
+2766
+20
+179
+10
+2767
+3
+15
+2768
+2769
+1013
+2770
+2771
+1710
+2772
+15
+2773
+514
+15
+708
+2774
+19
+1172
+2775
+2776
+286
+19
+32
+2777
+415
+2778
+2779
+15
+1013
+1679
+2780
+983
+590
+379
+2781
+1042
+57
+1529
+2782
+188
+32
+200
+1738
+2783
+2784
+2785
+2786
+2787
+2788
+2789
+188
+2790
+417
+19
+2791
+20
+2792
+1606
+2793
+2794
+1711
+2795
+2796
+1169
+2797
+2798
+2799
+2800
+2801
+2802
+20
+10
+2803
+2804
+568
+2805
+2806
+2314
+1091
+2807
+2808
+2809
+915
+845
+32
+237
+2810
+2811
+80
+590
+2812
+2813
+2259
+2814
+2815
+201
+2816
+2817
+15
+586
+188
+2818
+2819
+43
+197
+2820
+66
+828
+1465
+2821
+2822
+2823
+357
+245
+2
+2824
+43
+2825
+2826
+478
+2827
+2828
+34
+1018
+10
+648
+2829
+2830
+2831
+2832
+39
+358
+43
+2833
+2550
+196
+2834
+4
+57
+2835
+2836
+2837
+2838
+2406
+2728
+2839
+2840
+2841
+22
+20
+2842
+2843
+2844
+2845
+2846
+2847
+1970
+2848
+2849
+228
+67
+1612
+2850
+2851
+2852
+98
+2853
+2854
+2414
+2855
+43
+2856
+2857
+2858
+2859
+2860
+2861
+463
+134
+2862
+2694
+201
+1165
+2863
+2864
+2865
+14
+2866
+142
+15
+2
+2867
+2868
+2476
+2869
+1606
+43
+2870
+2871
+2872
+872
+2873
+10
+2874
+583
+14
+19
+2875
+616
+2876
+2877
+15
+15
+2878
+2879
+25
+2880
+2881
+43
+2882
+2883
+48
+2884
+1001
+2885
+9
+9
+2886
+2887
+43
+2888
+2889
+57
+873
+2890
+2891
+2431
+26
+57
+533
+2892
+25
+2893
+533
+2894
+910
+2895
+19
+48
+2896
+2897
+34
+2898
+2526
+286
+2899
+2900
+2762
+19
+533
+2901
+554
+2902
+2903
+2904
+358
+2905
+2906
+2907
+2908
+2909
+2910
+249
+2911
+2912
+1924
+2913
+2092
+2914
+99
+2915
+665
+1066
+2253
+43
+2916
+57
+2917
+196
+2918
+2919
+2920
+2921
+2922
+123
+2923
+16
+237
+75
+284
+2924
+15
+2925
+2926
+237
+33
+2927
+2928
+20
+2929
+2930
+2931
+2932
+299
+721
+440
+1711
+213
+15
+20
+2933
+2934
+2935
+2936
+2937
+213
+303
+9
+2551
+2938
+303
+2939
+2940
+845
+286
+57
+89
+2941
+2942
+2943
+2944
+2945
+2946
+554
+2947
+284
+373
+2948
+2949
+2950
+533
+2951
+2260
+2952
+531
+2953
+2954
+575
+201
+2955
+1116
+213
+2956
+2957
+48
+286
+2958
+20
+2959
+269
+15
+2960
+1710
+1051
+2961
+19
+43
+2962
+43
+2963
+2964
+322
+140
+2965
+2966
+2967
+2968
+2
+2969
+491
+1384
+2970
+2971
+155
+2972
+15
+1425
+15
+2577
+2973
+2974
+14
+2975
+2976
+76
+658
+2977
+2978
+2979
+2980
+509
+2981
+2439
+337
+2982
+25
+57
+2983
+2984
+2985
+2986
+48
+15
+2987
+2988
+170
+3
+19
+2989
+2990
+349
+19
+22
+2525
+9
+43
+317
+788
+665
+32
+2991
+2992
+2993
+2994
+2995
+2996
+484
+2997
+2998
+2999
+3000
+3001
+3002
+67
+3003
+3
+43
+1013
+3004
+15
+248
+3005
+3006
+125
+337
+57
+3007
+3008
+3009
+2561
+3010
+3011
+96
+3012
+3013
+43
+514
+3014
+3015
+3016
+713
+3017
+3018
+3019
+936
+57
+78
+3020
+14
+3021
+1287
+3022
+137
+2764
+3023
+3024
+3025
+1605
+3026
+25
+3027
+15
+554
+43
+3028
+3029
+541
+1224
+3030
+22
+3031
+9
+3032
+663
+3033
+1051
+3034
+1612
+3035
+155
+399
+3036
+1861
+3037
+3038
+3039
+3040
+20
+43
+3041
+32
+3042
+14
+3043
+99
+15
+484
+3044
+3045
+165
+3046
+3047
+3048
+3049
+3050
+237
+3051
+3052
+3053
+3054
+3055
+3056
+3057
+3058
+3059
+3060
+2865
+3061
+57
+3062
+3063
+53
+3064
+399
+3065
+3066
+845
+417
+3067
+3068
+3069
+425
+3070
+3071
+491
+3072
+3073
+2260
+3074
+3075
+3076
+32
+19
+436
+22
+3077
+3078
+14
+3079
+3080
+3081
+3082
+3083
+3084
+57
+3085
+3086
+3087
+3088
+3089
+910
+3090
+3091
+411
+3092
+1245
+3093
+1470
+342
+1604
+3094
+3095
+1612
+3096
+60
+3097
+19
+3098
+3099
+32
+3100
+19
+3101
+3102
+3103
+32
+1172
+3104
+2
+3105
+3106
+270
+2537
+4
+3107
+3108
+20
+3109
+3110
+24
+57
+3111
+1808
+3112
+337
+3113
+480
+32
+3114
+3115
+3116
+3117
+3118
+554
+3119
+3120
+3121
+3122
+3123
+2926
+19
+3003
+19
+3124
+3125
+3126
+3127
+1437
+694
+3128
+3129
+3130
+3131
+2061
+398
+43
+3132
+3133
+3134
+741
+741
+3135
+3136
+3137
+248
+2471
+1513
+3138
+3139
+9
+3140
+3141
+3142
+3143
+3144
+3145
+2402
+2259
+2591
+3146
+3147
+3148
+1792
+3149
+3150
+3151
+3152
+3153
+3154
+3155
+3156
+3157
+3158
+3159
+286
+2769
+3160
+114
+3161
+3162
+3163
+32
+3164
+286
+16
+104
+711
+3165
+1232
+3166
+14
+745
+3167
+777
+3168
+43
+3169
+1668
+32
+125
+165
+3170
+3171
+3172
+3173
+10
+213
+3174
+43
+201
+3175
+3176
+179
+1047
+284
+3177
+3178
+3179
+22
+3180
+3181
+15
+213
+57
+3182
+16
+345
+3183
+3184
+2
+3185
+3186
+519
+66
+197
+3187
+3188
+3189
+104
+3190
+3191
+86
+3192
+3193
+2672
+286
+3194
+3195
+2835
+57
+3196
+337
+3197
+648
+3198
+10
+3199
+3200
+15
+337
+303
+228
+180
+3201
+32
+3202
+3203
+345
+3204
+3205
+1889
+915
+3206
+213
+337
+1401
+3207
+3208
+32
+3209
+3210
+3211
+248
+286
+2410
+1010
+3212
+3213
+3214
+3215
+3216
+32
+3217
+337
+3218
+3219
+3220
+3221
+3222
+337
+337
+2616
+849
+3223
+57
+3224
+317
+15
+293
+3225
+3226
+3227
+248
+3228
+3229
+3230
+915
+1091
+3231
+3232
+9
+1364
+3233
+43
+3234
+3235
+3236
+3237
+38
+1352
+3238
+3239
+3240
+3241
+3242
+3243
+3244
+43
+770
+22
+3245
+3246
+303
+303
+3247
+3248
+3249
+3250
+2728
+3251
+9
+17
+32
+2314
+3252
+3253
+3254
+3255
+3256
+2260
+19
+43
+349
+178
+1465
+337
+138
+3257
+3258
+12
+1364
+1224
+1604
+286
+188
+15
+478
+15
+379
+15
+20
+3259
+15
+3260
+3261
+3262
+3263
+491
+165
+1021
+3264
+3265
+3266
+3267
+3268
+188
+3269
+57
+3270
+3271
+3272
+3273
+3274
+297
+20
+3275
+2
+3276
+3277
+3278
+377
+15
+2129
+3279
+3280
+3281
+4
+270
+3282
+3283
+3284
+32
+1637
+1710
+3285
+2978
+3286
+89
+3287
+3288
+3287
+3289
+3290
+3291
+648
+3292
+3293
+3294
+20
+1961
+48
+3295
+188
+3296
+3297
+3298
+3299
+22
+201
+3300
+3301
+764
+3302
+3303
+3304
+3305
+3306
+2316
+1513
+540
+237
+3307
+583
+3308
+196
+15
+3309
+3310
+89
+89
+89
+104
+2035
+3311
+3312
+3313
+3314
+3315
+3178
+209
+3316
+272
+3317
+509
+3318
+3319
+3320
+764
+3321
+286
+43
+3322
+20
+3323
+15
+3324
+3325
+3326
+3327
+2546
+201
+358
+155
+3328
+554
+3329
+3330
+3331
+43
+3332
+3333
+1655
+1181
+3334
+1615
+3335
+155
+2129
+3336
+3337
+3338
+3339
+671
+3340
+1172
+3341
+142
+48
+3342
+3343
+3344
+3317
+2764
+3345
+3346
+3347
+910
+29
+3348
+3349
+3350
+3351
+3352
+3353
+3354
+3287
+99
+3355
+3356
+3357
+495
+861
+3358
+3359
+77
+3360
+15
+3361
+15
+3362
+2325
+3363
+3364
+379
+10
+3365
+354
+3366
+3367
+3368
+286
+32
+3369
+9
+3370
+1364
+3371
+665
+3372
+286
+142
+14
+3373
+3374
+3375
+99
+3376
+1547
+3377
+1529
+3378
+687
+491
+3379
+3380
+3381
+665
+373
+3382
+249
+3383
+3384
+19
+3385
+3386
+3387
+3388
+3389
+1502
+3390
+3391
+3392
+3393
+931
+22
+3394
+3395
+3396
+286
+2260
+3397
+373
+43
+3398
+3399
+3400
+3401
+15
+22
+1234
+3402
+3403
+943
+2896
+3404
+3405
+3406
+32
+354
+1790
+3407
+3408
+3054
+457
+3409
+3410
+345
+3050
+53
+738
+15
+3411
+3412
+3413
+3414
+2122
+345
+3415
+3416
+25
+3417
+213
+43
+3418
+3419
+3420
+3421
+14
+936
+3422
+3423
+3424
+3425
+3426
+38
+3427
+1508
+3428
+25
+713
+15
+3429
+57
+3430
+20
+3431
+3432
+3433
+14
+3434
+3435
+43
+3436
+3437
+745
+916
+700
+3438
+3439
+3440
+3441
+3442
+3443
+3444
+3445
+2804
+3446
+3447
+3448
+20
+815
+10
+19
+286
+3449
+3450
+3451
+3452
+213
+3453
+764
+57
+3454
+3455
+3456
+284
+3457
+57
+3458
+3459
+386
+248
+3460
+3461
+3462
+10
+3463
+379
+3464
+519
+3465
+3466
+22
+3467
+3468
+3469
+3470
+43
+3471
+3472
+3473
+3310
+12
+3474
+155
+3475
+694
+354
+2015
+3476
+14
+3477
+3478
+3247
+3479
+596
+303
+337
+683
+3480
+3481
+3482
+3483
+3484
+528
+48
+671
+3485
+554
+286
+610
+16
+178
+3486
+1514
+3487
+3488
+3489
+3490
+3491
+1066
+249
+3492
+3493
+3494
+9
+19
+43
+3495
+9
+665
+554
+3496
+3497
+32
+1502
+3498
+43
+3499
+248
+915
+3500
+3501
+3502
+248
+354
+3503
+1423
+248
+3504
+3505
+16
+3506
+3507
+19
+791
+3508
+185
+3509
+3510
+19
+337
+1976
+248
+2195
+1091
+303
+3511
+597
+3512
+2768
+1900
+3513
+3514
+3515
+3516
+3517
+109
+2601
+1585
+3518
+3519
+3520
+20
+20
+44
+66
+3521
+3522
+3523
+3524
+3525
+3526
+3527
+3528
+15
+2260
+3529
+3530
+3531
+1208
+1559
+3532
+3533
+791
+573
+16
+3534
+19
+3535
+3536
+19
+1907
+43
+209
+2019
+2489
+3537
+586
+3538
+15
+3539
+3540
+3541
+3542
+34
+3543
+3544
+15
+3545
+3546
+3547
+43
+3548
+554
+3549
+3550
+3551
+3552
+3553
+3554
+237
+109
+15
+791
+32
+43
+345
+3555
+1630
+248
+3556
+3557
+3558
+3559
+3560
+1716
+57
+1847
+484
+1927
+22
+2762
+3561
+415
+48
+15
+3562
+188
+48
+196
+3317
+3563
+3564
+3565
+3566
+32
+3567
+32
+694
+3568
+861
+3569
+554
+2029
+201
+1508
+3570
+188
+3571
+201
+1091
+3572
+180
+3573
+3287
+286
+3574
+736
+1149
+3575
+3576
+3577
+29
+172
+3578
+3579
+43
+3580
+3581
+3582
+3583
+20
+3584
+3585
+373
+43
+3586
+32
+1013
+3587
+32
+3588
+3589
+3590
+3591
+3592
+3593
+14
+1436
+3594
+3595
+210
+3330
+29
+3596
+9
+398
+430
+3597
+1529
+3598
+15
+3599
+3600
+2896
+3601
+19
+3602
+3603
+3604
+3605
+43
+57
+3606
+3607
+3608
+3609
+201
+3610
+3611
+3612
+1452
+3613
+3307
+3614
+3615
+3616
+57
+14
+1559
+1300
+3617
+178
+3618
+3619
+3620
+3621
+3622
+345
+188
+2260
+3623
+3316
+893
+3624
+595
+1524
+3625
+3626
+3627
+3628
+3629
+3630
+3631
+3632
+3633
+1655
+271
+3634
+3635
+3636
+3637
+3638
+48
+2
+15
+89
+491
+3353
+3639
+3640
+3641
+3642
+22
+3643
+1637
+3644
+279
+34
+2993
+3645
+560
+3646
+25
+3647
+1160
+15
+1019
+1531
+3648
+3649
+22
+3650
+3651
+3652
+3653
+3654
+3655
+3656
+19
+3657
+915
+3658
+323
+3659
+3660
+3661
+3662
+3663
+15
+43
+3664
+3665
+19
+20
+3666
+3667
+379
+3668
+3669
+237
+910
+3670
+3671
+3672
+3673
+3674
+3675
+3676
+3677
+3678
+3679
+3680
+3681
+32
+77
+3682
+57
+14
+3683
+3684
+3685
+3686
+2459
+3687
+3688
+15
+3689
+3690
+1817
+586
+3691
+3692
+1249
+3043
+185
+43
+3693
+57
+22
+3694
+99
+3695
+3696
+178
+15
+19
+3697
+3698
+595
+3699
+1149
+533
+3700
+3701
+3702
+188
+1688
+1508
+3703
+9
+57
+3704
+9
+77
+3705
+1961
+57
+3061
+3706
+1249
+317
+370
+3707
+4
+15
+43
+1015
+3708
+713
+43
+20
+3709
+43
+3710
+3711
+3712
+2314
+3713
+3714
+3715
+3716
+411
+112
+3717
+2289
+323
+3718
+3719
+3720
+3721
+345
+2721
+3722
+3723
+3724
+3725
+2764
+22
+3726
+15
+3727
+292
+3728
+3729
+32
+3730
+3731
+3732
+3733
+3734
+914
+3735
+3736
+2
+9
+3737
+3738
+2
+3739
+3740
+703
+528
+440
+1232
+3741
+1563
+3742
+484
+3743
+3744
+3745
+1559
+1364
+3746
+411
+20
+3747
+3748
+25
+3749
+3750
+566
+2728
+15
+3751
+15
+10
+357
+882
+3752
+178
+46
+3525
+3753
+2260
+3754
+1521
+3755
+20
+3756
+15
+2
+3
+19
+22
+112
+3757
+3758
+3759
+249
+2903
+2764
+3760
+3761
+3762
+694
+303
+3763
+155
+3764
+3765
+16
+3766
+3767
+3768
+3769
+3770
+3771
+15
+303
+3772
+15
+586
+57
+3773
+3003
+3774
+3775
+3776
+228
+3777
+1513
+4
+3778
+2
+3779
+3780
+337
+19
+284
+1889
+3781
+284
+248
+3782
+1021
+3783
+3784
+286
+9
+3785
+3786
+736
+2314
+3787
+464
+15
+3788
+20
+3789
+3790
+34
+43
+213
+337
+3791
+3792
+3793
+303
+3794
+3795
+1817
+3796
+358
+3797
+248
+188
+3798
+3799
+337
+3800
+19
+3801
+3802
+337
+20
+1354
+3803
+1817
+1765
+213
+1234
+3804
+1172
+3805
+1051
+337
+3806
+2410
+3807
+3808
+1013
+2009
+3809
+1682
+3810
+3811
+1468
+213
+43
+3812
+3813
+484
+3814
+10
+597
+3815
+3816
+3817
+337
+3818
+3819
+1833
+188
+3820
+809
+228
+415
+32
+2882
+3821
+1961
+791
+142
+2260
+597
+3822
+3
+3823
+2
+3824
+595
+3825
+14
+89
+3826
+3827
+751
+486
+3828
+3829
+3830
+2202
+3831
+3
+3832
+2035
+3833
+43
+915
+436
+3834
+317
+3835
+337
+1604
+155
+115
+379
+3836
+3837
+3838
+3839
+3840
+3841
+43
+3842
+2064
+3843
+3732
+3844
+3845
+15
+3846
+3847
+3848
+1889
+3849
+1291
+3850
+115
+3851
+3852
+155
+3853
+3854
+3855
+14
+48
+104
+3856
+3857
+3858
+3859
+152
+3860
+2042
+3861
+3862
+2439
+3863
+3864
+2465
+3865
+3866
+3867
+3868
+3869
+3870
+3871
+10
+3872
+1696
+42
+3873
+3546
+3874
+3875
+3876
+3790
+3877
+386
+3878
+286
+3879
+15
+3880
+3881
+3882
+3883
+57
+3884
+19
+495
+509
+3885
+20
+25
+155
+554
+3886
+9
+3887
+3888
+32
+1765
+15
+57
+3889
+3890
+20
+3891
+3476
+57
+20
+213
+1425
+3553
+179
+155
+3892
+271
+3893
+3894
+15
+3895
+3896
+15
+15
+3897
+46
+3898
+3899
+845
+3900
+1927
+22
+3901
+3902
+15
+15
+43
+1083
+3903
+3904
+76
+1655
+3905
+3484
+3906
+827
+3907
+3908
+1710
+3909
+3910
+3911
+3912
+1234
+3913
+3914
+3915
+57
+57
+3916
+1245
+3917
+736
+155
+1096
+3918
+179
+3919
+3920
+3921
+493
+3922
+3923
+1415
+3924
+3925
+3926
+2769
+43
+201
+3927
+48
+3928
+3929
+284
+3930
+1655
+3931
+3932
+3933
+3934
+3935
+3936
+3937
+19
+3938
+3939
+20
+1502
+345
+3940
+20
+3941
+272
+3942
+3943
+484
+283
+3944
+1051
+1115
+3945
+598
+3946
+3947
+3948
+123
+222
+3949
+3950
+3951
+3952
+3953
+3954
+3955
+3956
+12
+3957
+248
+19
+15
+665
+3958
+3959
+3960
+3961
+3962
+248
+2
+1128
+3963
+1864
+3964
+3965
+284
+3966
+3967
+1806
+39
+3968
+3969
+3970
+3971
+1559
+1401
+3972
+12
+43
+3973
+1047
+3974
+3975
+3976
+3654
+3977
+3978
+3979
+32
+3980
+3981
+213
+337
+720
+806
+213
+14
+3982
+284
+3983
+3984
+3985
+286
+284
+3986
+3987
+3988
+213
+3989
+1668
+3990
+3991
+3992
+248
+1234
+955
+15
+3993
+270
+352
+3994
+3995
+1889
+4
+3996
+1499
+3997
+19
+3998
+3999
+237
+4000
+4001
+25
+4002
+4003
+4004
+283
+248
+1217
+34
+4005
+137
+2581
+176
+4006
+19
+4007
+845
+89
+2463
+337
+1529
+4008
+4009
+373
+4010
+1386
+4011
+4012
+4013
+188
+4014
+303
+2500
+337
+349
+303
+586
+4015
+10
+4016
+379
+4017
+337
+4018
+882
+213
+519
+4019
+77
+32
+20
+1942
+386
+4020
+180
+12
+2140
+845
+4021
+4022
+3745
+4023
+4024
+4025
+2593
+180
+4026
+4027
+4028
+20
+1234
+1291
+4029
+155
+4030
+34
+303
+4031
+4032
+32
+4033
+14
+4034
+19
+4035
+70
+4036
+43
+137
+155
+9
+4037
+25
+272
+4038
+4039
+3351
+4040
+57
+4041
+4042
+4043
+4044
+4045
+4046
+2721
+4047
+4048
+9
+4049
+9
+2
+1817
+137
+286
+4050
+590
+4051
+2924
+3959
+4052
+99
+1961
+286
+4053
+57
+4054
+4055
+4056
+4057
+4058
+4059
+4060
+4061
+142
+43
+188
+1710
+4062
+15
+4063
+1018
+57
+38
+4064
+4065
+89
+4066
+861
+4067
+4068
+19
+4069
+4070
+4071
+53
+4072
+1800
+3317
+4073
+4074
+299
+4075
+4076
+2347
+4077
+248
+43
+4078
+1710
+1604
+721
+4079
+4080
+2012
+4081
+4082
+12
+4083
+4084
+4085
+4086
+32
+4087
+4088
+4089
+57
+4090
+188
+4091
+4092
+1637
+4093
+4094
+4095
+4096
+4097
+283
+4098
+519
+597
+3310
+9
+4099
+4100
+4101
+43
+4102
+4103
+22
+4104
+4105
+19
+4106
+4107
+4108
+1100
+4109
+915
+4110
+4111
+597
+2471
+4112
+43
+16
+4113
+60
+4114
+4115
+4116
+188
+1048
+20
+4117
+4118
+4119
+305
+4120
+4121
+4122
+4123
+1502
+16
+14
+716
+4124
+4125
+4126
+1655
+4127
+1292
+4128
+20
+4129
+671
+286
+1749
+2019
+12
+4130
+4131
+4132
+4133
+2157
+4134
+317
+4135
+4136
+4137
+415
+4138
+4139
+809
+317
+9
+25
+4140
+4141
+286
+4142
+915
+4143
+4144
+4145
+4146
+4147
+4148
+4149
+70
+4150
+4151
+4152
+43
+4153
+4154
+4155
+4156
+764
+1021
+411
+14
+4157
+286
+4158
+4159
+4160
+4161
+446
+4162
+4163
+4164
+15
+4165
+3003
+4166
+4167
+4168
+4169
+4170
+1698
+4171
+4172
+15
+4173
+19
+4174
+200
+4175
+4176
+4177
+44
+4178
+279
+4179
+15
+4180
+1655
+4181
+20
+2347
+4182
+4183
+942
+19
+4184
+4185
+4186
+4187
+4188
+4189
+4190
+57
+66
+4191
+1513
+317
+707
+4192
+4193
+815
+4194
+4
+1223
+4195
+19
+4196
+4197
+188
+4198
+112
+4199
+9
+4200
+22
+19
+43
+43
+1559
+4201
+286
+155
+4202
+4203
+9
+4204
+4205
+4206
+1710
+415
+208
+4207
+4208
+196
+1224
+4209
+3711
+141
+668
+4210
+4211
+4212
+4213
+1606
+4214
+4215
+43
+4216
+4217
+48
+3376
+1228
+4218
+77
+4219
+20
+4220
+4221
+4222
+354
+43
+4223
+178
+4224
+15
+20
+15
+4225
+15
+4226
+1900
+2043
+197
+4227
+4228
+4229
+20
+19
+4230
+369
+2061
+4231
+46
+4232
+561
+4233
+39
+188
+3790
+77
+4234
+286
+4235
+43
+14
+4236
+4237
+317
+4238
+4239
+4240
+597
+4241
+4242
+1011
+4243
+2762
+4244
+4245
+4246
+4247
+4248
+2330
+4249
+188
+213
+32
+379
+4250
+4251
+20
+284
+3055
+19
+4252
+20
+4253
+4254
+4255
+4256
+4257
+4258
+4259
+32
+3350
+4028
+4260
+4261
+145
+15
+4262
+4263
+1291
+4264
+337
+971
+32
+1961
+4265
+4266
+741
+4267
+1513
+4268
+238
+686
+4269
+4270
+2577
+213
+249
+1112
+4271
+694
+4272
+1889
+4273
+4274
+2043
+57
+4275
+4276
+4277
+4278
+4279
+4280
+3059
+66
+1015
+2039
+178
+337
+665
+237
+25
+2804
+4281
+303
+57
+60
+4282
+2476
+484
+4283
+25
+337
+4284
+237
+4285
+43
+1889
+3417
+4286
+4287
+179
+4288
+4289
+4290
+687
+19
+4291
+2855
+554
+4292
+4293
+20
+188
+1234
+4294
+20
+4295
+1220
+3406
+1364
+4139
+4296
+4297
+4298
+43
+201
+4299
+1955
+4300
+2982
+648
+4301
+188
+4302
+4
+170
+4303
+4304
+4305
+4306
+4307
+284
+35
+3055
+4308
+533
+4309
+4310
+1415
+4311
+286
+34
+4312
+379
+4313
+536
+1374
+1562
+303
+707
+4314
+554
+4315
+4316
+4317
+43
+4318
+15
+4319
+2195
+4320
+4321
+4322
+4323
+4324
+1244
+4325
+4326
+4327
+4328
+4329
+4330
+1508
+915
+4
+2764
+4331
+4332
+4333
+4334
+4335
+4336
+43
+736
+4337
+4338
+179
+317
+1149
+736
+4339
+4340
+4341
+4342
+4343
+416
+4344
+43
+19
+1673
+4345
+4346
+4347
+354
+4348
+4349
+4350
+4351
+2764
+4352
+180
+4353
+4354
+4355
+4
+286
+43
+286
+4356
+317
+4357
+4358
+4359
+3
+43
+15
+971
+20
+4360
+1018
+12
+4361
+4362
+14
+4363
+3553
+4364
+269
+554
+3055
+4346
+4365
+15
+57
+4366
+4180
+4367
+4368
+861
+176
+179
+114
+3
+4369
+4370
+188
+57
+4371
+4372
+4373
+4374
+4375
+2797
+2577
+4344
+4376
+1042
+1425
+201
+4377
+4378
+4379
+29
+4380
+4381
+19
+4382
+4383
+155
+1559
+586
+484
+4384
+4385
+4386
+4387
+1879
+4280
+4388
+4389
+15
+3543
+1384
+57
+4
+4390
+4391
+1559
+14
+174
+4392
+4393
+4394
+1870
+201
+4395
+4396
+4397
+4398
+554
+3300
+849
+4399
+4400
+4401
+19
+4402
+9
+4403
+2026
+586
+4404
+4405
+1533
+416
+4406
+4407
+4408
+4409
+4410
+4411
+9
+4
+4412
+4413
+270
+15
+4414
+2782
+4415
+4416
+4417
+39
+4418
+1234
+4419
+2164
+4420
+4421
+1481
+4422
+1710
+2040
+4423
+4424
+4425
+2060
+4426
+4427
+4428
+70
+4429
+2166
+4430
+4431
+2836
+4432
+4433
+4434
+4435
+1559
+4436
+33
+1851
+4437
+1605
+34
+15
+4438
+19
+1688
+4439
+1992
+249
+89
+4440
+57
+4441
+4442
+4443
+4444
+2836
+10
+14
+57
+4445
+176
+4446
+48
+57
+4447
+4448
+176
+4449
+4450
+915
+411
+4451
+4452
+59
+4453
+4454
+4455
+4456
+19
+4457
+3256
+4458
+4459
+4460
+43
+4461
+4462
+29
+2619
+4463
+2260
+1531
+57
+484
+4464
+35
+1426
+286
+4465
+43
+4466
+4467
+185
+2683
+4468
+586
+4469
+4470
+4471
+4472
+4473
+4474
+43
+2769
+4475
+43
+4476
+4477
+4478
+286
+4479
+915
+1605
+2
+4480
+20
+4481
+484
+872
+4482
+4483
+20
+141
+15
+3354
+15
+665
+990
+4484
+4485
+4486
+4487
+4488
+345
+43
+4489
+4490
+9
+4491
+1688
+573
+4492
+19
+57
+1120
+4493
+398
+4494
+4495
+4496
+4497
+4498
+4499
+2064
+4500
+4501
+4502
+142
+201
+345
+4503
+43
+4504
+1232
+4505
+4506
+3
+4507
+352
+2804
+349
+4508
+4509
+4510
+2728
+155
+15
+43
+4511
+4033
+4512
+4513
+4514
+4515
+586
+4516
+1716
+4517
+4518
+179
+1149
+48
+4519
+4520
+4521
+2113
+4522
+29
+4523
+165
+4524
+43
+4525
+4526
+4527
+4528
+4529
+43
+4530
+77
+9
+4531
+4532
+1244
+4533
+4534
+4535
+761
+4536
+4537
+140
+4538
+4539
+4540
+155
+4541
+4542
+4543
+4544
+9
+57
+4545
+155
+286
+4546
+4547
+1562
+4548
+4549
+4550
+2485
+4551
+3491
+250
+4552
+4553
+4554
+3003
+4555
+4556
+270
+4557
+282
+4558
+4559
+4560
+4561
+4562
+1768
+22
+4563
+15
+4564
+1834
+3335
+1262
+4565
+4566
+4567
+237
+4568
+4569
+4570
+4571
+4572
+57
+4573
+43
+4574
+345
+4575
+4576
+4577
+4578
+60
+2770
+4579
+4580
+4581
+301
+57
+15
+4582
+4583
+4584
+19
+15
+2347
+1604
+2954
+4585
+815
+4586
+1112
+4587
+4588
+4589
+4590
+14
+317
+53
+4591
+271
+4592
+4116
+4593
+4594
+4595
+17
+1021
+9
+4596
+48
+4597
+15
+4598
+19
+4599
+4600
+1605
+19
+342
+4601
+4602
+2476
+4603
+4317
+1824
+583
+201
+4604
+57
+3
+20
+4605
+4606
+4607
+2795
+402
+57
+916
+3984
+4608
+4609
+43
+4610
+915
+4611
+4612
+745
+57
+4613
+4614
+3061
+4615
+4616
+4617
+1234
+4618
+4619
+4620
+564
+4621
+4622
+4547
+4623
+32
+4624
+3626
+138
+936
+4625
+1710
+4626
+354
+4627
+4628
+379
+57
+4629
+1812
+4630
+4631
+4632
+43
+1689
+4633
+4634
+4635
+15
+4636
+4637
+4638
+4639
+4640
+9
+9
+155
+4641
+915
+4642
+4643
+59
+4644
+4645
+2770
+4646
+942
+2561
+4647
+4648
+32
+4649
+430
+4088
+531
+4650
+4651
+4652
+686
+57
+4653
+155
+4654
+9
+1524
+4655
+4656
+342
+237
+2029
+4657
+4658
+4659
+1880
+4660
+613
+4661
+57
+4662
+4663
+164
+43
+43
+4664
+4665
+694
+4587
+4666
+4667
+4668
+4669
+665
+484
+3958
+4670
+4671
+4672
+4673
+4674
+4675
+2136
+3287
+4676
+4677
+4678
+1668
+2489
+4679
+125
+4680
+4681
+4682
+4683
+57
+4684
+4685
+4686
+259
+665
+586
+4687
+4688
+464
+4689
+4690
+4691
+4692
+4693
+19
+4694
+4695
+4696
+32
+4697
+4698
+4699
+4700
+573
+4701
+249
+213
+1834
+2341
+4702
+45
+493
+665
+284
+32
+4703
+4704
+4705
+1444
+4706
+849
+677
+4707
+35
+153
+4708
+4709
+213
+4710
+4711
+4712
+4713
+4714
+68
+43
+4715
+4716
+4717
+586
+4718
+57
+22
+4719
+4720
+4721
+248
+915
+4722
+809
+15
+213
+4723
+4724
+259
+4725
+14
+1790
+4726
+4727
+4728
+2431
+4729
+2
+4730
+4731
+178
+4732
+4733
+4734
+2009
+19
+4735
+19
+4736
+14
+694
+4737
+1720
+4738
+2739
+4739
+284
+4740
+572
+4741
+317
+9
+4742
+251
+303
+4743
+4744
+4745
+4746
+57
+2619
+303
+4747
+4748
+1300
+19
+845
+4749
+43
+4750
+19
+19
+4751
+345
+4752
+4753
+4754
+201
+4755
+4756
+4757
+77
+286
+48
+4758
+238
+4759
+10
+4760
+3353
+4761
+4762
+4012
+4763
+19
+736
+861
+440
+4764
+1743
+4765
+4766
+1779
+4767
+4768
+43
+4769
+4770
+4771
+4413
+248
+4772
+4773
+764
+4774
+4775
+464
+4776
+2902
+4777
+1090
+222
+4778
+1047
+2591
+694
+32
+15
+845
+354
+4779
+1181
+43
+4780
+4781
+3842
+3
+4782
+286
+4783
+4784
+4785
+303
+2998
+4786
+4787
+4788
+4789
+4790
+4791
+4792
+4793
+4794
+4042
+4795
+4796
+616
+14
+4797
+1116
+4798
+4799
+1529
+4800
+790
+769
+32
+4801
+4802
+4803
+155
+4804
+57
+764
+3745
+4805
+536
+4806
+416
+4807
+4808
+4809
+4810
+3382
+4811
+20
+22
+77
+249
+4812
+2015
+43
+4813
+4814
+1377
+915
+4815
+4816
+57
+1889
+4817
+4818
+4819
+1559
+4820
+9
+4821
+354
+10
+4822
+4823
+357
+137
+4824
+4825
+4826
+4827
+4828
+180
+4829
+32
+4830
+14
+2459
+286
+19
+705
+345
+152
+14
+48
+15
+4831
+4832
+1112
+4833
+19
+19
+764
+648
+4834
+25
+4835
+736
+4836
+32
+491
+554
+4837
+4838
+22
+1543
+4839
+4840
+20
+4841
+4842
+286
+4843
+4844
+3946
+4845
+4846
+4847
+2274
+1234
+4848
+4849
+4850
+4790
+4851
+4852
+741
+4853
+2131
+201
+4854
+4855
+4856
+4857
+379
+4858
+4859
+2668
+4860
+9
+1612
+3601
+4861
+4174
+43
+4862
+4863
+4864
+4865
+464
+590
+791
+4866
+3300
+4867
+4868
+3278
+4869
+4870
+3354
+4871
+4872
+4873
+4874
+4875
+4876
+4877
+4878
+4716
+4879
+140
+101
+4880
+4881
+4882
+4050
+4883
+15
+155
+586
+4803
+4884
+19
+201
+19
+188
+4885
+4886
+1604
+4887
+4888
+4889
+2012
+595
+4890
+15
+4891
+943
+57
+4892
+10
+15
+4893
+4894
+4346
+4895
+4896
+43
+4897
+4898
+4899
+4900
+4901
+2125
+4902
+4903
+4904
+4905
+4906
+4907
+2
+279
+4908
+4909
+19
+665
+677
+176
+1425
+4910
+4911
+2316
+15
+4912
+4913
+4914
+1364
+4915
+4916
+1051
+3353
+349
+77
+286
+1169
+770
+4917
+4918
+20
+201
+4919
+1612
+48
+4920
+4921
+4922
+4923
+4924
+4925
+14
+4926
+22
+4927
+671
+597
+4264
+4928
+4929
+4930
+32
+692
+4931
+4932
+4933
+2009
+4934
+4935
+57
+4936
+4937
+4938
+4939
+1217
+4940
+4941
+14
+4942
+4943
+4944
+4945
+1212
+2113
+4946
+4947
+237
+4948
+915
+4949
+2349
+228
+286
+4950
+1295
+19
+436
+4
+4951
+43
+178
+4952
+22
+4953
+4954
+1124
+4955
+4956
+4957
+176
+1529
+89
+4958
+4959
+4
+4960
+104
+4961
+4624
+4962
+19
+4963
+4964
+4965
+3160
+4966
+4967
+1695
+15
+4968
+43
+4969
+4970
+2260
+3995
+4971
+178
+15
+4972
+1364
+4973
+4974
+1696
+665
+2
+4975
+4976
+4977
+4824
+248
+237
+2260
+19
+4978
+4979
+201
+4980
+1021
+4981
+1533
+4982
+4983
+4984
+4985
+4986
+4987
+4988
+4989
+647
+15
+4990
+4991
+2476
+337
+4992
+4993
+14
+4994
+4995
+4996
+4997
+4998
+4999
+155
+707
+213
+665
+248
+1060
+5000
+1710
+9
+5001
+337
+5002
+5003
+43
+5004
+5005
+2356
+5006
+5007
+5008
+5009
+22
+5010
+2537
+1710
+5011
+5012
+237
+5013
+337
+665
+19
+57
+284
+3743
+5014
+15
+9
+5015
+213
+4406
+5016
+303
+213
+5017
+5018
+5019
+3698
+5020
+3353
+5021
+5022
+5023
+5024
+2668
+5025
+2588
+5026
+5027
+5028
+5029
+22
+115
+15
+845
+5030
+5031
+2619
+19
+5032
+4344
+5033
+15
+188
+5034
+5035
+5036
+14
+43
+2356
+303
+5037
+5038
+9
+5039
+1465
+5040
+915
+1961
+32
+5041
+1531
+303
+5042
+5043
+5044
+43
+5045
+20
+5046
+2316
+32
+5047
+43
+16
+189
+915
+5048
+286
+4716
+342
+57
+57
+5049
+48
+5050
+5051
+5052
+15
+5053
+5054
+20
+5055
+305
+5056
+5057
+14
+4856
+5058
+32
+5059
+2040
+20
+109
+10
+15
+5060
+5061
+15
+178
+5062
+5063
+5064
+5065
+5066
+278
+707
+548
+57
+43
+269
+5067
+5068
+5069
+5070
+1236
+5071
+5072
+4859
+2009
+5073
+32
+1109
+436
+32
+10
+57
+5074
+5075
+1011
+5076
+5077
+2330
+5078
+5079
+5080
+5081
+3743
+3192
+32
+77
+448
+358
+5082
+5083
+5084
+57
+180
+286
+5085
+5086
+5087
+5088
+5089
+15
+5090
+5091
+178
+373
+5092
+358
+57
+57
+19
+317
+57
+201
+5093
+303
+5094
+3816
+738
+20
+5095
+3139
+222
+1109
+1013
+519
+5096
+5097
+5098
+5099
+5100
+5101
+5102
+5103
+5104
+22
+5105
+3544
+48
+25
+5106
+57
+5107
+258
+3408
+5108
+60
+554
+32
+5109
+5110
+1107
+19
+5111
+109
+43
+5112
+5113
+11
+14
+2594
+3480
+2446
+1612
+5114
+155
+276
+4
+57
+358
+3367
+5115
+265
+5116
+201
+5117
+43
+15
+984
+5118
+5119
+861
+2405
+927
+5120
+2694
+5121
+5122
+5123
+2314
+20
+2449
+5124
+3330
+5125
+20
+5126
+5080
+5127
+5128
+5129
+1228
+5130
+2135
+104
+20
+5131
+5132
+5133
+5134
+540
+2064
+4808
+5135
+910
+338
+5136
+5137
+5138
+2040
+5139
+5140
+43
+5141
+303
+416
+5142
+5143
+5144
+5145
+193
+5146
+25
+5147
+5148
+222
+43
+5149
+5150
+5151
+5152
+115
+5153
+5154
+5155
+831
+5156
+936
+5157
+4128
+5158
+5159
+5160
+213
+5161
+286
+379
+9
+5162
+5163
+5164
+1120
+5165
+5166
+2064
+1612
+19
+213
+337
+5167
+188
+213
+35
+5168
+5169
+5170
+5171
+597
+5172
+3842
+5173
+201
+337
+416
+5174
+301
+5175
+43
+3999
+5176
+5177
+5178
+5169
+5179
+873
+32
+201
+5180
+32
+5181
+222
+5182
+703
+424
+5183
+590
+10
+201
+188
+5184
+2045
+397
+5185
+5186
+303
+5187
+5188
+5189
+115
+57
+15
+5190
+764
+5191
+5192
+379
+3553
+104
+197
+5193
+5194
+643
+910
+480
+5195
+1696
+15
+5196
+915
+25
+357
+5197
+5198
+16
+5199
+5200
+5201
+5202
+5203
+5204
+14
+303
+5205
+15
+337
+317
+272
+337
+1655
+5206
+5207
+5208
+43
+5209
+5210
+5211
+43
+1870
+5212
+155
+9
+15
+5213
+5214
+1698
+3553
+648
+5215
+44
+176
+4562
+3289
+337
+5216
+519
+5217
+597
+5218
+14
+5219
+138
+5220
+352
+5221
+5222
+5223
+5224
+5225
+5226
+34
+5227
+5228
+5229
+5230
+5231
+3874
+703
+4485
+43
+5232
+5233
+5234
+5235
+548
+303
+5236
+14
+15
+5237
+5238
+1356
+5239
+5240
+5241
+1529
+5242
+5243
+5244
+5245
+2769
+5246
+5247
+1083
+5248
+5249
+1559
+3745
+303
+179
+5250
+5251
+5252
+46
+4461
+566
+15
+1300
+1112
+598
+5253
+5254
+5255
+5256
+2792
+5257
+1710
+5258
+15
+57
+861
+5259
+5260
+32
+5261
+19
+14
+5262
+5263
+3209
+1364
+597
+57
+5264
+5265
+5266
+586
+1864
+5267
+2794
+2264
+1291
+1559
+1765
+5268
+104
+5269
+5270
+345
+5271
+514
+5272
+3755
+3055
+5273
+5274
+122
+703
+1710
+2517
+5275
+57
+1169
+842
+5276
+5277
+5278
+5279
+5280
+5281
+185
+4907
+5282
+5283
+5284
+5285
+15
+5286
+613
+5287
+5288
+5289
+861
+46
+379
+3287
+10
+5290
+5291
+5292
+5293
+5080
+1710
+1122
+3407
+5294
+5295
+5296
+5297
+5298
+5299
+32
+32
+5084
+5300
+3732
+5301
+5302
+5303
+5304
+5305
+1710
+43
+349
+29
+5306
+5307
+822
+5308
+3421
+155
+178
+5309
+815
+5310
+5311
+4487
+5312
+5313
+5314
+5315
+5316
+5317
+5318
+5319
+5320
+398
+5321
+5322
+19
+5323
+849
+57
+5324
+57
+5325
+5326
+2341
+155
+597
+5327
+5328
+5329
+5330
+379
+1091
+1287
+5331
+5332
+5333
+5334
+77
+15
+9
+2427
+5335
+5336
+323
+554
+5337
+5338
+5339
+5340
+249
+15
+5341
+25
+5342
+5343
+44
+5344
+2561
+5345
+5346
+1889
+123
+14
+114
+1222
+20
+804
+5347
+22
+9
+178
+5348
+345
+19
+5080
+5349
+5350
+5351
+5352
+5353
+2728
+15
+5354
+5355
+57
+2694
+25
+3685
+10
+5356
+5357
+43
+5358
+540
+5359
+4502
+5360
+1182
+358
+5361
+1244
+46
+5362
+5363
+2158
+2540
+5364
+1847
+5365
+2921
+165
+5366
+2593
+172
+1992
+5367
+201
+57
+5368
+484
+43
+19
+63
+19
+5369
+5370
+48
+14
+5371
+4061
+5372
+16
+5373
+5374
+5375
+2770
+707
+1870
+5376
+5153
+5377
+5378
+43
+5150
+5379
+586
+5380
+301
+2849
+9
+5381
+5382
+5383
+5384
+10
+5343
+3110
+1012
+5385
+43
+345
+5386
+5387
+5388
+29
+5389
+2540
+2502
+5390
+5391
+5392
+5393
+5394
+123
+5395
+983
+5396
+278
+237
+363
+5397
+155
+10
+5398
+5399
+5400
+3984
+1503
+5401
+5402
+5403
+1559
+764
+20
+15
+5404
+2859
+5405
+5406
+15
+5407
+109
+554
+104
+5408
+57
+5409
+5410
+5411
+249
+509
+5412
+3599
+5413
+5344
+5414
+1710
+5415
+5416
+5417
+213
+19
+22
+1870
+936
+910
+5418
+43
+3160
+19
+1139
+5419
+5420
+5421
+5422
+20
+1812
+2260
+5423
+665
+20
+5424
+5425
+5426
+5427
+5428
+115
+5429
+5430
+43
+2764
+5431
+9
+519
+15
+5432
+248
+337
+5433
+14
+1559
+1508
+5434
+5435
+20
+22
+1514
+5436
+98
+5437
+5438
+1300
+5439
+5440
+286
+694
+19
+5441
+20
+5442
+284
+5443
+345
+5444
+4752
+5445
+1710
+815
+5446
+5447
+5448
+5449
+3241
+379
+57
+815
+15
+2135
+14
+2502
+864
+5450
+272
+5451
+989
+5452
+5453
+5454
+43
+5455
+5456
+416
+22
+910
+4586
+910
+179
+5293
+5457
+179
+178
+4116
+5458
+5459
+1630
+22
+272
+5460
+5461
+5462
+5463
+5464
+5465
+5466
+22
+20
+1388
+5467
+5468
+1244
+43
+5469
+5470
+248
+5471
+5472
+176
+5473
+5474
+5475
+5476
+5477
+5478
+5479
+5480
+29
+5481
+5482
+19
+5483
+345
+1905
+10
+936
+32
+364
+5484
+5485
+5486
+3796
+700
+5487
+213
+1529
+5488
+5489
+14
+3599
+1244
+5490
+5491
+14
+5492
+5493
+5494
+3034
+165
+43
+5495
+5496
+213
+5497
+5498
+4631
+22
+19
+5499
+1175
+5500
+10
+57
+5501
+15
+842
+5502
+5503
+5504
+4061
+5505
+9
+19
+4
+845
+345
+7
+2015
+15
+5506
+286
+1425
+554
+5075
+286
+705
+1307
+284
+3548
+5507
+2213
+286
+89
+57
+5508
+5509
+3353
+5510
+5511
+358
+14
+5512
+4364
+5513
+179
+25
+178
+5514
+1222
+5515
+736
+5516
+9
+439
+5517
+2500
+201
+5518
+5519
+15
+2243
+57
+77
+5520
+3422
+22
+5521
+5522
+5523
+77
+1508
+915
+19
+349
+25
+5524
+213
+188
+3316
+5525
+331
+5526
+5527
+32
+43
+5528
+5529
+1743
+5530
+5531
+5532
+5533
+5534
+354
+5535
+5536
+5537
+5538
+3698
+3
+5539
+5540
+5541
+5542
+178
+5543
+25
+484
+1867
+5544
+5545
+57
+483
+15
+5546
+9
+5547
+5548
+5549
+5550
+5551
+5552
+5553
+5554
+5555
+5556
+5557
+5558
+2259
+5559
+5560
+5561
+4791
+5562
+5563
+99
+713
+10
+26
+4160
+1026
+464
+5564
+5565
+5566
+5567
+5568
+66
+5569
+5570
+5571
+5572
+5573
+286
+1862
+115
+1100
+5574
+5575
+5576
+3161
+5577
+791
+57
+5578
+2616
+5579
+284
+5580
+5581
+1944
+5582
+5583
+57
+1665
+1710
+5584
+248
+15
+5585
+5586
+1100
+5587
+2406
+284
+5588
+5589
+5590
+155
+5591
+213
+20
+19
+5592
+5593
+248
+5594
+19
+337
+5595
+5596
+5597
+5598
+5599
+5600
+5025
+213
+1900
+5601
+5602
+5603
+5604
+15
+3598
+5605
+5606
+5607
+349
+5608
+2577
+1481
+1236
+1415
+4
+57
+5609
+5610
+32
+2124
+2043
+5611
+5612
+5512
+3569
+5613
+5614
+5615
+5616
+10
+873
+5617
+317
+15
+10
+2314
+3599
+5618
+57
+5619
+15
+32
+60
+5620
+5621
+5622
+19
+5623
+5624
+436
+5625
+2601
+32
+5626
+5627
+5628
+5629
+471
+5630
+5631
+5632
+5633
+5634
+19
+15
+5635
+89
+5636
+22
+19
+4982
+15
+201
+5637
+213
+201
+278
+741
+15
+19
+345
+984
+5638
+14
+554
+179
+270
+5639
+5640
+2085
+5641
+707
+5642
+900
+4285
+5643
+1310
+2811
+5644
+3626
+5645
+19
+5646
+53
+5647
+32
+1352
+9
+5648
+5649
+196
+2260
+5650
+5651
+5652
+610
+5653
+5654
+5655
+597
+5656
+5657
+5658
+43
+5659
+5660
+5661
+237
+1531
+14
+77
+5662
+1425
+15
+22
+188
+648
+201
+5169
+19
+5663
+57
+1765
+15
+647
+5664
+1425
+237
+357
+5665
+5666
+5667
+3055
+5668
+3376
+5669
+5670
+2728
+5671
+5672
+586
+352
+5673
+155
+178
+5674
+5675
+2958
+15
+5676
+5677
+5678
+12
+2
+5679
+142
+915
+5680
+5681
+1531
+5682
+5683
+5684
+5685
+9
+736
+5686
+155
+57
+5687
+66
+1870
+137
+5688
+5689
+2619
+5690
+14
+14
+5691
+1012
+5692
+5693
+5694
+57
+14
+32
+5695
+943
+15
+286
+5696
+5697
+586
+1234
+2318
+554
+815
+5698
+9
+5699
+2
+2124
+57
+5700
+5701
+5702
+5703
+34
+32
+369
+3431
+5704
+5705
+5706
+5707
+5708
+5709
+5710
+1559
+5711
+5712
+270
+5713
+5714
+15
+5715
+4714
+238
+5716
+5717
+3
+15
+57
+5718
+5719
+5720
+5721
+5722
+2477
+936
+5723
+5724
+3899
+2913
+5725
+5252
+3626
+5726
+43
+66
+5727
+5728
+5729
+5730
+5731
+687
+5732
+5733
+5623
+5273
+554
+5734
+677
+5735
+4155
+5736
+5737
+1514
+5738
+10
+5739
+5740
+60
+5741
+43
+1465
+5742
+5743
+2260
+5744
+66
+5745
+5746
+5747
+817
+5748
+5749
+5750
+5751
+1168
+201
+5752
+501
+5753
+648
+5754
+35
+5755
+1549
+5756
+48
+5757
+5758
+5759
+5760
+14
+5761
+3252
+22
+5762
+115
+5763
+5764
+5765
+5766
+5767
+14
+5768
+5769
+48
+5770
+5771
+5772
+484
+1291
+104
+5773
+540
+32
+5774
+5775
+5776
+2772
+5777
+5778
+104
+5779
+14
+5780
+5781
+5782
+5783
+5784
+5785
+5786
+5787
+554
+1716
+141
+554
+210
+5788
+5789
+250
+5790
+32
+3
+1542
+5791
+5792
+77
+5793
+5794
+57
+43
+43
+5795
+5796
+5629
+5797
+4961
+1226
+399
+5798
+5799
+2336
+5800
+48
+5801
+2724
+57
+5802
+5803
+5804
+2619
+286
+5805
+5806
+5807
+5808
+248
+15
+15
+5809
+1203
+1047
+5810
+17
+248
+5811
+5812
+495
+5813
+1232
+5814
+89
+5815
+32
+5816
+337
+5817
+5818
+20
+5819
+5820
+1647
+5821
+48
+19
+15
+586
+19
+32
+337
+764
+19
+5822
+299
+5823
+5824
+5825
+248
+20
+3466
+5826
+5827
+337
+303
+213
+213
+5828
+5829
+5830
+5831
+5832
+345
+5833
+57
+345
+5834
+15
+5835
+5836
+5837
+5838
+5839
+9
+3
+284
+2619
+303
+48
+19
+1021
+5840
+5841
+5842
+10
+15
+5843
+5844
+5845
+5846
+5847
+5848
+19
+15
+5849
+4124
+3755
+5850
+5851
+554
+5852
+303
+1425
+19
+5853
+1562
+22
+5854
+1637
+5855
+20
+2
+5856
+1384
+5857
+5858
+713
+5859
+713
+152
+5860
+5861
+5862
+5863
+861
+5864
+1018
+1885
+5865
+176
+5866
+5867
+5868
+5285
+286
+4281
+5869
+5870
+14
+5871
+32
+5872
+67
+4757
+249
+5873
+910
+77
+694
+43
+5874
+3729
+10
+5875
+4907
+60
+20
+1765
+20
+416
+5876
+1991
+19
+5877
+2314
+597
+15
+32
+176
+5878
+5879
+5880
+5881
+5882
+868
+5883
+3743
+5884
+292
+57
+5885
+57
+5886
+43
+5887
+5888
+20
+5889
+5890
+4
+5891
+188
+416
+882
+2
+5892
+286
+5856
+5130
+5893
+5894
+5895
+5896
+2314
+5897
+43
+77
+5898
+141
+5899
+5900
+57
+5901
+5902
+5903
+5904
+5905
+817
+34
+5906
+5907
+57
+1018
+5908
+12
+15
+5909
+57
+5780
+5910
+5911
+554
+1425
+5912
+5913
+5914
+15
+19
+2260
+20
+15
+5915
+270
+213
+5916
+286
+2999
+756
+5917
+4
+1808
+5918
+5919
+492
+1442
+5920
+152
+228
+484
+5921
+19
+43
+2260
+25
+5922
+1300
+2794
+276
+519
+5923
+196
+14
+5924
+5925
+5926
+5927
+19
+5928
+5929
+201
+222
+4364
+305
+1224
+213
+5930
+25
+318
+1384
+123
+213
+337
+2697
+5931
+15
+5932
+5933
+5934
+5935
+5936
+5937
+5938
+1401
+915
+67
+5939
+5940
+733
+5941
+15
+222
+2035
+5942
+5943
+19
+43
+509
+5944
+19
+1112
+5945
+1291
+272
+5946
+5947
+5512
+4606
+67
+5948
+5949
+357
+5950
+5951
+352
+5952
+5953
+4364
+1021
+4028
+14
+188
+5954
+161
+248
+20
+1465
+5955
+5956
+1696
+1749
+5957
+5958
+5080
+337
+57
+415
+57
+57
+337
+5959
+5960
+5961
+358
+5962
+1806
+5963
+5964
+43
+5965
+2239
+5966
+5967
+225
+57
+398
+5968
+5969
+5970
+137
+5971
+3841
+142
+1710
+19
+22
+5972
+5973
+5974
+1160
+5975
+5976
+32
+5977
+4247
+5978
+278
+20
+337
+2899
+5979
+933
+5980
+5981
+317
+5982
+1172
+4035
+3476
+1604
+2540
+248
+286
+5983
+5984
+1021
+5985
+196
+5986
+5987
+3777
+1232
+738
+22
+5988
+5989
+5990
+2728
+5991
+5992
+5993
+5994
+5995
+3
+5996
+5997
+5998
+5999
+358
+286
+764
+3059
+19
+861
+14
+514
+6000
+6001
+6002
+1245
+6003
+3484
+3486
+6004
+6005
+411
+6006
+6007
+19
+248
+6008
+6009
+6010
+1082
+6011
+6012
+1529
+284
+323
+6013
+6014
+6015
+15
+3291
+4897
+15
+6016
+6017
+15
+213
+284
+910
+201
+849
+5287
+6018
+358
+6019
+213
+15
+188
+6020
+2135
+14
+12
+6021
+6022
+6023
+354
+317
+6024
+6025
+6026
+573
+6027
+2043
+6028
+6029
+6030
+2835
+665
+1083
+6031
+849
+6032
+6033
+303
+57
+6034
+6035
+6036
+6037
+1018
+6038
+1245
+6039
+4677
+6040
+6041
+6042
+6043
+337
+34
+57
+6044
+1234
+6045
+6046
+6047
+3743
+6048
+5785
+6049
+237
+493
+3055
+6050
+6051
+6052
+2577
+248
+6053
+6054
+6055
+6056
+712
+6057
+201
+3546
+6058
+6059
+178
+67
+354
+290
+647
+4364
+15
+5780
+6060
+6061
+568
+338
+2
+6062
+1021
+1026
+24
+6063
+6064
+6065
+910
+15
+25
+2129
+6066
+6067
+6068
+554
+6069
+337
+6070
+6071
+152
+4088
+9
+6072
+1291
+6073
+10
+6074
+6075
+6076
+22
+286
+6077
+1066
+6078
+6079
+185
+32
+3202
+6080
+19
+6081
+303
+19
+6082
+6083
+2591
+6084
+2
+6085
+861
+6086
+6087
+6088
+6089
+201
+32
+3345
+317
+155
+6090
+1870
+6091
+99
+6092
+303
+43
+6093
+6094
+741
+19
+14
+597
+57
+416
+815
+6095
+873
+6096
+43
+6097
+6098
+1612
+6099
+213
+179
+5498
+15
+354
+19
+19
+5561
+6100
+43
+416
+6101
+6102
+6103
+3310
+6104
+694
+493
+6105
+616
+3503
+849
+6106
+6107
+4146
+245
+1122
+2694
+4627
+345
+6108
+248
+6109
+1044
+495
+491
+6110
+6111
+2286
+6112
+15
+6113
+178
+6114
+77
+9
+1716
+228
+48
+861
+6115
+6116
+6117
+155
+6118
+6119
+6120
+6121
+2140
+6122
+6123
+6124
+6125
+6126
+2314
+9
+6127
+6128
+6129
+6130
+48
+6131
+2064
+15
+6132
+6133
+3544
+89
+5780
+936
+14
+345
+6134
+6135
+514
+25
+6136
+6137
+6138
+6139
+6140
+248
+6141
+6142
+1234
+179
+188
+2728
+25
+6143
+6144
+3978
+286
+6145
+1571
+284
+1332
+6146
+6147
+15
+22
+6148
+6149
+77
+15
+6150
+6151
+155
+284
+337
+349
+6152
+9
+6153
+6154
+248
+337
+6155
+6156
+6157
+1021
+15
+20
+6158
+6159
+6160
+6161
+6162
+284
+48
+6163
+6164
+2971
+6165
+16
+6166
+6167
+5649
+6168
+6169
+337
+6170
+6171
+671
+6172
+19
+6173
+46
+201
+43
+2576
+237
+77
+6174
+6175
+2998
+2356
+9
+6176
+6177
+6178
+6179
+6180
+6181
+1668
+6182
+22
+5780
+6183
+6184
+6185
+6186
+337
+6187
+2902
+248
+6188
+6189
+1834
+683
+6190
+6191
+1684
+6192
+6193
+6194
+6195
+6196
+6197
+6198
+6199
+6200
+5904
+6201
+32
+6202
+6203
+541
+6204
+6205
+6206
+6207
+6208
+303
+57
+6209
+566
+358
+6210
+4
+6211
+2324
+6212
+1776
+14
+4007
+6213
+286
+701
+6214
+60
+6215
+6216
+6217
+3395
+6218
+6219
+6220
+6221
+20
+48
+1502
+14
+6222
+6223
+25
+6224
+6225
+6226
+6227
+5803
+6228
+6229
+2347
+6230
+6231
+3062
+1232
+196
+6232
+6233
+1189
+2580
+6234
+6235
+2410
+57
+6236
+6237
+222
+6238
+43
+6239
+493
+57
+6240
+2728
+3
+751
+6241
+3709
+6242
+6243
+6244
+6245
+6246
+222
+1425
+4315
+14
+32
+6247
+6248
+2566
+6249
+1574
+19
+6250
+179
+6251
+415
+6252
+178
+32
+6253
+6254
+3172
+77
+6255
+6256
+6257
+694
+6258
+3989
+6259
+6260
+6261
+6262
+155
+104
+6263
+57
+6264
+1502
+6265
+6212
+6266
+788
+6267
+6268
+270
+751
+6269
+6270
+6271
+6272
+6273
+6274
+5542
+1775
+6275
+6276
+19
+1710
+484
+6277
+6278
+1112
+6279
+6280
+16
+6281
+6282
+6283
+6284
+6285
+6286
+597
+402
+1542
+6287
+6288
+6289
+6290
+6291
+6292
+6293
+6294
+6295
+6296
+9
+2260
+6297
+6298
+178
+6299
+6300
+4839
+398
+6301
+514
+77
+6302
+22
+6303
+9
+6304
+6305
+417
+6306
+6307
+6308
+19
+6309
+6310
+3375
+6311
+6312
+6313
+6314
+6315
+6316
+2368
+6317
+6318
+3525
+6319
+6320
+6321
+6322
+3252
+6323
+6324
+6325
+6326
+6327
+3
+6328
+6329
+9
+176
+6330
+57
+1531
+272
+6331
+25
+6332
+6333
+815
+4952
+3104
+6334
+6335
+1512
+6336
+4280
+5127
+6337
+6338
+6339
+2
+67
+446
+6340
+179
+66
+6289
+6341
+6342
+43
+5780
+6343
+20
+32
+32
+6344
+2197
+6345
+6346
+6347
+6348
+6349
+2015
+6350
+6351
+188
+4405
+6352
+6353
+6354
+694
+6355
+345
+822
+354
+6356
+2907
+19
+6357
+6358
+597
+6359
+514
+6360
+6361
+6362
+185
+6363
+6364
+22
+6365
+6366
+286
+6367
+48
+6368
+3777
+3466
+6369
+687
+6370
+6371
+6372
+67
+6373
+564
+6374
+6375
+19
+15
+6376
+317
+201
+693
+1287
+6377
+2
+6378
+6379
+6380
+6381
+155
+6382
+43
+6383
+6384
+43
+6385
+6386
+6387
+6175
+6388
+5837
+2064
+6389
+6390
+2
+15
+6391
+14
+411
+286
+4088
+5856
+6392
+19
+1244
+43
+514
+222
+2316
+6393
+1100
+701
+861
+6394
+2262
+6395
+4627
+142
+6396
+6397
+32
+4900
+671
+6398
+3406
+1291
+6399
+15
+286
+6400
+6401
+6402
+6403
+57
+155
+4128
+155
+6404
+3307
+1710
+6405
+6406
+1961
+6407
+286
+6408
+1245
+6409
+2320
+14
+6410
+15
+815
+6411
+6054
+15
+6412
+6413
+6414
+48
+15
+713
+76
+14
+6415
+5856
+228
+6416
+6417
+6418
+19
+1465
+6419
+1870
+6420
+6421
+6422
+6423
+6424
+6425
+5780
+6426
+6427
+1105
+6428
+345
+6429
+2019
+1245
+286
+6430
+188
+3870
+14
+6431
+15
+6432
+19
+1502
+399
+141
+6433
+1047
+6434
+6435
+6436
+3725
+6437
+6438
+6439
+597
+6440
+989
+6441
+6442
+3061
+6443
+4
+6444
+6445
+179
+6446
+6447
+15
+6341
+3406
+3
+25
+36
+6448
+4647
+6449
+6450
+6451
+286
+6452
+6453
+6454
+411
+6455
+6456
+5856
+1808
+3055
+6457
+6458
+6459
+554
+2341
+6460
+6461
+6462
+6463
+4141
+745
+231
+491
+6464
+6465
+286
+43
+845
+9
+6466
+4
+815
+6467
+6468
+6469
+6470
+6471
+6472
+178
+114
+6473
+317
+3943
+417
+6474
+6475
+29
+3198
+6476
+5013
+270
+6477
+6478
+1386
+6479
+19
+6480
+6481
+6482
+6071
+1829
+6483
+6484
+14
+6485
+209
+6486
+1961
+6487
+3317
+6488
+6289
+6489
+6490
+6491
+1169
+2040
+6492
+1834
+6493
+6494
+6495
+6496
+228
+299
+4
+179
+6497
+665
+10
+6498
+2264
+19
+57
+6412
+790
+1920
+6499
+185
+20
+6500
+6501
+6502
+6503
+3050
+6504
+6505
+270
+237
+6506
+57
+265
+6507
+354
+6508
+6509
+57
+645
+6510
+5780
+6511
+6512
+6513
+6514
+448
+586
+6515
+6516
+6517
+6518
+6519
+10
+6520
+1384
+6521
+6522
+6523
+3309
+179
+6524
+399
+6525
+6526
+1956
+6527
+16
+57
+22
+6528
+6529
+6530
+6531
+6532
+6533
+286
+5856
+4028
+176
+3829
+2835
+6534
+14
+6535
+14
+6536
+6537
+6538
+6539
+1428
+4
+6540
+6541
+6542
+6543
+788
+6544
+6545
+6546
+176
+6547
+5780
+15
+6548
+6549
+6550
+6551
+6552
+77
+201
+540
+493
+4672
+6553
+6554
+137
+196
+184
+6555
+25
+6556
+6557
+6558
+57
+15
+6559
+6560
+6561
+6562
+6563
+5127
+6564
+19
+694
+1021
+6565
+34
+6566
+48
+1715
+15
+60
+491
+6567
+6568
+5856
+4512
+9
+237
+6569
+480
+892
+25
+6570
+345
+6571
+201
+34
+32
+6572
+6573
+6574
+1744
+6575
+6576
+6577
+9
+6578
+533
+6579
+43
+6580
+1019
+6581
+6582
+15
+6583
+6584
+6585
+6586
+6587
+15
+43
+331
+39
+6588
+665
+3376
+6589
+164
+6590
+331
+6591
+15
+6592
+6593
+1249
+6594
+6595
+6596
+2502
+1415
+20
+6597
+6598
+6599
+5895
+464
+6600
+2913
+155
+415
+57
+6601
+1716
+272
+6602
+1542
+736
+558
+6603
+2356
+9
+14
+6604
+15
+1172
+279
+15
+60
+3978
+349
+6605
+3814
+379
+6606
+25
+6607
+6608
+6609
+6610
+6611
+6612
+1438
+338
+6613
+6614
+16
+3946
+1961
+1718
+707
+1047
+6615
+6616
+6617
+5856
+10
+20
+436
+6618
+6619
+2164
+15
+6620
+6621
+86
+417
+6622
+751
+6623
+6624
+15
+6625
+1920
+6626
+1668
+1100
+6627
+345
+6628
+6629
+57
+6630
+6631
+6632
+6633
+10
+6634
+286
+32
+2329
+721
+493
+6412
+1605
+1768
+3241
+349
+19
+1374
+6635
+6636
+1942
+6637
+6638
+1698
+6639
+598
+6640
+138
+6641
+6642
+6643
+345
+764
+57
+6644
+6645
+272
+5298
+1481
+3213
+6646
+10
+6647
+89
+6648
+32
+6649
+274
+286
+6650
+6651
+22
+3
+43
+1567
+180
+4128
+1966
+815
+6652
+19
+9
+6653
+1011
+6654
+4
+936
+6655
+305
+1010
+6656
+6657
+32
+1120
+43
+286
+188
+6658
+34
+15
+14
+6659
+1232
+6660
+6661
+6662
+6663
+6664
+6665
+22
+6666
+3005
+19
+2427
+533
+6667
+1889
+6668
+825
+1867
+1710
+6669
+43
+3104
+6670
+57
+331
+1245
+6671
+1442
+1808
+6672
+694
+861
+6673
+3
+6674
+6675
+14
+6676
+2546
+4441
+6289
+201
+6677
+6678
+6679
+6680
+6681
+677
+5202
+1920
+6682
+6683
+2776
+6684
+57
+15
+6685
+12
+1765
+6686
+248
+6687
+32
+6688
+1169
+6689
+1824
+6289
+5780
+15
+6690
+286
+6691
+2208
+815
+6692
+6693
+6694
+6695
+22
+1743
+6696
+6697
+398
+213
+6698
+6699
+138
+231
+6700
+6701
+6702
+6703
+6704
+2318
+197
+6705
+6706
+19
+6707
+6708
+20
+2734
+6709
+6710
+6711
+6712
+6713
+286
+43
+6714
+2836
+6715
+1082
+6716
+6289
+26
+137
+6717
+43
+5564
+6718
+6719
+6720
+6721
+6722
+6723
+6724
+6725
+345
+4
+6726
+5780
+34
+6727
+831
+6086
+6728
+6729
+6730
+6731
+6732
+6733
+6734
+20
+155
+6735
+2043
+89
+331
+15
+237
+57
+1217
+16
+6736
+6737
+43
+48
+6738
+6739
+2619
+6740
+6741
+514
+286
+6742
+345
+6743
+6744
+6745
+6746
+6747
+15
+99
+6748
+6749
+6750
+6751
+6752
+6753
+6754
+6755
+751
+6756
+32
+20
+6757
+6758
+48
+6759
+278
+648
+6760
+6761
+6762
+20
+6763
+6289
+6764
+6412
+2260
+96
+201
+6765
+1232
+19
+6766
+6767
+564
+6768
+6769
+57
+373
+417
+6770
+2260
+6771
+112
+6772
+6773
+337
+484
+6774
+6775
+4364
+6776
+1913
+6777
+32
+6778
+10
+3192
+122
+270
+1508
+22
+5856
+392
+6779
+1716
+6780
+6781
+6782
+6783
+6784
+6785
+6786
+2561
+654
+6787
+6788
+6789
+6790
+6728
+11
+6791
+342
+6792
+286
+6793
+14
+6794
+6795
+6796
+6797
+6798
+6799
+2694
+6800
+99
+6801
+34
+2318
+6802
+15
+6803
+5314
+6804
+6805
+48
+6806
+19
+6807
+1465
+6808
+112
+6809
+6810
+15
+155
+34
+4745
+484
+6811
+6812
+6813
+89
+6814
+5659
+6480
+1172
+6164
+2913
+6815
+1559
+1559
+6816
+284
+6817
+6818
+6819
+566
+48
+14
+845
+15
+6820
+6821
+6822
+286
+1133
+345
+3055
+703
+6823
+32
+6824
+6825
+6826
+665
+16
+43
+6827
+4026
+6828
+1900
+6829
+5734
+286
+6830
+237
+6831
+4388
+1383
+6832
+6833
+6834
+2029
+6835
+6836
+6837
+6838
+369
+6839
+6840
+57
+1875
+554
+155
+1012
+6841
+4
+6842
+43
+2197
+354
+6843
+736
+3995
+6844
+1465
+1172
+6845
+6846
+4765
+6847
+6848
+4263
+284
+1107
+3
+6849
+736
+6850
+303
+6851
+2849
+6852
+6853
+32
+286
+6854
+6855
+6856
+48
+6857
+303
+357
+554
+6858
+15
+6859
+659
+696
+6860
+6861
+141
+6862
+1637
+4398
+6863
+5561
+2561
+6864
+6865
+514
+6866
+701
+6867
+6868
+1172
+6869
+4002
+6870
+1637
+6871
+2302
+6872
+6873
+491
+6874
+286
+155
+2978
+6875
+6876
+155
+6877
+586
+5169
+15
+647
+1870
+6878
+6879
+6880
+6881
+6882
+6883
+38
+6884
+6885
+6886
+6887
+5008
+6412
+6888
+22
+6889
+60
+323
+6890
+2790
+6891
+6892
+6893
+6894
+6895
+2289
+6896
+6897
+284
+303
+6898
+3981
+1223
+6899
+6900
+1559
+3543
+152
+6901
+1604
+397
+213
+48
+6902
+5304
+4859
+6903
+741
+6904
+6905
+6906
+5825
+6907
+17
+19
+6908
+6909
+1612
+6910
+6911
+248
+765
+4139
+915
+6912
+4487
+6913
+1808
+6914
+6915
+910
+6916
+6917
+299
+286
+19
+48
+3594
+6918
+6919
+1961
+4709
+6920
+6921
+6922
+6923
+6095
+6924
+2260
+597
+369
+15
+1956
+6925
+6926
+751
+3367
+6927
+284
+5780
+6928
+57
+43
+284
+3054
+6929
+6595
+284
+861
+6930
+6931
+6932
+566
+6900
+6933
+349
+6934
+6935
+209
+4425
+6936
+20
+2591
+484
+531
+5111
+583
+509
+6937
+355
+613
+6938
+6939
+6940
+57
+6941
+6942
+2770
+2356
+592
+6943
+39
+885
+201
+6944
+15
+6945
+6946
+6947
+179
+6948
+6949
+286
+2482
+6950
+6951
+6952
+6953
+2502
+5780
+955
+32
+573
+6954
+398
+201
+6955
+6956
+6957
+337
+694
+6958
+597
+6959
+6960
+1512
+6961
+6962
+284
+6963
+6964
+6965
+1249
+6966
+6967
+6968
+6969
+1157
+6970
+57
+9
+6971
+6972
+57
+165
+6973
+6974
+345
+9
+713
+6975
+6976
+1829
+248
+6977
+6978
+6979
+6980
+6981
+2733
+6982
+6533
+6983
+6984
+6985
+2410
+15
+6986
+4425
+6987
+6988
+6989
+845
+471
+6990
+699
+6991
+6992
+3905
+222
+6993
+237
+6994
+6995
+6996
+6997
+6998
+6999
+7000
+7001
+7002
+2136
+892
+19
+43
+7003
+7004
+197
+842
+15
+7005
+7006
+7007
+2477
+809
+7008
+7009
+7010
+9
+648
+89
+1961
+228
+721
+910
+7011
+15
+7012
+7013
+331
+3849
+1684
+7014
+7015
+7016
+7017
+7018
+7019
+7020
+7021
+7022
+19
+3647
+616
+5537
+32
+25
+1112
+3
+7023
+7024
+7025
+4
+4616
+1244
+3519
+7026
+7027
+57
+7028
+7029
+7030
+20
+7031
+112
+2260
+19
+25
+210
+43
+3640
+7032
+7033
+5556
+7034
+7035
+7036
+7037
+345
+7038
+9
+7039
+3534
+7040
+284
+2804
+7041
+1867
+7042
+7043
+7044
+440
+7045
+3599
+2064
+1965
+7046
+15
+7047
+272
+7048
+7049
+4855
+1364
+7050
+303
+2697
+7051
+7052
+15
+43
+5308
+597
+1346
+590
+7053
+7054
+7055
+4760
+7056
+7057
+694
+7058
+7059
+7060
+7061
+4518
+7062
+7063
+7064
+2841
+436
+2431
+201
+323
+7065
+15
+201
+7066
+2944
+7067
+7068
+7069
+936
+7070
+2314
+1612
+1415
+14
+7071
+7072
+6289
+7073
+7074
+7075
+665
+15
+7076
+7077
+464
+19
+7078
+286
+10
+7079
+7080
+4139
+190
+7081
+7082
+7083
+20
+1013
+2591
+7084
+738
+7085
+7086
+32
+1768
+7087
+7088
+19
+2694
+597
+10
+7089
+7090
+3553
+7091
+7092
+200
+7093
+5320
+7094
+1051
+57
+7095
+7096
+4634
+48
+1508
+430
+7097
+19
+15
+842
+373
+7098
+1010
+20
+7099
+713
+815
+7100
+284
+155
+7101
+57
+1021
+7102
+7103
+3417
+7104
+5700
+1566
+7105
+7106
+1047
+155
+7107
+7108
+7109
+22
+1090
+665
+1021
+7110
+887
+554
+7111
+15
+20
+597
+2561
+284
+6878
+3296
+869
+7112
+7113
+172
+7114
+32
+7115
+7116
+337
+7117
+43
+7118
+415
+7119
+7120
+7121
+9
+872
+1364
+7122
+3455
+32
+7123
+492
+7124
+99
+7125
+7126
+7127
+16
+1867
+9
+586
+1415
+7128
+7129
+7130
+22
+7131
+7132
+7133
+7134
+7135
+7136
+59
+7137
+989
+7138
+2593
+2925
+7139
+48
+7140
+345
+7141
+1124
+354
+7142
+1172
+34
+7143
+721
+7144
+7145
+57
+43
+7146
+6916
+7147
+7148
+7149
+19
+1531
+14
+7150
+32
+7151
+7152
+10
+7153
+7154
+7155
+1364
+7156
+1531
+20
+7157
+20
+7158
+7159
+57
+7160
+7161
+19
+7162
+7163
+7164
+7165
+7166
+493
+7167
+3317
+7168
+1356
+7169
+7170
+15
+7171
+1738
+286
+7172
+7173
+15
+1531
+3902
+815
+2593
+3852
+99
+7174
+7175
+7176
+610
+867
+7177
+7178
+109
+7179
+7180
+7181
+648
+9
+7182
+7183
+7184
+7185
+43
+7186
+7187
+495
+7188
+7189
+4634
+16
+7190
+7191
+7192
+7193
+317
+7194
+7195
+364
+1364
+14
+7196
+155
+7197
+2
+10
+1208
+7198
+7199
+295
+7200
+3216
+7201
+7202
+7203
+98
+1710
+677
+7204
+7205
+7206
+7207
+5780
+7208
+2040
+7209
+7210
+5659
+7211
+358
+402
+155
+7212
+89
+213
+7213
+7214
+7215
+6057
+7216
+16
+7217
+1154
+7218
+7219
+1502
+2415
+815
+15
+707
+185
+4574
+7220
+6731
+7221
+7222
+2175
+7223
+19
+7224
+331
+7225
+7226
+7227
+19
+7228
+3050
+20
+1149
+1710
+201
+7229
+279
+378
+188
+15
+7230
+2254
+2550
+861
+7231
+647
+20
+7232
+7233
+7234
+3978
+7235
+7236
+7237
+2281
+7238
+46
+2988
+7239
+3376
+43
+96
+1932
+19
+7240
+478
+533
+7241
+993
+7242
+7243
+15
+7244
+7245
+7246
+7247
+7248
+43
+7249
+966
+7250
+7251
+745
+57
+7252
+2289
+76
+7253
+7254
+248
+7255
+7256
+15
+15
+533
+7257
+22
+104
+60
+7258
+7259
+15
+7260
+7261
+317
+4088
+19
+872
+3908
+286
+286
+590
+7262
+437
+586
+201
+32
+7263
+2040
+7264
+7265
+7266
+7267
+7268
+43
+7269
+2
+7270
+7271
+7272
+7273
+7274
+7275
+317
+7276
+22
+2009
+48
+7277
+3059
+1425
+7278
+4950
+7279
+7280
+178
+7281
+7282
+571
+5623
+4411
+7283
+5251
+4411
+7284
+3598
+7285
+7286
+7287
+398
+7288
+6382
+7289
+7290
+2040
+7291
+45
+7292
+2564
+7293
+7294
+3599
+7295
+7296
+7297
+597
+7298
+533
+7299
+1465
+57
+7300
+7301
+201
+7302
+2009
+7303
+7304
+7305
+1513
+751
+7306
+7307
+5254
+2593
+77
+7308
+137
+7309
+4026
+7310
+1052
+15
+7311
+7312
+7313
+271
+712
+7314
+1675
+7315
+1710
+7316
+9
+7317
+7318
+7319
+7320
+7321
+323
+7322
+7323
+7324
+178
+7325
+284
+7326
+7327
+7328
+7329
+1293
+178
+5923
+248
+25
+7330
+7331
+11
+345
+6505
+7332
+6412
+10
+7333
+7334
+764
+7335
+7336
+7337
+827
+1386
+303
+237
+7338
+7339
+7340
+583
+32
+694
+3
+4
+7341
+19
+7342
+4053
+286
+7343
+1454
+1817
+176
+2314
+7344
+7345
+7346
+7347
+7348
+15
+6928
+20
+7349
+7350
+7351
+379
+7352
+25
+155
+7353
+270
+7354
+7355
+201
+7356
+19
+1531
+7357
+32
+7358
+6505
+7359
+3599
+22
+19
+7360
+7361
+7362
+201
+7363
+2974
+7364
+7365
+282
+178
+7366
+7367
+7368
+7369
+5203
+7370
+7371
+1224
+248
+4185
+57
+2176
+25
+3172
+554
+19
+910
+7372
+7373
+15
+14
+7374
+242
+7375
+3759
+15
+14
+7376
+7377
+155
+7378
+1112
+7379
+7380
+20
+7381
+1749
+248
+7382
+7383
+317
+373
+7384
+14
+25
+7357
+19
+648
+2029
+7385
+7386
+7387
+7388
+19
+7389
+915
+7390
+7391
+7392
+7393
+7394
+99
+1244
+32
+7395
+7396
+7397
+1364
+7398
+7399
+7400
+478
+3055
+7401
+1200
+7402
+399
+7403
+15
+3104
+4364
+19
+7404
+20
+19
+7405
+7406
+2728
+7407
+656
+7408
+7409
+1834
+2029
+7410
+7411
+399
+228
+7412
+7413
+284
+7414
+34
+20
+7415
+7416
+77
+213
+48
+19
+155
+7417
+7418
+2289
+415
+7419
+7420
+6501
+7421
+7422
+43
+164
+4
+7315
+345
+7423
+1834
+7424
+1900
+7425
+7426
+2979
+19
+337
+7427
+2913
+32
+533
+564
+7428
+7429
+1107
+7430
+7431
+7432
+2368
+337
+358
+7433
+7434
+1508
+19
+7435
+1232
+7436
+5265
+7437
+15
+7438
+284
+7439
+188
+364
+77
+7440
+9
+5780
+3148
+972
+155
+7441
+7442
+1465
+7443
+4
+7444
+7445
+7446
+7447
+1992
+323
+32
+7448
+7449
+7450
+43
+1222
+5780
+7451
+7452
+7453
+7454
+345
+1079
+7455
+7456
+7457
+7458
+7459
+2314
+7460
+15
+416
+7461
+536
+286
+269
+7462
+201
+20
+7463
+3202
+7464
+190
+7465
+7466
+7467
+7369
+3599
+7468
+22
+7469
+7470
+7471
+7472
+7473
+7474
+7475
+7476
+188
+7477
+34
+7478
+7479
+7480
+915
+5326
+7481
+2387
+1944
+286
+829
+22
+586
+66
+7482
+1112
+6289
+5839
+15
+7483
+7484
+7485
+7486
+7487
+7488
+77
+7489
+7490
+32
+415
+7491
+7492
+7493
+4364
+7494
+43
+7495
+3858
+7496
+7497
+7498
+3981
+3078
+345
+3465
+3543
+7499
+6518
+7500
+7501
+4598
+7502
+7503
+3515
+1823
+5629
+7504
+197
+1220
+7505
+15
+2347
+7506
+9
+2694
+7507
+7508
+7509
+7510
+3470
+7511
+7512
+15
+7513
+7514
+19
+7515
+845
+7516
+7517
+7518
+7519
+3959
+7520
+213
+57
+7521
+5908
+1401
+7522
+7523
+7524
+337
+7525
+213
+7526
+519
+7527
+7528
+7529
+7530
+7531
+7532
+736
+7533
+7534
+5780
+7535
+7536
+7276
+7137
+5552
+7537
+7538
+373
+7539
+19
+2356
+5336
+337
+4414
+7540
+7541
+15
+2260
+7542
+7543
+3914
+7544
+7545
+303
+7546
+7547
+303
+7548
+493
+573
+7549
+206
+7550
+7551
+19
+7552
+1046
+7553
+540
+720
+1517
+286
+7554
+7555
+299
+1352
+7556
+2429
+60
+7557
+213
+7558
+1870
+7559
+861
+7560
+6617
+1840
+20
+7561
+7562
+7563
+303
+4263
+7564
+7565
+25
+7566
+7567
+7568
+357
+4155
+7569
+7570
+15
+573
+19
+7571
+7572
+3999
+7573
+7574
+7575
+7576
+7577
+373
+7578
+7579
+2253
+7580
+19
+7581
+7582
+15
+7583
+7584
+43
+19
+4884
+7585
+7586
+849
+7587
+7588
+7589
+2902
+7590
+7591
+955
+828
+694
+7592
+486
+7593
+7594
+7595
+237
+464
+5521
+3
+1357
+2135
+2697
+12
+7596
+7597
+7598
+7599
+7600
+2
+586
+7601
+7602
+7289
+7603
+694
+7604
+43
+1918
+2577
+7605
+4963
+201
+2787
+2804
+7606
+5601
+286
+7607
+7608
+7609
+2316
+7610
+6518
+7611
+7612
+2762
+7613
+7614
+7615
+7616
+1955
+7617
+7618
+7619
+6449
+7620
+7621
+7622
+43
+7623
+558
+7624
+1799
+7625
+828
+7626
+7627
+354
+7628
+484
+32
+317
+7629
+6716
+7630
+7631
+43
+1710
+303
+7632
+209
+7633
+738
+43
+197
+16
+34
+7634
+7635
+7636
+1425
+2034
+7637
+7638
+15
+7639
+416
+7640
+201
+57
+7641
+317
+1364
+7642
+7643
+7644
+3354
+7645
+19
+373
+7646
+915
+7647
+345
+201
+77
+493
+7648
+7649
+7650
+115
+648
+77
+7651
+7652
+845
+5689
+1021
+7653
+1160
+7654
+7655
+2166
+7656
+7657
+2471
+7658
+597
+7659
+7660
+504
+25
+7661
+7236
+7662
+7663
+57
+7664
+201
+7665
+1425
+1710
+7666
+89
+7667
+721
+7668
+7669
+7670
+7671
+7672
+7673
+7674
+7675
+7676
+7677
+5623
+3553
+7678
+7679
+6289
+43
+7680
+7681
+7682
+7683
+2537
+20
+7684
+7685
+201
+43
+7686
+1160
+7687
+791
+7688
+7689
+5949
+4512
+7690
+417
+3353
+7691
+2129
+7692
+7693
+1153
+9
+19
+7694
+57
+43
+286
+1812
+7695
+1343
+2253
+6518
+7696
+5204
+345
+7697
+1696
+7698
+4028
+1710
+5780
+2782
+7699
+2769
+349
+10
+2615
+7700
+915
+7701
+4598
+12
+19
+354
+14
+6305
+89
+345
+7702
+201
+14
+15
+1116
+7703
+4634
+7704
+7705
+7706
+464
+4
+7707
+5312
+7708
+4905
+3999
+39
+7709
+4024
+7710
+5990
+286
+43
+19
+248
+317
+845
+3503
+3645
+7711
+7712
+66
+17
+7713
+7714
+7715
+57
+6463
+158
+7716
+7717
+7718
+7719
+7720
+7721
+2163
+29
+248
+303
+7722
+337
+7723
+20
+7724
+2849
+4048
+15
+7725
+284
+43
+6187
+14
+7726
+7727
+7728
+7729
+337
+7730
+237
+4075
+7731
+7732
+7733
+7734
+7735
+7736
+694
+736
+1352
+29
+272
+1559
+57
+248
+665
+7737
+7738
+20
+2879
+5340
+134
+7739
+1169
+4677
+7740
+7741
+7742
+7743
+7744
+7745
+416
+845
+225
+7746
+248
+7747
+200
+7748
+43
+43
+7749
+7750
+7751
+7752
+7577
+412
+7753
+155
+7754
+11
+7755
+4
+5326
+7756
+7757
+7758
+5556
+7442
+19
+7759
+7760
+43
+7761
+7762
+114
+2140
+20
+7763
+1169
+1011
+7764
+178
+278
+5731
+7765
+3844
+7766
+1011
+14
+317
+237
+7767
+7768
+519
+7769
+7770
+201
+7771
+7772
+7773
+7774
+7775
+7776
+7777
+7778
+188
+2314
+7779
+317
+7780
+7781
+7782
+7783
+703
+1784
+7784
+7785
+7786
+7787
+7788
+822
+7789
+936
+7790
+7791
+7792
+3976
+7793
+7794
+7795
+32
+7796
+7797
+495
+20
+5601
+7798
+7799
+7800
+7137
+7801
+7802
+7803
+7804
+7805
+4925
+7806
+7807
+7808
+7809
+7810
+7811
+7812
+1083
+764
+1105
+7364
+7813
+7814
+7815
+7816
+345
+7817
+7818
+7819
+15
+7820
+7821
+3906
+7822
+279
+7823
+14
+228
+357
+3059
+7824
+354
+7825
+7826
+7827
+7828
+377
+7829
+1112
+228
+597
+7830
+7831
+210
+3467
+7832
+7833
+1580
+7834
+694
+7835
+7836
+7837
+7838
+7839
+7840
+7841
+170
+7842
+7843
+7844
+7845
+48
+7846
+43
+7847
+10
+57
+7848
+5700
+7849
+7850
+7851
+7852
+7853
+7854
+694
+3376
+7855
+35
+7856
+7857
+7858
+7859
+201
+5243
+7860
+7861
+7862
+500
+7863
+7864
+7865
+7866
+7867
+4855
+1808
+7868
+7869
+5022
+7870
+7871
+2006
+7872
+43
+15
+7873
+7874
+2320
+7875
+7876
+1696
+7877
+213
+7878
+7879
+7880
+554
+7881
+7882
+248
+7883
+7884
+16
+7885
+303
+7886
+337
+2770
+7887
+7888
+1112
+610
+176
+7889
+7890
+10
+345
+15
+7891
+7892
+3546
+7893
+2949
+16
+303
+7894
+349
+7895
+7896
+7897
+1940
+201
+7898
+1710
+16
+7899
+7900
+284
+303
+7901
+5584
+303
+15
+7902
+7903
+7904
+7905
+7906
+1089
+7907
+3598
+7908
+7909
+15
+7910
+7911
+7912
+270
+19
+7913
+2029
+7914
+5075
+7915
+269
+10
+43
+411
+7916
+7917
+1612
+1425
+491
+2694
+859
+7918
+7919
+7920
+43
+741
+7921
+3465
+271
+15
+7922
+7923
+43
+7924
+7925
+4301
+7926
+7927
+248
+7928
+286
+647
+7929
+7930
+4907
+5065
+7931
+3
+7932
+7933
+9
+6950
+7934
+7935
+7936
+741
+99
+7937
+7938
+7939
+7940
+3148
+7941
+7942
+3095
+7943
+7944
+7945
+10
+7946
+6071
+7947
+7948
+892
+7949
+7531
+299
+14
+2546
+1172
+7950
+337
+7951
+3
+7952
+549
+703
+7953
+7954
+7955
+7956
+7835
+7957
+7958
+7959
+6439
+7960
+7961
+7962
+1262
+1021
+286
+7963
+7964
+15
+1089
+484
+7965
+19
+7966
+213
+7842
+7967
+32
+7968
+284
+464
+1470
+213
+22
+7969
+725
+7970
+7971
+7956
+398
+7972
+1456
+1637
+554
+317
+213
+7973
+7974
+337
+2700
+7975
+7976
+286
+7977
+7978
+533
+112
+15
+7979
+1955
+694
+7980
+7981
+7982
+7983
+1082
+2325
+7984
+6468
+22
+7985
+7986
+1765
+7987
+7988
+7989
+7990
+7991
+345
+6439
+3004
+7992
+3844
+21
+7993
+337
+2243
+196
+7994
+7995
+7270
+15
+7996
+1562
+179
+7997
+284
+1121
+7998
+915
+342
+586
+43
+892
+4634
+22
+7999
+2040
+8000
+342
+8001
+8002
+8003
+8004
+213
+446
+19
+8005
+1445
+2449
+317
+188
+317
+8006
+8007
+8008
+8009
+1112
+8010
+8011
+2
+8012
+8013
+20
+528
+4634
+8014
+57
+6915
+1356
+8015
+8016
+14
+8017
+6304
+8018
+647
+99
+5448
+34
+32
+22
+8019
+178
+8020
+8021
+201
+2804
+378
+270
+8022
+6490
+8023
+248
+8024
+8025
+15
+8026
+8027
+19
+8028
+8029
+8030
+2197
+694
+8031
+5780
+8032
+915
+8033
+8034
+8035
+323
+8036
+8037
+8038
+8039
+8040
+8041
+1655
+8042
+1513
+989
+15
+8043
+20
+32
+2694
+8044
+5976
+155
+8045
+8046
+1320
+249
+7215
+8047
+647
+8048
+8049
+8050
+8051
+7522
+5780
+8052
+7565
+3168
+8053
+104
+305
+1710
+4441
+1559
+8054
+4762
+416
+4028
+533
+8055
+2577
+222
+8056
+3669
+8057
+8058
+201
+8059
+8060
+292
+8061
+8062
+8063
+8064
+2993
+7522
+8065
+8066
+8067
+4053
+213
+8068
+8069
+8070
+8071
+14
+114
+815
+4227
+32
+242
+8072
+89
+8073
+179
+8074
+8075
+3
+8076
+19
+8077
+179
+8078
+8079
+8080
+8081
+4261
+14
+8082
+8083
+8084
+19
+1160
+115
+8085
+8086
+8087
+99
+279
+8088
+1889
+8089
+8090
+8091
+4
+8092
+1542
+303
+303
+416
+8093
+201
+102
+109
+8094
+3038
+5764
+8095
+337
+8096
+8097
+8098
+2836
+8099
+8100
+8101
+1071
+228
+8102
+493
+8103
+8104
+8105
+4747
+4390
+112
+8106
+869
+8107
+8108
+8109
+34
+8110
+7027
+8111
+8112
+8113
+8114
+8115
+8116
+8117
+1808
+8118
+415
+8119
+1502
+8120
+249
+8121
+910
+8122
+8123
+8124
+8125
+67
+8126
+8127
+8128
+8129
+57
+1551
+8130
+8131
+137
+8132
+19
+8133
+8134
+8135
+8136
+8137
+8138
+8139
+493
+8140
+8141
+8142
+1710
+286
+8143
+8144
+8145
+528
+8146
+286
+6533
+417
+8147
+77
+815
+1578
+8148
+8149
+8150
+57
+8151
+8152
+8153
+6627
+491
+16
+1453
+1021
+8154
+8155
+8156
+8157
+25
+1989
+8158
+5172
+8159
+8160
+8161
+8162
+2043
+8163
+8164
+8165
+253
+1252
+43
+8166
+5071
+1655
+2043
+8167
+2330
+19
+57
+337
+22
+12
+416
+228
+8168
+8169
+48
+8170
+8171
+8172
+3354
+8173
+8149
+8174
+8175
+8176
+8177
+586
+8178
+1224
+14
+8179
+8180
+8181
+8182
+8183
+8184
+8185
+8186
+646
+2872
+80
+8187
+8188
+8189
+8190
+8191
+751
+8192
+8193
+284
+491
+270
+8194
+5465
+8195
+20
+237
+8196
+15
+8197
+484
+8198
+493
+22
+179
+284
+1637
+4155
+8199
+5992
+8200
+232
+5846
+703
+8201
+8202
+8203
+5623
+2410
+8204
+8205
+8206
+10
+8207
+8208
+6161
+5130
+5080
+8209
+8210
+1249
+6505
+8211
+8212
+665
+5780
+2794
+43
+286
+8213
+5297
+665
+357
+8214
+8151
+2136
+8215
+8216
+8217
+8218
+2
+8219
+57
+2117
+8220
+8221
+331
+519
+8222
+8223
+3
+237
+1684
+8224
+845
+20
+22
+3844
+8225
+15
+35
+1710
+1824
+8226
+8227
+77
+8228
+43
+8229
+4173
+5773
+8230
+8231
+7768
+1817
+8232
+590
+8233
+8234
+8235
+8236
+8237
+286
+8238
+99
+8239
+416
+8240
+104
+8241
+9
+4227
+8242
+8243
+8244
+8245
+178
+137
+22
+8246
+8247
+8248
+213
+8249
+8250
+8251
+3061
+8252
+8253
+8254
+8255
+1042
+8256
+8257
+8258
+8259
+3976
+5838
+4
+1019
+2694
+8260
+5969
+3465
+8261
+1502
+8262
+8263
+8264
+6741
+15
+19
+8265
+270
+8266
+8267
+7522
+1562
+5614
+43
+3055
+8268
+15
+8269
+305
+8270
+2913
+1105
+8271
+176
+104
+8272
+164
+317
+1133
+15
+8273
+1710
+1812
+8274
+8275
+8276
+8277
+303
+8278
+57
+8279
+8280
+4961
+178
+8281
+98
+8282
+15
+484
+6505
+2
+32
+16
+8283
+8284
+5780
+8285
+8286
+12
+8287
+213
+8288
+8289
+8290
+8291
+1533
+398
+8292
+8293
+15
+5202
+1531
+8294
+4752
+19
+8295
+20
+8296
+140
+1354
+1383
+8297
+741
+8298
+8299
+8300
+8301
+8302
+8303
+616
+8304
+703
+1047
+8305
+8306
+8307
+2993
+19
+8308
+1018
+43
+43
+3407
+8309
+8310
+8311
+8312
+1364
+77
+5904
+8313
+8314
+8315
+8316
+8317
+616
+2953
+8318
+57
+8319
+8320
+1013
+590
+342
+8321
+8322
+209
+10
+8323
+4280
+1717
+1425
+8324
+3698
+715
+8325
+1710
+2804
+8326
+541
+8327
+8328
+8329
+8330
+317
+8331
+32
+8332
+8333
+8334
+8335
+662
+398
+8336
+77
+14
+4487
+8337
+8338
+2
+15
+2015
+286
+8339
+155
+286
+2477
+8340
+1738
+815
+8341
+140
+369
+4677
+178
+665
+658
+8342
+8343
+125
+2260
+8344
+354
+8345
+8346
+8347
+989
+436
+43
+22
+8348
+8349
+16
+8350
+8351
+8352
+299
+8353
+15
+15
+2733
+6335
+4422
+817
+8354
+8355
+8356
+74
+1234
+8357
+586
+8358
+8359
+8360
+8361
+5039
+1779
+8362
+8363
+598
+8364
+8365
+57
+317
+586
+57
+15
+12
+8366
+8367
+8368
+8369
+2060
+8370
+8371
+411
+8372
+125
+8373
+8374
+8375
+8376
+1710
+22
+8377
+8378
+43
+15
+8379
+8380
+172
+8381
+14
+6883
+7270
+8382
+413
+8115
+8383
+3626
+8384
+8385
+180
+8386
+57
+8387
+554
+8388
+2988
+671
+19
+5780
+178
+8389
+32
+8390
+8391
+284
+8392
+8393
+213
+8394
+5968
+8395
+8396
+43
+8397
+8398
+764
+6070
+8399
+176
+8400
+284
+303
+8401
+284
+305
+745
+8402
+8403
+8404
+2253
+32
+20
+8405
+2029
+43
+561
+8406
+34
+8407
+337
+8408
+411
+10
+3
+8409
+8410
+8411
+1426
+8412
+8413
+701
+3743
+25
+8414
+8415
+8416
+337
+8417
+8418
+5512
+3514
+861
+1692
+464
+1955
+8419
+57
+22
+8420
+8421
+8422
+5022
+8423
+1513
+411
+155
+8424
+197
+60
+188
+8425
+3732
+8426
+415
+8427
+57
+1153
+8428
+8429
+8430
+60
+8431
+8432
+8433
+8434
+317
+8435
+8436
+176
+6225
+8437
+8438
+624
+8439
+2982
+6736
+8440
+586
+8441
+8442
+7408
+1502
+176
+8443
+286
+8444
+8445
+8446
+213
+8447
+7743
+8448
+554
+703
+1310
+22
+822
+791
+8449
+57
+201
+8450
+6214
+7137
+8451
+15
+8448
+76
+8452
+19
+8453
+842
+2439
+936
+14
+8454
+1364
+8455
+8456
+19
+8457
+8458
+713
+8459
+15
+586
+8460
+8461
+8462
+8463
+8464
+8465
+3543
+8407
+2802
+597
+6400
+8466
+8467
+8468
+8469
+882
+17
+20
+2537
+8470
+8471
+8472
+4461
+10
+8473
+8474
+416
+8475
+8476
+19
+99
+357
+8477
+8478
+8479
+8480
+15
+1727
+8481
+301
+9
+9
+8482
+8483
+19
+248
+4024
+272
+8484
+8485
+8486
+317
+15
+4278
+19
+2762
+2347
+1049
+8487
+156
+15
+8488
+8489
+22
+8490
+8491
+1310
+8492
+178
+8493
+8494
+8495
+8496
+8497
+22
+528
+8498
+436
+8499
+751
+2253
+8500
+8501
+741
+694
+766
+345
+8502
+356
+8503
+8504
+8505
+8506
+137
+8507
+8508
+8509
+8510
+8511
+8512
+8513
+270
+8514
+8515
+4359
+8516
+8517
+8518
+357
+178
+8519
+8520
+1291
+8521
+8522
+740
+370
+2728
+8523
+1956
+764
+8524
+15
+3594
+8525
+8526
+8527
+8528
+8529
+8530
+349
+8531
+10
+3504
+8532
+7896
+200
+586
+700
+8533
+1559
+89
+19
+1401
+8534
+8535
+8536
+8537
+8538
+5561
+3369
+345
+178
+8539
+8540
+8541
+6335
+8542
+8543
+5780
+8544
+8545
+155
+8546
+8547
+2316
+8548
+915
+8549
+8550
+1481
+337
+8551
+8552
+155
+8553
+19
+137
+1109
+8554
+354
+8555
+2459
+1018
+8556
+8557
+15
+910
+8558
+178
+8559
+8560
+1401
+8561
+8562
+8563
+8564
+8565
+1169
+3182
+14
+971
+1574
+6071
+8566
+213
+8567
+9
+272
+8568
+10
+533
+5169
+331
+8569
+8570
+15
+402
+8571
+8572
+8573
+248
+2405
+8574
+114
+8575
+213
+43
+8576
+8577
+284
+8578
+8579
+8580
+8581
+1071
+8582
+8583
+3382
+8584
+8585
+966
+8586
+2289
+5078
+14
+8587
+32
+303
+1385
+900
+915
+8588
+15
+1502
+15
+8589
+8590
+43
+8591
+8592
+8593
+8594
+8595
+3148
+1668
+8596
+8597
+8598
+48
+20
+8599
+3026
+8600
+17
+15
+8601
+8602
+8603
+15
+8604
+541
+8605
+14
+8606
+8607
+873
+8608
+20
+8609
+1082
+1425
+8610
+8611
+119
+8612
+1109
+22
+8613
+3559
+5782
+8614
+89
+8615
+2924
+15
+3729
+8616
+8617
+2427
+60
+989
+597
+15
+303
+8618
+7661
+32
+8619
+8620
+7154
+8621
+2770
+115
+738
+501
+6505
+8622
+8623
+20
+8624
+6581
+4441
+8625
+1018
+8626
+8627
+19
+6010
+8628
+8629
+318
+8630
+7176
+248
+8631
+305
+416
+185
+8632
+10
+8633
+77
+8634
+1232
+8635
+15
+8636
+3251
+8637
+303
+19
+14
+2029
+19
+1100
+43
+8638
+8639
+8640
+4278
+8641
+4855
+19
+399
+16
+8642
+390
+337
+357
+1232
+1021
+6532
+8643
+188
+597
+8644
+8645
+1749
+8646
+915
+32
+1696
+354
+8647
+3055
+15
+983
+6987
+284
+2009
+4388
+8648
+15
+8649
+282
+20
+958
+8650
+270
+8651
+8652
+8653
+1314
+99
+8654
+4116
+8655
+915
+8656
+8657
+8658
+25
+213
+337
+8659
+303
+694
+14
+8660
+8661
+8662
+6761
+1566
+7830
+8663
+8664
+8665
+32
+8666
+8667
+8668
+213
+8669
+15
+8670
+331
+248
+284
+8671
+8672
+8673
+286
+8674
+4387
+8675
+8676
+8677
+8678
+2349
+8679
+8680
+8681
+8682
+8683
+8684
+8685
+8686
+1401
+323
+188
+8687
+8688
+1388
+5585
+2347
+8689
+3908
+8690
+305
+8256
+15
+8691
+8692
+8693
+8694
+8695
+8696
+8697
+8698
+8699
+8700
+8701
+534
+8702
+3279
+8703
+152
+48
+8704
+8705
+15
+8706
+8707
+845
+357
+8708
+152
+8709
+2537
+8710
+8711
+8712
+12
+8713
+8714
+8715
+741
+8716
+936
+8717
+509
+8718
+1513
+3553
+8719
+1515
+8720
+9
+8721
+8722
+1920
+8723
+845
+8724
+8725
+8726
+815
+6070
+676
+8727
+6654
+2009
+1765
+1790
+337
+43
+1234
+8728
+8729
+598
+8730
+57
+8731
+7379
+8732
+8733
+57
+8734
+8735
+43
+6035
+10
+286
+8736
+8737
+8738
+8739
+892
+20
+8740
+8741
+15
+1563
+8742
+4
+398
+665
+694
+284
+8743
+5211
+8744
+8745
+8746
+357
+8747
+8171
+15
+861
+8748
+19
+8749
+4354
+8750
+590
+831
+8751
+8752
+8753
+8754
+8755
+176
+6371
+225
+8756
+8757
+8758
+3
+491
+8759
+8760
+8761
+8762
+8763
+20
+8764
+8765
+2537
+1502
+8766
+1992
+8767
+1234
+484
+1112
+6594
+8768
+8769
+7479
+2446
+2234
+22
+3626
+597
+415
+8770
+1012
+4650
+1244
+8771
+111
+817
+8772
+15
+8773
+284
+1571
+349
+67
+738
+279
+225
+19
+317
+8774
+138
+2139
+8775
+493
+8776
+8777
+8778
+8779
+22
+248
+8780
+8781
+8782
+7675
+8783
+43
+15
+67
+768
+8784
+8785
+506
+8786
+8787
+8788
+1232
+1563
+19
+3598
+4650
+8789
+4070
+8790
+8791
+322
+8792
+19
+170
+8793
+8794
+137
+32
+225
+8795
+8796
+8797
+8798
+8799
+2338
+8800
+7836
+8280
+3828
+8801
+8802
+4298
+8803
+8804
+8805
+8806
+4406
+323
+8807
+10
+1166
+3553
+7176
+32
+8808
+8809
+8810
+33
+6441
+178
+8811
+8812
+915
+15
+286
+791
+8813
+8814
+3790
+6602
+665
+15
+3317
+8815
+8816
+2410
+303
+15
+8817
+8818
+1010
+210
+19
+3559
+4677
+8819
+15
+3252
+8820
+8821
+3827
+8822
+10
+8823
+8824
+8825
+3054
+104
+248
+2308
+213
+8826
+2619
+237
+8827
+1829
+2338
+597
+8828
+2619
+8829
+286
+2537
+2988
+152
+303
+8830
+8831
+800
+138
+8832
+9
+8833
+5780
+303
+501
+32
+8834
+15
+1834
+3739
+7105
+8835
+8836
+892
+8837
+8838
+34
+457
+5780
+8839
+8840
+354
+7139
+8841
+8842
+8843
+8844
+8845
+1965
+8846
+1364
+8847
+155
+8848
+4
+180
+1415
+8849
+5780
+8850
+1200
+2692
+8851
+8852
+487
+286
+155
+8853
+2694
+155
+8854
+8855
+15
+8856
+15
+3
+8857
+8858
+8859
+4283
+8860
+8861
+4954
+8862
+15
+8863
+8864
+8865
+8866
+8867
+8868
+4624
+8869
+1364
+8870
+8871
+2260
+179
+1026
+8872
+5080
+8873
+8874
+8875
+8876
+464
+8877
+6161
+6412
+8878
+8879
+16
+873
+5780
+8880
+5825
+6214
+8881
+1217
+48
+222
+8882
+8883
+345
+8884
+8885
+201
+137
+16
+2347
+1262
+8886
+8887
+57
+43
+8888
+8889
+415
+8890
+57
+8891
+2728
+8892
+19
+464
+8893
+8894
+8895
+8896
+8897
+386
+3029
+349
+872
+4430
+8898
+8899
+8900
+170
+8901
+8902
+4512
+3726
+8903
+1047
+1169
+8904
+8905
+8906
+701
+8907
+8908
+8909
+8910
+8911
+8912
+8913
+8914
+8915
+8916
+8917
+8918
+8919
+8920
+8921
+1870
+8922
+3559
+1287
+5820
+8923
+6878
+140
+188
+8924
+2841
+15
+32
+1870
+8925
+3976
+8926
+19
+8927
+8928
+541
+6304
+8929
+1744
+48
+8930
+1384
+915
+2347
+8931
+43
+8932
+8933
+694
+164
+8934
+8935
+741
+8936
+8937
+9
+43
+8938
+2260
+8939
+1232
+8940
+4685
+303
+2540
+8941
+554
+284
+15
+1257
+8942
+8943
+8944
+1856
+8945
+8946
+8947
+8948
+8949
+3553
+8950
+8951
+8952
+8953
+2476
+8954
+665
+142
+8955
+936
+155
+8956
+5912
+8957
+15
+137
+284
+286
+495
+57
+22
+8958
+8959
+8960
+14
+8961
+4012
+1870
+8962
+43
+8963
+8964
+8965
+8966
+15
+15
+3829
+3743
+6796
+8967
+519
+8968
+703
+648
+57
+232
+5650
+8969
+8970
+8971
+1847
+8972
+8973
+1465
+8974
+8975
+8976
+2849
+8977
+665
+8978
+4490
+8979
+274
+112
+286
+8980
+8981
+1907
+8982
+8983
+32
+8984
+8985
+20
+8986
+4422
+8987
+1575
+1149
+8988
+514
+8989
+8990
+2341
+15
+109
+323
+3930
+8991
+8992
+43
+14
+8993
+8994
+8995
+415
+8996
+19
+8997
+536
+2728
+32
+8998
+8999
+9000
+15
+9001
+3466
+9002
+9003
+2
+155
+286
+5304
+9004
+9005
+6260
+9006
+15
+8645
+15
+554
+9007
+9008
+9009
+9010
+179
+402
+4907
+43
+77
+9011
+10
+1907
+20
+9012
+123
+57
+9013
+9014
+9015
+303
+9016
+9017
+1606
+9018
+398
+9019
+201
+237
+337
+9020
+201
+9021
+15
+6518
+89
+9022
+284
+9023
+12
+984
+4963
+9024
+77
+8110
+9025
+9026
+9027
+5992
+9028
+892
+1956
+9029
+9030
+98
+43
+9
+647
+345
+3
+9031
+20
+15
+9032
+2314
+4297
+5770
+9033
+337
+9034
+179
+9035
+9036
+25
+301
+736
+19
+5731
+9037
+345
+464
+692
+9038
+9039
+9040
+9041
+9042
+19
+493
+1465
+9043
+616
+9044
+9045
+4693
+270
+9046
+916
+9047
+416
+9048
+1013
+9049
+9050
+9051
+1984
+9052
+416
+9053
+373
+9
+9054
+9055
+9056
+9057
+2349
+286
+19
+5780
+9058
+1426
+9059
+19
+9060
+2824
+1655
+9061
+317
+9062
+9063
+9064
+9065
+915
+9066
+9067
+9068
+3205
+9
+57
+9069
+501
+178
+9070
+9071
+1514
+5285
+1425
+9072
+1900
+32
+9073
+19
+9074
+19
+32
+9075
+2835
+15
+9076
+1955
+104
+9
+4364
+416
+9077
+9078
+9079
+9080
+9081
+533
+9082
+14
+9083
+2865
+9084
+9085
+5313
+9086
+1834
+9087
+225
+9088
+15
+4278
+286
+9089
+284
+7716
+9090
+43
+9091
+35
+9092
+2625
+284
+284
+9093
+1100
+38
+89
+6595
+248
+2000
+9094
+5780
+9095
+9096
+9097
+2770
+9098
+270
+9099
+9100
+9101
+237
+7969
+1674
+248
+2790
+9102
+9103
+9104
+9105
+9106
+43
+9107
+1716
+1559
+5614
+9108
+1817
+7982
+249
+9109
+180
+9110
+9111
+9112
+9113
+9114
+9115
+104
+25
+3406
+8146
+586
+3543
+2323
+9116
+586
+9117
+9118
+9119
+9120
+4873
+484
+9121
+738
+345
+4634
+331
+9122
+9123
+9124
+9125
+9126
+9127
+416
+9128
+357
+286
+9129
+5217
+9130
+2824
+694
+9131
+9132
+57
+286
+9133
+9134
+3601
+9135
+58
+176
+19
+9136
+9137
+7154
+7108
+9138
+9139
+1612
+1169
+736
+9140
+9141
+892
+32
+9142
+1082
+5908
+9143
+9144
+9145
+865
+2577
+4198
+57
+9146
+357
+9147
+9148
+43
+303
+201
+9149
+9150
+1531
+15
+5415
+57
+586
+270
+9151
+3279
+9152
+3745
+15
+9153
+9154
+46
+9155
+6513
+1232
+15
+815
+831
+9156
+9157
+2559
+491
+9158
+9159
+3330
+14
+9160
+9161
+19
+1013
+566
+9162
+9163
+9164
+9165
+4088
+9166
+9167
+4850
+399
+286
+57
+15
+415
+9168
+22
+9169
+9170
+9171
+694
+713
+9172
+32
+244
+9173
+8297
+2427
+7030
+493
+9174
+9175
+9176
+9177
+89
+533
+60
+9178
+9179
+15
+66
+9180
+448
+10
+9181
+9182
+46
+9183
+5780
+43
+927
+586
+8444
+19
+764
+9184
+9185
+6877
+9186
+213
+15
+9187
+9188
+910
+9189
+9190
+2018
+9191
+337
+9192
+972
+9193
+20
+115
+22
+201
+9194
+9195
+5780
+6372
+9196
+209
+9197
+14
+2806
+57
+416
+104
+303
+665
+741
+9198
+9199
+1357
+1961
+5825
+188
+9200
+492
+817
+436
+9201
+43
+99
+112
+1401
+9202
+248
+9203
+9204
+57
+9205
+9206
+9207
+9208
+2706
+99
+9209
+43
+9210
+379
+9211
+9212
+9213
+9214
+3328
+9215
+9216
+9217
+1817
+446
+7014
+9218
+9219
+9220
+4512
+213
+872
+9221
+9222
+817
+15
+179
+4012
+22
+9223
+745
+9224
+9225
+342
+3376
+9226
+9227
+9228
+9229
+1224
+464
+9230
+1364
+1710
+9231
+9232
+2356
+9233
+286
+665
+9234
+48
+248
+9235
+1310
+9236
+1987
+9237
+284
+9238
+8566
+9239
+9240
+248
+9241
+9242
+5908
+4070
+7072
+70
+2015
+5623
+1077
+9243
+5938
+248
+284
+248
+15
+4230
+9244
+9245
+12
+9246
+9247
+9248
+43
+9249
+9250
+9251
+586
+416
+9252
+213
+9
+7595
+303
+9253
+9254
+5797
+9255
+9256
+4963
+1720
+9257
+9258
+9259
+9260
+141
+9261
+9262
+77
+213
+9263
+2446
+616
+269
+9264
+9265
+237
+9266
+284
+6965
+32
+484
+9267
+9268
+137
+9269
+34
+9270
+237
+9271
+9272
+7746
+9273
+9274
+9275
+9276
+9277
+5702
+7666
+9278
+402
+9279
+519
+9280
+9281
+9282
+8091
+616
+9283
+9284
+9285
+9286
+9287
+9288
+1160
+9289
+9290
+7276
+9291
+9292
+20
+9293
+509
+9294
+9295
+43
+9296
+9297
+9298
+2625
+5601
+1574
+19
+379
+9
+8455
+22
+3055
+20
+9299
+4915
+9300
+9301
+228
+9302
+9303
+554
+15
+9304
+9305
+540
+9306
+3233
+9307
+9308
+9309
+9310
+842
+1870
+208
+741
+9311
+9312
+19
+9313
+5410
+9314
+9315
+12
+5780
+9005
+111
+9316
+9317
+7194
+15
+7610
+1300
+9318
+9319
+9320
+9321
+3978
+9322
+1580
+15
+20
+1655
+9323
+5299
+1775
+9324
+597
+19
+20
+9325
+9326
+32
+5825
+35
+9327
+22
+9328
+9329
+9330
+9331
+9332
+1637
+9333
+8778
+1470
+9334
+9335
+77
+9336
+1212
+57
+14
+9337
+286
+348
+1912
+114
+286
+9338
+745
+7350
+9339
+9340
+1425
+9341
+48
+172
+9342
+493
+57
+415
+9343
+9344
+9345
+9346
+9347
+345
+9348
+9349
+9350
+9351
+248
+9352
+9353
+9354
+284
+9355
+9356
+7429
+9357
+9358
+357
+9359
+178
+242
+9360
+9361
+9362
+9363
+697
+9364
+397
+493
+9365
+1169
+9366
+9367
+770
+15
+9368
+9123
+20
+9369
+665
+32
+9370
+9371
+15
+9372
+9373
+9374
+9375
+248
+1364
+9376
+9377
+707
+5627
+357
+1944
+5780
+9378
+67
+9039
+9379
+9380
+1001
+8351
+849
+2043
+14
+9381
+9382
+2157
+3172
+9383
+9384
+4551
+9385
+4294
+910
+1875
+14
+1356
+9386
+43
+9387
+9388
+48
+9389
+248
+1234
+5780
+1529
+9390
+305
+6741
+17
+14
+43
+249
+9391
+43
+9392
+43
+9393
+9394
+476
+8946
+9395
+9396
+9397
+4982
+22
+9398
+9399
+9400
+7743
+317
+32
+20
+9401
+2206
+671
+9402
+590
+1612
+9403
+9404
+77
+9405
+9406
+43
+9407
+9408
+16
+9409
+337
+402
+9410
+43
+9411
+915
+9412
+977
+9413
+9414
+9415
+303
+9416
+671
+201
+5431
+9417
+283
+583
+9418
+15
+9419
+9420
+3417
+671
+209
+9421
+861
+9422
+317
+248
+9423
+9424
+33
+303
+9425
+2419
+568
+48
+9426
+1401
+19
+9427
+9428
+9429
+57
+9430
+416
+354
+3128
+9431
+22
+1377
+9432
+9433
+9434
+2944
+9435
+9436
+5582
+15
+9437
+286
+15
+10
+9438
+9439
+1470
+9440
+201
+9441
+2318
+1291
+286
+9442
+9443
+9444
+827
+9445
+9446
+178
+9395
+3944
+9447
+9448
+3964
+15
+9449
+9450
+19
+484
+9451
+9452
+4634
+9453
+1927
+19
+9454
+9455
+15
+1364
+9456
+9457
+9458
+9459
+15
+3599
+9460
+9461
+5344
+9462
+25
+9463
+245
+1840
+178
+9464
+9465
+1584
+4317
+2824
+9466
+9467
+354
+9468
+751
+792
+9469
+9470
+5218
+9471
+2841
+43
+430
+2128
+9472
+9473
+32
+9474
+9475
+48
+1710
+9476
+9477
+1377
+9478
+9479
+9480
+9481
+9482
+9483
+9484
+185
+2619
+9485
+9486
+9487
+20
+1562
+2911
+9488
+586
+5877
+9395
+9
+3330
+9489
+9490
+9491
+67
+9492
+2944
+134
+9493
+15
+9494
+5654
+892
+2047
+1710
+3030
+201
+19
+597
+25
+1961
+9495
+14
+4278
+9496
+648
+9497
+9498
+9499
+225
+19
+22
+9500
+3743
+354
+9501
+983
+2835
+9502
+9503
+9504
+249
+9505
+15
+4518
+9506
+9507
+43
+9508
+3852
+9509
+9510
+1425
+1604
+9511
+3961
+9512
+9513
+9514
+9515
+9516
+4583
+9517
+9518
+10
+209
+1100
+9519
+9520
+9521
+9522
+9523
+4012
+9524
+32
+9525
+1051
+9526
+7291
+9527
+9528
+9529
+1021
+189
+286
+3442
+9530
+6384
+303
+337
+2410
+197
+9531
+9532
+4388
+9533
+3148
+9534
+22
+9535
+9536
+9537
+554
+9538
+9539
+1232
+4439
+554
+597
+4426
+4
+9540
+155
+9541
+9542
+33
+9543
+9544
+930
+514
+109
+861
+1282
+402
+554
+357
+2764
+9545
+9546
+3599
+9547
+19
+730
+12
+9548
+164
+586
+9549
+1559
+3417
+7238
+9550
+791
+9551
+10
+4070
+271
+9552
+15
+9553
+9554
+9555
+9556
+5299
+415
+1027
+415
+237
+9557
+9558
+9559
+57
+249
+25
+9560
+2697
+822
+9561
+9562
+6505
+352
+9563
+671
+9564
+22
+363
+1116
+548
+9565
+501
+34
+57
+9566
+9567
+9568
+1743
+9569
+379
+9570
+5208
+9571
+416
+7137
+8653
+9572
+179
+9573
+9574
+415
+3525
+9575
+14
+5820
+736
+9576
+178
+176
+914
+2764
+9577
+681
+9578
+15
+597
+213
+338
+9579
+9580
+213
+533
+416
+303
+25
+9395
+4714
+9581
+9395
+4506
+1172
+9395
+9582
+9583
+9584
+1295
+15
+66
+6086
+32
+15
+1710
+315
+19
+9585
+9395
+32
+9586
+303
+5623
+5039
+936
+554
+738
+9587
+9588
+9589
+9590
+1234
+9591
+1513
+7032
+9592
+9593
+178
+9594
+9595
+9596
+1010
+2728
+9597
+32
+9598
+4042
+9395
+9395
+9599
+58
+9600
+188
+1927
+22
+9601
+9602
+9603
+9604
+9605
+9606
+9607
+8465
+1212
+9608
+9395
+9395
+1710
+1540
+274
+114
+5923
+222
+9609
+9395
+9610
+270
+9611
+1606
+936
+9612
+22
+9613
+9614
+398
+248
+9615
+9616
+9617
+4419
+9618
+9619
+9620
+9621
+9622
+9323
+3964
+9623
+9624
+9625
+178
+3508
+9626
+1710
+9627
+188
+9628
+9629
+155
+2841
+284
+6612
+4165
+25
+4764
+9630
+9631
+337
+9632
+1637
+9633
+9634
+15
+284
+9635
+8414
+9636
+9637
+9638
+9639
+248
+9640
+317
+1262
+7429
+9641
+2026
+248
+9642
+925
+9643
+9644
+9645
+484
+9646
+761
+9647
+9648
+9649
+286
+16
+9650
+9651
+8653
+9652
+3427
+10
+9653
+43
+9654
+9655
+249
+3968
+4
+9656
+416
+9657
+43
+8297
+9658
+9659
+5400
+9660
+2309
+9661
+15
+5007
+286
+242
+9662
+464
+9663
+1514
+9664
+9665
+249
+9666
+4982
+317
+43
+9667
+48
+9668
+9669
+284
+9670
+9671
+9672
+540
+373
+7014
+9395
+9673
+9674
+179
+134
+43
+9675
+43
+377
+9676
+20
+15
+9677
+9678
+411
+9679
+8348
+19
+5577
+1386
+9395
+9680
+1018
+9681
+305
+686
+9210
+640
+9682
+3291
+9395
+9395
+9683
+9684
+842
+892
+9395
+9685
+1293
+9
+9686
+9687
+713
+9688
+5908
+9395
+9689
+9395
+1867
+1442
+9690
+1716
+9691
+25
+9692
+9693
+9694
+22
+1502
+9695
+2694
+9696
+713
+9697
+5326
+20
+9698
+9699
+9395
+15
+9
+9700
+9701
+9702
+19
+9119
+92
+9395
+9395
+9703
+9395
+9
+9395
+9704
+20
+2787
+15
+9705
+14
+484
+19
+299
+4
+3481
+9706
+9707
+225
+9708
+373
+3330
+9709
+2591
+9710
+1425
+43
+4364
+2694
+9711
+19
+9712
+9713
+9714
+9715
+9716
+9717
+2944
+9718
+9719
+14
+2694
+15
+9720
+9721
+1291
+43
+9722
+9723
+14
+9724
+9725
+2260
+648
+9395
+1083
+9726
+9727
+802
+237
+5080
+9728
+2430
+5780
+1808
+707
+2694
+2787
+5780
+9729
+9730
+9731
+15
+9732
+9395
+9733
+9395
+9395
+9734
+9395
+554
+9735
+9736
+9737
+9738
+303
+9739
+19
+9740
+9741
+1870
+3296
+1300
+9742
+3
+9743
+210
+15
+9744
+2029
+249
+357
+337
+2709
+57
+2
+4764
+416
+9745
+9746
+9747
+66
+32
+9748
+43
+20
+4042
+15
+9749
+9395
+9750
+9
+9751
+9752
+9753
+10
+736
+9754
+9755
+9756
+301
+114
+9757
+9758
+9759
+2430
+9760
+9761
+35
+201
+9762
+354
+9763
+9764
+9765
+9766
+9767
+98
+8320
+9768
+201
+19
+286
+19
+10
+192
+8249
+9769
+3514
+9395
+3034
+554
+9770
+337
+14
+9771
+464
+9772
+9773
+9774
+4714
+9775
+9776
+3958
+9777
+9395
+484
+32
+9778
+10
+9779
+5451
+354
+9780
+3995
+9395
+597
+22
+248
+14
+4269
+9781
+9782
+9783
+337
+398
+9784
+140
+9785
+9786
+178
+9787
+9395
+9788
+9789
+303
+3989
+15
+2289
+9790
+9791
+9792
+179
+9793
+822
+9794
+9795
+1502
+6616
+4855
+9796
+9395
+9797
+201
+153
+4
+9798
+9799
+317
+554
+493
+32
+694
+9800
+5837
+1655
+9801
+4
+9802
+9803
+9804
+43
+14
+668
+9020
+9805
+155
+16
+89
+32
+8685
+272
+357
+9806
+9807
+1808
+9808
+5169
+9809
+9810
+2243
+16
+9811
+9812
+9813
+32
+286
+15
+9814
+9815
+9816
+7137
+9817
+9818
+9819
+35
+9820
+9821
+185
+9822
+8344
+9823
+9824
+9825
+2403
+9826
+5900
+9827
+15
+9828
+9829
+1710
+14
+9830
+1790
+286
+48
+9831
+9832
+248
+6364
+9395
+248
+9833
+249
+9834
+764
+9835
+9836
+9837
+3100
+9838
+9839
+9840
+9841
+9842
+9843
+141
+9395
+2697
+9844
+9845
+9395
+9395
+9846
+9847
+9848
+9849
+286
+9850
+9851
+337
+98
+9395
+2
+9852
+9853
+2971
+9395
+9854
+415
+9855
+703
+115
+9856
+9857
+14
+9858
+32
+892
+213
+9859
+9860
+57
+9861
+9862
+9863
+9864
+9395
+337
+9865
+2919
+43
+9866
+188
+9867
+168
+9868
+9869
+3302
+9870
+9871
+6594
+9872
+692
+9780
+9873
+32
+9874
+4388
+9875
+6445
+4631
+1542
+15
+9876
+9877
+1013
+43
+1637
+9878
+34
+9879
+9880
+138
+9881
+249
+4855
+9882
+155
+9883
+9884
+7343
+9395
+5198
+57
+694
+43
+9395
+9885
+286
+9886
+3407
+238
+286
+9887
+2697
+9888
+9889
+3698
+15
+9890
+9891
+9395
+1082
+213
+9892
+14
+303
+9
+705
+9893
+9894
+9895
+2157
+9896
+8889
+9395
+9897
+7600
+9898
+9899
+9900
+2035
+9901
+9902
+1360
+9903
+9904
+9905
+9395
+35
+9906
+5792
+15
+1605
+248
+9907
+9908
+9909
+57
+3978
+9910
+2655
+9911
+9912
+9395
+201
+554
+1015
+9913
+57
+484
+9914
+9915
+179
+9916
+9917
+286
+43
+286
+9918
+9919
+9920
+345
+9921
+9922
+8853
+222
+3491
+694
+3055
+35
+9923
+32
+9924
+1710
+9925
+791
+3421
+9926
+9927
+270
+9395
+7580
+5314
+9928
+9929
+9930
+98
+99
+15
+9931
+15
+9932
+22
+590
+9395
+933
+2049
+25
+9309
+4747
+7183
+9933
+9934
+1026
+9935
+25
+9936
+9
+10
+8053
+176
+155
+15
+14
+5774
+1364
+9937
+9938
+9939
+9940
+178
+9941
+180
+9942
+6850
+12
+9943
+15
+19
+1230
+9944
+9945
+2849
+6771
+9946
+4982
+32
+9947
+8282
+9948
+125
+5127
+303
+9949
+9950
+9951
+9952
+5791
+9953
+354
+9954
+9955
+188
+9956
+9957
+9958
+274
+9959
+4075
+9960
+671
+9961
+411
+4028
+9962
+20
+9963
+1232
+222
+35
+155
+19
+9964
+9965
+9395
+303
+9966
+9
+872
+694
+237
+1513
+9967
+6029
+22
+9968
+5022
+286
+164
+1710
+9969
+9970
+2
+89
+9971
+115
+9972
+597
+8670
+9973
+178
+9974
+2619
+464
+9975
+9976
+9977
+24
+9978
+115
+9979
+9980
+9981
+9982
+827
+1870
+9983
+286
+3790
+9984
+2619
+9985
+3406
+1464
+9986
+647
+9987
+9988
+9989
+248
+284
+8437
+9990
+213
+337
+9991
+9992
+9993
+9994
+8602
+4185
+9995
+4
+9996
+9997
+9998
+9999
+10000
+10001
+2668
+15
+15
+179
+10002
+9395
+1987
+10003
+10004
+464
+32
+10005
+15
+176
+20
+286
+10006
+10
+10007
+2289
+10008
+10009
+2824
+10010
+484
+2356
+10011
+2009
+14
+9396
+6559
+10012
+10013
+10014
+736
+3407
+10015
+10016
+19
+10017
+7376
+10018
+1395
+10019
+10020
+10021
+10022
+10023
+10024
+8783
+9
+10025
+10026
+15
+10027
+648
+32
+1021
+57
+15
+286
+15
+10028
+10029
+286
+10030
+10031
+272
+10032
+10033
+331
+9395
+9074
+4278
+20
+10034
+1425
+19
+3353
+248
+10035
+10036
+10037
+15
+3251
+8367
+10038
+10039
+1559
+10040
+10041
+2834
+5780
+2035
+701
+20
+213
+19
+248
+10042
+10043
+10044
+10045
+284
+32
+10046
+10047
+10048
+1300
+7276
+109
+155
+2770
+10049
+1655
+10050
+10051
+10052
+1531
+694
+1026
+3507
+89
+10053
+10054
+389
+2471
+125
+10055
+10056
+10057
+10058
+3104
+10059
+10060
+14
+10061
+10062
+10063
+2924
+10064
+10065
+10066
+10067
+10068
+43
+10069
+10070
+10071
+250
+1716
+10072
+10073
+14
+10074
+10075
+1705
+77
+10076
+1710
+10077
+10078
+10079
+10080
+10081
+10082
+10083
+2309
+10084
+10085
+1169
+514
+3
+15
+10086
+213
+242
+152
+10087
+10088
+1604
+305
+10089
+10090
+9395
+1536
+10091
+10092
+10093
+10094
+248
+286
+10095
+16
+6496
+16
+9
+10096
+10097
+7835
+398
+10098
+379
+5900
+10099
+242
+10100
+337
+213
+10101
+10102
+10103
+178
+337
+201
+1364
+9395
+10104
+43
+10105
+10106
+10063
+10107
+20
+10108
+10109
+10110
+648
+9095
+271
+3055
+10111
+6243
+10112
+705
+3139
+305
+10113
+643
+10114
+484
+15
+284
+10115
+7531
+10116
+10117
+861
+10118
+2449
+10119
+10120
+15
+10121
+1382
+10122
+10123
+892
+10124
+10125
+10126
+10127
+10128
+10129
+12
+10130
+10131
+915
+10132
+57
+10133
+1710
+464
+10134
+7183
+10135
+10136
+10137
+1026
+1508
+10138
+6050
+1513
+10139
+849
+12
+10140
+10141
+10142
+213
+303
+10143
+10144
+10145
+99
+57
+1529
+179
+19
+10146
+514
+10147
+15
+57
+10148
+10149
+19
+10150
+10151
+10152
+10153
+10154
+102
+10155
+10156
+5561
+337
+822
+1119
+10157
+859
+249
+10158
+1575
+2281
+10159
+10160
+2550
+9037
+1524
+10161
+4918
+10162
+10163
+10164
+15
+3818
+305
+4
+77
+2836
+501
+716
+10165
+415
+1425
+32
+286
+822
+10166
+10167
+249
+10168
+178
+9
+10169
+305
+9123
+10170
+176
+10171
+331
+10172
+10173
+10174
+10175
+10176
+5561
+10177
+6214
+301
+703
+10178
+10179
+10180
+428
+6513
+3059
+10181
+10182
+10183
+10184
+10185
+57
+14
+10186
+10187
+1885
+10188
+10189
+19
+616
+19
+15
+10190
+10191
+10192
+48
+10193
+10
+10194
+10195
+10196
+1710
+10197
+9011
+1529
+4
+10198
+10199
+317
+10200
+152
+178
+3858
+10201
+15
+152
+8724
+910
+10202
+15
+25
+703
+1529
+10203
+10204
+10205
+10206
+583
+413
+3787
+1001
+357
+98
+20
+1465
+10207
+491
+305
+10208
+10209
+76
+10210
+10211
+286
+721
+10212
+10213
+10214
+10215
+10216
+1392
+10217
+10218
+10219
+2865
+598
+10220
+10221
+4075
+10222
+10223
+790
+10224
+10225
+10226
+4278
+99
+48
+7835
+10227
+1696
+14
+10228
+19
+10229
+42
+6507
+10230
+6364
+2593
+1513
+57
+4702
+10231
+303
+80
+10232
+77
+910
+10233
+303
+9395
+43
+10234
+10235
+10236
+22
+10237
+9178
+10238
+554
+48
+1531
+284
+317
+10239
+1817
+6171
+5223
+1604
+345
+8605
+10240
+19
+58
+2015
+10241
+10242
+6644
+337
+10243
+284
+4
+10244
+10245
+415
+32
+10246
+16
+10247
+10248
+286
+10249
+10250
+10251
+1047
+10252
+10253
+284
+10254
+10255
+10256
+1533
+10257
+2260
+89
+213
+10258
+10259
+2449
+337
+10260
+10261
+694
+43
+10262
+10263
+286
+872
+32
+10264
+1718
+5990
+4061
+10265
+5216
+32
+10266
+936
+411
+10224
+10267
+77
+10268
+4422
+1749
+43
+32
+10269
+10270
+9
+1018
+43
+10271
+286
+43
+10272
+10273
+10274
+10275
+10276
+845
+8338
+10277
+10278
+10064
+10279
+1502
+10280
+379
+10281
+10282
+14
+10283
+1514
+10284
+286
+2135
+237
+10285
+32
+2064
+10286
+10287
+501
+1011
+4530
+10288
+651
+15
+10289
+250
+910
+10290
+12
+6179
+3
+373
+10291
+200
+10292
+5438
+8593
+10293
+16
+5022
+8053
+10294
+10295
+5410
+20
+1991
+10296
+10297
+1513
+19
+10298
+10299
+10300
+1172
+15
+519
+10301
+1444
+10302
+10303
+9382
+43
+448
+213
+590
+10304
+349
+10305
+10306
+493
+248
+57
+32
+10307
+10308
+10309
+77
+2019
+10310
+10311
+286
+845
+142
+10312
+1425
+10313
+10314
+10315
+284
+5326
+6359
+10316
+19
+10317
+10318
+10319
+10320
+48
+10321
+10322
+3238
+1364
+10323
+6915
+10
+10324
+1692
+10325
+10326
+2537
+305
+15
+284
+10327
+10328
+1100
+10329
+10330
+15
+5839
+564
+365
+10331
+7624
+10332
+15
+286
+357
+10333
+1012
+1867
+10334
+10335
+10336
+15
+10337
+10338
+10339
+10340
+4024
+10341
+10342
+92
+554
+19
+10343
+10344
+10345
+10346
+10347
+8230
+10348
+4452
+10349
+10350
+694
+3413
+10230
+411
+613
+15
+10351
+10352
+245
+15
+10353
+358
+10354
+9037
+10355
+1018
+1558
+10356
+99
+5601
+222
+10357
+484
+10358
+4048
+1212
+1800
+1956
+10359
+10360
+10361
+548
+10362
+10363
+10364
+10235
+3139
+179
+10365
+966
+554
+10366
+398
+915
+10367
+2526
+10368
+10369
+43
+10370
+484
+14
+286
+10371
+179
+10372
+10373
+464
+1529
+137
+10374
+8946
+10375
+10376
+10377
+337
+10378
+337
+10379
+10380
+10381
+15
+42
+213
+303
+10382
+2043
+4918
+10383
+1356
+10384
+3385
+9210
+4116
+10385
+77
+3127
+337
+10386
+77
+213
+10387
+337
+7032
+19
+1531
+10388
+3544
+2314
+10313
+10389
+10390
+4963
+3032
+5923
+736
+5773
+10391
+10392
+222
+586
+10393
+10394
+345
+10395
+10396
+10397
+2463
+10398
+19
+4108
+10399
+342
+7380
+2993
+248
+20
+5780
+10400
+6121
+345
+9837
+10401
+10402
+3178
+2135
+10403
+354
+10404
+10405
+10406
+10407
+10408
+1047
+10409
+2259
+2995
+573
+337
+4907
+10410
+10411
+10412
+112
+10413
+10414
+303
+10415
+10416
+464
+7379
+10417
+6289
+10418
+57
+484
+10419
+15
+7729
+1612
+337
+10420
+337
+10421
+16
+10422
+278
+10423
+66
+1052
+48
+2243
+286
+9144
+303
+10424
+10425
+35
+1668
+4317
+115
+10426
+514
+10427
+10428
+10429
+6920
+3061
+10430
+2526
+3225
+10431
+10432
+2427
+10433
+250
+10434
+77
+70
+10435
+4334
+10436
+10437
+1100
+2347
+10438
+20
+647
+2306
+178
+10439
+10440
+827
+10441
+3470
+1181
+10442
+10443
+10444
+10445
+66
+19
+270
+10446
+15
+188
+9583
+386
+10447
+10448
+14
+10449
+2724
+10450
+2325
+10451
+6962
+188
+10452
+2776
+3010
+10453
+1410
+10454
+10455
+10456
+10457
+10458
+323
+1829
+10459
+7600
+369
+10460
+20
+10461
+7442
+10462
+2627
+3055
+1149
+12
+464
+10463
+10464
+1425
+10465
+10466
+10467
+10468
+10439
+10469
+10470
+57
+278
+10471
+1149
+10472
+10473
+10474
+10475
+10476
+176
+10477
+10478
+10479
+357
+10480
+10481
+738
+10482
+397
+493
+8593
+845
+1596
+2971
+10483
+8508
+6543
+10484
+284
+741
+77
+10485
+10486
+179
+10487
+213
+10488
+10489
+7806
+10490
+337
+10491
+10463
+586
+3660
+337
+10492
+9
+5780
+15
+4032
+1912
+2804
+1710
+10493
+415
+303
+43
+10494
+10495
+15
+282
+446
+859
+67
+286
+305
+10496
+10497
+7968
+10498
+769
+2015
+77
+179
+317
+10499
+10500
+3842
+5990
+3978
+155
+1364
+8338
+225
+590
+5439
+60
+10501
+10502
+2397
+176
+936
+248
+10503
+32
+10504
+10505
+5869
+10506
+10507
+10508
+10509
+1234
+2577
+10510
+7908
+10511
+10512
+176
+1956
+1932
+10513
+10514
+2406
+284
+10515
+10516
+1853
+32
+10517
+354
+2653
+809
+10518
+10519
+10520
+43
+683
+10521
+286
+1605
+10522
+10523
+242
+10524
+10525
+10526
+10527
+248
+10528
+80
+10529
+14
+10530
+10531
+1251
+861
+10532
+303
+10533
+284
+5717
+176
+10534
+248
+10535
+10536
+57
+10537
+331
+10538
+910
+10539
+248
+10540
+32
+2
+10541
+736
+10542
+10543
+1808
+10544
+9148
+2988
+8392
+9
+317
+10545
+176
+10546
+10547
+10548
+1580
+10549
+3709
+6122
+10550
+10551
+303
+10552
+278
+10553
+10554
+646
+38
+14
+4631
+820
+10555
+10556
+10557
+201
+6110
+10558
+10559
+57
+964
+874
+5006
+5797
+10560
+4075
+10561
+10562
+2577
+10563
+10564
+5316
+10565
+10566
+286
+57
+48
+14
+2768
+7357
+10567
+317
+10568
+12
+10569
+10570
+1529
+10571
+10572
+25
+1021
+10573
+3660
+10574
+10575
+331
+10576
+282
+10577
+1100
+671
+270
+142
+10578
+566
+586
+1382
+10579
+10580
+1291
+10581
+10582
+1364
+5261
+10583
+10584
+10585
+301
+10586
+10587
+10588
+15
+5880
+10589
+10590
+6317
+931
+32
+34
+10591
+9395
+5629
+12
+10592
+1083
+10593
+1234
+10594
+10595
+10596
+8532
+10597
+741
+2347
+32
+586
+188
+213
+10598
+213
+155
+10599
+32
+5291
+10600
+19
+337
+98
+10601
+745
+303
+10602
+493
+10603
+1481
+77
+10604
+248
+6822
+369
+19
+10605
+10606
+10607
+10608
+32
+10609
+464
+10610
+10611
+10612
+4
+10613
+5153
+4856
+10614
+10615
+10616
+10617
+10618
+10619
+2197
+10620
+357
+1533
+92
+936
+10621
+514
+2035
+10622
+303
+3447
+185
+48
+10623
+861
+303
+354
+7419
+3523
+540
+357
+1775
+10624
+2804
+10625
+943
+19
+5145
+14
+10626
+10627
+694
+10628
+3546
+10629
+1401
+1012
+10630
+14
+3055
+8685
+10631
+17
+10632
+10633
+10634
+10635
+10636
+10637
+10638
+57
+10639
+4624
+48
+873
+10640
+10641
+10642
+10643
+947
+10644
+10645
+19
+10646
+10647
+15
+1364
+10648
+3964
+10649
+10650
+2
+284
+10651
+279
+4606
+2195
+9
+10652
+34
+10653
+2743
+3067
+363
+10654
+10655
+552
+99
+14
+213
+34
+70
+10656
+10657
+10658
+3406
+8853
+10659
+10660
+10661
+3978
+14
+6343
+337
+10662
+484
+4491
+249
+478
+104
+10663
+43
+10664
+3369
+5326
+10665
+10666
+70
+10667
+4269
+22
+10668
+3484
+10669
+10670
+57
+10671
+10672
+248
+10673
+5780
+10674
+14
+43
+9497
+10675
+32
+10676
+2764
+5803
+6507
+10677
+2733
+10678
+303
+10679
+57
+10680
+598
+10681
+10682
+4982
+10683
+10684
+10685
+286
+10686
+484
+10687
+303
+357
+237
+271
+10688
+4278
+10689
+10690
+305
+10691
+10692
+89
+10693
+8555
+4
+4388
+15
+10694
+57
+10695
+70
+8208
+10696
+4018
+248
+10697
+284
+165
+10698
+2314
+10699
+1364
+284
+10700
+1021
+10701
+337
+10702
+10703
+10704
+303
+10705
+66
+436
+10706
+10707
+3601
+10708
+4820
+10709
+3902
+2135
+10710
+32
+10711
+10712
+10713
+10714
+10715
+10716
+10717
+5946
+7014
+10718
+10719
+10720
+10721
+10722
+48
+10723
+354
+10724
+10725
+10726
+10727
+48
+701
+1710
+10728
+7137
+10729
+345
+10730
+10731
+10732
+10733
+10734
+10735
+10736
+155
+3764
+10737
+15
+10717
+9718
+237
+10738
+845
+8200
+10739
+10740
+10741
+677
+17
+694
+10742
+10743
+15
+10744
+10745
+43
+5217
+10746
+10747
+1244
+10748
+10749
+48
+10750
+1021
+713
+10751
+10752
+10753
+34
+10754
+10755
+4402
+1531
+910
+305
+7137
+1559
+10756
+1356
+22
+10757
+115
+15
+15
+10758
+2
+10759
+936
+411
+10760
+10761
+10762
+10763
+10764
+10765
+3553
+286
+10766
+9
+10767
+137
+741
+1021
+2052
+10768
+3599
+57
+284
+337
+7600
+10769
+284
+3645
+10770
+5202
+1107
+213
+10771
+1513
+10772
+345
+10773
+3
+10774
+2415
+10775
+10776
+10777
+179
+417
+931
+10778
+10779
+1745
+10780
+797
+10781
+213
+10782
+8142
+827
+10783
+10784
+201
+7137
+10785
+32
+331
+43
+10786
+10787
+10788
+10789
+778
+10790
+10791
+9
+10792
+10793
+703
+15
+155
+286
+10794
+7032
+10795
+10796
+10797
+2043
+10798
+15
+10799
+10800
+10801
+10802
+176
+10803
+669
+10286
+10804
+10805
+9201
+5022
+1710
+20
+1301
+337
+10806
+10807
+10808
+10809
+6420
+29
+43
+3492
+10810
+4812
+736
+22
+4461
+22
+10811
+10075
+1991
+10812
+337
+10813
+337
+10814
+648
+9
+6011
+1502
+354
+10815
+15
+10816
+917
+10
+10817
+10818
+10819
+1912
+1091
+1716
+10820
+112
+10821
+10822
+10823
+10824
+10825
+213
+10826
+32
+10827
+10828
+10829
+10830
+20
+7860
+10831
+1203
+10832
+15
+77
+14
+10833
+10834
+2811
+104
+10835
+10836
+10837
+10838
+1870
+237
+20
+3186
+43
+2058
+10839
+2197
+5860
+10840
+10841
+14
+43
+10842
+2777
+15
+10843
+10844
+5662
+43
+10845
+317
+10846
+10847
+10848
+2253
+10849
+10850
+10851
+43
+43
+10852
+6833
+5249
+476
+9395
+464
+10853
+89
+845
+730
+269
+10854
+10855
+10856
+57
+3
+10857
+20
+10858
+10859
+10860
+10861
+17
+10862
+764
+10863
+10864
+10865
+741
+10866
+10867
+952
+10868
+10869
+2009
+3055
+4631
+337
+10870
+284
+3976
+5326
+10871
+331
+10872
+357
+3842
+6010
+10873
+915
+1862
+5340
+4278
+179
+648
+10874
+284
+10875
+705
+10876
+248
+7137
+10877
+10878
+7811
+10879
+10880
+10881
+1502
+464
+2809
+493
+10882
+10883
+25
+8803
+10884
+665
+10
+237
+2762
+3908
+1745
+10885
+10886
+7801
+16
+57
+10887
+2849
+5561
+152
+10888
+10889
+10235
+12
+10890
+10891
+10892
+2406
+10893
+25
+10894
+10895
+4441
+1853
+10896
+610
+10897
+10898
+6317
+10899
+317
+10900
+10901
+10902
+10903
+10904
+1018
+10905
+284
+10906
+284
+337
+10907
+1817
+9504
+2202
+9560
+10908
+10909
+10910
+10911
+740
+936
+10912
+10913
+57
+10914
+10915
+10916
+43
+8050
+10917
+3472
+822
+1824
+57
+1808
+10918
+10919
+519
+10920
+2347
+10921
+10922
+10923
+10924
+10925
+10926
+2427
+1343
+10927
+10928
+43
+10929
+16
+10930
+43
+10
+707
+10931
+10932
+10933
+710
+10934
+10935
+10936
+15
+10
+10937
+10938
+10939
+14
+7543
+10940
+5780
+164
+910
+4906
+10
+3546
+677
+4023
+19
+8255
+1244
+10941
+10942
+10943
+10944
+10945
+201
+10946
+10947
+2040
+10948
+19
+613
+10782
+25
+4905
+10949
+10950
+10951
+43
+10952
+10953
+188
+10954
+10955
+357
+12
+115
+10956
+303
+70
+1307
+14
+213
+32
+10957
+303
+10958
+10959
+10960
+284
+43
+337
+10961
+10962
+10963
+15
+554
+286
+10964
+303
+10965
+43
+7480
+10966
+248
+14
+1710
+337
+10967
+249
+286
+10968
+464
+10969
+7137
+43
+1013
+10970
+1870
+201
+8342
+10971
+5553
+2083
+8994
+1224
+32
+4491
+10972
+415
+10973
+10974
+10975
+10976
+10977
+10978
+10979
+10980
+10981
+1047
+10982
+20
+6732
+16
+3332
+305
+10983
+301
+2213
+10984
+10985
+10986
+10987
+67
+378
+225
+10988
+10989
+712
+201
+10990
+16
+188
+10757
+10991
+10992
+10993
+4532
+10994
+10995
+501
+1109
+10996
+10997
+10998
+415
+5780
+10999
+43
+178
+1637
+11000
+14
+11001
+1912
+936
+210
+3354
+11002
+1867
+11003
+7283
+6303
+7137
+7357
+11004
+53
+3417
+11005
+11006
+4
+7104
+590
+1245
+11007
+15
+11008
+11009
+3732
+179
+11010
+815
+25
+11011
+11012
+11013
+248
+303
+2415
+11014
+11015
+15
+8583
+11016
+11017
+53
+11018
+11019
+2446
+671
+11020
+11021
+248
+337
+402
+337
+493
+193
+11022
+6741
+613
+11023
+11024
+104
+11025
+7683
+9738
+2476
+11026
+411
+11027
+11028
+104
+1739
+303
+305
+11029
+9
+11030
+11031
+11032
+11033
+861
+397
+11034
+11035
+48
+11036
+11037
+9796
+11038
+32
+11039
+11040
+15
+493
+140
+11041
+43
+5869
+11042
+11043
+703
+12
+11044
+11045
+11046
+176
+11047
+304
+2924
+11048
+11049
+11050
+11051
+8110
+11052
+398
+11053
+15
+10535
+5623
+1623
+11054
+11055
+1710
+11056
+11057
+303
+11058
+284
+10849
+11059
+2302
+284
+11060
+11061
+14
+11062
+11063
+43
+892
+1232
+11064
+9449
+248
+10621
+11065
+77
+11066
+32
+2136
+11067
+11068
+11069
+11070
+317
+398
+831
+11071
+3059
+6350
+19
+11072
+11073
+4075
+586
+5817
+11074
+2310
+11075
+11076
+11077
+11078
+11079
+43
+11080
+11081
+15
+11082
+416
+99
+11083
+176
+11084
+1345
+5780
+11085
+1382
+11086
+11087
+19
+317
+11088
+2382
+1705
+11089
+11090
+53
+11091
+11092
+11093
+11094
+6341
+9465
+10500
+564
+2537
+506
+317
+11095
+2591
+201
+8244
+533
+77
+8460
+345
+1647
+11096
+10720
+114
+11097
+11098
+11099
+11100
+11101
+11102
+2428
+345
+989
+2081
+1300
+14
+8755
+16
+2410
+286
+11103
+11104
+2776
+66
+11105
+11106
+5780
+11107
+11108
+11109
+9449
+5797
+11110
+457
+11111
+11112
+11113
+11114
+9660
+6294
+1514
+11115
+11116
+3470
+210
+331
+284
+9766
+4789
+11117
+286
+5540
+11118
+11119
+248
+11120
+337
+11121
+11122
+11123
+11124
+11125
+1083
+2045
+11126
+11127
+2135
+11128
+15
+15
+11129
+11130
+11131
+10947
+57
+249
+10338
+11132
+11133
+416
+11134
+1066
+1889
+1637
+11135
+10835
+11136
+11137
+305
+11138
+11139
+179
+11140
+170
+11141
+11142
+201
+77
+11143
+176
+11144
+11145
+671
+11146
+331
+9578
+648
+4116
+11147
+25
+11148
+228
+11149
+11150
+11151
+11152
+4
+7097
+19
+2040
+11153
+48
+11154
+11155
+19
+4793
+11156
+11157
+11158
+32
+11159
+11160
+57
+6341
+337
+11161
+9617
+48
+536
+2314
+11162
+11163
+11164
+1021
+887
+11165
+284
+11166
+11167
+3598
+11168
+222
+11169
+5523
+11170
+14
+11171
+11172
+142
+11173
+11174
+4031
+11175
+32
+11176
+15
+11177
+11178
+10016
+35
+3186
+1531
+20
+694
+11179
+11180
+358
+453
+646
+11181
+20
+11182
+11183
+15
+237
+2287
+11184
+1896
+4202
+5780
+14
+7137
+11185
+8724
+1824
+272
+11186
+11187
+331
+25
+11188
+188
+11189
+586
+43
+484
+11190
+11191
+43
+32
+188
+11192
+2
+11193
+11194
+554
+11195
+11196
+8718
+233
+3287
+11197
+11198
+11199
+10016
+11200
+12
+11201
+342
+337
+1739
+11202
+4855
+5324
+11203
+248
+11204
+386
+48
+446
+188
+57
+8297
+164
+2409
+11205
+11206
+11207
+11208
+11209
+286
+48
+14
+6012
+10016
+15
+11210
+11211
+248
+5438
+10393
+11212
+11213
+1066
+15
+43
+11214
+11215
+11216
+11217
+11218
+11219
+11220
+19
+11221
+43
+286
+22
+1812
+10822
+7357
+11222
+11223
+3
+11224
+4637
+11225
+8183
+3
+4028
+11226
+5601
+11227
+11228
+43
+11229
+11230
+11231
+11232
+11233
+11234
+11235
+32
+1232
+176
+11236
+586
+4765
+11237
+11238
+19
+15
+193
+11239
+11240
+11241
+1514
+43
+11242
+11243
+11244
+10280
+112
+10
+9293
+201
+9372
+25
+11245
+77
+5344
+248
+248
+5314
+11246
+11247
+19
+616
+11248
+11249
+1021
+11250
+11251
+11252
+248
+10359
+11253
+11148
+35
+231
+15
+1655
+11254
+11255
+4
+703
+1048
+249
+869
+5080
+15
+11256
+201
+11257
+1200
+11258
+9928
+9948
+19
+11259
+11260
+560
+11261
+11262
+11263
+4990
+703
+9020
+2195
+286
+11264
+11265
+398
+11266
+10993
+11267
+323
+11268
+11269
+48
+11270
+1224
+286
+1425
+2476
+2560
+5898
+493
+11271
+6284
+713
+11272
+178
+11273
+1017
+694
+15
+7137
+11274
+11275
+15
+11276
+317
+7031
+11277
+3
+559
+11278
+11279
+11280
+11281
+1291
+11282
+345
+8230
+272
+9913
+11283
+11284
+337
+11285
+11286
+1374
+730
+1232
+25
+11287
+15
+806
+11288
+53
+11289
+11290
+11291
+11292
+845
+11293
+60
+43
+8249
+114
+11294
+11295
+11296
+11297
+3732
+2882
+11298
+11299
+11300
+3867
+11301
+11302
+201
+4
+11303
+11304
+2700
+11305
+317
+3626
+19
+305
+11306
+11307
+1655
+32
+322
+11308
+11309
+15
+10
+11310
+11311
+11312
+305
+342
+2700
+11313
+11314
+11315
+3059
+345
+11316
+11317
+11318
+11319
+99
+66
+11320
+11321
+19
+11322
+11323
+914
+354
+178
+11324
+25
+11325
+5022
+19
+576
+205
+11326
+11327
+15
+11328
+11329
+43
+11330
+15
+11331
+1262
+1224
+11332
+402
+2769
+11333
+3828
+3055
+11334
+284
+11335
+464
+213
+11336
+11337
+11338
+11339
+11340
+270
+2134
+14
+176
+11341
+259
+4730
+11342
+57
+11343
+200
+11344
+11345
+15
+11346
+9313
+57
+11347
+305
+32
+11348
+5045
+6181
+11349
+15
+11350
+4364
+9066
+5780
+1559
+10
+20
+6894
+11351
+11352
+164
+11353
+11354
+357
+11355
+1291
+14
+11356
+11357
+11358
+345
+1604
+213
+112
+60
+11359
+11148
+11360
+19
+2804
+11361
+15
+11362
+213
+305
+11363
+11364
+11365
+11366
+11367
+11368
+11369
+646
+11370
+337
+286
+11371
+248
+237
+57
+1169
+11372
+11373
+155
+2728
+6994
+11374
+11375
+11376
+528
+11377
+2
+7739
+11378
+11379
+19
+11380
+272
+4278
+32
+11381
+5780
+11382
+6006
+192
+11383
+707
+11384
+11385
+10
+11386
+11387
+665
+11388
+647
+1169
+11389
+11390
+1790
+11391
+11392
+1048
+331
+19
+11393
+11394
+11395
+11396
+11397
+15
+11398
+22
+11399
+11400
+4304
+7502
+11401
+861
+1109
+11402
+3644
+11403
+354
+11404
+11405
+2836
+305
+364
+284
+11406
+1011
+4713
+1169
+11407
+11408
+10
+9713
+11409
+4028
+303
+566
+11410
+11411
+357
+137
+11412
+4192
+11413
+11414
+8042
+32
+11415
+11416
+11417
+299
+11418
+11419
+11420
+11421
+14
+11422
+764
+11423
+11424
+349
+11425
+11426
+11427
+11428
+11429
+11430
+11431
+43
+57
+2008
+11428
+43
+11432
+4677
+11433
+9112
+11434
+11435
+57
+11436
+989
+15
+11437
+11438
+11439
+11440
+11441
+14
+11442
+11443
+872
+11444
+303
+11148
+11445
+11446
+15
+11447
+10256
+9298
+11448
+11449
+3239
+20
+11450
+11451
+11452
+11453
+616
+11454
+412
+11455
+892
+11456
+323
+11457
+11458
+11459
+9
+11460
+11461
+1585
+11462
+305
+1232
+48
+11463
+9114
+10
+114
+11464
+156
+11465
+11466
+11467
+11468
+11469
+11470
+66
+11471
+7575
+4033
+213
+11472
+317
+8096
+11473
+11474
+1823
+43
+11475
+11476
+11477
+43
+11148
+3225
+11478
+4364
+11479
+11480
+4
+11481
+137
+11482
+686
+1513
+2537
+648
+3
+665
+369
+373
+43
+11483
+194
+4963
+484
+279
+1912
+659
+57
+425
+22
+57
+738
+10909
+11484
+1262
+11485
+228
+11486
+11487
+20
+48
+4808
+11488
+3066
+493
+11489
+11490
+11491
+484
+4116
+1655
+1224
+9560
+11492
+11493
+96
+5022
+286
+10583
+11494
+16
+11495
+60
+10946
+9939
+11496
+11497
+11498
+213
+11499
+7418
+11500
+2260
+2561
+2966
+11501
+11502
+205
+337
+11503
+11504
+303
+1169
+11505
+1425
+286
+188
+11506
+11507
+11508
+11509
+11510
+303
+242
+5993
+11511
+11512
+11513
+11514
+20
+286
+274
+873
+11515
+11516
+8257
+398
+1662
+11517
+11518
+11519
+19
+822
+11520
+791
+11521
+11522
+270
+1364
+11523
+11524
+19
+11525
+8427
+809
+11526
+19
+3599
+464
+11527
+3119
+305
+5649
+845
+533
+671
+11528
+11148
+19
+1425
+11529
+11530
+77
+1232
+791
+357
+11531
+11532
+11533
+11534
+11535
+349
+4028
+11536
+32
+11537
+15
+11538
+201
+11539
+11540
+9254
+11541
+11542
+5792
+11543
+11544
+11545
+815
+11546
+248
+48
+11547
+11548
+286
+284
+493
+4918
+25
+11549
+337
+284
+11550
+11551
+11552
+303
+9396
+11553
+11554
+3213
+1018
+11555
+323
+373
+11556
+11557
+11558
+11559
+11560
+11561
+43
+8783
+323
+2764
+11562
+11563
+11564
+11565
+8950
+11566
+11567
+48
+11568
+11188
+11321
+736
+373
+48
+14
+11569
+11570
+11571
+137
+11572
+822
+931
+11573
+11574
+1870
+11575
+11576
+11577
+11578
+11579
+11580
+5075
+11581
+11582
+15
+228
+201
+1531
+66
+1604
+11583
+8682
+11114
+11584
+213
+11585
+11586
+11587
+931
+248
+8832
+5229
+365
+11588
+464
+11589
+11590
+11591
+11592
+272
+11593
+3105
+916
+11594
+11595
+11596
+11597
+11598
+6439
+34
+358
+11599
+11600
+11601
+11602
+11603
+11604
+11605
+11606
+11607
+11608
+464
+11609
+11610
+11611
+11612
+11613
+1128
+11614
+2309
+11615
+15
+11616
+11617
+11598
+493
+554
+2406
+845
+48
+11618
+43
+11619
+201
+828
+15
+11620
+11621
+11622
+7071
+464
+114
+43
+1229
+48
+32
+15
+2591
+11623
+1364
+8263
+11624
+2770
+464
+955
+11625
+153
+694
+11626
+11627
+43
+14
+11628
+11629
+11114
+11630
+213
+2577
+179
+11631
+11632
+248
+2042
+357
+1508
+3944
+11633
+11114
+11634
+345
+15
+11635
+11636
+528
+16
+11637
+57
+99
+155
+303
+11638
+10318
+11639
+3
+6728
+11640
+741
+2195
+11641
+11642
+11643
+707
+11644
+11645
+11646
+237
+11647
+77
+11648
+305
+354
+11649
+43
+5080
+2
+1425
+5601
+11650
+11651
+11652
+11653
+736
+11654
+10
+11655
+3768
+2264
+6344
+11656
+11657
+5561
+11658
+11321
+11659
+19
+4684
+11660
+305
+15
+11661
+11662
+11663
+179
+21
+11664
+11665
+15
+11666
+2944
+5361
+6869
+248
+11667
+11668
+11669
+11670
+104
+11671
+573
+11672
+861
+379
+77
+11673
+11674
+493
+11675
+11676
+10
+873
+3
+11677
+11678
+3485
+11321
+179
+176
+17
+493
+4
+11679
+238
+665
+4538
+2733
+11680
+583
+665
+11681
+11682
+11683
+11684
+43
+43
+11685
+11686
+32
+11687
+8798
+11688
+11689
+9
+2619
+3559
+11690
+305
+586
+32
+9967
+4600
+2314
+11691
+11692
+11693
+11694
+1636
+528
+2513
+284
+11695
+3367
+11696
+586
+11697
+11698
+337
+11699
+11700
+2135
+11701
+11702
+11703
+11704
+11705
+9
+284
+11706
+303
+77
+12
+11707
+11708
+3569
+11709
+43
+109
+416
+104
+8297
+8210
+2935
+286
+11710
+11711
+9898
+2043
+519
+11712
+6110
+48
+284
+2882
+178
+11713
+29
+2015
+1889
+11714
+1605
+11715
+11716
+11717
+2
+822
+25
+1870
+8751
+15
+14
+43
+4023
+11718
+14
+357
+11719
+43
+4980
+2308
+3976
+284
+6106
+8255
+11188
+11720
+11721
+11722
+11723
+142
+11724
+11725
+32
+11726
+11727
+210
+43
+11728
+11729
+464
+11730
+5769
+11731
+9132
+11732
+11733
+11148
+15
+11734
+15
+11735
+11736
+6099
+11737
+915
+11738
+11739
+11740
+11741
+303
+248
+1013
+2
+11742
+11743
+11744
+493
+3316
+48
+15
+6915
+98
+11745
+272
+11746
+11747
+4081
+11748
+464
+8367
+11749
+2006
+11750
+1655
+337
+11751
+11752
+11753
+274
+1090
+354
+11754
+927
+2804
+3
+22
+11755
+5792
+5976
+201
+11756
+15
+11757
+484
+416
+11758
+11148
+11759
+554
+1956
+11760
+11761
+11762
+66
+11763
+11764
+3521
+11765
+3055
+248
+11766
+958
+248
+11767
+8724
+345
+11768
+337
+248
+34
+11769
+213
+8447
+5780
+11762
+14
+2213
+11770
+303
+11771
+11772
+11773
+11774
+11775
+1449
+11776
+2577
+989
+5912
+9
+9
+647
+2330
+624
+53
+11777
+11778
+2015
+11779
+11780
+14
+11781
+11782
+1091
+286
+11783
+25
+1674
+11784
+3354
+1604
+4182
+12
+305
+43
+9026
+11785
+3976
+2406
+528
+1112
+2045
+11786
+11787
+2787
+1026
+354
+9910
+32
+11788
+11789
+11790
+11791
+11792
+213
+6258
+6935
+741
+11793
+11794
+2
+11795
+11796
+770
+11797
+11798
+2136
+11799
+5627
+3317
+3406
+11800
+11114
+11801
+9526
+6507
+11802
+11803
+3553
+11804
+2477
+11805
+2029
+11806
+284
+48
+262
+5877
+586
+114
+11807
+1048
+11808
+237
+7891
+597
+713
+464
+57
+11419
+11809
+11810
+11811
+2042
+80
+11812
+5780
+2733
+11813
+34
+11814
+1169
+11815
+11816
+11817
+248
+286
+646
+248
+11818
+486
+66
+43
+11819
+411
+67
+1011
+1364
+11820
+337
+1232
+1291
+11821
+1169
+14
+15
+1458
+137
+809
+11822
+11823
+11824
+915
+11825
+11826
+48
+345
+11827
+213
+43
+11828
+11522
+14
+4907
+11829
+11830
+11831
+648
+1026
+32
+15
+2213
+11832
+11833
+11834
+5920
+11835
+2157
+48
+3172
+745
+11836
+345
+1674
+11837
+22
+48
+345
+11838
+6175
+11839
+11678
+6173
+11840
+1364
+4056
+826
+155
+2015
+11841
+10807
+213
+402
+11842
+4028
+15
+305
+983
+286
+7134
+11843
+179
+11844
+43
+11845
+741
+11846
+5747
+11847
+11848
+11849
+2314
+11850
+1679
+11851
+11852
+11853
+11854
+11855
+2561
+11856
+32
+11857
+1291
+791
+3213
+8042
+43
+11858
+286
+11859
+48
+222
+1013
+11860
+11861
+11862
+1364
+5
+286
+11863
+11864
+11865
+11866
+11867
+11868
+11869
+43
+11870
+176
+19
+11871
+10
+11872
+115
+11873
+464
+48
+11676
+4624
+15
+480
+11874
+345
+11875
+11876
+1514
+11877
+2
+57
+11878
+1684
+11879
+11880
+10256
+6310
+9
+5446
+11881
+11882
+11883
+11884
+11885
+1208
+11886
+1710
+1091
+11887
+305
+284
+8783
+11888
+11889
+665
+2403
+11890
+213
+11891
+11892
+11893
+493
+11894
+11895
+2561
+6035
+337
+331
+11734
+331
+11896
+11897
+3914
+1423
+357
+10500
+11898
+11899
+11900
+317
+4905
+46
+284
+11901
+11902
+284
+11903
+11904
+8297
+9289
+11905
+656
+11906
+11907
+10
+76
+1870
+11908
+11909
+942
+152
+57
+11910
+11911
+11912
+11913
+11914
+11915
+48
+5418
+8219
+213
+11916
+1091
+1013
+213
+11917
+11918
+248
+484
+11919
+1956
+11920
+648
+6661
+303
+213
+17
+9757
+11921
+11922
+1710
+11923
+354
+11924
+284
+188
+11925
+11926
+10973
+11927
+76
+1100
+11928
+11929
+11930
+11931
+11932
+4855
+11933
+19
+11934
+11935
+11936
+717
+2289
+11937
+2792
+11938
+2338
+11939
+11940
+104
+11941
+484
+11670
+104
+11942
+15
+179
+11943
+155
+11944
+9156
+11945
+317
+43
+11946
+10
+14
+77
+11947
+11948
+303
+10
+48
+14
+5041
+11949
+10117
+48
+11148
+43
+11148
+43
+4805
+11950
+11951
+11952
+5780
+317
+48
+11587
+11953
+5344
+77
+11954
+19
+25
+11955
+11956
+286
+1577
+11957
+16
+284
+6249
+11958
+1559
+11959
+42
+9
+11960
+11961
+11962
+3334
+11963
+284
+196
+741
+11964
+2314
+11965
+284
+842
+11966
+337
+281
+7483
+3978
+337
+1051
+464
+11967
+2537
+413
+48
+3852
+11968
+11969
+11970
+713
+14
+10363
+1956
+11971
+11972
+11973
+11974
+11975
+237
+11976
+3059
+57
+337
+43
+11977
+11978
+11979
+43
+284
+11980
+11981
+11982
+11983
+305
+11984
+11985
+339
+11986
+624
+184
+185
+10049
+11987
+48
+11988
+1232
+11989
+19
+9402
+9948
+11990
+11991
+249
+11992
+11993
+25
+11994
+43
+11995
+185
+11996
+15
+12
+11997
+11998
+11999
+12000
+12001
+12002
+12003
+12004
+12005
+57
+12006
+345
+12007
+317
+12008
+17
+12009
+12010
+817
+12011
+12012
+19
+179
+12013
+4
+7615
+12014
+12015
+12016
+43
+2314
+12017
+12018
+5186
+12019
+20
+12020
+12021
+12022
+48
+12023
+12024
+7291
+12025
+35
+11434
+14
+48
+14
+15
+554
+493
+12026
+12027
+213
+12028
+43
+4637
+12029
+248
+554
+12030
+213
+8230
+12031
+12032
+9
+12033
+12034
+12035
+439
+12036
+286
+337
+43
+12037
+12038
+213
+12039
+12040
+12041
+286
+12042
+357
+12043
+4278
+9
+14
+43
+15
+12044
+4855
+12045
+3978
+12046
+357
+12047
+1907
+43
+2
+12048
+12049
+415
+43
+104
+2561
+440
+464
+12050
+48
+12051
+12052
+12053
+10156
+457
+11822
+2330
+12054
+12055
+2136
+12056
+2213
+12057
+12058
+892
+337
+1154
+1112
+323
+9942
+1992
+963
+12059
+12060
+12061
+764
+303
+15
+1823
+1889
+284
+43
+12062
+19
+305
+4169
+7697
+12063
+303
+12064
+11808
+12065
+15
+43
+12066
+1423
+48
+34
+12067
+12068
+12069
+12070
+12071
+12072
+10
+576
+12073
+493
+1442
+9
+736
+137
+12074
+764
+8367
+398
+12075
+284
+104
+8261
+1082
+659
+284
+48
+12076
+558
+5543
+12077
+19
+14
+4012
+12078
+5791
+337
+8996
+12079
+12080
+12081
+12082
+10
+12083
+12084
+4217
+12085
+12086
+178
+12087
+12088
+12089
+1779
+12090
+25
+12091
+12092
+323
+12093
+12094
+12095
+43
+12096
+237
+12097
+7381
+12098
+284
+12099
+213
+12100
+12101
+43
+12102
+12103
+174
+12104
+964
+12105
+12106
+3503
+12107
+1889
+2356
+12108
+152
+3553
+12109
+486
+1311
+12110
+764
+43
+12111
+12112
+12113
+12114
+5208
+11942
+4964
+668
+2
+12115
+2911
+25
+12116
+2315
+305
+12117
+12118
+48
+1013
+3354
+48
+2260
+677
+12119
+4278
+12120
+990
+12121
+12122
+43
+12123
+873
+89
+12124
+5780
+12125
+6612
+4053
+1232
+2264
+12126
+12127
+1061
+12128
+12129
+8784
+213
+12130
+337
+11762
+4766
+12131
+43
+11963
+464
+299
+48
+12132
+12133
+12134
+12135
+12136
+104
+3252
+233
+12137
+7908
+303
+12138
+12139
+232
+12140
+184
+12141
+12142
+12143
+12144
+12145
+1056
+2
+10087
+12146
+15
+12147
+12148
+331
+43
+12149
+5253
+1559
+6480
+12150
+15
+303
+12151
+12152
+12153
+10
+12154
+12155
+345
+32
+12156
+12157
+14
+43
+12158
+892
+12159
+188
+12160
+284
+12161
+25
+12162
+354
+70
+6850
+103
+439
+1172
+43
+337
+12163
+248
+213
+373
+12164
+10767
+4285
+12165
+872
+213
+12166
+10300
+48
+14
+736
+104
+12167
+12168
+12169
+12170
+12171
+5780
+114
+12172
+8853
+11328
+14
+12173
+12174
+1172
+861
+11421
+12175
+345
+20
+514
+10933
+12176
+12177
+12178
+12179
+3989
+237
+12180
+249
+1513
+12181
+12182
+11321
+10136
+12183
+12184
+15
+14
+12185
+707
+12186
+43
+12187
+9402
+202
+2501
+5415
+501
+12188
+12189
+12190
+317
+12191
+12192
+12193
+2234
+915
+12194
+12195
+2135
+12196
+5561
+12197
+12198
+12199
+237
+337
+14
+213
+12200
+9465
+12201
+519
+2500
+112
+12202
+12203
+178
+554
+32
+4278
+5963
+8935
+12204
+12205
+12206
+272
+286
+237
+4364
+12207
+12208
+10614
+1291
+57
+554
+4278
+8789
+237
+15
+317
+43
+77
+12209
+11804
+12210
+12211
+213
+493
+12212
+12213
+43
+12214
+99
+12215
+12216
+12217
+4317
+248
+19
+12218
+237
+248
+2243
+4028
+7451
+303
+12219
+12220
+12221
+12222
+5319
+337
+12223
+10
+764
+337
+2433
+554
+1300
+286
+12224
+397
+12225
+12226
+8297
+2
+9
+12227
+12228
+1688
+4855
+12229
+12230
+1425
+12231
+12232
+12233
+237
+43
+140
+12234
+12235
+2298
+12236
+12237
+2697
+2799
+12238
+15
+232
+12239
+11
+12240
+184
+12241
+6341
+317
+12242
+305
+12243
+1465
+43
+1021
+720
+12244
+10313
+12245
+248
+10638
+19
+2308
+12246
+12247
+12248
+43
+12249
+14
+1384
+365
+10880
+11483
+12250
+17
+43
+12251
+5797
+1692
+10769
+936
+12252
+12253
+12254
+12255
+12256
+12257
+3743
+66
+12258
+14
+248
+12259
+12260
+48
+12261
+892
+6939
+4144
+12262
+48
+12263
+10516
+12264
+12265
+14
+4028
+3213
+9497
+12266
+3354
+3
+317
+10450
+43
+12267
+12268
+209
+12269
+12270
+12271
+210
+6483
+20
+48
+12272
+12273
+12274
+2501
+12275
+2865
+12276
+12277
+14
+48
+12278
+493
+399
+12279
+12280
+12281
+12282
+345
+345
+12283
+12284
+12285
+19
+11148
+12286
+12287
+12288
+493
+9245
+228
+12289
+48
+354
+2770
+12290
+12291
+1203
+282
+12292
+48
+12293
+4806
+12294
+4153
+12295
+12296
+892
+12297
+12298
+12299
+12300
+38
+43
+730
+12301
+12302
+22
+12303
+5601
+3337
+12304
+12305
+12306
+12307
+12189
+15
+464
+5912
+1124
+9582
+1236
+19
+12308
+345
+43
+6616
+12309
+12310
+12311
+8053
+12312
+237
+12313
+345
+12314
+179
+12315
+12316
+12317
+741
+12318
+12319
+12320
+60
+1364
+4
+12321
+357
+2
+12322
+12323
+1157
+12324
+12325
+9
+19
+12326
+12327
+12328
+1966
+12329
+12330
+3599
+377
+1961
+12331
+48
+1605
+53
+12332
+213
+12333
+25
+284
+12334
+185
+12335
+12336
+43
+809
+12337
+554
+12338
+303
+14
+1889
+345
+1655
+2234
+342
+14
+337
+12339
+15
+12340
+3626
+12
+12341
+12342
+12343
+48
+10179
+694
+1542
+1234
+15
+32
+12344
+2919
+43
+12345
+12346
+15
+43
+12347
+491
+10470
+6173
+38
+32
+2728
+12348
+519
+12349
+12350
+12351
+528
+12352
+43
+10256
+12353
+12354
+57
+8889
+354
+12355
+1224
+825
+8798
+7134
+12356
+19
+1927
+12357
+12358
+12359
+104
+12360
+43
+12361
+2136
+237
+12362
+12363
+815
+188
+2197
+12364
+2318
+12365
+464
+12366
+12367
+12368
+2694
+53
+57
+2841
+11675
+12369
+201
+43
+48
+1100
+12370
+8460
+2
+12371
+12372
+12373
+3
+519
+12374
+48
+12375
+1912
+12376
+14
+286
+12377
+140
+12378
+12379
+14
+12380
+1514
+10880
+6214
+48
+15
+464
+12381
+12382
+12383
+12384
+14
+11600
+12385
+4684
+12386
+12387
+12388
+3999
+519
+2446
+48
+12005
+10356
+12389
+14
+12390
+12391
+12392
+12393
+910
+12394
+43
+12395
+2135
+12396
+12397
+12398
+14
+12399
+656
+12400
+48
+188
+12401
+736
+12402
+11185
+12403
+48
+35
+12404
+77
+12405
+12406
+12407
+12408
+48
+1425
+12409
+12410
+2
+12411
+12412
+703
+12413
+12414
+12415
+11224
+12416
+12417
+1852
+12418
+12419
+12420
+76
+12421
+305
+12422
+12423
+43
+586
+2
+323
+411
+665
+43
+12424
+12425
+2035
+3908
+12426
+12427
+736
+554
+12428
+7522
+272
+140
+12429
+12430
+12431
+12432
+3003
+692
+12433
+12434
+12435
+58
+43
+12436
+12437
+3310
+232
+12438
+12439
+12440
+370
+1051
+8849
+305
+12441
+5780
+449
+14
+701
+12442
+12443
+12444
+272
+413
+48
+1232
+12445
+671
+12446
+436
+12447
+413
+12448
+12449
+249
+12450
+66
+286
+12451
+48
+43
+286
+152
+12452
+2650
+12453
+2847
+2694
+11148
+12454
+12455
+15
+12456
+1425
+12457
+491
+43
+12458
+14
+237
+12459
+12460
+57
+1604
+43
+12461
+12462
+764
+1047
+213
+303
+12463
+303
+6209
+12464
+345
+12465
+12466
+12467
+12468
+12469
+114
+98
+12470
+35
+12471
+12472
+5780
+57
+12473
+12474
+1442
+12475
+43
+9832
+12476
+586
+57
+11046
+1112
+16
+861
+249
+12477
+38
+12478
+12479
+12480
+12481
+48
+8020
+12482
+43
+703
+15
+8779
+12483
+12484
+2471
+9
+179
+12485
+12486
+12487
+12488
+122
+176
+12489
+12490
+12491
+12492
+12493
+237
+12494
+155
+12495
+357
+2260
+6479
+1727
+196
+48
+4803
+12496
+48
+1559
+12497
+12498
+185
+12499
+4055
+12500
+30
+12501
+137
+14
+248
+178
+43
+2988
+399
+303
+7624
+305
+12502
+12477
+2919
+2202
+12503
+66
+12504
+12505
+12506
+12507
+345
+12508
+3468
+12509
+12510
+1870
+586
+357
+573
+4187
+12511
+1546
+43
+80
+12512
+12513
+43
+2043
+493
+5780
+369
+7
+12514
+10299
+9363
+12515
+12516
+188
+12517
+5839
+904
+43
+43
+464
+12518
+11754
+12519
+12520
+12521
+12522
+12523
+12524
+703
+12525
+4430
+337
+6877
+880
+12526
+12527
+14
+179
+12528
+707
+4081
+48
+9
+694
+7208
+8724
+6398
+286
+1605
+12529
+10560
+43
+2409
+14
+2804
+1112
+2012
+1082
+12530
+10883
+12531
+671
+358
+9603
+10600
+14
+48
+493
+12532
+12533
+861
+48
+3287
+12534
+12535
+12536
+20
+14
+12537
+12538
+11551
+12539
+721
+12540
+12541
+12542
+10151
+305
+272
+10657
+12543
+1716
+12544
+12545
+345
+14
+140
+1364
+188
+1536
+453
+1224
+12546
+3711
+43
+12547
+2694
+8961
+12548
+12549
+32
+12550
+12551
+3543
+1543
+12552
+2064
+12553
+11353
+10880
+2042
+8037
+12554
+12555
+12556
+12557
+8779
+12558
+185
+1812
+12559
+12560
+12561
+12562
+12563
+43
+12564
+5808
+237
+12565
+43
+10310
+12566
+464
+305
+12567
+12568
+1165
+213
+213
+248
+9417
+12569
+12570
+14
+4606
+12571
+12572
+12573
+213
+43
+14
+12574
+12575
+12576
+12577
+303
+2499
+176
+1232
+764
+15
+4053
+3
+12578
+12579
+12580
+43
+12581
+357
+12
+736
+12582
+2093
+2764
+12583
+112
+3984
+25
+5990
+12584
+12585
+12586
+3
+11762
+464
+613
+6090
+12587
+12588
+10
+12589
+5577
+12590
+12591
+12592
+1244
+98
+12593
+12594
+12595
+43
+286
+12596
+12597
+19
+43
+12598
+6505
+2804
+12599
+12600
+12601
+11762
+12602
+12603
+3842
+2790
+284
+15
+201
+647
+12604
+43
+12605
+7045
+357
+331
+12606
+11754
+19
+237
+345
+43
+12607
+11483
+1942
+12034
+10
+1817
+12608
+337
+12609
+270
+12610
+4278
+12611
+2790
+303
+7276
+12612
+8724
+12613
+1048
+12614
+12615
+12616
+4
+12617
+12618
+12619
+272
+8297
+12620
+7855
+12621
+2764
+16
+12622
+12623
+2035
+12624
+43
+6527
+12625
+12626
+12627
+590
+3978
+237
+12628
+12629
+12630
+15
+57
+114
+32
+12631
+12632
+14
+12633
+3743
+12634
+48
+1251
+3238
+15
+57
+1169
+11960
+12635
+12636
+764
+12466
+8468
+4855
+10
+14
+12637
+114
+19
+32
+12638
+12639
+12640
+114
+3
+12641
+48
+43
+2
+12642
+15
+43
+12643
+57
+2234
+42
+12644
+2
+12645
+12646
+228
+43
+12647
+12648
+12649
+14
+12650
+345
+12651
+14
+713
+12652
+12653
+651
+29
+12654
+12655
+286
+12656
+48
+12657
+345
+12658
+155
+12241
+19
+1295
+2136
+12659
+43
+5418
+6480
+248
+12660
+12661
+12662
+209
+14
+5080
+6507
+337
+12663
+12664
+12665
+4116
+12666
+15
+12667
+213
+1157
+12668
+12669
+12203
+12670
+1665
+11966
+1696
+48
+12671
+12672
+647
+5990
+15
+12673
+12674
+12675
+493
+237
+12676
+12677
+2561
+4441
+12678
+12679
+185
+48
+12680
+179
+12681
+4
+12682
+484
+43
+242
+176
+12683
+67
+2975
+2
+11728
+25
+958
+4855
+12684
+14
+19
+736
+43
+1584
+12685
+6518
+1812
+970
+7357
+790
+4123
+43
+554
+2
+12686
+222
+12687
+12688
+19
+3543
+12689
+892
+12690
+3
+616
+57
+98
+43
+12691
+6741
+1049
+188
+5780
+464
+12692
+1812
+2
+12693
+137
+14
+10
+237
+331
+337
+10
+12694
+10
+12695
+43
+12696
+48
+9798
+303
+12697
+228
+14
+337
+12698
+12699
+248
+12700
+284
+446
+245
+48
+12701
+12702
+8867
+4
+741
+12703
+398
+484
+48
+3385
+12704
+2
+2406
+1626
+12705
+12706
+48
+9
+12707
+1224
+12708
+12709
+915
+12710
+43
+7291
+10
+12711
+9988
+12712
+20
+12713
+11754
+12714
+12715
+43
+342
+12716
+12717
+12718
+237
+10
+6054
+7855
+19
+2042
+48
+19
+1314
+12719
+12720
+12721
+178
+12722
+493
+12723
+8392
+822
+15
+1105
+12724
+12725
+9738
+12726
+12031
+12727
+12728
+12729
+12730
+4
+12351
+12731
+12732
+11822
+12733
+43
+248
+872
+7666
+12734
+12735
+284
+1100
+12736
+8098
+1251
+12737
+1232
+4075
+2320
+39
+272
+237
+12738
+1425
+12739
+12740
+12741
+12742
+14
+1203
+764
+10699
+10592
+3543
+12743
+12744
+5169
+12745
+48
+12746
+20
+43
+43
+12747
+12748
+12749
+14
+12750
+20
+14
+2061
+43
+72
+48
+43
+12751
+12752
+12753
+20
+369
+1217
+12754
+12755
+12756
+6839
+12757
+12758
+8163
+12759
+12760
+6106
+9
+2356
+12761
+12762
+43
+12763
+554
+6306
+491
+12764
+12765
+12716
+795
+12766
+20
+484
+12767
+43
+112
+1684
+379
+338
+12768
+237
+1533
+12769
+2865
+12770
+12771
+10557
+7521
+9497
+12772
+12773
+533
+12774
+286
+12775
+282
+12776
+43
+10
+12777
+741
+12778
+12779
+12780
+12781
+155
+286
+707
+12782
+809
+48
+1082
+12783
+3944
+3
+484
+12784
+42
+12785
+12786
+1082
+1220
+12787
+1710
+12788
+12789
+2
+12790
+10750
+2865
+43
+2239
+12791
+357
+1012
+43
+231
+12792
+2197
+43
+1605
+8517
+671
+196
+12793
+12794
+237
+43
+1224
+12795
+14
+12796
+12797
+7522
+736
+12798
+142
+915
+417
+3239
+9345
+14
+12799
+12800
+12801
+19
+12802
+970
+12803
+12804
+12805
+12806
+3
+11480
+12807
+12808
+43
+736
+457
+3
+12795
+338
+2488
+249
+12809
+1364
+12810
+1716
+286
+43
+25
+48
+12811
+3594
+365
+237
+12812
+14
+12813
+1829
+12814
+493
+12815
+43
+43
+9095
+4
+249
+210
+15
+1011
+12816
+646
+12817
+12818
+12819
+12820
+12821
+8724
+11489
+12822
+48
+2566
+1696
+671
+104
+357
+15
+12823
+4038
+12824
+12402
+12825
+6382
+12826
+48
+4487
+305
+12827
+19
+7259
+286
+112
+12828
+373
+14
+554
+373
+12543
+12829
+12830
+12831
+12832
+337
+32
+14
+12833
+12834
+1244
+12835
+12761
+12836
+43
+12837
+43
+12838
+2004
+4745
+4441
+12839
+12840
+1688
+10727
+43
+12841
+12842
+57
+12843
+6468
+12844
+3603
+3660
+12845
+12846
+48
+659
+2018
+12847
+12848
+12795
+12849
+14
+3172
+11754
+8896
+12850
+373
+4313
+11822
+12851
+12852
+647
+12853
+1955
+6701
+12854
+4441
+12855
+11400
+5601
+14
+12824
+4269
+446
+464
+12856
+12857
+12426
+14
+7355
+10
+12858
+176
+2239
+12859
+12110
+1503
+1817
+12860
+1425
+493
+12861
+12862
+12863
+48
+12864
+48
+12865
+12866
+12867
+12868
+284
+14
+43
+12869
+12795
+741
+564
+43
+12870
+12871
+337
+48
+1655
+213
+48
+286
+12872
+14
+48
+48
+12873
+237
+12874
+12875
+286
+8015
+43
+10418
+12876
+12877
+2694
+5650
+12878
+188
+12879
+6335
+12880
+43
+43
+43
+2459
+12881
+43
+2694
+12882
+14
+1765
+2064
+1710
+3543
+3
+237
+6400
+43
+12883
+12884
+11601
+141
+707
+6076
+48
+11762
+12885
+48
+5134
+317
+12886
+1001
+11482
+12887
+12888
+12889
+720
+12890
+209
+1547
+12891
+12892
+2064
+12893
+1262
+12894
+12895
+12896
+4002
+43
+9617
+9082
+284
+12897
+1425
+713
+3343
+12898
+265
+12899
+12900
+12901
+5627
+12902
+3239
+5751
+2593
+12903
+43
+11822
+12904
+12905
+4144
+8458
+12906
+10
+10
+10
+4483
+15
+19
+9
+8041
+12907
+32
+12908
+237
+188
+12909
+12910
+5293
+5780
+248
+237
+12911
+48
+6871
+12912
+1149
+14
+2
+12913
+14
+12914
+12915
+12916
+48
+283
+12917
+6618
+1364
+12621
+1817
+8249
+12918
+14
+43
+790
+3519
+1049
+12919
+3553
+89
+2
+12920
+11963
+12921
+2042
+12922
+548
+3317
+4028
+12923
+1956
+104
+2577
+12924
+1232
+14
+12925
+9999
+43
+1160
+12926
+237
+43
+10880
+43
+12927
+11762
+12928
+48
+5089
+59
+19
+12929
+12930
+616
+1011
+12931
+10
+12932
+12933
+14
+48
+2577
+43
+11085
+12934
+1232
+5134
+12935
+10908
+4899
+12936
+2686
+665
+11808
+12937
+1082
+12938
+12939
+237
+12940
+7836
+12941
+7945
+2356
+12942
+19
+2202
+12943
+1745
+12944
+436
+2
+16
+43
+915
+2577
+12945
+15
+43
+1223
+12946
+1082
+5614
+12947
+12948
+12949
+12950
+4125
+274
+272
+5410
+12951
+43
+14
+12952
+10880
+12953
+286
+12954
+4352
+379
+12955
+12956
+48
+48
+12957
+1451
+2804
+7357
+155
+1091
+5791
+12958
+12959
+12960
+43
+1513
+12961
+5860
+3755
+12962
+536
+6537
+272
+12963
+12964
+43
+185
+5963
+12965
+352
+12966
+12967
+12968
+48
+12969
+2264
+12970
+1051
+48
+114
+1425
+1090
+7419
+19
+12971
+12972
+12973
+9
+12974
+43
+12975
+379
+1749
+1154
+5769
+12976
+48
+12977
+493
+14
+12978
+554
+10880
+12979
+165
+12980
+12981
+12982
+9849
+12983
+12984
+12985
+12986
+12987
+12988
+2561
+15
+9749
+12989
+43
+12990
+647
+357
+12991
+2
+12992
+12993
+810
+576
+12994
+12995
+12067
+12996
+3743
+6285
+12997
+2009
+35
+272
+12998
+286
+809
+272
+1012
+2919
+1716
+237
+12999
+66
+357
+8297
+2314
+269
+586
+1425
+13000
+10
+365
+872
+13001
+13002
+13003
+13004
+272
+13005
+13006
+15
+43
+6718
+14
+13007
+2302
+48
+13008
+554
+1112
+13009
+13010
+493
+13011
+4789
+13012
+1655
+1051
+13013
+14
+5627
+13014
+155
+337
+13015
+13016
+13017
+13018
+2314
+13019
+213
+43
+13020
+357
+48
+13021
+4907
+13022
+43
+13023
+13024
+15
+13025
+32
+13026
+13027
+12067
+43
+317
+155
+184
+286
+13028
+48
+13029
+741
+12402
+1765
+2260
+13030
+2330
+305
+213
+4963
+10
+12684
+13031
+303
+13032
+43
+2764
+48
+13033
+764
+14
+43
+2314
+209
+491
+13034
+14
+712
+13035
+13036
+2045
+736
+13037
+2
+13038
+43
+48
+595
+7053
+13039
+2
+13040
+48
+14
+13041
+13042
+2463
+13043
+2459
+13044
+2499
+764
+13045
+2561
+5418
+13046
+13047
+237
+14
+5780
+99
+303
+43
+357
+13048
+13049
+43
+48
+13050
+13051
+707
+48
+974
+13052
+13053
+12195
+15
+13054
+14
+48
+13055
+13056
+10930
+13057
+286
+713
+12067
+13058
+14
+89
+788
+13059
+1961
+30
+60
+13060
+11787
+13061
+43
+303
+501
+237
+13062
+2957
+1437
+13063
+3
+13064
+13065
+13066
+210
+554
+13067
+237
+11754
+13068
+13069
+13070
+13071
+115
+13072
+13073
+237
+5780
+10
+9784
+237
+7256
+13074
+13075
+1051
+43
+13076
+13077
+43
+155
+13078
+43
+12005
+3561
+13079
+9395
+14
+13080
+13081
+349
+43
+14
+48
+1502
+48
+7208
+13082
+15
+6480
+13083
+6870
+13084
+13085
+4756
+48
+10
+286
+13086
+142
+3546
+13087
+5780
+19
+14
+3553
+48
+5679
+3546
+13088
+12987
+3480
+13089
+491
+13090
+13091
+349
+1364
+3553
+2314
+13092
+554
+2619
+4028
+1961
+1533
+19
+192
+16
+13093
+43
+10
+9713
+43
+48
+13094
+357
+19
+3
+48
+13095
+1021
+13096
+1018
+4982
+491
+43
+989
+2
+48
+416
+2395
+13097
+13098
+14
+2019
+349
+13099
+13100
+1901
+237
+9987
+13101
+694
+3543
+140
+13102
+13103
+4765
+2310
+14
+493
+13104
+1513
+43
+13105
+647
+19
+665
+4028
+188
+1817
+13106
+8249
+57
+13107
+303
+13108
+66
+13109
+13110
+12
+43
+13111
+2
+284
+741
+5780
+48
+237
+34
+14
+872
+48
+984
+57
+13112
+48
+2181
+974
+48
+1423
+13113
+2
+43
+1605
+13114
+13115
+13116
+13117
+48
+2
+872
+13118
+35
+613
+554
+48
+77
+4380
+13119
+15
+201
+11224
+14
+12987
+43
+13120
+13121
+35
+6484
+13122
+43
+13123
+48
+13124
+712
+6251
+137
+13125
+13126
+48
+32
+1765
+35
+12987
+14
+11702
+13127
+43
+13128
+43
+13129
+13130
+13131
+493
+5293
+1738
+13132
+12987
+77
+237
+13133
+13134
+13135
+225
+2733
+43
+48
+13011
+13136
+249
+13137
+4960
+2561
+13138
+237
+43
+2513
+13139
+13140
+9
+597
+13141
+43
+303
+10
+3
+13142
+13143
+411
+19
+303
+8867
+377
+305
+13144
+13145
+1232
+13146
+616
+13147
+13148
+1364
+43
+13149
+892
+13150
+43
+554
+13151
+43
+2463
+4461
+43
+13152
+317
+1612
+48
+1013
+14
+13153
+11498
+1224
+43
+14
+43
+14
+178
+13154
+13155
+188
+43
+2733
+13156
+849
+10365
+13157
+686
+936
+43
+13158
+43
+201
+13159
+13160
+464
+48
+13161
+13162
+13163
+13164
+5827
+48
+13165
+13166
+2697
+12893
+20
+13167
+13168
+13169
+5318
+196
+13170
+13171
+7449
+13172
+13173
+1051
+872
+13174
+13175
+13176
+89
+8248
+14
+1214
+13177
+13178
+1356
+2577
+5659
+48
+6595
+13179
+305
+741
+1384
+48
+43
+43
+13180
+43
+13181
+13182
+373
+1377
+2035
+11762
+13183
+13184
+13185
+13186
+13187
+348
+13188
+112
+13189
+14
+13190
+2
+13191
+741
+2064
+13192
+13193
+43
+1232
+13194
+9
+1823
+242
+11822
+1051
+13195
+20
+13196
+13197
+2356
+13198
+1120
+2835
+13199
+155
+13200
+13201
+13202
+741
+48
+464
+2239
+13203
+13204
+2593
+13205
+8849
+2239
+13206
+13207
+1335
+13208
+9232
+13209
+14
+13210
+4730
+2064
+209
+13211
+77
+13212
+741
+15
+13213
+13214
+12203
+10262
+3
+7595
+11428
+13215
+9
+2577
+43
+13216
+98
+20
+43
+1612
+286
+397
+13217
+14
+14
+6341
+5780
+13218
+46
+13219
+48
+13220
+3059
+5169
+13221
+13222
+4980
+35
+57
+692
+1559
+736
+13223
+32
+491
+13224
+7137
+13225
+845
+43
+13226
+13227
+1655
+43
+11482
+13228
+13229
+1428
+554
+99
+13230
+2
+5780
+1244
+14
+1229
+98
+915
+13231
+13232
+13233
+201
+1169
+13234
+872
+2919
+13235
+554
+48
+13236
+323
+13237
+13238
+13239
+13240
+48
+16
+13241
+741
+13242
+13243
+2414
+4536
+48
+12807
+554
+2
+11762
+32
+43
+11593
+13244
+3709
+13245
+13246
+13247
+13248
+12203
+35
+5833
+77
+13249
+35
+286
+13250
+14
+2131
+2042
+13251
+10
+250
+1559
+13252
+1296
+13253
+13254
+1091
+13255
+13256
+12987
+1018
+48
+13257
+14
+13258
+354
+13259
+13260
+43
+43
+43
+13261
+2064
+13262
+13263
+6874
+480
+5780
+5212
+1612
+590
+8367
+2769
+528
+104
+43
+13264
+692
+1013
+14
+209
+13265
+6123
+613
+13266
+43
+209
+13267
+248
+7855
+6732
+9
+14
+176
+13268
+213
+323
+43
+13269
+736
+48
+66
+373
+13270
+7032
+13271
+13272
+13273
+13274
+11754
+13275
+10239
+13276
+5780
+272
+48
+13277
+13278
+13279
+11754
+13280
+1817
+13281
+303
+14
+873
+4
+1217
+13282
+13283
+13284
+13285
+13286
+4851
+155
+185
+13287
+13288
+13289
+13290
+13291
+13292
+43
+32
+13293
+286
+5992
+48
+13294
+13295
+48
+185
+2865
+849
+155
+237
+736
+6400
+13296
+1310
+11754
+1425
+13297
+13162
+13298
+411
+14
+48
+13299
+248
+13300
+13301
+13302
+358
+48
+13303
+8297
+13304
+13305
+10
+15
+5806
+13306
+43
+14
+13307
+43
+10362
+13308
+13309
+13310
+188
+13311
+13312
+13313
+13314
+13315
+554
+13316
+13317
+13318
+2035
+8076
+2697
+303
+13307
+48
+43
+3480
+764
+13319
+43
+349
+770
+9364
+13320
+13321
+13322
+1376
+13323
+915
+13324
+19
+5169
+741
+13325
+12460
+48
+43
+357
+13326
+13327
+19
+284
+1251
+14
+155
+286
+2
+57
+43
+43
+43
+13328
+13329
+741
+9
+13330
+416
+13331
+2804
+22
+1112
+11961
+5316
+554
+10
+13332
+43
+13333
+13334
+558
+4441
+305
+647
+741
+337
+48
+1051
+43
+13335
+12987
+598
+3546
+43
+13336
+13337
+13338
+13339
+13340
+971
+13341
+13342
+1082
+43
+48
+48
+13343
+13344
+6877
+13345
+13346
+237
+13347
+2733
+13348
+43
+14
+1710
+48
+11607
+13175
+707
+822
+2
+3995
+286
+13349
+3543
+323
+686
+1743
+32
+10
+13350
+237
+1107
+13351
+13352
+2
+1107
+13353
+210
+80
+2
+1234
+13354
+19
+48
+13355
+13356
+48
+616
+3425
+1745
+1693
+112
+176
+210
+43
+13357
+188
+554
+1300
+13358
+8946
+13359
+13360
+1232
+10
+554
+425
+13361
+13362
+48
+7226
+9402
+13248
+13363
+14
+13364
+2561
+1927
+13365
+19
+43
+13366
+19
+707
+6950
+13367
+48
+2591
+237
+48
+22
+9237
+13368
+1542
+3546
+14
+530
+2
+2804
+1889
+43
+13369
+15
+13370
+1082
+741
+5192
+1232
+9
+48
+13371
+43
+6441
+13372
+1531
+43
+89
+13373
+155
+1287
+795
+13374
+10
+248
+13375
+1716
+43
+43
+13376
+15
+2591
+284
+3251
+19
+213
+7945
+176
+10899
+48
+48
+8392
+43
+43
+647
+13223
+19
+4963
+43
+2012
+43
+48
+303
+248
+66
+57
+1232
+13377
+48
+2804
+43
+43
+1371
+13378
+12402
+5781
+416
+13379
+1141
+14
+13380
+185
+1232
+48
+20
+2
+13381
+13382
+197
+13383
+741
+13384
+14
+6484
+2768
+13385
+6940
+22
+13386
+647
+286
+11754
+13387
+317
+2
+13388
+1920
+237
+13389
+13390
+13391
+13392
+13393
+43
+43
+1514
+48
+1335
+43
+13394
+13395
+741
+13396
+15
+1543
+13397
+7998
+736
+13398
+3
+3284
+1710
+32
+5211
+43
+13399
+13400
+201
+15
+9451
+12807
+12563
+222
+237
+12987
+13401
+13402
+13403
+43
+8448
+13404
+32
+13405
+11330
+284
+48
+1011
+13406
+13407
+15
+43
+13408
+19
+286
+13409
+13410
+2347
+240
+178
+32
+14
+13411
+9
+35
+188
+48
+741
+8151
+13412
+13413
+13414
+872
+13415
+590
+13416
+32
+1817
+13417
+3279
+2804
+13418
+10356
+13419
+14
+5022
+13420
+5065
+13421
+13422
+48
+590
+1051
+806
+282
+13423
+284
+5080
+464
+3406
+7739
+1384
+14
+2084
+13424
+8367
+43
+272
+1425
+1112
+13425
+43
+9258
+43
+13426
+43
+13427
+155
+13428
+560
+2
+1010
+13429
+12807
+13430
+13195
+13431
+13432
+13433
+13434
+13435
+209
+13436
+286
+3317
+48
+13437
+5780
+4055
+48
+323
+201
+13438
+22
+7855
+13439
+2
+13440
+13441
+3452
+13442
+13443
+5780
+342
+13444
+48
+486
+286
+13445
+171
+770
+13446
+13447
+2550
+48
+13448
+1577
+1399
+13449
+13450
+43
+1226
+13451
+48
+1051
+209
+43
+10
+989
+7836
+48
+48
+13452
+13453
+279
+13454
+286
+13455
+560
+43
+13456
+13457
+39
+3546
+13458
+4388
+12402
+3546
+1203
+109
+2330
+188
+179
+13459
+13460
+43
+4963
+15
+32
+13461
+13462
+4747
+736
+13463
+43
+2944
+1716
+13464
+13465
+5933
+491
+11817
+13466
+12372
+13467
+13468
+13469
+115
+19
+13470
+1847
+13471
+13472
+1232
+19
+971
+48
+32
+4257
+13473
+13474
+13475
+892
+10
+583
+590
+12926
+43
+14
+13476
+7208
+13477
+3066
+13478
+13479
+13480
+4806
+13481
+13482
+647
+13483
+2029
+13484
+13485
+48
+48
+13486
+13487
+13488
+13489
+11762
+1920
+8893
+32
+14
+43
+13490
+13491
+554
+43
+1112
+13492
+5318
+13493
+13494
+13394
+2
+43
+43
+1048
+13495
+7053
+13496
+13497
+1384
+188
+13498
+4716
+4313
+5659
+43
+13499
+13500
+13501
+11593
+13502
+13503
+13504
+179
+48
+48
+4020
+13505
+13506
+1765
+38
+4125
+2865
+13507
+13508
+1566
+43
+14
+10
+3546
+4934
+13509
+13510
+3
+10
+1425
+48
+13511
+13512
+13513
+237
+1481
+13514
+2165
+2427
+188
+464
+13515
+237
+13516
+13517
+13518
+1617
+188
+43
+13519
+13520
+58
+13521
+1232
+13522
+8244
+1562
+590
+13523
+13524
+1454
+484
+11238
+1244
+4
+4313
+13525
+36
+89
+19
+2896
+13526
+13527
+12310
+43
+286
+43
+4388
+13528
+48
+1021
+6990
+32
+1632
+43
+11822
+1696
+5780
+13529
+46
+2
+13530
+648
+43
+379
+2019
+4388
+7544
+379
+2593
+13531
+597
+184
+13532
+358
+13533
+13534
+13535
+13536
+193
+13537
+13538
+13539
+13540
+8188
+2136
+13541
+43
+10
+13542
+13543
+2577
+464
+66
+13544
+48
+13545
+2314
+677
+13546
+2913
+13547
+5780
+13548
+11483
+167
+13549
+1710
+13550
+284
+13551
+13552
+43
+248
+13553
+872
+14
+1559
+48
+3546
+14
+705
+14
+2463
+1107
+43
+733
+14
+48
+13554
+13555
+10280
+493
+13556
+1529
+13557
+2944
+4806
+284
+13558
+5009
+936
+155
+1425
+43
+13559
+272
+13560
+25
+213
+13561
+43
+13361
+13562
+2550
+3546
+43
+872
+13563
+48
+13564
+43
+32
+13565
+13566
+13567
+770
+10028
+2
+43
+10950
+237
+19
+13568
+13569
+43
+464
+8102
+13570
+799
+1901
+43
+14
+16
+13571
+12093
+13572
+112
+43
+210
+13573
+14
+790
+13574
+14
+1612
+48
+29
+1044
+484
+196
+770
+32
+155
+3408
+9948
+13575
+9
+13576
+2911
+10
+646
+13577
+1013
+12808
+13578
+57
+13579
+237
+2
+1415
+564
+8460
+11039
+184
+665
+43
+48
+43
+209
+13580
+13581
+3759
+736
+13582
+43
+13583
+5837
+14
+13584
+4762
+13585
+13586
+19
+48
+13587
+474
+209
+6188
+286
+1765
+48
+647
+43
+12372
+43
+210
+13588
+13589
+6776
+13590
+222
+7887
+13591
+13592
+43
+13593
+931
+828
+1514
+279
+6671
+647
+13594
+13595
+741
+13596
+48
+13597
+13598
+13599
+48
+2
+3354
+43
+2591
+13600
+13601
+14
+13602
+13603
+13604
+1920
+14
+13605
+369
+8230
+9633
+2053
+13606
+13607
+29
+4764
+43
+1100
+43
+15
+14
+13608
+1157
+43
+13609
+12788
+237
+13610
+248
+32
+13611
+397
+4677
+13612
+13613
+13614
+13615
+13616
+4028
+337
+13617
+14
+2
+11754
+13618
+11754
+6595
+13619
+48
+284
+2
+13620
+48
+736
+12299
+8569
+13621
+2919
+7048
+2251
+43
+13622
+303
+48
+13623
+20
+3732
+3546
+48
+13624
+237
+1655
+647
+48
+2954
+13625
+2213
+13626
+13627
+13628
+333
+8614
+13629
+708
+48
+13630
+272
+13631
+2560
+9560
+13632
+48
+188
+43
+6874
+4900
+66
+1870
+13633
+13634
+13635
+13636
+19
+48
+237
+3
+13637
+99
+48
+43
+13638
+2093
+188
+13639
+13640
+57
+13641
+13642
+6720
+3745
+533
+16
+646
+3546
+13643
+13644
+20
+397
+1529
+1961
+2040
+14
+15
+48
+48
+399
+13645
+14
+415
+188
+7291
+665
+13646
+13647
+1566
+13648
+13649
+201
+13650
+13651
+2577
+5780
+301
+14
+2
+9
+48
+13652
+4028
+13653
+13654
+1684
+13030
+10003
+48
+19
+1425
+14
+554
+741
+13655
+10880
+96
+1502
+1992
+3546
+43
+13656
+1765
+43
+13657
+13658
+13659
+7517
+13660
+48
+14
+13661
+1234
+19
+13662
+272
+43
+13663
+6214
+13664
+379
+13665
+13666
+201
+13667
+43
+48
+13668
+11482
+13669
+13670
+2790
+3546
+43
+13671
+13672
+14
+491
+4684
+13673
+13674
+3546
+13675
+13676
+3546
+354
+48
+13677
+13678
+764
+43
+4963
+3507
+13679
+48
+873
+13680
+10
+13681
+13682
+4028
+4028
+13683
+13684
+12987
+13685
+1559
+13686
+13687
+13688
+13689
+1538
+237
+1011
+2865
+861
+142
+13690
+1082
+616
+13691
+155
+13692
+43
+357
+5005
+1310
+13693
+4174
+32
+5577
+2260
+14
+616
+784
+13694
+11754
+12999
+12824
+2804
+185
+43
+48
+399
+9
+1364
+305
+1049
+286
+13179
+13695
+43
+11754
+1335
+48
+237
+13696
+48
+1066
+6095
+13697
+13698
+12479
+286
+2309
+43
+415
+13699
+1203
+764
+48
+155
+554
+13700
+4364
+861
+46
+15
+13701
+13702
+57
+14
+13703
+2804
+533
+104
+3546
+19
+48
+13390
+155
+48
+12987
+13704
+486
+13705
+19
+155
+6214
+3908
+10649
+13706
+14
+13707
+43
+11754
+13708
+14
+13709
+13710
+43
+493
+373
+13711
+57
+1578
+13712
+13713
+2
+43
+48
+1428
+13714
+2
+286
+13715
+286
+1655
+19
+564
+13716
+4313
+13717
+43
+13718
+13719
+19
+140
+1232
+2537
+3546
+13720
+2668
+3
+13721
+32
+48
+155
+13722
+317
+1765
+357
+13282
+13723
+11508
+13724
+13725
+43
+6950
+13726
+872
+77
+13727
+13728
+6222
+13729
+741
+17
+13730
+3354
+12987
+13731
+48
+48
+237
+1604
+13732
+80
+1562
+1577
+873
+32
+13733
+48
+9112
+554
+13734
+13735
+377
+43
+1920
+13566
+1514
+764
+12397
+13736
+13737
+13738
+13739
+13740
+3842
+892
+13741
+2769
+13742
+13743
+1013
+13744
+13745
+43
+2064
+48
+13746
+616
+2733
+8102
+13747
+650
+2
+43
+13748
+13749
+4
+1612
+142
+1051
+12067
+13750
+323
+188
+1425
+43
+13751
+19
+13752
+13733
+15
+237
+13753
+155
+13754
+2302
+7053
+19
+13755
+1091
+10
+703
+286
+13756
+13757
+13758
+2804
+4357
+3546
+14
+13759
+7276
+43
+43
+1026
+225
+33
+791
+13760
+4522
+286
+178
+11762
+13761
+13762
+13763
+7431
+9
+43
+237
+13764
+13760
+3546
+13765
+43
+13766
+13767
+13768
+943
+57
+11593
+14
+13769
+98
+43
+1112
+20
+179
+43
+1961
+464
+13770
+13771
+13772
+43
+13773
+3768
+43
+554
+176
+2309
+13774
+13775
+12932
+48
+13776
+13777
+13778
+1051
+2253
+13779
+958
+13780
+43
+13781
+13782
+1091
+12590
+98
+237
+616
+13783
+2
+13784
+13785
+13786
+464
+741
+13787
+185
+13788
+13789
+13790
+237
+7960
+13791
+43
+5780
+43
+20
+12407
+484
+13792
+13793
+13794
+7328
+5780
+43
+43
+3395
+237
+13795
+1543
+112
+915
+1154
+286
+286
+13796
+48
+22
+13797
+11362
+13798
+439
+13799
+1090
+228
+13800
+13801
+43
+25
+736
+35
+185
+1100
+9705
+12987
+3546
+43
+13311
+14
+13205
+741
+29
+1465
+13802
+237
+6182
+2
+57
+13803
+13804
+14
+13805
+237
+13806
+213
+48
+19
+13566
+13260
+237
+7855
+13807
+13808
+1012
+13809
+13810
+13811
+13812
+248
+2804
+1870
+13813
+48
+2310
+13814
+6915
+13802
+13815
+13816
+915
+2
+13817
+5438
+13818
+2
+337
+43
+4217
+305
+32
+1425
+12159
+248
+13819
+13820
+12596
+152
+213
+13393
+13821
+13822
+9
+13823
+14
+4943
+48
+6638
+13824
+13825
+43
+1920
+13826
+152
+43
+112
+14
+13827
+13828
+48
+13829
+2
+5780
+11158
+703
+4745
+1287
+43
+201
+13830
+20
+248
+13831
+48
+11670
+29
+554
+13832
+43
+554
+286
+7891
+13833
+13834
+13835
+3546
+5418
+13836
+249
+13837
+2
+13838
+15
+274
+7855
+36
+399
+13839
+402
+1217
+19
+7960
+741
+48
+358
+14
+12746
+8418
+209
+13840
+43
+13841
+13842
+2919
+13843
+43
+13844
+11754
+13845
+1224
+564
+48
+57
+12220
+6371
+13846
+554
+13847
+2
+43
+43
+43
+1384
+2804
+13848
+13849
+13850
+43
+13851
+13852
+152
+411
+237
+915
+13853
+48
+237
+13854
+13855
+2334
+286
+237
+7137
+43
+14
+188
+19
+22
+2694
+104
+14
+11762
+616
+213
+2697
+48
+4055
+10
+13856
+13857
+13858
+48
+237
+48
+4634
+14
+13859
+13643
+303
+10
+1224
+248
+397
+48
+12600
+237
+13860
+303
+554
+5780
+1112
+48
+13861
+13459
+32
+303
+303
+48
+13862
+137
+13863
+13864
+13865
+13866
+13867
+43
+13868
+590
+13869
+1502
+736
+554
+2029
+14
+13870
+13871
+1719
+13872
+915
+3546
+13873
+357
+43
+176
+13874
+43
+1224
+915
+3546
+13875
+13876
+13877
+13878
+1051
+13879
+1232
+13880
+915
+237
+3546
+13881
+3546
+1115
+77
+12642
+2
+495
+1442
+104
+2762
+19
+13882
+13883
+32
+13884
+13885
+286
+14
+7208
+2414
+11762
+827
+3066
+13886
+970
+323
+13887
+13888
+4963
+13889
+57
+13890
+13891
+14
+13892
+3415
+3003
+20
+48
+3
+822
+152
+1112
+57
+13893
+48
+13894
+32
+48
+3546
+13895
+43
+1513
+43
+155
+1011
+20
+13896
+155
+1700
+13897
+43
+16
+13898
+104
+720
+5601
+13899
+13900
+13901
+13902
+357
+13903
+13904
+13201
+13905
+286
+48
+13906
+10287
+2579
+35
+11800
+43
+13907
+741
+694
+32
+1517
+13908
+13909
+237
+237
+13910
+358
+20
+13911
+13912
+13913
+1716
+331
+647
+2314
+13914
+13915
+48
+13916
+8826
+14
+13917
+19
+13918
+48
+13919
+13920
+22
+1364
+1051
+43
+349
+13921
+104
+43
+1091
+13922
+1224
+554
+14
+624
+15
+299
+13923
+272
+14
+13924
+13925
+1091
+647
+2
+3546
+48
+13926
+616
+43
+11762
+13927
+13928
+188
+13929
+369
+1100
+13930
+13931
+19
+8392
+13932
+19
+13933
+3553
+8378
+14
+3973
+155
+14
+185
+13934
+43
+2430
+14
+8098
+43
+19
+1153
+13935
+13936
+373
+13937
+799
+237
+13938
+3546
+13939
+11907
+686
+13940
+13941
+3570
+43
+43
+33
+13942
+1753
+13943
+1514
+495
+590
+6505
+13944
+13945
+13946
+286
+1817
+13947
+13948
+4963
+165
+373
+3323
+155
+13949
+12120
+13950
+5202
+13951
+48
+1920
+57
+48
+13952
+13953
+13954
+15
+1229
+13955
+2463
+66
+5990
+43
+10642
+209
+43
+13956
+7855
+36
+13957
+48
+13958
+3546
+13959
+14
+7991
+48
+43
+1082
+1920
+333
+2694
+155
+43
+48
+13960
+13961
+13962
+1232
+43
+14
+1632
+6877
+1109
+43
+12267
+13963
+13964
+10
+11754
+398
+416
+13965
+13966
+13967
+13968
+19
+13969
+43
+2414
+13970
+3382
+583
+43
+43
+209
+12180
+48
+13733
+8867
+13971
+741
+14
+13972
+188
+13973
+43
+915
+2577
+13974
+14
+13975
+43
+6741
+12913
+43
+13976
+237
+48
+112
+2
+3439
+13977
+13978
+5601
+2314
+13979
+10880
+3421
+2
+13980
+13981
+13982
+5344
+14
+10
+14
+188
+13983
+13984
+14
+305
+10
+11341
+15
+13985
+13986
+1790
+43
+13987
+2561
+677
+25
+2
+12987
+14
+13988
+13989
+1513
+2213
+9738
+3546
+13990
+9
+13991
+57
+13992
+11754
+6785
+11308
+2733
+104
+237
+12987
+2891
+958
+1229
+11754
+1208
+14
+112
+46
+259
+13993
+237
+13179
+48
+48
+554
+14
+48
+1765
+4364
+188
+48
+13994
+7336
+112
+152
+13995
+3
+1232
+13996
+13997
+3916
+237
+286
+14
+43
+741
+13998
+554
+11762
+6766
+5973
+43
+13999
+278
+14000
+66
+1696
+365
+14001
+152
+14002
+10
+9739
+14003
+14004
+43
+14005
+14006
+43
+3279
+19
+14007
+1612
+14008
+2
+14
+14009
+2446
+48
+57
+15
+352
+14010
+14011
+48
+13464
+286
+14
+48
+1817
+42
+14012
+2
+43
+19
+14013
+14014
+14015
+2
+2
+1224
+14016
+14
+14017
+14018
+2733
+48
+741
+5780
+1203
+48
+14019
+14020
+14021
+13935
+14
+237
+4411
+2
+32
+323
+14022
+2457
+3406
+3250
+112
+43
+48
+751
+14023
+13935
+14024
+3546
+19
+6950
+13336
+2012
+48
+14025
+13325
+188
+14026
+14
+1224
+11754
+14027
+3452
+152
+1560
+379
+736
+14028
+610
+4227
+14029
+14030
+286
+741
+48
+48
+14031
+14032
+48
+14033
+3989
+14034
+14035
+7799
+13179
+9
+14036
+14037
+14038
+14039
+14040
+14041
+53
+430
+14042
+8512
+14043
+345
+1870
+286
+14044
+707
+13929
+989
+12402
+19
+237
+14
+19
+2153
+554
+14045
+14046
+14047
+6463
+278
+14048
+14049
+57
+14
+272
+43
+1364
+286
+446
+14050
+14051
+3958
+14052
+5981
+14053
+14054
+43
+14055
+15
+554
+14056
+1637
+439
+11471
+2944
+14057
+14058
+36
+971
+237
+237
+14059
+14060
+14061
+6054
+14062
+14063
+43
+3546
+14064
+14065
+14066
+14067
+5780
+48
+19
+14068
+305
+3484
+15
+3546
+14069
+19
+10230
+14070
+14071
+1012
+138
+10230
+14072
+5780
+104
+1991
+20
+43
+764
+14073
+57
+14074
+14075
+14076
+648
+3546
+14077
+48
+7835
+48
+2042
+2058
+14078
+43
+137
+14079
+3
+48
+14080
+2197
+14081
+14
+16
+14082
+349
+14083
+14084
+14085
+14086
+14
+13452
+2
+6518
+5627
+43
+590
+14087
+2694
+48
+48
+9410
+554
+3310
+57
+910
+137
+9543
+48
+14088
+14089
+43
+486
+14090
+14091
+14092
+17
+14093
+741
+43
+8727
+6776
+286
+648
+14094
+764
+3546
+4398
+5780
+872
+3
+196
+14
+43
+1220
+43
+3239
+176
+14095
+14096
+745
+14097
+245
+14098
+43
+14099
+14100
+14101
+1232
+14102
+1559
+142
+14103
+2577
+14104
+140
+14105
+2314
+354
+14106
+43
+14107
+14108
+14
+237
+14109
+237
+13843
+323
+4855
+14110
+14111
+2804
+1112
+14112
+14113
+1203
+14114
+14
+1821
+305
+43
+237
+14115
+286
+10880
+1100
+2430
+14
+4971
+14116
+13772
+57
+237
+14117
+12404
+14
+14118
+397
+137
+1566
+19
+12893
+1056
+14119
+19
+317
+43
+237
+373
+48
+491
+2988
+14120
+14121
+77
+14122
+7357
+764
+14123
+887
+1374
+14124
+495
+209
+1800
+14125
+5192
+20
+3287
+14126
+179
+11754
+14127
+5041
+19
+14128
+48
+7855
+14129
+1232
+14130
+5556
+14131
+28
+286
+48
+14132
+13913
+43
+14133
+14134
+13349
+14
+19
+14135
+683
+14
+14136
+43
+989
+57
+14137
+272
+14138
+237
+237
+2804
+354
+194
+2
+14139
+14140
+13282
+4461
+194
+3543
+53
+48
+19
+3
+43
+14141
+14142
+14
+48
+9400
+13842
+32
+14143
+210
+14144
+14145
+416
+19
+48
+5780
+14146
+66
+14147
+14148
+14149
+4963
+14150
+237
+8733
+43
+13390
+14151
+11754
+14152
+1011
+768
+8460
+14
+1710
+14153
+736
+14154
+136
+48
+43
+142
+20
+3546
+14155
+1229
+48
+14156
+14157
+536
+2035
+6341
+38
+14158
+185
+14159
+43
+3052
+317
+317
+2197
+3
+43
+2577
+43
+14160
+14161
+14162
+12555
+43
+14163
+19
+4990
+48
+35
+14164
+14165
+43
+1181
+14166
+548
+14167
+720
+14168
+14169
+178
+4278
+14170
+14171
+20
+14172
+1166
+43
+19
+43
+14173
+43
+12067
+379
+25
+2769
+14174
+3546
+14175
+14176
+284
+14177
+98
+14178
+827
+2015
+554
+284
+48
+1300
+8566
+43
+14179
+5780
+14180
+225
+14181
+14182
+48
+48
+1425
+1376
+9
+32
+9410
+213
+14183
+14174
+14
+237
+349
+48
+272
+188
+14
+12477
+958
+14184
+14185
+647
+6480
+10
+14186
+554
+14187
+201
+48
+7045
+2
+14188
+176
+915
+14189
+14190
+138
+14191
+14192
+19
+43
+14193
+10622
+57
+9688
+14194
+14195
+1287
+48
+4028
+14196
+5435
+2791
+48
+4634
+764
+43
+48
+971
+14197
+14198
+14199
+12456
+14200
+14201
+7817
+43
+237
+14202
+14203
+14204
+590
+14205
+6950
+20
+3066
+4028
+13685
+11421
+20
+3279
+14206
+14207
+14208
+20
+237
+3546
+14209
+7137
+213
+303
+1124
+20
+2804
+14210
+14211
+284
+43
+237
+57
+14212
+14001
+358
+48
+14213
+12987
+14214
+14215
+137
+7014
+155
+2316
+89
+14216
+15
+14217
+5169
+48
+3239
+286
+8994
+5780
+14218
+43
+19
+1175
+1010
+6950
+43
+14219
+48
+5949
+225
+14220
+14221
+22
+32
+14222
+733
+237
+14223
+43
+14
+14224
+303
+2
+1090
+14225
+14226
+14227
+14228
+9705
+14229
+14230
+14231
+14232
+48
+33
+14233
+286
+14234
+1927
+712
+720
+14235
+9
+4
+14236
+4730
+286
+736
+14237
+43
+323
+14238
+19
+536
+1870
+705
+12746
+305
+14239
+19
+43
+14240
+14241
+4852
+357
+14242
+14243
+14244
+248
+478
+13543
+8566
+7855
+112
+32
+14245
+2
+43
+14246
+14247
+14248
+14249
+286
+14
+647
+12937
+7256
+14250
+14251
+14252
+14253
+14254
+9
+14001
+13150
+14255
+6214
+14256
+14257
+272
+7855
+14258
+14259
+2841
+48
+4963
+14
+286
+43
+14260
+14261
+22
+14262
+536
+14263
+14264
+284
+14265
+248
+14266
+48
+337
+14267
+248
+3
+14268
+14
+248
+4263
+14269
+14270
+2600
+4053
+14271
+14272
+43
+14273
+19
+43
+201
+14
+14274
+16
+741
+14275
+14276
+14277
+1049
+2121
+1765
+2406
+2561
+337
+248
+43
+699
+342
+14278
+14279
+1710
+5582
+14
+14280
+14281
+32
+9918
+1224
+48
+8297
+14282
+48
+4570
+2316
+14283
+826
+4075
+57
+14284
+2
+14285
+14286
+14287
+1765
+14
+1604
+248
+48
+14288
+43
+48
+1425
+48
+14289
+14290
+1200
+1172
+14291
+822
+14292
+12402
+14293
+14
+19
+5243
+1992
+43
+286
+14294
+14295
+873
+14296
+48
+14297
+14
+1559
+14298
+2040
+14299
+14300
+14301
+6087
+2
+43
+14302
+14303
+43
+323
+14304
+1013
+152
+721
+14305
+10583
+5209
+425
+14306
+2349
+286
+237
+14307
+14
+14308
+14309
+14310
+14311
+14312
+14313
+14314
+57
+14315
+237
+48
+14316
+647
+8033
+14317
+1364
+14318
+736
+4226
+398
+14
+14319
+14320
+14321
+43
+165
+14322
+14323
+48
+408
+745
+915
+810
+14324
+155
+48
+43
+14325
+764
+14326
+72
+43
+9472
+48
+176
+14327
+14328
+14329
+590
+271
+43
+14330
+14331
+741
+5344
+12466
+3
+14332
+14333
+3546
+1655
+741
+14334
+14335
+2804
+19
+554
+155
+14
+14336
+1513
+14337
+14338
+20
+3546
+822
+43
+43
+64
+14339
+286
+6121
+5080
+14340
+775
+14
+4306
+14341
+2804
+14342
+8566
+14343
+3546
+3
+155
+10
+1385
+424
+14344
+14345
+14346
+720
+8428
+43
+14347
+14348
+14349
+2
+14350
+14351
+1013
+2314
+19
+12363
+43
+4637
+14
+1454
+14
+14352
+13748
+304
+14353
+29
+14354
+14355
+8554
+1228
+237
+43
+8188
+14356
+6363
+10
+14357
+764
+14
+123
+14358
+32
+4278
+9
+14359
+1415
+14360
+48
+15
+936
+14361
+14362
+14363
+14364
+14365
+741
+14366
+14367
+554
+3546
+14368
+6766
+15
+14369
+14370
+237
+14
+14371
+237
+248
+248
+14372
+19
+22
+14373
+32
+7522
+14374
+19
+14375
+4441
+9
+248
+14376
+14377
+303
+12343
+2804
+712
+11176
+43
+616
+3147
+14378
+3055
+14379
+155
+14380
+19
+19
+284
+9939
+823
+14381
+138
+14382
+19
+3743
+713
+14383
+14384
+14385
+3005
+14386
+43
+12013
+14387
+286
+1234
+14388
+140
+43
+155
+43
+305
+14389
+1203
+3546
+14390
+5770
+10
+554
+3886
+14391
+43
+14392
+14393
+19
+14394
+32
+14395
+11822
+1454
+741
+104
+5627
+8010
+14396
+14397
+14398
+2469
+14399
+3732
+14400
+14401
+14
+2324
+14402
+14403
+13823
+43
+14404
+14
+14405
+4192
+14406
+14407
+6728
+48
+14408
+14409
+3488
+14410
+720
+14411
+14412
+4388
+43
+14413
+57
+19
+48
+1696
+2308
+14414
+1343
+1524
+14415
+14416
+590
+14417
+89
+14418
+32
+647
+14419
+14420
+14421
+155
+590
+43
+9
+2847
+14422
+1465
+11966
+741
+14423
+14424
+770
+14425
+831
+4790
+14426
+14427
+474
+741
+282
+3546
+14428
+14
+14429
+14430
+1817
+5780
+14431
+14432
+1100
+5483
+48
+43
+14433
+1961
+5648
+2045
+14434
+14435
+14436
+48
+14437
+184
+43
+14
+13307
+48
+43
+14438
+11483
+14439
+14440
+14441
+140
+14442
+14443
+14444
+32
+14445
+286
+14446
+1540
+2463
+14447
+4020
+14448
+14449
+3711
+2
+196
+3546
+14450
+7176
+590
+14451
+14452
+1559
+14
+185
+137
+48
+764
+14453
+14454
+12404
+188
+48
+14455
+14456
+12746
+14457
+48
+14458
+1234
+57
+48
+14459
+337
+14460
+19
+14461
+14
+14462
+48
+3
+6970
+4765
+14463
+43
+14464
+590
+3976
+293
+104
+48
+14465
+4247
+14363
+43
+32
+57
+14466
+43
+286
+379
+590
+43
+14467
+57
+3216
+14
+12987
+14468
+14469
+19
+43
+12093
+43
+32
+60
+14470
+14471
+14472
+13798
+14473
+14
+7835
+14474
+13961
+13361
+286
+43
+3296
+2097
+19
+6294
+1258
+14475
+3757
+43
+4
+48
+1471
+14476
+647
+43
+590
+1051
+112
+1018
+14477
+14478
+14479
+5408
+237
+590
+36
+14480
+6595
+2944
+323
+43
+201
+3030
+19
+272
+14481
+188
+14482
+13566
+14483
+14484
+14485
+11762
+14486
+12479
+19
+712
+14487
+2561
+4917
+14488
+188
+48
+14489
+2561
+1559
+286
+14490
+357
+98
+9481
+436
+2561
+1425
+43
+1425
+32
+7283
+14491
+14477
+48
+6331
+14492
+155
+1710
+14493
+573
+764
+14494
+5483
+705
+14495
+14496
+14497
+554
+590
+57
+14
+57
+3543
+14
+48
+14498
+14499
+155
+397
+14500
+14501
+43
+11966
+14502
+5963
+2
+14503
+14
+14504
+14505
+3768
+43
+14506
+11762
+493
+14507
+14508
+3353
+3976
+2835
+11817
+43
+859
+10764
+2042
+14
+57
+1049
+12987
+12351
+3239
+48
+14509
+736
+196
+554
+1385
+14510
+14511
+712
+7183
+20
+14512
+8994
+14513
+2064
+14514
+14515
+1823
+43
+5739
+1617
+14278
+14363
+19
+14516
+19
+1859
+14517
+14518
+14519
+614
+29
+14520
+14521
+665
+1829
+810
+14522
+48
+14523
+14524
+14525
+43
+14526
+14527
+38
+845
+2
+14528
+286
+57
+14529
+428
+14530
+1154
+9112
+4808
+14531
+4028
+14532
+536
+43
+43
+8205
+349
+14533
+14534
+19
+112
+14535
+1051
+13508
+3808
+10
+1013
+14536
+1637
+1109
+43
+14537
+14538
+2039
+43
+590
+43
+14539
+3546
+14540
+14541
+6011
+14
+1011
+43
+14
+11740
+349
+14542
+590
+14543
+33
+20
+484
+48
+2459
+5318
+14544
+14
+1021
+872
+14545
+14546
+1710
+14547
+707
+14548
+112
+286
+48
+14549
+8263
+1051
+3
+48
+10137
+43
+12013
+1901
+13361
+14550
+152
+554
+5780
+48
+770
+14551
+14552
+48
+14553
+2064
+14554
+2882
+14555
+14556
+14557
+14558
+14559
+14560
+2550
+14561
+14562
+745
+10789
+358
+7471
+8297
+3034
+43
+446
+322
+14563
+32
+958
+14564
+4918
+4364
+178
+14565
+14566
+493
+590
+14567
+14568
+741
+349
+14569
+48
+13361
+14570
+14571
+8566
+915
+14572
+590
+1291
+1154
+14573
+43
+14574
+14575
+43
+14363
+14576
+48
+14577
+590
+155
+14
+6439
+104
+14578
+5080
+14579
+590
+872
+7855
+140
+14580
+14
+412
+14581
+9
+11762
+19
+6468
+48
+2
+14582
+1425
+48
+14583
+2463
+142
+14584
+7276
+323
+14585
+3546
+12987
+14586
+14587
+590
+14588
+14589
+14590
+14591
+14592
+14593
+3546
+352
+14
+14594
+5780
+76
+14595
+14
+14596
+14597
+20
+590
+14598
+155
+3252
+14599
+14600
+14515
+12987
+24
+14601
+8249
+14602
+43
+14603
+286
+12214
+915
+14604
+137
+3
+590
+14605
+8392
+43
+14606
+14607
+43
+14
+14
+14608
+14609
+14610
+14611
+43
+14612
+43
+14613
+3317
+188
+48
+11483
+6950
+14
+12987
+19
+14614
+14615
+647
+14616
+665
+1369
+692
+57
+19
+14617
+14618
+365
+9783
+14619
+14620
+14621
+14622
+14623
+590
+14624
+590
+3546
+14625
+188
+14626
+5162
+14627
+5601
+286
+849
+10993
+493
+14628
+14629
+2129
+286
+357
+12274
+14630
+14631
+14632
+9115
+590
+286
+1765
+1220
+8188
+48
+14633
+286
+43
+2040
+14634
+14
+14635
+43
+237
+11822
+14636
+140
+8218
+8457
+8297
+20
+8392
+43
+14637
+14638
+354
+7379
+14639
+20
+14640
+590
+1503
+14641
+379
+14642
+14643
+43
+155
+464
+286
+14644
+14645
+14646
+155
+764
+358
+20
+14647
+155
+237
+354
+14648
+10
+2035
+43
+57
+1605
+48
+14649
+741
+1217
+2
+14650
+19
+14651
+8740
+8896
+14652
+10
+14653
+14274
+14654
+2804
+13223
+14655
+14656
+2446
+12577
+590
+14657
+286
+43
+736
+14658
+14659
+43
+272
+964
+14660
+14661
+927
+5601
+3599
+14662
+46
+155
+14663
+14
+541
+554
+1716
+48
+7137
+43
+12661
+43
+1232
+3546
+741
+14664
+29
+48
+736
+590
+43
+338
+9900
+354
+14665
+14185
+12987
+14666
+2
+14667
+720
+8566
+2577
+14668
+5780
+9
+6499
+1765
+10
+590
+57
+249
+43
+14669
+155
+57
+1604
+14670
+14671
+14672
+14673
+14674
+14675
+14676
+1100
+3421
+14677
+741
+6439
+2828
+1617
+14678
+14679
+29
+7855
+12684
+12600
+43
+20
+4713
+19
+2577
+2577
+14680
+188
+14681
+14682
+19
+43
+3546
+14683
+354
+590
+9300
+2042
+788
+14684
+43
+19
+14685
+19
+323
+2476
+14686
+14687
+7341
+188
+284
+14363
+14688
+7653
+2430
+14689
+14690
+1637
+14
+85
+9210
+43
+14691
+14692
+48
+301
+14693
+14694
+11995
+4747
+12987
+14695
+140
+51
+66
+43
+10
+14696
+586
+2
+14
+284
+4963
+57
+20
+305
+303
+286
+703
+955
+1214
+14697
+10993
+48
+14698
+57
+43
+14699
+2324
+14604
+1082
+14700
+9
+43
+14701
+1056
+4873
+1612
+14702
+14703
+14704
+6809
+11428
+14705
+43
+14706
+2540
+48
+3553
+8297
+6903
+171
+48
+48
+14
+43
+43
+14001
+1066
+9078
+14707
+14708
+936
+137
+745
+7855
+14709
+14604
+14710
+14711
+590
+590
+3034
+14712
+13774
+590
+57
+19
+2042
+14713
+32
+590
+1232
+9278
+48
+13205
+647
+43
+1139
+12600
+11224
+48
+14714
+2197
+3
+43
+43
+590
+14715
+1220
+14716
+14717
+14718
+14719
+253
+19
+3546
+14720
+14721
+1696
+57
+48
+720
+554
+57
+14
+586
+14532
+2721
+14
+152
+14722
+5780
+14723
+14724
+48
+14725
+259
+14
+14691
+625
+770
+745
+3491
+4963
+43
+305
+2260
+6499
+8024
+14726
+764
+43
+5780
+43
+14727
+1229
+43
+14728
+2
+249
+14729
+14477
+2349
+14730
+1716
+1513
+590
+32
+3
+764
+1224
+14731
+671
+14477
+14732
+14
+2804
+237
+14733
+4227
+48
+251
+33
+155
+741
+14734
+14735
+590
+6011
+14736
+14737
+43
+554
+590
+14738
+14739
+14740
+14741
+14
+14742
+6741
+14743
+379
+14744
+57
+14745
+43
+14746
+14747
+14748
+373
+14749
+14750
+43
+736
+14751
+14752
+140
+741
+43
+3553
+7032
+14753
+1442
+14754
+9
+284
+6096
+10
+14755
+7897
+14756
+14757
+14758
+14759
+14760
+590
+1885
+484
+3553
+1049
+764
+9194
+14761
+14762
+4028
+1154
+533
+2287
+14763
+415
+19
+14764
+14765
+14766
+741
+9946
+13387
+43
+14767
+2577
+5134
+1051
+48
+8685
+590
+1425
+590
+2315
+14768
+1883
+14769
+2944
+720
+2859
+197
+272
+14770
+14771
+14
+14772
+590
+8188
+284
+379
+713
+14773
+590
+1415
+104
+14774
+209
+10
+9440
+303
+14775
+14695
+43
+14776
+2136
+14777
+14
+14778
+14779
+14780
+14477
+14781
+14782
+152
+43
+13375
+14494
+43
+188
+14
+14783
+9913
+14784
+14785
+20
+1232
+14786
+43
+48
+6106
+14787
+1115
+14788
+14789
+2
+2035
+14790
+14791
+741
+14363
+3543
+14792
+6766
+3764
+14793
+14794
+1716
+1181
+3553
+13223
+14795
+554
+43
+43
+14796
+484
+3484
+14797
+14798
+14799
+14800
+3
+2269
+14801
+1753
+1154
+14802
+14803
+14804
+138
+4518
+43
+14805
+14806
+1465
+536
+1013
+647
+14807
+14808
+14809
+14810
+14811
+14812
+14813
+1798
+14814
+10120
+590
+14815
+14816
+57
+14
+14817
+59
+14818
+14819
+12614
+1082
+358
+43
+9
+14820
+11696
+14821
+11754
+573
+8789
+5931
+3546
+14822
+14823
+11593
+14824
+2724
+42
+14825
+14826
+14827
+14828
+14829
+8297
+14830
+6341
+823
+14831
+43
+3251
+736
+14
+14015
+14832
+1107
+14833
+736
+1198
+14834
+14835
+14836
+14
+98
+19
+43
+57
+14837
+14838
+2
+1115
+14839
+14840
+48
+14841
+43
+155
+14842
+14843
+3844
+590
+14844
+43
+196
+14845
+14846
+19
+14847
+14848
+14849
+6917
+4532
+8217
+8116
+57
+14850
+305
+14851
+2593
+1051
+1547
+35
+14852
+14853
+352
+554
+2790
+152
+3842
+14854
+43
+14855
+778
+5601
+14856
+4088
+2164
+8566
+14857
+741
+13361
+11963
+590
+14858
+14859
+14860
+14861
+48
+11522
+32
+48
+32
+1817
+404
+80
+14862
+1824
+10
+43
+20
+6915
+590
+14863
+14864
+12404
+14415
+14865
+48
+10
+43
+14866
+736
+14867
+14868
+14869
+48
+14870
+14871
+14872
+554
+32
+1056
+43
+14873
+14874
+48
+2
+14875
+14876
+14877
+590
+1124
+14878
+14879
+14880
+12120
+14881
+14882
+1514
+43
+8610
+14883
+590
+14884
+3546
+1112
+14885
+12093
+43
+14886
+2859
+2764
+14000
+48
+590
+9922
+484
+43
+286
+915
+43
+1882
+4153
+14066
+14887
+155
+14888
+14
+590
+14889
+20
+48
+14890
+2733
+2243
+14891
+12987
+14892
+1369
+48
+590
+14893
+14894
+12005
+43
+14895
+43
+14896
+14897
+14
+14898
+14899
+1018
+590
+399
+14900
+237
+43
+590
+827
+14901
+14902
+14903
+14904
+14905
+14906
+14668
+201
+3
+10028
+3476
+14907
+397
+14908
+20
+10
+14477
+14909
+1261
+155
+14910
+48
+137
+14911
+14912
+14913
+14477
+10156
+2314
+43
+14914
+14
+464
+48
+14915
+185
+14916
+2865
+554
+14917
+11762
+43
+14918
+43
+14919
+286
+1232
+14
+155
+14920
+14921
+14922
+14923
+3
+142
+14924
+43
+14925
+10
+286
+14926
+14927
+48
+14928
+342
+9
+19
+14929
+14930
+2
+12246
+14931
+14932
+14933
+43
+14934
+7176
+2
+14935
+14936
+3546
+14
+2
+1732
+48
+14937
+32
+14938
+14939
+14940
+2804
+48
+19
+43
+3908
+14941
+14942
+14604
+14943
+14
+11822
+402
+5659
+554
+1228
+14944
+590
+11754
+7014
+8024
+7137
+122
+14945
+14946
+5650
+48
+11754
+14947
+48
+201
+869
+48
+10590
+43
+14948
+590
+48
+13985
+1920
+1891
+14949
+12055
+3546
+48
+14950
+14951
+43
+14952
+14953
+936
+14954
+4396
+15
+2308
+14955
+14956
+43
+590
+155
+14185
+43
+43
+590
+13349
+14957
+7509
+14958
+14959
+14960
+3546
+57
+14961
+1817
+892
+43
+14962
+14963
+14964
+19
+5080
+48
+11754
+43
+14634
+138
+14965
+14966
+14967
+14968
+736
+14969
+14970
+2764
+286
+14
+14971
+9
+2561
+1465
+14972
+12600
+14973
+14974
+286
+210
+142
+14975
+14976
+1226
+32
+1249
+3494
+14977
+1920
+590
+43
+14978
+554
+2463
+152
+20
+43
+32
+43
+11754
+590
+14979
+43
+14980
+32
+12600
+2577
+14981
+14982
+14983
+15
+14984
+590
+745
+1688
+14
+43
+2561
+2790
+14985
+43
+155
+3546
+3842
+3546
+14
+39
+14986
+43
+2029
+3949
+915
+590
+14987
+590
+286
+14988
+13361
+764
+1604
+43
+57
+14989
+104
+13570
+14332
+43
+1905
+14990
+10583
+4
+237
+849
+14991
+2
+14992
+4764
+872
+14993
+14994
+14995
+14996
+590
+1612
+19
+43
+14997
+112
+11762
+14998
+43
+590
+14999
+15000
+590
+2135
+9
+3546
+484
+10
+43
+590
+2035
+590
+15001
+15002
+155
+15003
+590
+590
+15004
+19
+43
+4028
+15005
+1804
+15006
+2125
+2047
+14
+15007
+15008
+10
+15009
+736
+48
+15010
+15011
+15012
+8512
+185
+32
+15013
+185
+13566
+43
+15014
+1513
+1229
+15015
+43
+15016
+14
+12987
+2
+3
+15017
+2804
+13576
+15018
+1716
+14
+15019
+15020
+12987
+15021
+2
+14001
+8098
+15022
+15023
+15024
+15025
+4760
+1364
+15026
+43
+2
+15027
+1578
+185
+323
+1244
+590
+15028
+43
+201
+590
+10356
+15029
+1232
+32
+7137
+213
+213
+15030
+15031
+6439
+15032
+14629
+15
+19
+15033
+305
+3546
+3743
+14
+15034
+32
+15035
+1244
+15036
+213
+3546
+1508
+15037
+2804
+286
+10147
+8896
+2
+48
+1112
+15038
+590
+590
+15039
+22
+337
+590
+764
+15040
+15041
+15042
+32
+140
+3
+590
+188
+15043
+9
+15044
+19
+15045
+597
+15046
+43
+4278
+2
+286
+43
+590
+741
+48
+20
+2
+15047
+43
+14327
+201
+3732
+112
+590
+48
+14477
+43
+14477
+15048
+14477
+15049
+1807
+43
+8188
+554
+15050
+15051
+13566
+354
+8220
+590
+1049
+3546
+15052
+590
+12605
+2064
+2
+11754
+2804
+43
+15053
+3546
+15054
+15055
+849
+12622
+590
+15056
+43
+43
+1889
+43
+590
+15057
+43
+14
+3546
+736
+6776
+43
+15058
+303
+15059
+764
+15060
+19
+1223
+491
+14
+15061
+1051
+720
+10222
+248
+48
+823
+5080
+286
+373
+764
+98
+590
+15062
+15063
+15064
+43
+15065
+14105
+35
+4760
+1578
+15066
+15067
+1745
+43
+6121
+43
+15068
+14973
+337
+32
+15069
+2
+15070
+197
+4487
+15071
+6950
+7291
+15072
+9705
+15073
+15074
+12600
+3546
+823
+500
+66
+43
+15075
+32
+15076
+15077
+13325
+3546
+1107
+15078
+4650
+15079
+15080
+15081
+13393
+15082
+15083
+43
+323
+15084
+15085
+48
+665
+1961
+1612
+13598
+15086
+15087
+6582
+15088
+13390
+32
+48
+15089
+1765
+17
+2314
+15090
+15091
+15092
+22
+137
+464
+590
+15093
+15094
+15095
+5041
+15096
+2
+15097
+2
+15098
+15099
+2
+43
+15100
+15101
+12862
+14
+647
+3543
+15102
+3553
+104
+2561
+29
+19
+15103
+12987
+3732
+15104
+57
+720
+15105
+15106
+43
+15107
+1524
+15108
+66
+1051
+15109
+104
+15110
+337
+616
+1716
+2314
+1920
+349
+15111
+9
+6950
+15112
+3546
+809
+22
+15113
+32
+15114
+15115
+15116
+15117
+98
+15118
+15119
+15120
+504
+15121
+15122
+15123
+14846
+15124
+14485
+736
+14610
+3546
+155
+155
+15125
+764
+15126
+43
+14
+15127
+597
+15128
+740
+15129
+15130
+14477
+1051
+15131
+5582
+705
+15
+15132
+57
+791
+10
+48
+213
+1051
+15133
+11321
+3470
+590
+2243
+15134
+1768
+11593
+8297
+8762
+14819
+15135
+349
+915
+15136
+1465
+15137
+15138
+176
+1377
+15139
+272
+3546
+590
+15140
+57
+3421
+15141
+15142
+6263
+48
+15143
+15144
+845
+15145
+48
+15146
+48
+15147
+14448
+15148
+2
+713
+6305
+9664
+15149
+590
+48
+4760
+15150
+15151
+745
+3626
+48
+12987
+590
+15152
+15153
+286
+48
+590
+57
+15154
+15155
+14
+665
+15156
+43
+2537
+3421
+284
+4518
+15157
+1870
+590
+15158
+764
+15159
+15160
+15161
+1604
+15162
+15163
+9766
+15164
+1208
+590
+20
+284
+2026
+14477
+286
+48
+12987
+43
+66
+15165
+14
+1617
+155
+2
+20
+647
+43
+15166
+15167
+411
+3546
+4116
+15168
+15169
+231
+48
+14571
+77
+48
+647
+15170
+12005
+15171
+1559
+19
+720
+15172
+19
+15173
+1578
+2042
+43
+590
+15174
+15175
+43
+1604
+707
+15176
+491
+14
+3
+15177
+15178
+15179
+20
+35
+790
+201
+14668
+464
+2728
+14185
+20
+15180
+1013
+6504
+15181
+647
+104
+4028
+2
+2
+1437
+14
+15182
+349
+48
+15183
+20
+15184
+178
+15185
+15186
+213
+12013
+5627
+57
+2882
+196
+6011
+222
+19
+15187
+15188
+9617
+15189
+5271
+590
+2064
+15190
+2260
+15191
+43
+155
+15192
+48
+493
+13387
+15193
+1712
+43
+15194
+14343
+43
+15195
+3594
+155
+48
+43
+15196
+2790
+15197
+57
+15198
+15199
+15200
+19
+15201
+15202
+15203
+14
+15204
+43
+15205
+15206
+259
+15207
+80
+98
+411
+15208
+15
+43
+705
+415
+22
+14509
+15209
+14
+15210
+2
+11754
+15211
+5780
+30
+48
+2975
+43
+1961
+861
+11754
+15212
+15213
+48
+2
+1578
+349
+823
+873
+19
+15214
+155
+141
+15215
+48
+43
+349
+15063
+19
+15216
+48
+1716
+2561
+15217
+15218
+1262
+741
+14
+15219
+15220
+1465
+8338
+245
+8230
+8392
+15221
+14
+15222
+11537
+66
+3317
+2239
+1765
+11482
+15223
+15224
+10659
+15225
+286
+15226
+15227
+15228
+43
+32
+14
+1091
+272
+15229
+43
+14219
+209
+43
+15230
+57
+48
+14603
+35
+15231
+15232
+541
+196
+1696
+15018
+48
+141
+286
+272
+155
+15233
+15234
+15235
+5614
+15236
+43
+32
+15237
+286
+5344
+201
+43
+15238
+369
+15239
+15240
+112
+15241
+15242
+15243
+15244
+15
+5271
+15245
+1696
+15246
+5627
+15247
+43
+15248
+3080
+274
+15249
+1870
+15250
+3553
+48
+720
+365
+15251
+155
+15252
+15253
+43
+10946
+3470
+15254
+15255
+48
+14957
+493
+1280
+15256
+9
+554
+7855
+48
+15257
+15258
+2
+15259
+169
+15260
+15261
+15262
+14
+15263
+397
+32
+15264
+15265
+13929
+57
+590
+15266
+1425
+15267
+43
+15268
+554
+15269
+590
+15270
+15271
+349
+43
+736
+155
+10
+9543
+15272
+1508
+15273
+590
+958
+15274
+15275
+3684
+15276
+741
+2790
+7855
+590
+3546
+43
+141
+342
+15277
+15278
+15279
+1508
+15280
+1612
+15
+48
+43
+3
+15281
+15282
+19
+15283
+15
+1013
+19
+15284
+14
+2064
+648
+43
+14603
+1942
+3732
+14
+25
+15285
+15286
+15287
+8357
+317
+1817
+736
+694
+15
+15288
+15289
+8297
+14770
+15290
+10574
+32
+15291
+722
+43
+5614
+15292
+6950
+590
+3546
+48
+305
+1013
+1011
+15293
+9
+60
+43
+15294
+15295
+15
+48
+9460
+15296
+9454
+3252
+14
+2446
+7855
+1612
+8188
+15297
+286
+764
+14
+57
+8188
+478
+3330
+823
+15298
+14888
+7977
+15299
+15300
+15301
+14604
+15302
+43
+15303
+3480
+48
+2804
+48
+15304
+13364
+43
+736
+19
+3915
+2042
+15305
+10933
+13961
+15306
+57
+15307
+484
+590
+286
+4028
+15308
+1870
+11428
+15309
+15220
+791
+2135
+12987
+48
+19
+43
+15310
+7356
+15311
+15312
+15313
+48
+15314
+29
+15315
+15316
+10
+590
+1091
+1027
+15317
+590
+12819
+15318
+15319
+15320
+4411
+15321
+12987
+9739
+8103
+19
+104
+554
+140
+590
+590
+15322
+1214
+15323
+720
+15324
+286
+590
+15325
+3546
+764
+15326
+15327
+5780
+19
+8566
+286
+741
+4406
+32
+1559
+48
+22
+14
+15328
+57
+210
+14
+15329
+590
+13248
+80
+647
+9472
+5683
+15330
+2410
+1051
+493
+104
+15331
+15332
+665
+155
+43
+36
+43
+15333
+1021
+15334
+43
+3546
+15335
+1655
+9
+89
+15336
+13913
+15337
+15338
+10
+590
+5780
+665
+11482
+48
+43
+590
+6624
+1765
+43
+14
+342
+14573
+1465
+15
+57
+14
+15339
+15340
+15341
+349
+15342
+11762
+15343
+286
+15344
+736
+2919
+20
+15345
+15346
+15347
+15348
+2804
+6915
+5764
+15349
+15350
+15351
+590
+32
+43
+15352
+15353
+43
+4088
+416
+1013
+15354
+590
+209
+2
+2499
+2430
+15355
+590
+528
+15
+15356
+48
+14957
+12987
+2804
+15357
+15358
+5780
+15359
+15360
+1234
+138
+15361
+15362
+495
+15363
+15364
+48
+2832
+15365
+15366
+3544
+15367
+14
+20
+3669
+48
+12987
+15368
+12402
+736
+2
+14001
+1116
+8297
+155
+887
+741
+9245
+4979
+104
+4278
+19
+1543
+112
+5561
+349
+9160
+272
+15369
+2
+15370
+10
+5415
+43
+19
+323
+4487
+8320
+15371
+12987
+48
+2865
+548
+15372
+15373
+138
+43
+15374
+590
+19
+554
+446
+155
+14
+14204
+1961
+2058
+15375
+15376
+1012
+14825
+43
+137
+19
+43
+24
+57
+15377
+43
+15378
+1648
+43
+9913
+15220
+12479
+15379
+6439
+301
+15380
+15381
+19
+286
+35
+15382
+9163
+6480
+15383
+5780
+15384
+15385
+1157
+286
+32
+5253
+4028
+2577
+9543
+3291
+373
+402
+15386
+736
+15387
+15388
+19
+15389
+278
+10356
+43
+1513
+15390
+1529
+15391
+14477
+3251
+15392
+48
+15393
+15394
+8566
+15395
+1991
+15396
+823
+15397
+48
+15398
+48
+2561
+15399
+19
+25
+164
+48
+48
+15400
+15401
+14
+14001
+112
+15402
+15403
+249
+15404
+1612
+2015
+4028
+43
+19
+43
+14
+57
+192
+373
+590
+15405
+57
+590
+15406
+3
+15407
+1326
+3559
+1376
+11822
+15408
+15409
+15410
+2550
+6671
+1011
+1091
+3105
+15411
+15412
+1153
+665
+15413
+15414
+19
+15415
+10230
+823
+15416
+15417
+892
+43
+15418
+14363
+15419
+15420
+15421
+15422
+3489
+48
+15423
+349
+1013
+2202
+7855
+7032
+15424
+12330
+15425
+12402
+48
+43
+15426
+1415
+1048
+19
+358
+57
+15427
+155
+2
+2314
+14477
+3546
+590
+1021
+104
+15428
+648
+764
+7215
+590
+15429
+2
+43
+4752
+354
+155
+19
+43
+43
+7154
+15430
+16
+764
+15431
+2769
+15432
+770
+13150
+48
+2
+590
+15433
+1606
+5963
+6874
+1870
+15434
+14
+80
+14
+15435
+138
+15436
+15437
+2476
+43
+590
+9
+15438
+15439
+736
+1870
+2
+15440
+1503
+15441
+48
+14
+48
+48
+15442
+12987
+3061
+2314
+3
+3417
+19
+1513
+1051
+15443
+590
+140
+6928
+1458
+554
+15444
+5204
+1091
+48
+15445
+14066
+590
+152
+15446
+493
+15447
+15448
+736
+6275
+14
+15449
+15450
+1310
+15451
+14477
+15452
+2764
+15453
+352
+5780
+8967
+1310
+15454
+15455
+872
+15456
+14604
+13045
+15457
+6965
+15458
+4821
+14816
+1013
+6776
+43
+43
+13566
+10
+4396
+48
+1716
+15459
+19
+201
+48
+15460
+15461
+10791
+19
+3842
+8205
+57
+15462
+15463
+5327
+377
+188
+15464
+15465
+15466
+48
+4897
+15467
+15468
+15469
+1364
+15470
+15471
+2056
+2029
+286
+6950
+15472
+15473
+2029
+48
+1425
+43
+43
+13424
+286
+32
+57
+590
+13904
+15474
+15475
+1013
+590
+10123
+8255
+9598
+12832
+873
+8244
+43
+5908
+15476
+736
+272
+9910
+15477
+237
+7855
+20
+15
+2197
+15478
+349
+1637
+8428
+6400
+43
+15479
+10306
+15480
+337
+1655
+14473
+248
+378
+14001
+104
+14
+237
+3066
+48
+1051
+201
+19
+15481
+48
+15482
+10
+15
+15483
+349
+590
+887
+2064
+98
+99
+14604
+15484
+15485
+15486
+15487
+8891
+15488
+337
+2769
+1232
+3
+15489
+15490
+43
+15491
+4056
+286
+286
+286
+15492
+286
+349
+379
+6145
+142
+514
+15493
+48
+104
+14477
+764
+14
+15494
+1021
+590
+13208
+10246
+15495
+15496
+14957
+14327
+2213
+492
+209
+15497
+48
+5833
+15498
+19
+15499
+43
+248
+14477
+15500
+43
+15501
+43
+15502
+15503
+1605
+741
+11762
+12987
+15504
+14477
+1612
+1566
+590
+2
+12936
+80
+15505
+1716
+15506
+15507
+137
+15508
+272
+15509
+686
+15510
+43
+286
+14647
+19
+15511
+741
+48
+15512
+15513
+3546
+14
+6817
+3906
+6054
+1765
+3119
+15514
+43
+15515
+15217
+29
+15516
+736
+3491
+12987
+1011
+3546
+10673
+43
+15517
+10
+736
+112
+15518
+8566
+14
+15519
+15520
+1889
+15521
+2457
+554
+201
+736
+43
+741
+1047
+1768
+15522
+66
+15523
+303
+43
+15524
+15525
+112
+286
+1612
+887
+15526
+15527
+15528
+669
+892
+48
+1912
+590
+15529
+66
+15530
+15531
+15532
+14
+2
+19
+188
+15533
+9
+15534
+15535
+104
+15536
+10723
+5780
+15537
+15538
+590
+1229
+43
+32
+48
+48
+213
+15539
+3
+5083
+590
+736
+15540
+323
+43
+15
+590
+15541
+736
+8269
+66
+15542
+2
+43
+12094
+15543
+15544
+15545
+8351
+872
+15546
+185
+15547
+15548
+4218
+15549
+4907
+15550
+554
+14
+590
+15551
+1011
+861
+5197
+14
+4752
+15552
+15553
+15554
+15555
+11369
+5496
+15556
+3034
+337
+528
+15557
+345
+272
+15558
+14
+155
+15559
+4747
+15560
+112
+14
+57
+13364
+590
+48
+357
+8566
+590
+14604
+2356
+1710
+15406
+15561
+4684
+1696
+1232
+15562
+15563
+15564
+11762
+2
+590
+15565
+14
+590
+14
+12987
+19
+14
+13781
+15566
+48
+112
+15567
+48
+736
+15568
+15569
+15570
+15571
+1465
+15572
+15573
+1508
+15574
+590
+14
+15575
+621
+14477
+248
+566
+15
+4414
+1243
+8053
+2260
+1992
+15576
+43
+15577
+48
+48
+736
+278
+14603
+647
+5162
+2356
+15578
+15579
+43
+2
+1154
+15580
+15581
+323
+98
+15582
+208
+15583
+11762
+7154
+15584
+1011
+48
+15585
+15586
+43
+32
+15384
+1423
+15587
+2463
+284
+1013
+15588
+13150
+15589
+8896
+736
+741
+2769
+15590
+10
+15591
+48
+440
+15592
+2281
+14
+14
+48
+48
+15593
+48
+2006
+15594
+14576
+286
+590
+590
+5304
+590
+15595
+10147
+2356
+15596
+15597
+46
+15598
+15599
+15600
+15601
+11176
+10
+1181
+15602
+5074
+590
+15603
+15604
+5089
+378
+2764
+13566
+15605
+15606
+14
+43
+14
+10
+6499
+14239
+46
+15607
+4963
+19
+647
+3543
+2
+15608
+14
+36
+2790
+15609
+3546
+13802
+15610
+3546
+15611
+48
+33
+15612
+19
+15613
+533
+5803
+15614
+48
+15615
+15616
+8460
+464
+13913
+43
+15617
+8297
+15618
+677
+14363
+15619
+155
+43
+448
+99
+1612
+14947
+2064
+12267
+15620
+176
+13361
+15621
+14816
+15622
+3
+15623
+15624
+15625
+43
+14
+3251
+15626
+15627
+15628
+15629
+15630
+43
+15631
+845
+1217
+15632
+43
+43
+15633
+1885
+15634
+15635
+590
+15636
+29
+43
+15637
+15638
+15639
+590
+7544
+15640
+43
+43
+43
+188
+741
+32
+3546
+2318
+43
+15641
+4302
+43
+699
+57
+10993
+6513
+590
+14416
+43
+3381
+4463
+14
+15642
+15643
+349
+15644
+514
+2330
+15645
+3598
+15646
+43
+15647
+15648
+15649
+14
+272
+10318
+15446
+379
+112
+15650
+104
+15651
+721
+8249
+2561
+590
+14
+3546
+48
+3546
+15652
+43
+15653
+15654
+13038
+1612
+590
+15655
+14896
+112
+554
+10016
+590
+20
+1049
+15656
+32
+12005
+299
+15657
+48
+155
+15658
+15659
+15660
+15661
+43
+11085
+9560
+11754
+15662
+3406
+15663
+464
+15664
+14
+764
+57
+15665
+48
+15666
+15667
+14185
+15668
+2561
+15669
+14
+590
+590
+8351
+15670
+48
+3546
+43
+43
+15671
+8789
+48
+201
+8916
+57
+188
+764
+15672
+48
+741
+2744
+15673
+15674
+1021
+152
+14434
+11754
+15675
+15676
+15677
+48
+11822
+526
+43
+15
+15678
+15679
+13760
+3546
+305
+3546
+9
+14477
+15680
+15681
+764
+57
+5420
+48
+590
+349
+196
+491
+43
+15682
+2409
+43
+15683
+43
+4341
+13361
+15684
+13807
+19
+971
+15445
+15685
+15306
+4341
+14477
+48
+15686
+43
+3546
+7276
+15687
+14
+15688
+15689
+358
+416
+155
+15690
+104
+43
+15691
+1961
+590
+15692
+15693
+15694
+13228
+249
+36
+573
+4376
+48
+43
+493
+48
+15695
+43
+1571
+352
+15696
+464
+6341
+19
+3
+1688
+736
+14001
+15697
+228
+15698
+5298
+15699
+15700
+1817
+15701
+2569
+15702
+11966
+15703
+722
+48
+2
+15704
+13150
+38
+14
+411
+15705
+10230
+15706
+286
+14660
+15707
+15708
+14604
+4411
+590
+15709
+15710
+8721
+15711
+845
+3553
+855
+415
+12987
+1870
+14
+14
+15712
+15713
+9
+15714
+15715
+10946
+43
+43
+590
+15716
+15717
+15718
+272
+590
+2804
+528
+14
+741
+43
+590
+48
+123
+12153
+43
+43
+15719
+15720
+5659
+3546
+15721
+286
+15722
+15723
+48
+14884
+15724
+13108
+3959
+15725
+15726
+14
+57
+1696
+1732
+4230
+43
+176
+15727
+15728
+15729
+14
+48
+15730
+822
+43
+15731
+15732
+11321
+931
+15733
+2
+1376
+10
+590
+15734
+554
+43
+15735
+349
+15736
+48
+15737
+15738
+590
+2
+5780
+155
+15739
+1060
+14604
+1542
+196
+14
+12077
+15740
+10
+2446
+741
+15741
+15742
+15743
+14477
+6400
+14604
+590
+3553
+14363
+32
+2859
+1112
+9994
+590
+349
+14363
+1444
+12987
+15744
+15745
+5438
+5305
+43
+590
+43
+2567
+19
+646
+15746
+15747
+590
+1514
+15748
+14
+19
+15749
+15750
+590
+15751
+15752
+19
+14
+4907
+249
+15753
+15754
+15755
+12202
+15756
+3849
+8867
+741
+764
+3842
+15757
+15622
+15758
+2
+1245
+15759
+3732
+741
+43
+57
+43
+15760
+2463
+15761
+590
+32
+14
+11483
+15762
+3291
+13271
+14
+1051
+15763
+15764
+3546
+15765
+2958
+590
+43
+7780
+12808
+14
+590
+32
+15766
+57
+3553
+590
+10
+7045
+43
+112
+259
+48
+43
+15767
+270
+15768
+3546
+43
+10
+15769
+43
+15770
+15771
+15772
+15773
+15774
+155
+15775
+48
+19
+15776
+15777
+43
+358
+19
+15778
+15779
+1637
+286
+1470
+590
+647
+286
+3353
+2700
+703
+358
+3546
+9
+15780
+140
+73
+14
+15781
+15782
+5627
+7291
+13528
+15783
+43
+5162
+14007
+14
+43
+15784
+43
+32
+43
+15785
+357
+48
+15786
+720
+7276
+15787
+303
+4790
+15788
+13208
+57
+2314
+13282
+15789
+15790
+2006
+14
+741
+11754
+5614
+19
+15791
+48
+15792
+15793
+5293
+14624
+736
+29
+3119
+20
+15794
+7137
+2
+213
+337
+590
+15795
+2009
+213
+3546
+15796
+4963
+249
+411
+5582
+284
+286
+5483
+15797
+15798
+1208
+1726
+12560
+14
+15799
+1066
+15800
+15801
+2064
+15802
+12
+7034
+15803
+13282
+5780
+7226
+15804
+15805
+1481
+2679
+1232
+15806
+5780
+15807
+15808
+4387
+15809
+1605
+2694
+15810
+14985
+15811
+983
+43
+8351
+15812
+2040
+15813
+15814
+10
+15815
+15816
+14532
+12013
+15817
+15818
+13508
+4808
+741
+14532
+15819
+43
+15820
+43
+14
+5780
+48
+15821
+15822
+1924
+14957
+15823
+15824
+590
+764
+13508
+48
+1765
+20
+43
+15825
+155
+155
+210
+741
+282
+43
+1291
+15156
+188
+15826
+379
+15827
+554
+15828
+19
+590
+15351
+15829
+349
+707
+48
+1751
+48
+15830
+29
+48
+3129
+554
+349
+13904
+15756
+43
+12807
+15831
+17
+57
+43
+15832
+292
+4907
+15833
+272
+4997
+15834
+15835
+15836
+3546
+1157
+15837
+48
+141
+15838
+15839
+337
+13913
+2804
+590
+15840
+554
+1251
+10117
+15841
+1524
+57
+14
+48
+48
+43
+9320
+48
+13282
+43
+15842
+15843
+15844
+764
+43
+358
+590
+1956
+15845
+15846
+43
+15847
+15848
+43
+14276
+48
+15849
+15850
+647
+12307
+509
+2600
+971
+15851
+1051
+15852
+9
+15756
+15853
+15854
+15855
+15856
+3
+1095
+32
+15857
+15858
+1300
+15859
+1232
+15860
+3484
+15861
+15862
+15863
+48
+590
+7014
+5088
+15864
+13492
+15865
+272
+20
+2197
+15866
+104
+43
+12621
+15867
+6518
+15868
+48
+15869
+15870
+8297
+349
+15871
+137
+155
+9418
+927
+15872
+6877
+48
+8701
+43
+15873
+3615
+286
+43
+14
+15874
+15875
+6741
+10
+1401
+15876
+43
+12987
+15877
+15878
+590
+14
+8566
+887
+12267
+349
+736
+15879
+15880
+43
+1234
+15881
+2064
+19
+15882
+15883
+15884
+15885
+3003
+20
+3546
+590
+11321
+11762
+15886
+13162
+741
+15887
+15888
+15889
+178
+43
+1224
+15890
+397
+1169
+15891
+590
+15892
+15699
+349
+1903
+99
+15893
+13361
+707
+43
+7601
+9
+1559
+15894
+43
+720
+9
+15895
+15896
+15897
+15898
+13150
+11754
+15899
+15900
+19
+15901
+1232
+32
+99
+1901
+1883
+10030
+15902
+19
+15903
+286
+14
+15904
+892
+7908
+1316
+13957
+15905
+176
+15906
+741
+15907
+15908
+590
+1465
+272
+43
+1912
+15909
+48
+15910
+48
+15911
+15912
+1917
+15913
+14
+2
+2
+15914
+15915
+15916
+11471
+590
+201
+112
+43
+5045
+60
+15917
+15918
+15428
+590
+15919
+7183
+57
+564
+15920
+29
+22
+22
+152
+14897
+2
+48
+1655
+80
+12534
+15921
+43
+15922
+720
+15923
+201
+15924
+15925
+5780
+15926
+14343
+1232
+15927
+19
+15928
+15929
+43
+32
+43
+48
+2459
+1385
+5344
+19
+209
+15930
+14
+286
+3546
+48
+43
+1465
+349
+4
+345
+155
+2476
+12120
+533
+2392
+15931
+13655
+15932
+43
+15933
+57
+1234
+19
+745
+1612
+2625
+14477
+12711
+43
+15934
+1961
+36
+2
+286
+15935
+14
+48
+317
+12772
+43
+590
+15936
+509
+493
+15937
+15938
+8733
+15939
+48
+2465
+4852
+590
+14
+590
+4230
+5827
+1169
+15940
+43
+3546
+15941
+15942
+15943
+15944
+3844
+1115
+15945
+1824
+590
+15946
+9
+15947
+14482
+590
+15948
+323
+43
+15949
+15950
+15951
+15952
+7236
+301
+5780
+15953
+15954
+15955
+15956
+15957
+14
+15958
+66
+1710
+590
+15959
+188
+15960
+1364
+415
+15327
+15961
+155
+15962
+15963
+15964
+48
+1234
+43
+15965
+20
+648
+15966
+5197
+3546
+48
+15967
+11483
+36
+15968
+15969
+1991
+15970
+155
+370
+48
+15971
+15972
+12329
+15973
+14
+1295
+2260
+286
+5780
+15974
+15975
+15976
+2029
+15977
+13361
+89
+15978
+15
+741
+7886
+1920
+590
+12987
+155
+141
+15979
+15980
+15981
+1223
+104
+43
+590
+15
+15982
+4179
+14553
+22
+15983
+14603
+15984
+5204
+19
+15985
+3546
+554
+9
+741
+15986
+142
+48
+15987
+9
+15988
+15989
+1154
+188
+15990
+736
+590
+590
+2
+48
+15991
+15992
+15993
+43
+43
+590
+536
+272
+6011
+15994
+43
+590
+1013
+152
+209
+6764
+48
+2
+272
+590
+9713
+8907
+15995
+1047
+15996
+5780
+478
+14185
+15997
+5344
+15998
+11321
+15999
+9
+6741
+12005
+16000
+1089
+16001
+16002
+16003
+764
+43
+8787
+14477
+16004
+16005
+10
+16006
+6764
+272
+16007
+14369
+112
+14
+20
+138
+48
+3417
+282
+2600
+4425
+286
+10
+590
+48
+3546
+2
+272
+720
+453
+14604
+707
+14477
+43
+11483
+1870
+286
+16008
+2762
+16009
+16010
+1578
+16011
+1295
+15699
+16012
+11762
+3546
+19
+16013
+16014
+3546
+1232
+13929
+16015
+15
+16016
+528
+1901
+349
+4928
+322
+43
+16017
+3546
+16018
+43
+43
+647
+16019
+16020
+20
+9
+16021
+16022
+11593
+2733
+16023
+16024
+1547
+16025
+16026
+112
+1449
+741
+16027
+1889
+720
+57
+43
+12397
+9
+16028
+16029
+11882
+736
+43
+20
+14
+19
+4524
+16030
+3610
+48
+5780
+43
+1371
+10
+16031
+1051
+15989
+16032
+188
+2577
+16033
+16034
+590
+15449
+6668
+19
+16035
+3
+16036
+48
+32
+213
+2694
+16037
+11762
+14
+7835
+16038
+14690
+16039
+13655
+12987
+16040
+16041
+16042
+152
+57
+536
+349
+1166
+3546
+14
+16043
+43
+14477
+14
+349
+19
+7357
+43
+43
+13282
+48
+16044
+16045
+8566
+1529
+35
+16046
+2117
+16047
+915
+16048
+590
+14843
+16049
+89
+2577
+16050
+2124
+16051
+19
+286
+43
+317
+751
+495
+707
+4961
+43
+57
+5208
+9965
+845
+16052
+48
+3976
+13973
+14
+43
+5780
+3417
+337
+10
+43
+2459
+16053
+2
+14884
+6287
+514
+1569
+4820
+597
+16054
+2286
+5119
+6950
+14
+272
+590
+16055
+3546
+16056
+3546
+1232
+5243
+2415
+399
+15778
+16057
+303
+16058
+2514
+13108
+274
+16059
+16060
+286
+43
+155
+16061
+5080
+16062
+48
+43
+16063
+3546
+11256
+16064
+16065
+12620
+43
+14
+16066
+16067
+8249
+2
+15
+2040
+5418
+16068
+16069
+305
+16070
+48
+4765
+16071
+185
+14
+583
+16072
+35
+16073
+155
+15
+16074
+16075
+16076
+8295
+16077
+509
+5351
+272
+16078
+272
+32
+590
+12987
+16079
+8351
+19
+495
+590
+11301
+14
+152
+140
+3546
+14
+6950
+397
+4280
+337
+286
+16064
+16080
+43
+2
+16081
+48
+43
+342
+57
+16082
+16083
+590
+19
+152
+3546
+16084
+694
+104
+3317
+12778
+5088
+16085
+16086
+16087
+43
+137
+16088
+16089
+8249
+775
+201
+9
+1082
+32
+3543
+16090
+14341
+16091
+16092
+57
+16093
+12560
+1012
+16094
+16095
+16096
+57
+210
+43
+533
+590
+16097
+43
+415
+29
+16098
+337
+3546
+14
+590
+14901
+43
+16099
+104
+5820
+16100
+239
+2035
+665
+16101
+16102
+1915
+14369
+590
+12987
+14363
+16103
+43
+16104
+209
+10003
+16105
+590
+1508
+590
+9
+16106
+16107
+3546
+3546
+586
+43
+48
+1232
+4982
+48
+16108
+16109
+152
+16110
+10004
+16102
+43
+16111
+10031
+16112
+48
+2042
+16113
+48
+16114
+1013
+349
+9
+16115
+16054
+16116
+6766
+43
+10
+16117
+16118
+3546
+872
+16119
+248
+1765
+19
+12996
+16120
+5780
+16121
+14
+16122
+2769
+16123
+16124
+590
+9583
+6766
+6214
+2316
+464
+15
+16125
+13282
+16126
+16127
+2764
+9
+323
+11211
+590
+3128
+647
+2550
+1425
+48
+16128
+22
+16129
+32
+16130
+16131
+349
+12277
+2356
+736
+15797
+590
+14
+5837
+4803
+16132
+14
+4982
+14
+16133
+16134
+8943
+16135
+6950
+16136
+349
+3546
+1021
+14
+20
+16137
+761
+16138
+16139
+16140
+1021
+764
+590
+43
+590
+16141
+16142
+213
+3368
+345
+248
+48
+647
+590
+14477
+16143
+16144
+16145
+16146
+13566
+16147
+590
+16148
+3638
+16149
+16150
+43
+14604
+1112
+736
+1765
+2
+14483
+12402
+16151
+16152
+13959
+15756
+57
+1107
+19
+12220
+20
+16153
+16154
+1765
+16155
+9
+583
+16156
+3
+16157
+43
+32
+16158
+16159
+872
+8351
+43
+16160
+2694
+16161
+647
+8758
+16162
+1559
+415
+14843
+11754
+16163
+686
+16164
+16165
+16166
+16167
+16168
+20
+43
+2
+12987
+16169
+1026
+43
+16170
+16171
+10
+16172
+43
+16173
+493
+142
+43
+10163
+16174
+349
+43
+43
+823
+16175
+13566
+13225
+15592
+43
+342
+12987
+16176
+16177
+14
+16178
+98
+16179
+10583
+16180
+13223
+32
+16181
+14604
+16182
+16183
+89
+1710
+9
+1214
+14
+4855
+16184
+222
+3139
+16185
+115
+48
+3546
+16186
+6950
+648
+48
+14
+38
+671
+16187
+1217
+16188
+349
+16189
+303
+16190
+16191
+16192
+16193
+10
+16194
+14604
+373
+16195
+1300
+286
+43
+20
+43
+741
+48
+16196
+3546
+640
+272
+12987
+828
+43
+16197
+16198
+3
+741
+5751
+2038
+48
+16199
+29
+16200
+14
+48
+134
+43
+16201
+2314
+155
+764
+16202
+3546
+16203
+823
+9514
+43
+16204
+647
+32
+2493
+48
+823
+16205
+14
+43
+9
+10
+590
+16206
+188
+6214
+13988
+286
+10979
+3598
+19
+43
+274
+417
+333
+12987
+6950
+378
+1217
+16207
+48
+16208
+590
+19
+10
+16209
+112
+3546
+14
+43
+16210
+43
+1310
+1295
+8864
+1224
+616
+43
+16211
+43
+6209
+4927
+16212
+736
+14532
+48
+3075
+201
+2
+8724
+5647
+286
+286
+590
+14
+16213
+43
+6744
+57
+16214
+3906
+16215
+9
+20
+43
+554
+379
+16216
+16217
+14
+1716
+16218
+15953
+16219
+16220
+14
+16221
+5220
+19
+1172
+15914
+16222
+48
+14
+13756
+16223
+13282
+16224
+43
+616
+554
+10
+16225
+6075
+57
+379
+16226
+16227
+57
+41
+14827
+16228
+16229
+1245
+13566
+16230
+16231
+2260
+1287
+9
+286
+43
+5780
+1013
+15
+590
+861
+369
+1012
+140
+43
+1314
+3
+590
+345
+16232
+48
+16233
+764
+16234
+1356
+915
+43
+98
+16235
+6068
+16236
+16237
+16238
+1013
+736
+554
+16239
+379
+48
+16240
+16241
+16242
+16243
+590
+80
+5299
+10
+349
+13321
+12807
+16244
+16245
+4028
+43
+1112
+791
+14
+16246
+10
+647
+16247
+16248
+16249
+16250
+16251
+3546
+43
+3546
+349
+16252
+16253
+16254
+3546
+29
+16255
+16256
+868
+7855
+14477
+16257
+1018
+16258
+16259
+16260
+16261
+16262
+16263
+2
+43
+32
+53
+736
+1217
+43
+3546
+590
+5332
+16264
+272
+13576
+16265
+43
+12457
+9
+14666
+42
+10
+15914
+242
+222
+668
+2039
+16266
+2314
+16267
+14693
+4824
+15975
+43
+16268
+14
+11522
+9583
+34
+16269
+14
+1181
+137
+112
+16270
+8593
+16271
+554
+16272
+16273
+16274
+43
+16275
+16276
+590
+354
+10
+16277
+14594
+4747
+8566
+16278
+16279
+43
+14
+2882
+3546
+8188
+16280
+178
+16281
+6736
+282
+16282
+590
+548
+9595
+43
+38
+590
+48
+48
+3369
+32
+1696
+16283
+16284
+5561
+16285
+16286
+15720
+3546
+115
+14
+16287
+53
+39
+5731
+16288
+16289
+9103
+16290
+7137
+14477
+616
+590
+43
+16291
+152
+14363
+16292
+3546
+5340
+15
+8566
+16293
+648
+16294
+16295
+48
+48
+15718
+8255
+115
+286
+573
+48
+16296
+16297
+16298
+43
+16299
+1100
+16300
+16301
+379
+398
+665
+701
+48
+13790
+16302
+12987
+14
+16303
+272
+16304
+16305
+2694
+16306
+16307
+528
+3546
+15504
+536
+222
+1172
+16308
+7379
+16309
+16310
+43
+2281
+16311
+1912
+11754
+16312
+3546
+16313
+210
+694
+16314
+16315
+349
+10727
+19
+989
+43
+1514
+16316
+210
+16317
+43
+16318
+16319
+16320
+3546
+16321
+16322
+379
+11754
+15
+16323
+6095
+590
+16324
+2957
+4752
+14420
+6950
+43
+16325
+358
+14477
+11408
+57
+590
+14477
+12560
+1566
+741
+3546
+16326
+7137
+16327
+16328
+849
+590
+1578
+2975
+15756
+16329
+16330
+16331
+3119
+416
+272
+8566
+14
+1107
+35
+16332
+48
+16333
+12987
+14
+16334
+43
+16335
+16336
+389
+1743
+4028
+57
+3066
+19
+16337
+590
+36
+15718
+1563
+16338
+43
+590
+43
+11762
+1300
+16339
+412
+5410
+48
+4293
+3
+16340
+16341
+112
+14477
+16342
+32
+6877
+14
+11754
+1232
+16343
+16344
+3119
+2811
+16345
+48
+590
+16346
+3546
+16347
+5344
+35
+3452
+201
+16348
+16349
+1048
+301
+15718
+16350
+140
+188
+16351
+16352
+3546
+13492
+210
+15
+2053
+1232
+377
+53
+1684
+16353
+16354
+1991
+3849
+155
+1961
+16355
+32
+48
+8724
+16060
+16356
+48
+3
+32
+16357
+59
+8297
+16230
+1991
+3355
+3275
+10993
+16358
+1149
+1559
+15718
+188
+10356
+20
+222
+16359
+16360
+14477
+16361
+43
+16362
+48
+4963
+22
+19
+16363
+13566
+9
+2787
+16364
+14477
+43
+14871
+3546
+250
+1817
+349
+170
+16365
+1082
+736
+16366
+16367
+14
+13296
+16368
+16369
+272
+16370
+16371
+48
+1049
+16372
+823
+4
+14866
+590
+185
+8188
+1987
+15797
+14
+3182
+1217
+16373
+35
+736
+16374
+16090
+201
+14679
+2925
+16375
+13582
+3334
+43
+14
+48
+13365
+16376
+16377
+16378
+16379
+7855
+152
+14
+14886
+60
+16380
+1470
+16381
+15
+16382
+16383
+43
+338
+16384
+43
+16385
+741
+590
+590
+14
+16386
+43
+34
+3546
+7137
+16387
+43
+14
+16388
+2434
+1181
+196
+1382
+4387
+43
+11341
+6877
+4155
+16389
+16390
+1083
+12987
+14
+15
+22
+16391
+43
+53
+123
+43
+6950
+1531
+16392
+43
+12987
+15756
+16393
+16394
+9402
+590
+112
+286
+207
+99
+6341
+16395
+16396
+155
+43
+16397
+12798
+16398
+2243
+5780
+48
+43
+12166
+16399
+43
+19
+16400
+43
+317
+607
+4907
+16401
+16402
+3546
+15
+14477
+12987
+736
+14001
+14603
+43
+1853
+1442
+705
+16403
+16404
+122
+16405
+43
+14604
+16406
+3317
+736
+16407
+16408
+43
+4717
+16409
+16410
+16411
+14814
+43
+14
+10389
+16412
+1160
+1018
+284
+16413
+16414
+213
+1604
+12560
+10
+8279
+16415
+1559
+16416
+16417
+2859
+57
+188
+43
+1013
+16418
+15744
+16419
+16420
+16421
+38
+16422
+8171
+303
+989
+9
+16190
+3353
+3546
+3546
+4179
+16423
+16424
+242
+43
+16425
+16426
+9
+14477
+16427
+284
+16428
+272
+16429
+16430
+16431
+358
+16432
+16433
+284
+48
+43
+2
+741
+20
+16434
+16435
+971
+16436
+16437
+1051
+16438
+16439
+15810
+6877
+11966
+48
+16440
+29
+16441
+57
+16442
+43
+337
+284
+16443
+48
+16444
+11539
+43
+16445
+16446
+10230
+342
+48
+16447
+16448
+1244
+43
+14689
+48
+16348
+19
+337
+15
+48
+43
+48
+315
+5688
+48
+43
+1013
+933
+849
+7259
+48
+12987
+16449
+323
+20
+16450
+16451
+1800
+16452
+16453
+1961
+16454
+2
+2136
+16258
+16455
+14363
+43
+1203
+398
+209
+1232
+12005
+558
+286
+16456
+590
+2577
+590
+16457
+14604
+3546
+16458
+12987
+16459
+32
+43
+16437
+6950
+16460
+16461
+43
+736
+590
+286
+284
+720
+16462
+16205
+741
+16463
+14957
+19
+16464
+16465
+14
+7283
+16466
+16467
+57
+14663
+2958
+16468
+248
+16469
+3353
+9
+1542
+14
+349
+16470
+10
+16471
+564
+590
+43
+16472
+16473
+15718
+16474
+15406
+16475
+14
+16476
+16477
+48
+14
+8367
+272
+16478
+16479
+11808
+16480
+1232
+397
+16481
+43
+16482
+590
+249
+3492
+16483
+43
+112
+1011
+16484
+16485
+16486
+303
+16487
+590
+6950
+16488
+2
+590
+16489
+16490
+3
+16491
+16492
+16493
+16494
+3546
+16495
+590
+2734
+590
+43
+5780
+7137
+16496
+7855
+590
+225
+671
+16497
+57
+16498
+646
+16499
+43
+48
+1157
+16500
+590
+8988
+5780
+48
+48
+16440
+1765
+19
+16096
+3034
+8005
+16501
+3435
+16502
+38
+16503
+8744
+15718
+16504
+16505
+29
+509
+16506
+1232
+16507
+15718
+14001
+2260
+16508
+14
+16509
+349
+3546
+16510
+286
+16511
+57
+16512
+43
+16513
+16514
+5217
+373
+153
+16515
+16516
+14
+43
+16517
+16518
+720
+14001
+43
+16519
+16520
+14
+16521
+22
+137
+2253
+196
+2006
+16522
+15384
+16523
+590
+590
+16524
+590
+43
+16525
+16526
+284
+16527
+457
+484
+16437
+16528
+5627
+188
+112
+155
+16529
+15718
+6915
+14
+16530
+16531
+35
+16532
+60
+16533
+16534
+15718
+337
+16535
+2733
+971
+1220
+16536
+43
+16537
+213
+14
+7960
+15
+16538
+14957
+14603
+590
+16539
+16540
+16541
+14
+43
+16542
+284
+2260
+43
+745
+48
+16543
+188
+43
+16544
+43
+12185
+8566
+16545
+323
+43
+16546
+590
+35
+43
+9461
+14477
+2561
+16547
+16548
+32
+323
+8297
+16549
+3546
+3598
+43
+43
+6121
+2254
+322
+14
+16550
+16551
+736
+142
+9617
+10
+16437
+2577
+16552
+14
+2772
+1738
+15824
+16553
+2733
+248
+5780
+590
+14
+16554
+16555
+43
+16556
+16557
+16558
+1991
+32
+43
+16559
+1563
+303
+16560
+16561
+16562
+1229
+16563
+349
+16564
+14
+14
+12351
+9
+16565
+192
+16566
+1524
+16567
+210
+16568
+17
+11207
+16569
+16570
+16437
+137
+3546
+16571
+16572
+14
+16573
+647
+272
+248
+16574
+16575
+43
+823
+43
+16576
+16577
+248
+16578
+57
+16579
+43
+20
+590
+5438
+43
+3546
+6950
+16580
+43
+248
+43
+5780
+16581
+9705
+16582
+16583
+590
+210
+43
+152
+597
+15
+1787
+2921
+349
+16584
+15718
+647
+16585
+741
+16586
+48
+16587
+32
+16588
+16589
+14916
+1799
+7917
+43
+2243
+29
+2
+590
+8392
+32
+648
+1013
+16590
+1437
+14604
+16591
+16592
+2
+1465
+16593
+48
+872
+286
+736
+19
+12987
+14546
+48
+16594
+357
+16595
+43
+22
+16596
+12987
+12483
+43
+16597
+16598
+349
+590
+2561
+15718
+14215
+541
+9681
+3546
+554
+286
+3553
+1559
+3546
+16334
+92
+14
+19
+16599
+1912
+1415
+16600
+29
+16601
+16602
+16603
+16604
+43
+16605
+3546
+16606
+16607
+9560
+16608
+14
+3546
+286
+272
+16609
+16610
+16611
+12936
+14
+11754
+16612
+448
+14
+1082
+43
+19
+43
+43
+2
+1208
+16613
+305
+16614
+20
+43
+1232
+1013
+16615
+19
+16616
+35
+16617
+16618
+16437
+16619
+43
+736
+15718
+464
+317
+790
+1542
+16620
+14
+89
+286
+16621
+16491
+5561
+495
+16622
+19
+38
+14695
+2
+272
+741
+16623
+5780
+14693
+16624
+16625
+10230
+10961
+849
+12987
+16626
+16627
+16628
+15
+6121
+43
+14477
+16629
+13361
+14
+3
+3508
+5601
+16630
+188
+349
+790
+16631
+43
+16632
+43
+9
+80
+6595
+16633
+16634
+4113
+692
+16635
+16636
+16637
+16638
+16639
+590
+19
+15694
+16640
+16641
+16642
+16643
+38
+16644
+11754
+5803
+554
+43
+16645
+16646
+14001
+5780
+14816
+3546
+647
+12605
+711
+16647
+16648
+16649
+2804
+5601
+43
+43
+16650
+20
+14594
+13954
+2540
+16651
+1425
+6595
+3055
+16652
+16653
+5088
+48
+16654
+16655
+249
+16656
+48
+16657
+12402
+16658
+48
+14
+13902
+2
+416
+48
+16659
+14179
+736
+16660
+845
+152
+16661
+16662
+16663
+43
+3491
+16664
+770
+14420
+4278
+15718
+16665
+16666
+16667
+16668
+349
+16669
+3484
+6950
+155
+1013
+178
+25
+43
+16670
+11176
+686
+43
+14
+16671
+16672
+399
+16673
+16674
+16675
+1018
+16150
+16676
+12
+7553
+48
+2
+358
+2245
+4907
+16171
+16677
+819
+16678
+11247
+43
+915
+16679
+446
+16680
+671
+554
+11754
+16681
+16682
+14
+152
+15
+590
+590
+16683
+590
+1157
+770
+19
+16684
+1047
+48
+43
+16685
+4028
+1765
+16686
+8244
+16687
+11483
+16688
+141
+89
+16689
+12987
+16690
+16691
+10259
+12
+16692
+43
+16693
+751
+3310
+648
+16694
+32
+590
+1425
+1154
+16695
+155
+16696
+590
+43
+16697
+14759
+19
+2577
+15718
+16698
+10720
+3546
+16699
+1021
+43
+3546
+7123
+11321
+59
+736
+16437
+43
+349
+2324
+16700
+13271
+554
+15718
+43
+16584
+9
+828
+16701
+76
+4790
+43
+16702
+11005
+1232
+16703
+13279
+48
+14
+16704
+12067
+32
+12434
+16705
+9849
+1364
+13803
+1364
+14546
+15718
+43
+16706
+16707
+5041
+1991
+16708
+1425
+14
+16709
+736
+15718
+16710
+15595
+590
+1012
+15472
+16711
+16712
+43
+16713
+39
+16714
+590
+1232
+32
+16715
+736
+231
+3408
+349
+9
+16716
+13150
+1295
+16717
+188
+48
+8046
+16718
+741
+16719
+253
+80
+14
+16720
+741
+3546
+8050
+16721
+43
+16722
+14603
+16723
+19
+1208
+16724
+16725
+16726
+16727
+16728
+16729
+12185
+57
+16730
+16731
+14001
+11762
+16732
+10
+16733
+16734
+16735
+16736
+16737
+48
+773
+16437
+16738
+16739
+16740
+48
+590
+19
+43
+14363
+38
+13484
+16741
+2012
+16742
+16634
+155
+665
+16743
+6877
+823
+14477
+14553
+9262
+2476
+590
+48
+16744
+554
+3
+19
+647
+554
+15054
+10737
+14
+16745
+2882
+43
+16746
+16747
+16748
+14
+14523
+48
+936
+272
+464
+415
+16749
+1013
+16750
+16751
+533
+16752
+209
+57
+43
+16753
+16754
+32
+2930
+16755
+8566
+25
+16756
+43
+286
+48
+2733
+48
+188
+16757
+14274
+16758
+16759
+7855
+13464
+16760
+6794
+6214
+590
+16761
+16762
+15718
+43
+1109
+210
+713
+2446
+112
+5780
+16763
+16764
+16765
+6341
+12402
+349
+2537
+43
+209
+16766
+3575
+11762
+16767
+3542
+15
+16768
+6939
+13754
+48
+43
+286
+16769
+647
+12987
+2537
+16770
+5969
+16413
+1232
+16437
+16771
+43
+349
+4717
+15718
+16772
+15718
+6741
+16773
+43
+16774
+590
+43
+43
+590
+16775
+590
+14
+1765
+16776
+16118
+16777
+14
+323
+14
+927
+2577
+464
+48
+10
+16778
+22
+8100
+57
+590
+43
+43
+14363
+16437
+16779
+16780
+15
+3546
+16781
+1051
+14
+16782
+2314
+48
+12402
+48
+1446
+736
+2314
+43
+16783
+1529
+554
+16784
+3546
+16785
+209
+590
+14
+43
+16786
+7923
+590
+16787
+43
+736
+16788
+16437
+16789
+16790
+1217
+3546
+16791
+16792
+3330
+19
+20
+669
+15384
+16793
+8685
+1961
+57
+15498
+16794
+1364
+16171
+15718
+16795
+349
+16035
+3491
+48
+16796
+16797
+16798
+16799
+19
+16800
+6950
+2015
+9
+16801
+16802
+3546
+590
+16803
+1082
+16804
+155
+15039
+16805
+14
+16806
+22
+2064
+15819
+48
+16807
+647
+16808
+16809
+3546
+590
+2253
+188
+849
+741
+358
+2769
+16810
+590
+16811
+16284
+112
+13179
+4118
+3481
+15718
+16812
+2136
+19
+15718
+741
+873
+16813
+48
+16814
+13666
+16815
+16816
+16817
+16818
+16819
+560
+5780
+872
+2012
+3768
+16820
+590
+16821
+12560
+13279
+16822
+1905
+15649
+48
+15
+9
+16823
+14
+14
+43
+11762
+305
+1181
+193
+16824
+16825
+43
+16826
+48
+16827
+34
+14363
+16828
+590
+7137
+15718
+16829
+89
+1524
+16830
+15718
+16831
+397
+16832
+286
+188
+2
+43
+16833
+16834
+595
+104
+16835
+1912
+849
+14007
+16836
+16837
+16838
+14477
+14
+14
+764
+13897
+8867
+43
+16839
+3546
+43
+5582
+14537
+590
+16840
+14
+16841
+2790
+48
+16842
+554
+16843
+16844
+1013
+16845
+3546
+590
+16846
+16847
+140
+16848
+16849
+16850
+8362
+16851
+15718
+5614
+823
+16852
+16853
+16468
+16854
+16855
+16856
+16857
+19
+16858
+188
+736
+11301
+16859
+3119
+48
+188
+112
+15718
+16437
+2195
+16860
+2804
+4388
+19
+16861
+43
+15718
+16437
+16862
+845
+10
+3768
+16863
+16864
+48
+67
+10079
+16865
+16866
+1765
+3546
+6736
+2042
+57
+491
+554
+9
+7137
+4606
+57
+16867
+16868
+590
+16869
+48
+19
+19
+16870
+16871
+16872
+48
+43
+16873
+76
+741
+32
+16874
+48
+16205
+13131
+36
+16875
+1082
+3546
+16876
+43
+2260
+43
+1513
+16877
+29
+16878
+14477
+1847
+1425
+770
+14477
+16879
+19
+736
+16880
+16881
+15
+43
+3105
+16882
+16883
+20
+16884
+16885
+286
+43
+16437
+16886
+48
+11762
+48
+15810
+43
+43
+357
+5318
+9
+5780
+741
+14477
+57
+650
+3543
+16887
+16888
+8758
+16889
+16890
+14
+43
+590
+16891
+16892
+48
+80
+379
+831
+9
+1542
+43
+16437
+48
+29
+15797
+7855
+8994
+3546
+7521
+179
+5990
+590
+15
+286
+11822
+2064
+16893
+3978
+2
+16894
+14477
+13484
+20
+1224
+16895
+5451
+14276
+2254
+16896
+48
+20
+342
+209
+5075
+16897
+349
+9
+14
+48
+43
+3546
+2121
+16898
+16899
+197
+647
+19
+16900
+15914
+16901
+1992
+16902
+43
+14
+6095
+3546
+3228
+16903
+16904
+566
+1316
+155
+16905
+11301
+16906
+16907
+43
+3546
+3546
+44
+2550
+5973
+1559
+2006
+1465
+43
+590
+590
+112
+16908
+16909
+16910
+16911
+1080
+16912
+1425
+43
+590
+16913
+1808
+2694
+16914
+12
+16915
+16916
+16917
+188
+43
+5190
+16656
+590
+10
+22
+1234
+155
+16918
+554
+741
+16919
+741
+20
+206
+43
+14185
+493
+16920
+14477
+16921
+14
+48
+16922
+5963
+29
+14420
+1120
+16923
+2404
+16924
+16925
+1458
+16926
+16927
+13760
+20
+16928
+6720
+16929
+6915
+590
+16930
+16931
+16932
+4684
+16933
+2117
+16934
+6741
+2764
+16437
+3546
+491
+2790
+35
+790
+16935
+1859
+354
+43
+14
+590
+12621
+48
+48
+286
+48
+19
+3553
+201
+16936
+43
+1169
+43
+8351
+14
+16937
+43
+14477
+1765
+2764
+43
+14957
+286
+14363
+15486
+3546
+48
+11321
+43
+16938
+16939
+16940
+4717
+554
+2769
+29
+3546
+8188
+3546
+2202
+14363
+1012
+43
+16941
+16942
+16437
+16943
+16944
+16945
+43
+1011
+4
+16946
+439
+16947
+16948
+16949
+16950
+13150
+16951
+43
+19
+48
+43
+16145
+19
+590
+14
+4278
+16952
+14
+43
+16953
+9
+15356
+286
+5416
+16954
+16955
+16881
+12987
+16956
+16957
+43
+16958
+16959
+741
+48
+16960
+616
+887
+590
+554
+3546
+16961
+7215
+16962
+16963
+7137
+1154
+16964
+7855
+741
+10958
+16965
+16966
+4278
+48
+48
+43
+590
+1077
+57
+1765
+2314
+16967
+595
+53
+16968
+1688
+48
+590
+16491
+16969
+12907
+12987
+16970
+16437
+19
+48
+474
+16971
+43
+2561
+16972
+43
+16973
+9
+16974
+112
+16975
+201
+14001
+16976
+43
+48
+16977
+590
+43
+1437
+16978
+48
+19
+9739
+15
+48
+16979
+15718
+845
+42
+80
+16980
+286
+741
+590
+155
+13566
+16981
+1992
+14
+16982
+1912
+16983
+16437
+43
+16984
+16985
+379
+43
+16986
+9
+1559
+57
+16987
+272
+210
+16988
+16989
+303
+29
+616
+16990
+16991
+16992
+48
+16993
+16994
+16995
+16996
+14
+613
+11522
+213
+16437
+48
+286
+2879
+16997
+357
+43
+14909
+16998
+358
+14477
+43
+19
+16999
+17000
+1054
+3546
+590
+43
+14185
+17001
+17002
+43
+43
+17003
+57
+337
+397
+333
+14
+2
+17004
+349
+14185
+17005
+590
+9
+17006
+17007
+15820
+43
+286
+14185
+1901
+16981
+15
+17008
+17009
+17010
+17011
+17012
+30
+43
+15
+48
+590
+14
+16437
+17013
+6301
+17014
+590
+590
+1361
+14477
+17011
+446
+590
+17015
+17016
+14
+17017
+736
+13555
+89
+17018
+4963
+337
+795
+15718
+19
+17019
+357
+5119
+104
+1502
+17020
+4388
+705
+6499
+5780
+14373
+736
+3546
+590
+11483
+3546
+80
+19
+17021
+89
+17022
+17023
+509
+17024
+536
+43
+1524
+2732
+17025
+971
+48
+17026
+201
+1228
+11321
+17027
+2650
+3192
+590
+2577
+3546
+1920
+152
+736
+14
+14853
+17028
+8255
+2594
+17029
+6950
+2514
+17030
+48
+5418
+17031
+1577
+57
+17032
+11754
+17033
+43
+32
+17034
+17035
+22
+48
+17036
+590
+17037
+14814
+17038
+1066
+4116
+17039
+43
+5218
+17040
+248
+43
+17041
+373
+3764
+16437
+43
+17042
+2349
+17043
+12891
+104
+5780
+17044
+17045
+17046
+1465
+32
+2409
+745
+7855
+3546
+17047
+17048
+48
+1011
+15220
+6106
+17049
+15855
+14
+17050
+736
+14
+590
+17051
+7276
+17052
+6072
+825
+590
+5780
+9705
+17053
+17054
+17055
+15718
+48
+17056
+2040
+17057
+17058
+493
+43
+17059
+3548
+3546
+358
+2694
+570
+15720
+2804
+17060
+17061
+188
+590
+17062
+57
+188
+3546
+17063
+11046
+137
+14363
+349
+13405
+17064
+17065
+17066
+16437
+17067
+43
+35
+5780
+2015
+17068
+48
+17069
+14
+15183
+17070
+1168
+14
+4934
+16826
+222
+17071
+17072
+9
+43
+19
+2260
+2009
+48
+15026
+17073
+17074
+17075
+14
+1612
+17076
+7962
+43
+15183
+8566
+15
+17077
+1021
+14
+17078
+17079
+43
+8392
+2593
+4808
+14
+17080
+590
+17081
+17082
+222
+9942
+17083
+3546
+17084
+17085
+48
+3216
+4056
+59
+701
+15718
+14
+893
+2457
+4026
+17086
+14477
+823
+736
+9444
+2009
+14
+43
+736
+17087
+8961
+3546
+17088
+43
+43
+17089
+11995
+48
+43
+179
+590
+3546
+8566
+15718
+32
+17090
+43
+14603
+10
+16488
+17091
+43
+1444
+43
+43
+17092
+14
+43
+14477
+17093
+48
+1153
+3626
+3317
+17094
+17095
+11727
+17096
+17097
+16491
+9649
+17098
+1364
+19
+17099
+17100
+5387
+16014
+9
+1817
+315
+13361
+317
+7176
+17101
+17102
+379
+17103
+17104
+17105
+17106
+20
+17107
+2864
+43
+484
+43
+7522
+17108
+17109
+6950
+349
+17110
+249
+17111
+43
+48
+43
+8668
+2577
+17112
+2769
+6048
+20
+17113
+48
+14
+5435
+17114
+17115
+17116
+14343
+17117
+533
+15989
+17118
+20
+17119
+43
+721
+8188
+17120
+17121
+1559
+14
+861
+590
+590
+19
+43
+17122
+17123
+15275
+17124
+17125
+17126
+3330
+741
+9
+590
+17127
+17128
+2979
+12987
+48
+590
+11754
+43
+43
+17129
+14477
+399
+43
+14
+19
+1051
+17130
+32
+25
+17131
+15718
+590
+17132
+6776
+17133
+9184
+5780
+12987
+17134
+15718
+1508
+764
+1992
+48
+8994
+4691
+12674
+15718
+590
+10
+11647
+11762
+17135
+590
+2318
+17136
+1287
+6741
+15442
+17042
+533
+1606
+17137
+43
+352
+188
+34
+15
+48
+17138
+358
+1612
+209
+19
+15975
+17139
+15240
+17140
+2316
+32
+17141
+16826
+17142
+46
+17143
+736
+14594
+11754
+53
+16741
+43
+286
+9
+48
+14911
+590
+43
+43
+17144
+736
+43
+7137
+5022
+17145
+3546
+2694
+17146
+17147
+1425
+379
+43
+179
+17148
+493
+43
+17149
+17150
+1559
+17151
+14
+377
+17152
+17153
+188
+3546
+14186
+583
+43
+17154
+17155
+15718
+694
+43
+17156
+590
+17157
+398
+1696
+647
+3546
+1765
+736
+495
+14477
+17158
+15645
+19
+683
+17159
+11483
+17160
+17161
+3546
+17162
+17163
+17164
+5601
+57
+590
+17165
+22
+4055
+137
+3335
+16197
+5067
+17166
+43
+17167
+48
+1232
+323
+9578
+823
+17168
+17169
+57
+10
+554
+17170
+618
+17171
+15914
+48
+17172
+2410
+14477
+16437
+43
+16589
+10147
+6950
+9427
+533
+201
+43
+17173
+931
+76
+17174
+19
+12987
+17175
+17176
+16826
+845
+17177
+17178
+17179
+15718
+17180
+14660
+286
+1612
+17181
+586
+43
+48
+17182
+16866
+17183
+17184
+17185
+3546
+2872
+2260
+17186
+17187
+17188
+17189
+114
+286
+3546
+270
+16436
+2260
+17190
+590
+43
+5409
+17191
+1513
+48
+14363
+17192
+9103
+15718
+16640
+48
+43
+48
+43
+17193
+15718
+48
+17194
+43
+17195
+4760
+14
+17196
+17197
+989
+43
+14825
+17198
+736
+57
+17199
+365
+17200
+17201
+17202
+43
+741
+590
+17203
+17204
+8668
+5582
+17205
+14185
+17136
+48
+17206
+4364
+3546
+43
+48
+2260
+43
+14
+14
+17011
+15718
+43
+6518
+1606
+209
+43
+1870
+1048
+32
+14
+17207
+17208
+17209
+12267
+16437
+1011
+14
+17210
+43
+5785
+9
+17211
+17212
+43
+1291
+17213
+2787
+89
+791
+17214
+1232
+10
+25
+14538
+17215
+14
+4803
+6505
+17216
+647
+17217
+188
+17218
+48
+17219
+399
+3999
+564
+317
+590
+188
+17220
+17221
+1912
+1924
+17222
+3553
+17223
+17224
+17225
+415
+17226
+694
+17227
+17228
+17229
+48
+474
+17230
+2
+178
+560
+17231
+17232
+17233
+5675
+17234
+2560
+22
+17235
+43
+2430
+17236
+17237
+17238
+17239
+2790
+10
+4908
+19
+17240
+48
+17241
+17242
+17243
+1232
+99
+10
+19
+1577
+43
+48
+17244
+17245
+14477
+736
+17246
+17247
+9
+43
+17248
+43
+844
+5344
+17249
+8566
+43
+14048
+1222
+17250
+112
+3417
+14185
+265
+736
+17251
+43
+8566
+17252
+48
+57
+2733
+590
+17253
+15824
+17254
+1154
+4028
+17255
+590
+16092
+17256
+17257
+9
+17258
+590
+6341
+286
+2316
+17259
+14
+5080
+7872
+48
+14
+1765
+57
+5780
+17260
+365
+17261
+22
+17262
+17263
+48
+1172
+17264
+43
+48
+48
+17265
+272
+43
+17266
+1765
+590
+155
+17267
+2577
+17268
+17269
+17270
+209
+48
+17271
+17272
+17273
+43
+43
+57
+7835
+14
+14185
+17274
+17275
+286
+2728
+16014
+590
+1529
+17276
+43
+17277
+43
+8994
+17278
+17279
+17280
+9410
+1224
+1961
+43
+1531
+5119
+17281
+43
+9784
+398
+5780
+2550
+14
+152
+736
+17282
+1051
+32
+14604
+647
+48
+201
+43
+17283
+2476
+1615
+12402
+48
+14
+17284
+48
+9
+17285
+1559
+17286
+17287
+17288
+5192
+595
+9705
+823
+17289
+707
+3050
+823
+1924
+17290
+16437
+48
+48
+17291
+43
+17292
+12404
+1154
+17293
+349
+14477
+358
+17294
+665
+17295
+17296
+43
+14
+741
+17297
+14
+43
+1376
+35
+1300
+14
+11286
+11757
+14001
+17298
+48
+15718
+17299
+736
+17300
+3599
+2697
+9
+12220
+17301
+17302
+19
+17303
+228
+590
+2577
+76
+17304
+12966
+4028
+43
+590
+590
+17305
+17306
+16437
+3543
+741
+17307
+14
+713
+14
+1232
+4313
+48
+14
+17308
+17309
+48
+48
+3546
+8301
+14871
+228
+17310
+5169
+48
+1115
+14
+1817
+3546
+1855
+736
+822
+3480
+17311
+15718
+741
+590
+43
+286
+1889
+17312
+365
+17313
+155
+22
+17314
+43
+15426
+12
+15718
+17315
+15
+6732
+1862
+17316
+5780
+17317
+17318
+17319
+48
+590
+17320
+15975
+43
+17321
+17322
+14
+17323
+17324
+5175
+43
+1605
+76
+43
+416
+17325
+17326
+17327
+349
+17328
+17329
+43
+17330
+14
+323
+17331
+17332
+1249
+97
+209
+17333
+17334
+3546
+17335
+17336
+32
+17337
+13307
+17338
+112
+17339
+17340
+14185
+17341
+43
+48
+2035
+17055
+22
+17342
+43
+10789
+17343
+17344
+17345
+17346
+17347
+17348
+17349
+32
+278
+15026
+17350
+10
+17351
+1524
+17352
+1229
+1615
+17353
+15718
+32
+736
+446
+2577
+17354
+491
+1612
+590
+17355
+43
+564
+2833
+1013
+3546
+43
+15718
+3546
+14
+9
+3484
+17356
+17357
+554
+17358
+17359
+590
+17360
+2733
+17361
+17362
+14
+493
+15
+17363
+122
+2913
+573
+4028
+17364
+17365
+12
+4963
+590
+22
+3417
+464
+8188
+17366
+1157
+43
+9
+17367
+1907
+323
+17368
+17369
+2117
+10230
+12987
+12534
+17370
+17371
+2202
+15586
+17372
+22
+17373
+1051
+17374
+17375
+17376
+17377
+16640
+358
+590
+14477
+43
+14
+590
+17378
+17379
+43
+14
+17380
+17381
+17382
+17073
+15718
+1232
+12351
+12005
+16437
+17383
+1287
+590
+14477
+1090
+17384
+272
+17385
+43
+20
+17386
+14477
+4684
+1287
+2577
+8249
+11471
+11593
+6776
+17387
+554
+17388
+17389
+20
+13913
+15718
+17390
+379
+17391
+17392
+9
+17235
+3546
+989
+720
+349
+2035
+741
+1502
+43
+6518
+20
+17393
+17394
+17395
+43
+3546
+17396
+112
+14
+17397
+4765
+17398
+9
+14
+5920
+5381
+501
+590
+3546
+17399
+17400
+671
+3546
+17401
+2577
+17402
+823
+17403
+17404
+19
+2286
+17405
+1542
+17406
+1051
+6294
+2349
+5627
+196
+1234
+17407
+10
+1021
+17408
+590
+2410
+16826
+284
+10673
+17409
+86
+17410
+2476
+17411
+12120
+14001
+43
+17412
+4765
+17413
+17414
+1369
+17415
+17416
+14001
+57
+15122
+17417
+16089
+1232
+2064
+17413
+17418
+616
+17419
+17420
+597
+2739
+358
+43
+248
+43
+43
+736
+3790
+17421
+17422
+8566
+16437
+19
+590
+11762
+15718
+17423
+9
+736
+43
+29
+5920
+17424
+17425
+16604
+3546
+14868
+17426
+3287
+349
+17427
+17428
+17429
+48
+286
+15
+2009
+43
+14
+1578
+2389
+17430
+43
+736
+176
+3034
+17431
+17432
+201
+17433
+12299
+43
+349
+11754
+17434
+43
+764
+484
+17435
+19
+17436
+683
+19
+188
+5611
+14
+14
+14
+179
+1112
+2308
+17437
+11685
+141
+17438
+14603
+17439
+590
+43
+17440
+13974
+17441
+337
+15718
+284
+349
+4521
+17442
+16604
+17443
+646
+17413
+17444
+2324
+17356
+3546
+43
+17445
+590
+43
+17446
+16102
+14067
+16437
+17447
+416
+43
+17448
+17449
+17450
+17451
+590
+17452
+17453
+2315
+17454
+43
+17455
+43
+590
+17456
+46
+48
+13529
+4153
+590
+15
+17457
+12062
+349
+2
+2849
+354
+14161
+1543
+640
+17458
+15824
+590
+3546
+17459
+590
+284
+2577
+48
+17460
+48
+6468
+17461
+17462
+590
+590
+17463
+30
+6950
+736
+17464
+14477
+17465
+17466
+17467
+43
+892
+13325
+188
+14846
+3330
+9
+17468
+1688
+15308
+677
+14532
+17469
+1154
+3330
+32
+17470
+349
+9
+337
+713
+17471
+736
+1465
+696
+43
+213
+590
+286
+48
+17472
+1743
+17473
+17474
+17475
+17476
+6171
+152
+8367
+112
+14
+1232
+2
+16003
+590
+48
+48
+48
+43
+554
+15217
+43
+48
+48
+77
+17477
+14001
+9
+43
+17478
+17479
+213
+6505
+1605
+17480
+48
+17481
+590
+3080
+43
+9
+590
+17482
+13030
+8188
+22
+17483
+17484
+14477
+14
+43
+15
+6617
+123
+17485
+713
+4028
+57
+17486
+1013
+849
+17487
+43
+17488
+1920
+22
+971
+16866
+17489
+9842
+43
+17490
+1605
+7276
+43
+736
+590
+17491
+2
+10
+17492
+138
+17493
+17494
+17495
+17496
+43
+48
+43
+1637
+5446
+57
+48
+741
+13430
+48
+284
+9
+17497
+286
+48
+694
+17470
+17498
+17499
+57
+2009
+6406
+1047
+17500
+43
+3072
+179
+43
+32
+887
+13569
+286
+15951
+14
+43
+3546
+822
+694
+48
+17501
+1442
+349
+2655
+5908
+17228
+15583
+155
+17502
+17503
+48
+1056
+590
+17504
+16190
+17505
+48
+4441
+17506
+17507
+1513
+3546
+8668
+6877
+17508
+155
+17509
+17510
+17511
+9259
+17512
+43
+17513
+1716
+590
+5627
+15797
+16981
+15881
+3743
+8469
+17514
+8188
+32
+14
+590
+14
+14841
+17515
+137
+112
+5080
+17516
+17517
+354
+48
+17518
+915
+17519
+17229
+99
+213
+17520
+213
+745
+17521
+17522
+4081
+17523
+17524
+141
+17525
+337
+1508
+17526
+43
+14189
+12013
+213
+14
+17527
+17528
+17529
+29
+736
+19
+17530
+8849
+564
+416
+17531
+17532
+209
+17533
+1364
+17534
+11483
+9
+17535
+17536
+8994
+43
+29
+43
+17537
+43
+115
+17538
+17539
+48
+16437
+12005
+17540
+2
+2356
+533
+17541
+7208
+1961
+2
+590
+958
+17542
+19
+14363
+337
+2864
+46
+475
+248
+43
+17543
+6214
+17544
+3546
+43
+17545
+14
+17546
+337
+17547
+17548
+17549
+17550
+17551
+484
+57
+282
+19
+17552
+17553
+14477
+17554
+13985
+590
+19
+14
+15718
+15592
+3415
+43
+3330
+741
+43
+48
+11995
+43
+57
+3034
+43
+77
+16102
+98
+1364
+17555
+17556
+971
+10
+8297
+17557
+272
+2260
+11483
+57
+14477
+17558
+13466
+284
+17559
+15718
+12120
+17560
+43
+17561
+15718
+17562
+17563
+4306
+647
+17564
+337
+48
+17565
+15334
+48
+14947
+1637
+337
+7154
+272
+213
+16437
+8392
+43
+337
+16437
+15718
+15
+10
+14
+17566
+17567
+558
+17568
+14
+3491
+8076
+48
+17569
+43
+1727
+4963
+3546
+590
+43
+17570
+17571
+5304
+303
+1112
+590
+17572
+17573
+17055
+17574
+17575
+590
+2577
+3546
+15718
+43
+736
+16437
+17576
+303
+19
+43
+17577
+57
+14363
+43
+112
+17578
+248
+11995
+17579
+17580
+14
+305
+590
+17581
+43
+286
+60
+12807
+20
+15718
+741
+1924
+46
+15718
+3626
+17582
+17583
+6058
+474
+4677
+15001
+188
+17584
+491
+48
+1799
+958
+43
+17585
+3329
+5627
+823
+424
+3553
+10757
+34
+19
+286
+17586
+14
+48
+11600
+43
+48
+43
+104
+11475
+17587
+17588
+17589
+17590
+1716
+12722
+14
+17591
+2136
+8297
+10843
+3572
+3546
+8670
+15718
+17592
+17593
+590
+19
+17594
+2042
+3553
+17595
+17596
+17597
+11754
+17598
+694
+590
+20
+17599
+17600
+17601
+8249
+17602
+10
+17603
+48
+43
+43
+9
+2035
+10356
+137
+14
+17604
+48
+17605
+9
+17606
+2006
+590
+14477
+358
+43
+17607
+17608
+20
+590
+17609
+14
+16437
+17610
+57
+17611
+17612
+3310
+14
+20
+12987
+286
+1051
+822
+15
+416
+14
+17613
+1524
+48
+5299
+17614
+188
+9118
+1513
+14
+17615
+5267
+43
+872
+17616
+196
+17617
+17618
+122
+17619
+14
+1912
+17620
+17621
+17622
+5780
+872
+8849
+43
+43
+66
+323
+17623
+155
+188
+1716
+17624
+736
+286
+1082
+43
+17625
+286
+17626
+43
+1423
+17627
+17628
+1992
+209
+590
+17629
+791
+17630
+1696
+17631
+17632
+42
+9
+17262
+17633
+17634
+15649
+15654
+17635
+17636
+770
+590
+43
+48
+14
+17637
+155
+2
+13492
+4313
+11522
+17638
+43
+48
+1172
+2525
+17639
+554
+189
+17640
+8867
+43
+11754
+590
+14
+170
+14102
+17151
+48
+17641
+590
+349
+790
+707
+3546
+43
+286
+17642
+238
+19
+17643
+349
+8566
+19
+17644
+990
+15
+14
+958
+8428
+67
+14189
+720
+15718
+648
+3546
+17645
+20
+16437
+17646
+822
+5085
+790
+161
+17647
+17648
+11817
+286
+17649
+17650
+32
+17651
+32
+17652
+17653
+16437
+15761
+500
+4441
+17654
+66
+16981
+417
+536
+48
+7855
+43
+14477
+590
+6214
+17655
+14
+17656
+5080
+19
+112
+554
+14604
+17657
+48
+3546
+17658
+43
+2975
+554
+9
+6011
+155
+48
+17659
+17596
+17660
+16437
+48
+48
+4313
+17136
+1648
+17661
+19
+4963
+9
+15718
+9
+7154
+1287
+48
+17662
+17663
+17664
+7783
+590
+176
+8668
+16437
+2769
+17665
+17666
+10
+15118
+17667
+2314
+764
+15718
+17668
+48
+43
+43
+43
+349
+6468
+48
+15320
+14604
+590
+17669
+694
+140
+17670
+19
+2769
+57
+15718
+15718
+1051
+48
+6571
+66
+112
+15
+1808
+112
+2
+1745
+3072
+10
+1112
+11754
+14604
+19
+13566
+554
+17671
+48
+17672
+43
+17673
+1330
+48
+140
+4808
+1710
+3484
+17674
+15
+9
+1961
+1232
+48
+5217
+17675
+554
+17676
+17677
+590
+57
+590
+15
+10
+16437
+14363
+15683
+97
+671
+590
+48
+613
+48
+1817
+14604
+3944
+17678
+17679
+365
+647
+17680
+17681
+17682
+17683
+5780
+17684
+12120
+15
+17685
+12987
+17686
+1203
+17687
+43
+17688
+1018
+379
+17689
+2577
+12864
+8208
+272
+17097
+1612
+12600
+915
+17690
+2865
+16437
+43
+17691
+17692
+736
+17693
+13711
+17694
+17695
+2697
+3546
+43
+17696
+43
+17697
+1384
+17698
+590
+15054
+590
+17699
+14
+14185
+872
+4278
+17700
+402
+2260
+19
+7860
+15
+491
+17701
+17702
+2202
+2577
+14
+11754
+43
+22
+16437
+2694
+536
+1401
+17703
+323
+5088
+19
+1066
+590
+43
+43
+7580
+17704
+7253
+12202
+17705
+1927
+115
+14
+10
+590
+7812
+17706
+17707
+17708
+17709
+17710
+17711
+210
+17712
+17713
+43
+17714
+352
+590
+16305
+10993
+17715
+89
+15
+741
+138
+22
+736
+590
+17716
+590
+17717
+533
+15493
+2253
+17718
+43
+48
+720
+4684
+48
+17719
+17720
+2733
+17721
+17722
+35
+3005
+60
+17723
+17724
+15824
+17725
+2
+1134
+8188
+17726
+4929
+17727
+17728
+3546
+17729
+1437
+3653
+17730
+17731
+17732
+11754
+1559
+323
+15718
+17733
+17734
+17735
+17736
+17737
+1203
+17738
+665
+17739
+48
+6900
+17740
+14
+590
+48
+179
+17741
+736
+16437
+669
+464
+1013
+16150
+17742
+1578
+15853
+1514
+17743
+43
+16844
+17744
+12404
+14
+152
+1765
+48
+14477
+17745
+11321
+43
+11754
+16719
+14477
+2314
+5403
+17746
+15718
+1559
+14007
+1425
+19
+17747
+17748
+736
+4760
+80
+48
+3544
+17749
+80
+573
+15718
+2537
+892
+17750
+57
+17751
+554
+10
+17752
+14079
+5780
+17753
+17754
+43
+10028
+17755
+43
+1021
+1847
+1091
+17756
+17757
+14
+1425
+5780
+12987
+17758
+13375
+17759
+1112
+19
+17760
+14
+17761
+17762
+43
+3546
+14477
+13349
+48
+13282
+17763
+43
+2619
+1442
+413
+12402
+1559
+17764
+66
+2577
+349
+817
+43
+16443
+14957
+2941
+43
+1612
+3077
+3034
+17765
+2561
+48
+16024
+9
+17766
+817
+42
+48
+48
+17767
+17768
+17769
+1169
+17770
+17771
+17772
+14679
+17773
+17774
+12987
+736
+17775
+15718
+1049
+14
+1425
+590
+43
+8208
+1384
+17776
+43
+17777
+1992
+14935
+541
+17778
+15148
+2577
+349
+349
+17779
+17780
+17781
+17782
+17783
+19
+305
+428
+665
+17784
+48
+17785
+17786
+15928
+17787
+17788
+3546
+3546
+14
+11593
+48
+17789
+647
+533
+17790
+286
+17791
+590
+14
+17792
+4963
+76
+193
+17793
+272
+17794
+741
+1011
+1808
+590
+4269
+17795
+12
+15718
+2392
+104
+16927
+17796
+647
+5041
+14
+17797
+590
+4196
+48
+647
+12241
+17466
+17798
+15
+1232
+17799
+66
+17800
+3279
+764
+14693
+2764
+8263
+43
+48
+34
+14477
+590
+2336
+3546
+305
+15989
+5780
+178
+17801
+17802
+17803
+17804
+1442
+15718
+32
+140
+17805
+590
+17806
+590
+2476
+13209
+17807
+16437
+11593
+17808
+17809
+10946
+43
+17810
+590
+17811
+15718
+590
+13179
+48
+14
+17812
+2
+48
+17813
+15718
+705
+17814
+3546
+1181
+2000
+98
+1232
+14
+152
+17815
+17816
+14604
+43
+17817
+17818
+185
+5780
+590
+738
+12684
+12722
+4808
+17819
+17820
+17821
+15
+17822
+17823
+6804
+17824
+14
+14
+17825
+817
+338
+1793
+60
+14
+17826
+14
+57
+736
+17827
+2769
+17828
+17829
+17830
+3546
+43
+741
+590
+14363
+590
+17831
+4963
+10789
+17602
+971
+9
+15874
+17832
+14
+13528
+17833
+3546
+16437
+736
+17834
+14
+3172
+1559
+17835
+17836
+16640
+9
+43
+14
+48
+590
+3
+17837
+415
+43
+9660
+155
+17838
+17839
+17840
+9
+590
+17841
+43
+17842
+15718
+17843
+11733
+32
+48
+201
+43
+17844
+43
+14477
+9
+57
+554
+16180
+48
+17845
+554
+14
+1091
+6953
+17846
+9945
+14872
+14603
+15718
+17847
+17848
+590
+15718
+2477
+209
+43
+17849
+112
+35
+8214
+225
+2064
+17850
+17381
+648
+17851
+15718
+17852
+17853
+6950
+17854
+155
+478
+43
+17855
+48
+14082
+357
+590
+57
+1090
+14
+17856
+861
+17857
+3546
+1563
+43
+17858
+14
+17859
+358
+2594
+17860
+17861
+1425
+17862
+2982
+17863
+6776
+155
+48
+19
+590
+17864
+19
+1356
+17865
+17866
+16437
+17867
+17868
+2035
+17869
+43
+17870
+590
+3316
+910
+15308
+736
+717
+32
+370
+109
+349
+17871
+9119
+2043
+17872
+16020
+14
+2
+48
+17873
+17874
+2
+8188
+17875
+13566
+15
+349
+14604
+43
+17876
+17877
+17878
+14
+286
+17879
+493
+17880
+4524
+48
+17881
+17882
+11754
+14
+17883
+17884
+15
+590
+43
+1154
+15797
+17885
+17886
+14603
+533
+15718
+484
+17887
+43
+43
+14560
+2804
+11483
+590
+43
+48
+14603
+19
+17888
+1157
+17889
+57
+9
+17890
+6537
+48
+10642
+4128
+7624
+3543
+17891
+8188
+48
+17892
+686
+17893
+17894
+17895
+14
+57
+17770
+17896
+4650
+43
+17897
+1295
+590
+590
+20
+48
+14477
+16413
+17898
+48
+43
+849
+17899
+849
+17900
+15
+155
+248
+736
+17901
+2721
+17902
+17903
+17904
+6785
+43
+10
+4963
+43
+17905
+20
+17906
+48
+155
+188
+213
+17907
+155
+3546
+188
+303
+16927
+17908
+17909
+17910
+14604
+17911
+43
+741
+416
+590
+17912
+3546
+1425
+3546
+14
+597
+349
+3546
+43
+16128
+48
+286
+873
+736
+17913
+19
+43
+345
+349
+22
+15
+17914
+554
+2029
+5169
+17915
+43
+17916
+17917
+590
+1612
+48
+337
+17918
+1716
+43
+16464
+14
+17919
+43
+17920
+17921
+12158
+13307
+15718
+155
+2314
+17922
+17923
+17924
+17
+248
+48
+17925
+14363
+1696
+17926
+32
+17927
+17928
+6935
+35
+43
+17929
+17930
+13150
+590
+1680
+17931
+10028
+11966
+16696
+323
+2804
+590
+736
+17932
+17933
+11754
+155
+43
+1232
+590
+43
+17934
+3546
+2035
+20
+8685
+20
+11593
+8610
+2318
+7239
+66
+43
+6214
+43
+43
+137
+17935
+17936
+2804
+647
+17937
+48
+590
+43
+3546
+3553
+16437
+861
+17938
+736
+823
+17939
+286
+1465
+14
+13375
+2791
+1222
+823
+554
+17940
+736
+1559
+17941
+8297
+16826
+7137
+286
+2733
+1902
+13282
+10356
+89
+936
+17942
+1181
+17943
+14406
+17944
+17945
+17946
+647
+17947
+17948
+32
+17949
+17950
+17951
+32
+43
+43
+17952
+284
+15
+17953
+464
+22
+80
+3330
+736
+9
+5780
+43
+17954
+17955
+17956
+17957
+17958
+32
+155
+8668
+13317
+399
+43
+17959
+2593
+3546
+736
+2567
+11762
+48
+19
+1082
+1011
+15
+17960
+3059
+43
+6765
+769
+1817
+17872
+17663
+15
+248
+5027
+17961
+590
+42
+36
+13484
+5601
+741
+3034
+12722
+17962
+17963
+17964
+17965
+43
+17966
+48
+17967
+43
+43
+572
+48
+19
+16844
+736
+43
+43
+13484
+17968
+1513
+17969
+43
+5780
+48
+1139
+17970
+17971
+303
+17972
+303
+17973
+17974
+17975
+736
+17976
+17977
+17978
+9
+48
+357
+11762
+17979
+17980
+43
+17981
+17982
+43
+12560
+397
+17983
+1920
+17984
+284
+17985
+17986
+213
+48
+478
+17987
+6114
+48
+48
+3546
+248
+20
+286
+14
+248
+736
+7448
+4963
+4963
+19
+14
+865
+590
+365
+17988
+17989
+323
+248
+43
+736
+17990
+764
+955
+17991
+22
+13459
+32
+4461
+152
+48
+48
+188
+17992
+14
+11176
+1051
+213
+736
+17993
+17994
+43
+3546
+1577
+736
+15718
+10510
+17995
+823
+17996
+17997
+17998
+590
+16696
+590
+43
+43
+14477
+15718
+16239
+17999
+18000
+18001
+18002
+18003
+18004
+3460
+18005
+43
+18006
+873
+17412
+18007
+5601
+19
+18008
+18009
+18010
+43
+18011
+48
+721
+286
+13807
+5780
+3546
+14001
+18012
+6400
+18013
+18014
+19
+2591
+4684
+155
+18015
+18016
+5780
+2258
+18017
+18018
+18019
+14981
+3491
+12319
+9
+18020
+18021
+188
+2314
+286
+18022
+18023
+18024
+13431
+18025
+18012
+18026
+286
+286
+18027
+1287
+554
+2045
+707
+155
+18028
+9
+43
+18029
+18030
+3353
+14
+18012
+3546
+1091
+590
+209
+18031
+790
+18032
+32
+98
+43
+18033
+32
+770
+18034
+13730
+18035
+15031
+18036
+18037
+18038
+14
+18039
+14477
+18040
+358
+18041
+7137
+18042
+18043
+43
+6883
+19
+3
+741
+1107
+19
+14693
+18044
+201
+18045
+14
+112
+3546
+18046
+43
+18047
+12397
+18048
+43
+365
+18049
+13466
+10
+32
+18050
+43
+43
+188
+15720
+528
+48
+7978
+20
+11762
+18051
+201
+98
+18052
+590
+18053
+209
+6531
+3546
+18054
+18055
+1013
+915
+647
+616
+18056
+17370
+554
+18057
+8218
+3546
+286
+209
+57
+554
+18058
+48
+18059
+14604
+18060
+18061
+18062
+2314
+2026
+111
+48
+1824
+3732
+18063
+48
+48
+43
+15285
+931
+43
+4028
+18064
+3546
+14
+18065
+18066
+12989
+3546
+43
+18067
+18068
+590
+19
+43
+18069
+18070
+15718
+338
+8668
+590
+18071
+48
+15268
+3287
+43
+349
+736
+18072
+3447
+15718
+1247
+323
+17728
+18073
+43
+18074
+17675
+180
+349
+112
+18075
+43
+18076
+590
+1437
+3546
+43
+3034
+14604
+7137
+18077
+18078
+18079
+15
+16937
+17480
+11483
+1048
+16014
+18080
+349
+3598
+554
+18081
+18082
+57
+43
+43
+14
+590
+764
+18083
+15
+48
+16437
+188
+4
+138
+1481
+349
+18084
+9
+9
+741
+5780
+18085
+789
+18086
+5780
+17228
+18087
+14477
+18088
+15718
+10
+48
+10117
+4411
+18089
+178
+1300
+845
+18090
+19
+272
+349
+18091
+32
+1048
+14
+188
+10287
+77
+736
+11762
+1542
+80
+48
+18092
+43
+18093
+9371
+741
+18094
+554
+4070
+48
+349
+15718
+18095
+48
+18096
+201
+14
+694
+3944
+18097
+2
+9
+2762
+286
+112
+590
+18098
+3553
+18099
+43
+15718
+13599
+349
+18100
+18101
+18102
+1446
+1547
+250
+590
+2
+18103
+19
+5188
+18104
+18105
+46
+14
+18106
+10
+3
+18107
+43
+8053
+1955
+590
+18108
+11762
+15
+8320
+18109
+18110
+14871
+43
+48
+18111
+18112
+16180
+18113
+3976
+286
+1710
+1870
+590
+18114
+15
+18115
+43
+43
+6950
+43
+3351
+18116
+19
+14420
+48
+6950
+18117
+590
+222
+19
+1232
+7451
+43
+18118
+1991
+16437
+286
+647
+18119
+15718
+13150
+18120
+2476
+736
+18121
+18122
+18123
+14
+272
+5780
+14604
+18124
+48
+1868
+9
+18125
+12344
+2287
+647
+43
+18126
+18127
+2591
+18128
+3546
+554
+590
+18129
+13179
+16437
+18130
+15718
+18131
+122
+5650
+2459
+1364
+18132
+2035
+1502
+1310
+536
+66
+1989
+3546
+590
+16014
+14
+7537
+14604
+112
+1824
+16437
+48
+18133
+1912
+554
+18134
+18135
+66
+18136
+4315
+152
+647
+18137
+10
+13913
+18138
+14
+1112
+349
+3546
+6766
+43
+12987
+13566
+590
+18139
+4441
+32
+554
+18140
+18141
+18142
+647
+18143
+16102
+18144
+43
+98
+18145
+2
+14186
+18146
+43
+590
+18147
+694
+18148
+1425
+18149
+590
+736
+18150
+286
+17749
+590
+48
+32
+46
+43
+1465
+411
+3462
+32
+18151
+18152
+14001
+2892
+349
+14386
+15540
+18153
+57
+13179
+48
+18154
+18155
+14616
+11283
+286
+18156
+788
+2325
+48
+66
+112
+18157
+2975
+1912
+15
+2410
+323
+18158
+14102
+249
+7624
+16437
+3546
+11860
+14477
+19
+48
+3546
+18159
+48
+18160
+18161
+12013
+119
+15530
+18162
+573
+60
+18163
+18164
+48
+18165
+1648
+741
+18166
+18167
+817
+48
+15820
+305
+249
+18168
+1112
+18169
+43
+18170
+249
+349
+18171
+18172
+32
+3
+15
+18173
+18174
+1513
+590
+1021
+9
+18175
+15718
+18176
+48
+32
+43
+20
+14
+43
+18177
+137
+590
+18178
+18179
+76
+57
+43
+717
+18180
+13150
+590
+18181
+1060
+18182
+703
+18183
+18184
+18185
+18186
+18187
+18188
+48
+18189
+18190
+18191
+18192
+9
+1011
+89
+9
+8367
+915
+15718
+18193
+43
+18194
+18195
+349
+13150
+958
+18196
+43
+590
+18197
+17303
+18198
+3034
+43
+18199
+4160
+43
+48
+5780
+5990
+14363
+7747
+43
+14007
+1920
+19
+3546
+3546
+6457
+18200
+10
+18201
+4793
+15877
+8392
+18202
+18203
+18204
+5623
+3546
+305
+18205
+7137
+176
+22
+18206
+15718
+13343
+201
+18207
+590
+15720
+43
+18208
+18209
+18210
+18211
+18212
+3546
+18213
+48
+11754
+18045
+18214
+1907
+6874
+18215
+15718
+16437
+11312
+349
+2
+1612
+3546
+18216
+18217
+18218
+286
+15647
+18219
+15718
+590
+14
+48
+823
+412
+3546
+48
+18220
+18221
+18222
+18223
+1481
+18224
+6834
+18225
+18226
+8297
+1919
+17055
+18227
+18228
+416
+18229
+140
+228
+43
+18230
+2166
+2164
+18231
+1090
+1047
+18232
+10848
+16966
+18233
+20
+48
+18234
+89
+349
+12402
+13484
+43
+18235
+10356
+1361
+18236
+1912
+18237
+541
+492
+18238
+373
+43
+20
+613
+15718
+18239
+18240
+18241
+18012
+5780
+11754
+43
+18242
+430
+18243
+590
+14
+18244
+4820
+57
+849
+138
+1612
+4174
+590
+18245
+46
+18246
+370
+18247
+19
+16437
+989
+99
+18248
+14
+2
+18249
+14916
+43
+554
+736
+2260
+17033
+32
+1716
+16788
+18250
+7137
+43
+18251
+18252
+18253
+827
+8668
+18254
+77
+1790
+13375
+18255
+18256
+18257
+2694
+18258
+43
+14007
+13282
+18259
+18260
+18261
+18262
+18263
+9
+24
+18264
+18265
+43
+590
+14477
+18266
+14612
+18267
+590
+18268
+18269
+2476
+18270
+15989
+22
+18271
+18272
+14
+18273
+18274
+286
+3338
+3
+18275
+2197
+43
+18276
+57
+43
+18277
+590
+5007
+75
+18278
+18279
+18280
+333
+14
+18281
+18282
+590
+18283
+4677
+399
+18284
+1437
+112
+155
+970
+112
+18285
+19
+10979
+25
+15778
+18286
+8351
+18287
+43
+16329
+43
+18288
+19
+18289
+6214
+18290
+590
+18291
+349
+18292
+745
+18293
+43
+12845
+18294
+1013
+18295
+18296
+1425
+14
+10583
+14
+958
+2769
+14
+6883
+665
+18297
+18298
+6499
+18064
+259
+349
+18299
+18300
+18301
+764
+18302
+48
+14
+43
+590
+66
+18303
+18304
+18305
+14
+43
+301
+18306
+18307
+18308
+16656
+43
+342
+32
+18309
+193
+12247
+736
+18310
+18311
+1502
+18312
+12120
+11480
+18313
+279
+14
+736
+6785
+1578
+14693
+15718
+18314
+18315
+18316
+4001
+915
+358
+43
+18317
+18318
+286
+17698
+16437
+18319
+18320
+18321
+12005
+18322
+43
+349
+1901
+18323
+14
+19
+17557
+15718
+1232
+495
+24
+16
+1517
+11762
+2
+379
+12404
+18324
+18325
+1942
+43
+358
+13126
+18045
+12913
+279
+43
+6316
+1228
+13150
+18326
+6766
+18327
+43
+201
+3354
+188
+3546
+18328
+333
+3546
+9
+9
+14
+43
+18329
+19
+1212
+16437
+4028
+155
+9
+286
+43
+43
+18330
+272
+6950
+1258
+80
+18331
+11754
+15718
+13664
+14
+14240
+18332
+18333
+43
+22
+1364
+188
+677
+14604
+1637
+18334
+18335
+32
+18336
+13459
+48
+18337
+3976
+590
+14
+509
+736
+590
+272
+10
+20
+1013
+626
+18338
+17868
+155
+18339
+188
+2000
+2577
+915
+6766
+18340
+16180
+2
+48
+15718
+286
+1604
+18341
+18342
+3
+43
+554
+18343
+43
+48
+18344
+14
+18345
+14420
+18346
+590
+8188
+18347
+18348
+18349
+18350
+18351
+3546
+222
+17868
+15718
+18352
+18353
+9
+43
+647
+14604
+10
+18354
+1992
+43
+14
+6794
+14477
+43
+14604
+1012
+20
+48
+43
+48
+18355
+18356
+548
+18357
+1236
+18358
+17635
+185
+14
+11306
+349
+19
+18359
+19
+2
+16437
+1765
+18360
+590
+48
+32
+2260
+4963
+48
+15718
+2430
+3066
+18361
+18362
+317
+9
+18363
+464
+4023
+18364
+43
+12987
+16437
+20
+155
+4077
+18365
+379
+14477
+18012
+745
+2314
+15718
+48
+2476
+6950
+17
+14
+2
+178
+112
+590
+43
+48
+349
+43
+5780
+1961
+188
+1234
+533
+18366
+18367
+22
+9
+15
+18368
+18369
+155
+18370
+18371
+155
+18372
+14
+14374
+18373
+19
+1920
+736
+12372
+554
+48
+3546
+18374
+18375
+18376
+286
+17253
+18377
+286
+15586
+590
+18378
+244
+48
+12404
+349
+18379
+18380
+590
+6776
+228
+2769
+18381
+6915
+16511
+18382
+43
+2
+5780
+3546
+18383
+3546
+155
+18384
+114
+2258
+736
+209
+3546
+3491
+474
+18045
+18385
+1655
+18386
+43
+43
+349
+590
+11670
+18387
+736
+145
+18388
+18389
+6011
+1502
+19
+12907
+43
+43
+1425
+18390
+590
+22
+13648
+2957
+927
+19
+14
+1531
+491
+11762
+16656
+736
+18391
+18392
+43
+43
+6400
+590
+20
+15
+15931
+20
+11822
+1817
+18393
+19
+18394
+141
+17136
+18395
+554
+18396
+18397
+7048
+5178
+138
+18398
+14710
+18399
+15718
+18400
+386
+1683
+18401
+16981
+18402
+17370
+17653
+613
+18403
+590
+1232
+18404
+18405
+5773
+19
+18406
+14477
+11480
+14
+18407
+272
+14
+99
+43
+1109
+14363
+958
+14001
+18408
+15951
+2
+43
+19
+8015
+560
+1047
+14645
+15586
+48
+16230
+48
+12178
+14856
+43
+43
+4155
+66
+15
+19
+18409
+57
+18410
+18411
+349
+1738
+18412
+48
+17119
+48
+14
+14477
+18413
+1765
+18414
+179
+17698
+286
+18415
+18416
+18417
+6344
+18418
+18419
+18420
+590
+2
+741
+14
+495
+5780
+18421
+349
+1716
+18422
+15
+16437
+301
+15486
+18423
+18424
+1976
+1991
+18425
+2197
+19
+222
+17602
+18426
+18427
+14515
+1924
+18428
+18429
+9
+43
+48
+18430
+2430
+590
+18431
+14
+6950
+18343
+57
+18432
+18433
+2694
+349
+18434
+358
+1021
+9
+3546
+590
+18435
+13566
+48
+8218
+32
+18436
+15819
+97
+48
+2733
+2324
+18437
+1566
+48
+1559
+809
+19
+43
+43
+14363
+10
+22
+373
+14532
+590
+18438
+43
+74
+17670
+43
+1364
+18439
+10485
+323
+10
+112
+16944
+19
+19
+5415
+18440
+18441
+8758
+18442
+6621
+18443
+18444
+18445
+18446
+12404
+1021
+18447
+152
+590
+18448
+590
+18449
+1223
+43
+764
+43
+764
+14
+14
+13393
+6874
+48
+18450
+398
+43
+14477
+14
+18451
+43
+18452
+15
+284
+18453
+5421
+11607
+18454
+32
+20
+18455
+18456
+43
+48
+554
+18457
+491
+14
+43
+5925
+18458
+213
+18459
+4028
+15718
+15
+18460
+17303
+4820
+18461
+14
+18462
+18463
+6243
+15718
+179
+2577
+284
+18464
+22
+18465
+43
+3546
+14477
+14
+18466
+18467
+32
+18468
+18469
+284
+19
+12907
+337
+18470
+590
+595
+43
+38
+18471
+14871
+1012
+4594
+12466
+18472
+590
+18473
+1426
+303
+736
+18474
+1612
+18475
+6950
+3655
+10028
+2525
+99
+741
+16014
+18476
+43
+9402
+349
+5780
+590
+18477
+18478
+741
+12258
+18479
+43
+1425
+10642
+590
+590
+4083
+14
+18406
+5469
+3546
+15718
+337
+16925
+18480
+18481
+18482
+365
+5780
+18483
+15718
+18484
+5264
+11341
+6669
+3546
+554
+613
+17046
+18485
+48
+337
+18486
+18487
+188
+38
+369
+18488
+19
+18489
+89
+3052
+18490
+18491
+14
+18492
+4285
+989
+43
+14604
+15718
+43
+18493
+3640
+18494
+590
+43
+18495
+1295
+590
+590
+736
+590
+48
+138
+18496
+1066
+48
+1356
+11754
+99
+43
+12005
+18497
+284
+18498
+286
+18499
+18500
+721
+18501
+14
+8668
+14
+18502
+19
+18503
+17385
+9389
+18504
+18505
+188
+43
+13913
+5409
+11822
+6518
+155
+736
+48
+349
+1738
+48
+415
+43
+18506
+18507
+284
+43
+19
+3130
+188
+18508
+18509
+18510
+16118
+18511
+16342
+3767
+845
+46
+18512
+43
+4151
+18513
+18514
+590
+3417
+248
+18002
+18515
+6214
+11754
+17941
+32
+18516
+12798
+57
+18012
+57
+18517
+18518
+2264
+18519
+16437
+18520
+48
+18521
+14
+19
+43
+14
+9
+18522
+9
+14693
+18523
+18524
+590
+5659
+541
+17871
+19
+1364
+58
+48
+18525
+14603
+2
+18526
+9649
+590
+3301
+18527
+19
+18528
+373
+6004
+18529
+19
+18530
+1013
+873
+18531
+665
+9
+286
+43
+32
+18532
+18533
+3546
+736
+18534
+18535
+16437
+18536
+493
+554
+155
+18537
+6011
+18538
+18539
+20
+18540
+18541
+736
+18542
+286
+111
+495
+201
+7053
+18543
+11321
+19
+415
+48
+43
+2971
+3
+48
+10
+48
+10601
+597
+18544
+48
+16944
+2707
+19
+354
+43
+18545
+18546
+48
+2593
+3546
+18547
+19
+19
+43
+18548
+12603
+43
+1749
+12
+43
+18549
+19
+18550
+349
+1021
+16527
+18551
+17
+18552
+18553
+80
+18554
+286
+43
+43
+5169
+9
+590
+1226
+43
+248
+349
+18555
+18556
+15
+35
+741
+2567
+286
+19
+18155
+14
+43
+43
+764
+15830
+18557
+48
+43
+2
+736
+43
+18558
+14603
+18559
+18560
+7379
+736
+2446
+11995
+18561
+18562
+872
+3546
+650
+48
+43
+43
+18563
+248
+18564
+446
+18565
+18566
+15718
+1310
+18567
+48
+18568
+152
+9979
+10
+4387
+9
+2348
+4083
+11593
+3
+7048
+464
+19
+19
+18569
+80
+18570
+19
+18571
+11762
+18572
+7964
+18573
+18574
+48
+138
+10
+18575
+736
+590
+43
+2042
+48
+17228
+590
+213
+284
+18576
+8098
+18577
+11571
+647
+764
+18578
+1559
+43
+18579
+18580
+2309
+590
+15718
+3
+3
+490
+16437
+4028
+213
+12722
+18581
+8098
+18582
+18583
+11822
+1112
+18584
+14477
+17173
+18585
+590
+10
+248
+18586
+2476
+48
+1425
+10262
+14
+4693
+18587
+5780
+18588
+18589
+15782
+378
+5438
+1847
+18590
+155
+18591
+12365
+8994
+18592
+18593
+2733
+18594
+18595
+18596
+18597
+18598
+5780
+18599
+286
+18600
+18601
+213
+14
+18602
+349
+1157
+303
+2325
+1157
+590
+123
+18603
+43
+18604
+741
+13282
+18605
+1013
+112
+11754
+9
+15683
+18606
+12987
+18607
+1157
+5438
+248
+1169
+18608
+554
+3944
+18609
+18610
+89
+43
+18611
+1018
+11762
+10930
+10262
+18612
+303
+43
+1870
+590
+1208
+48
+18613
+18614
+48
+713
+303
+349
+18615
+12621
+18616
+48
+18617
+18618
+3546
+99
+736
+43
+2026
+18619
+32
+286
+18620
+18621
+5253
+2577
+60
+590
+18622
+43
+741
+18623
+17670
+213
+43
+19
+18624
+6068
+18625
+736
+11011
+10
+222
+2577
+16437
+1912
+18626
+484
+337
+1688
+18627
+2029
+201
+669
+8351
+43
+18628
+18629
+741
+43
+18630
+583
+11963
+32
+18631
+10727
+11330
+3546
+2859
+3546
+16437
+18632
+48
+43
+57
+18633
+18634
+931
+736
+11537
+2694
+18635
+10
+13167
+18636
+9945
+1723
+11762
+43
+18637
+736
+5837
+18638
+123
+19
+18639
+18640
+14
+18641
+18642
+18643
+3546
+43
+155
+48
+3543
+18644
+11762
+7137
+14
+11364
+14886
+736
+18645
+14
+590
+18646
+18647
+12225
+8103
+18648
+18649
+201
+18650
+15
+22
+18651
+32
+18652
+14
+2281
+10028
+1961
+2577
+16180
+18653
+12661
+213
+152
+15718
+19
+18654
+9
+18655
+18656
+9
+43
+1310
+13150
+16637
+18657
+18658
+16117
+48
+1384
+48
+18659
+18660
+18661
+1112
+18662
+18663
+9
+43
+18664
+248
+18665
+1513
+18666
+590
+17557
+48
+651
+349
+201
+6950
+43
+18667
+48
+415
+32
+18668
+3
+533
+48
+5243
+43
+14
+1533
+18669
+764
+722
+1437
+18670
+18671
+12746
+43
+11483
+16981
+18672
+1907
+18673
+18674
+18675
+349
+19
+590
+590
+18676
+18677
+1612
+861
+14604
+2764
+80
+323
+18678
+349
+989
+18679
+19
+18680
+43
+1648
+4477
+18681
+18682
+43
+4364
+18683
+8992
+18684
+533
+18685
+286
+18686
+32
+18687
+201
+10
+269
+43
+736
+43
+7137
+18688
+18689
+1529
+48
+18690
+18691
+1749
+19
+1232
+48
+9
+15720
+18692
+2728
+18693
+1356
+18694
+57
+18695
+4028
+18696
+18697
+18698
+14477
+823
+14520
+48
+18699
+18700
+14771
+48
+8566
+18701
+14
+32
+8249
+155
+10028
+18702
+10
+272
+18703
+11321
+8280
+3546
+9
+48
+18695
+20
+12600
+18704
+519
+43
+3548
+48
+590
+278
+17859
+14
+16437
+4055
+16089
+18705
+18706
+1234
+2318
+2944
+736
+590
+741
+14515
+3408
+3
+48
+18707
+590
+590
+12304
+16925
+14363
+18708
+32
+34
+590
+248
+590
+18709
+43
+337
+1696
+8218
+2140
+15718
+1100
+18710
+3484
+18711
+18712
+286
+19
+647
+18713
+2672
+13228
+1889
+2724
+9
+8188
+15216
+14335
+2694
+18714
+12987
+15724
+590
+3546
+18715
+15
+18716
+6877
+57
+6952
+43
+18717
+18718
+18719
+1902
+48
+4364
+9
+1224
+18720
+48
+18721
+48
+48
+18722
+122
+14604
+18723
+4212
+286
+188
+5780
+32
+2672
+6950
+18724
+43
+14363
+18725
+12913
+57
+823
+1082
+18726
+18727
+18728
+141
+1605
+373
+2577
+2577
+18729
+1810
+18730
+18731
+6214
+18732
+43
+22
+4803
+18733
+736
+6463
+80
+18734
+48
+18735
+18736
+18737
+48
+18738
+18739
+305
+8297
+43
+2040
+5426
+3546
+590
+815
+5599
+823
+17571
+18740
+12832
+272
+18741
+18742
+464
+18743
+18744
+286
+43
+286
+18745
+5908
+18746
+3
+18747
+11754
+3
+43
+3553
+18748
+349
+18749
+1011
+18750
+43
+3155
+20
+18751
+48
+554
+48
+5627
+242
+48
+18752
+14567
+18753
+4907
+48
+14
+43
+15989
+1245
+43
+2919
+14
+14
+18754
+713
+18755
+18756
+18757
+18758
+18759
+1115
+349
+6877
+80
+349
+12003
+3546
+43
+18760
+18761
+616
+18762
+43
+14477
+1612
+43
+1091
+590
+22
+1244
+323
+18763
+2202
+43
+18764
+12013
+18765
+18766
+15718
+18767
+4278
+43
+887
+5316
+349
+3546
+9
+18768
+764
+4116
+14
+3546
+533
+18769
+20
+352
+18770
+152
+48
+590
+323
+57
+18771
+15541
+22
+18772
+18773
+18774
+18775
+2939
+647
+48
+18776
+18777
+12120
+915
+32
+1615
+11013
+2314
+18778
+48
+6916
+590
+12120
+43
+18779
+11754
+155
+15718
+842
+1604
+18780
+48
+18781
+14
+201
+18782
+741
+48
+43
+18783
+349
+18784
+43
+18785
+5780
+18786
+48
+16881
+9
+16909
+590
+13599
+48
+18787
+2260
+741
+9
+5780
+18788
+1169
+3543
+1013
+741
+1051
+142
+18789
+18345
+8512
+845
+18790
+4814
+18791
+3391
+43
+18792
+48
+286
+48
+48
+18793
+14
+18794
+1912
+250
+18795
+349
+43
+43
+18796
+1559
+18797
+20
+357
+3476
+14001
+590
+15718
+18798
+18799
+43
+18800
+18801
+77
+665
+14
+48
+823
+188
+20
+43
+2430
+2325
+586
+18802
+411
+272
+2806
+18803
+57
+791
+13961
+14
+18804
+18805
+791
+18806
+1765
+590
+18807
+18808
+18809
+1181
+48
+7053
+18810
+201
+14
+3546
+823
+137
+18811
+14162
+155
+43
+4155
+5438
+16383
+3334
+13570
+18045
+18812
+16303
+18813
+823
+20
+43
+9
+318
+14
+590
+18814
+138
+17228
+399
+18815
+887
+349
+43
+821
+16437
+18816
+9543
+590
+18045
+222
+7215
+15384
+137
+2879
+18817
+286
+4963
+514
+349
+18818
+590
+6883
+6950
+2410
+14001
+3546
+32
+19
+43
+13656
+3252
+18819
+1560
+2561
+18037
+19
+9
+188
+764
+48
+32
+15054
+18820
+14477
+14
+647
+16234
+8668
+14603
+1226
+15442
+14
+9
+2577
+18821
+1232
+1425
+6987
+18822
+32
+18823
+43
+48
+3239
+286
+18824
+12987
+3078
+3543
+14
+19
+3546
+18825
+43
+14
+12402
+14477
+14
+48
+18826
+14240
+18827
+48
+18828
+12936
+18553
+18829
+18830
+18831
+736
+17508
+14
+13929
+18832
+43
+43
+349
+18833
+18834
+514
+764
+18835
+2577
+2260
+590
+32
+18836
+13710
+19
+18837
+15718
+18838
+17326
+43
+18839
+18840
+736
+590
+5780
+2129
+18841
+9543
+18842
+14001
+4313
+6950
+9784
+736
+18843
+18844
+736
+18597
+14
+590
+18845
+18846
+18847
+1743
+57
+12404
+48
+48
+18848
+11822
+12792
+18849
+18850
+1716
+11787
+4752
+5908
+16205
+19
+18851
+671
+112
+11593
+18852
+9254
+1559
+249
+18853
+18854
+5161
+18855
+301
+5966
+14203
+15398
+282
+3546
+590
+18856
+18857
+647
+1013
+2865
+18858
+18859
+14
+43
+365
+18860
+15572
+9
+15058
+18861
+48
+3546
+5780
+12479
+15718
+201
+18862
+2
+48
+6950
+18863
+1115
+590
+647
+22
+590
+1955
+18864
+18865
+18866
+9
+2042
+12308
+590
+595
+48
+18867
+18868
+48
+57
+18869
+18870
+48
+18871
+43
+9
+8253
+14477
+14603
+48
+18872
+18873
+665
+590
+16591
+17515
+18874
+736
+1300
+18875
+18876
+48
+15718
+18877
+43
+14
+16
+590
+42
+2896
+60
+3440
+18878
+112
+1149
+9
+349
+18879
+2023
+1612
+18880
+14
+7053
+2537
+18881
+2197
+43
+16437
+208
+18882
+18883
+2260
+18524
+7935
+48
+1566
+9
+3543
+18884
+18885
+43
+18886
+18887
+12987
+53
+18888
+15718
+5438
+1011
+43
+1674
+18889
+19
+18890
+738
+18891
+18892
+188
+18893
+14
+18894
+209
+18895
+57
+349
+18896
+18897
+43
+272
+9396
+10960
+43
+18898
+4414
+18899
+5920
+5188
+349
+18900
+18901
+536
+18902
+20
+18903
+43
+18904
+155
+18905
+18906
+10
+15718
+5169
+349
+19
+2274
+554
+5650
+9125
+1172
+2117
+12560
+397
+1559
+18907
+18908
+18909
+16788
+2372
+770
+590
+43
+1100
+13466
+18910
+323
+18911
+18912
+14
+18913
+9
+18914
+286
+16436
+1169
+18429
+155
+12661
+89
+18915
+8297
+11754
+2471
+3519
+15583
+18916
+323
+349
+18917
+18918
+18919
+11335
+18920
+18921
+1765
+590
+18922
+18923
+48
+3546
+18924
+14
+590
+43
+3
+18925
+3546
+18695
+18926
+17174
+1637
+18927
+18928
+3546
+3
+18929
+48
+7183
+48
+18930
+18931
+17571
+1442
+18932
+3353
+2253
+16981
+15989
+3958
+18933
+15054
+18934
+14
+2733
+43
+18935
+18936
+18937
+43
+18938
+18939
+9
+548
+18940
+18941
+14
+590
+43
+736
+736
+32
+43
+18942
+43
+48
+736
+770
+1100
+4616
+6877
+16437
+43
+3546
+2
+7117
+48
+15718
+590
+18943
+15907
+590
+3440
+590
+18944
+18945
+18946
+8668
+18947
+29
+19
+14
+18948
+3353
+989
+286
+20
+14
+18949
+18950
+2314
+6958
+18951
+616
+14477
+2728
+18952
+43
+18953
+18954
+1217
+18955
+9339
+43
+741
+18956
+14477
+18957
+7703
+18958
+14843
+284
+9
+18959
+370
+18960
+736
+18961
+2320
+323
+43
+18962
+2577
+48
+18963
+18964
+9
+115
+18965
+15718
+18966
+892
+9
+5791
+18967
+15026
+1950
+648
+2733
+18159
+3546
+18968
+18969
+19
+18970
+18971
+18972
+2697
+18973
+590
+77
+18974
+13205
+14
+12404
+155
+5217
+30
+284
+590
+18975
+18976
+35
+5755
+9
+842
+18977
+10
+13361
+18978
+7521
+7233
+1992
+15
+18979
+14666
+32
+590
+43
+17144
+286
+18980
+11754
+18981
+2035
+43
+18695
+18982
+14363
+6518
+18983
+11762
+43
+18984
+18985
+15068
+18986
+18987
+19
+616
+1291
+590
+1232
+10
+18988
+18989
+18990
+222
+268
+18991
+18992
+18993
+17
+303
+7053
+14
+19
+573
+2694
+25
+18980
+18994
+18995
+19
+18996
+18997
+248
+18998
+18999
+213
+2040
+12185
+48
+19000
+1562
+9465
+48
+43
+6499
+19001
+11754
+34
+19002
+9
+6915
+43
+39
+19003
+13529
+9
+707
+19004
+2
+3546
+248
+14604
+19005
+590
+17571
+1870
+3196
+4388
+6543
+22
+48
+9
+19006
+19007
+48
+19008
+155
+48
+19009
+19010
+19011
+3546
+19012
+196
+677
+22
+18695
+19013
+379
+10789
+19014
+19015
+10
+19016
+17177
+989
+19
+13848
+43
+19017
+19018
+77
+57
+19019
+19020
+155
+19021
+5469
+554
+3
+590
+48
+19022
+19023
+48
+590
+284
+1765
+201
+19024
+14
+19025
+19026
+1992
+43
+142
+3059
+6258
+19027
+3546
+19028
+19029
+15
+19030
+213
+1011
+1956
+19031
+43
+188
+188
+15718
+1013
+3926
+751
+533
+14
+7137
+2311
+11754
+19032
+677
+736
+590
+18695
+19033
+379
+19034
+15308
+19035
+19036
+43
+29
+43
+590
+48
+48
+25
+19
+14
+15
+3546
+19037
+13430
+8566
+19038
+3491
+19039
+19040
+9
+8392
+951
+1765
+286
+19041
+19042
+43
+19043
+9
+19044
+43
+694
+13375
+19045
+19046
+14
+19009
+16560
+2733
+19047
+303
+48
+5780
+5780
+5004
+736
+1738
+19048
+536
+19049
+14
+43
+1232
+1529
+48
+19050
+43
+1364
+8668
+48
+15
+19051
+533
+2398
+10
+19052
+17136
+19053
+1181
+19054
+19055
+14001
+15
+19056
+590
+2744
+8351
+19057
+19058
+19059
+19
+303
+5963
+3553
+19060
+48
+2
+19061
+14
+19062
+2019
+19063
+646
+19064
+19065
+3546
+3546
+284
+16
+14
+647
+9144
+770
+12397
+500
+590
+19066
+18045
+5662
+19067
+1434
+19068
+1100
+11762
+19069
+16437
+11283
+1559
+10933
+17801
+3407
+1765
+207
+43
+19070
+3411
+1217
+4803
+19071
+358
+2316
+43
+17871
+590
+19072
+13361
+1049
+19073
+19074
+15718
+19075
+9994
+590
+272
+590
+720
+14
+10
+10
+19076
+19077
+19
+272
+16092
+32
+15718
+19078
+3546
+19079
+19080
+19081
+15718
+9462
+741
+48
+19082
+1961
+16437
+19083
+284
+48
+19084
+19085
+19086
+19087
+155
+19088
+34
+372
+19089
+43
+19090
+57
+16205
+19091
+48
+303
+2019
+14477
+9688
+48
+10
+13361
+19092
+19093
+11822
+19094
+17136
+43
+9
+17653
+272
+48
+349
+209
+19095
+19096
+14477
+19097
+9
+43
+3239
+14
+14
+34
+10
+536
+19098
+19099
+646
+10094
+66
+5601
+7183
+19100
+57
+19101
+7752
+248
+7053
+19102
+112
+19103
+19104
+19
+9
+196
+155
+1051
+11971
+57
+17380
+1481
+43
+19105
+3546
+43
+7032
+43
+815
+19106
+817
+720
+98
+284
+1112
+1013
+19107
+48
+764
+19108
+1232
+20
+112
+19109
+19110
+671
+1745
+9
+19111
+19112
+14
+11321
+303
+19113
+464
+12260
+349
+19114
+201
+24
+2593
+1617
+43
+17698
+19115
+15718
+1559
+43
+179
+15718
+19116
+337
+736
+19117
+16437
+5579
+19118
+19119
+2865
+18896
+19120
+19121
+3353
+915
+554
+2476
+12746
+648
+188
+19122
+19123
+19124
+1223
+19125
+16437
+1562
+17868
+590
+1885
+19126
+1513
+936
+14025
+7053
+272
+19127
+188
+19128
+19046
+990
+736
+43
+19129
+647
+15
+15718
+18951
+19130
+19131
+536
+19132
+19133
+13648
+19134
+19135
+43
+19136
+19137
+19138
+19139
+8249
+19140
+590
+43
+179
+196
+43
+18869
+2430
+19141
+19142
+11321
+19143
+18325
+43
+43
+19144
+3546
+48
+3484
+19145
+284
+1869
+19146
+2577
+736
+2790
+32
+379
+19147
+2042
+19148
+683
+19149
+18940
+448
+15718
+19150
+474
+19151
+590
+32
+19152
+57
+3546
+19153
+823
+17752
+19154
+32
+1310
+19
+43
+43
+19155
+832
+19156
+19157
+19158
+2944
+2694
+19159
+19160
+6766
+32
+590
+43
+3546
+57
+19161
+19162
+19163
+104
+12987
+18334
+19164
+1710
+554
+19165
+11762
+43
+590
+19166
+8553
+43
+19167
+19168
+19
+6950
+1012
+43
+77
+1048
+284
+5391
+19169
+4803
+19170
+2
+286
+5217
+20
+48
+14
+19171
+2197
+741
+19172
+1385
+7137
+19173
+48
+5780
+3546
+43
+43
+284
+19174
+19
+590
+48
+43
+43
+1332
+8668
+19175
+19176
+14189
+19177
+15718
+43
+2694
+1852
+19178
+19179
+720
+6317
+284
+1562
+19180
+1637
+3875
+19181
+845
+43
+590
+349
+9
+7053
+337
+19182
+19
+303
+19183
+19184
+19185
+14363
+1012
+48
+613
+9
+19
+14477
+5344
+19186
+19187
+736
+286
+3546
+1082
+646
+142
+43
+19188
+6250
+155
+13955
+5780
+43
+3544
+683
+1972
+1559
+32
+13375
+3546
+19189
+19190
+12
+155
+19191
+19192
+12158
+2187
+19193
+19
+19194
+11697
+19195
+19196
+590
+1797
+915
+6994
+19197
+3067
+19
+14477
+3095
+4907
+43
+19198
+48
+9
+43
+736
+18928
+48
+19199
+18120
+17698
+20
+80
+104
+19
+3034
+19200
+48
+3
+14215
+19201
+5791
+19202
+18045
+43
+19203
+5204
+19204
+43
+10
+9
+19
+590
+707
+19205
+822
+17920
+19206
+741
+7137
+19207
+14477
+19208
+19209
+19210
+14
+19211
+590
+48
+8249
+19212
+19213
+590
+43
+2329
+48
+10381
+3906
+14
+1920
+19
+197
+19214
+14240
+4166
+17173
+8351
+19215
+377
+19216
+3546
+1823
+9
+14
+14
+18982
+19217
+48
+18695
+5041
+647
+19218
+19
+19219
+554
+3546
+11762
+249
+19
+19220
+19221
+43
+9
+11321
+19222
+19223
+764
+358
+12158
+19224
+48
+19225
+19226
+32
+43
+15718
+9
+19227
+48
+14066
+842
+590
+533
+43
+15001
+286
+19228
+19229
+14515
+411
+19230
+8668
+19231
+19232
+15718
+1559
+286
+155
+48
+48
+16349
+48
+19233
+19234
+19235
+18980
+590
+19236
+11754
+19237
+8807
+1384
+1605
+16437
+573
+38
+17206
+19238
+554
+57
+43
+19239
+3981
+573
+19240
+48
+1425
+19241
+3546
+19242
+43
+43
+19243
+19244
+19245
+48
+19246
+43
+32
+12807
+286
+2314
+590
+1765
+43
+1425
+7747
+19247
+19248
+1232
+19
+43
+5148
+19249
+286
+590
+5344
+19250
+9913
+1107
+736
+43
+13140
+646
+736
+19251
+15123
+19252
+16437
+2804
+4028
+104
+209
+22
+19253
+5780
+7137
+19254
+32
+19255
+5601
+9
+43
+14
+43
+19256
+7053
+19
+15718
+19257
+19258
+349
+43
+155
+155
+19259
+665
+19260
+155
+5623
+43
+3
+14
+19261
+19228
+14435
+19262
+19263
+19264
+1109
+179
+736
+14
+828
+43
+15649
+4634
+14
+19265
+15
+590
+201
+9
+736
+29
+155
+15718
+18980
+1082
+19266
+32
+19267
+20
+155
+14604
+19268
+9
+14957
+9
+19269
+590
+19270
+13807
+2577
+809
+286
+43
+176
+32
+736
+286
+12497
+19271
+43
+19272
+14
+1817
+736
+19273
+18869
+19274
+6143
+720
+33
+6531
+2
+48
+590
+17144
+19275
+19276
+1224
+1217
+155
+554
+677
+590
+14001
+18695
+14604
+5780
+19277
+669
+43
+590
+19278
+647
+14
+14
+683
+3
+9
+2721
+647
+43
+17093
+43
+80
+19279
+19280
+43
+6513
+19281
+1896
+140
+12987
+8131
+16951
+1961
+19282
+3484
+19283
+5808
+206
+19284
+647
+338
+43
+19285
+14
+764
+2187
+46
+3546
+1765
+197
+19286
+18300
+15718
+43
+1765
+19287
+17670
+1224
+19288
+19289
+590
+554
+19290
+43
+14477
+8244
+1668
+19291
+3376
+19292
+19293
+4388
+19294
+14
+19
+32
+590
+1376
+19295
+2287
+317
+48
+48
+19296
+14
+15718
+412
+19297
+43
+19298
+57
+19299
+5780
+19300
+13569
+19301
+19302
+19303
+19304
+1870
+43
+14
+5780
+43
+349
+43
+10592
+43
+272
+2
+228
+317
+19305
+2042
+286
+6877
+2463
+822
+19306
+5627
+19307
+19308
+590
+19309
+7053
+19310
+19
+590
+272
+2988
+736
+671
+16437
+48
+1991
+19311
+16437
+20
+19312
+15718
+14
+14916
+9400
+19313
+7053
+14
+13973
+1224
+8668
+286
+9
+4684
+14102
+4387
+16589
+590
+286
+19314
+1154
+19315
+225
+741
+1364
+2287
+19316
+19317
+4234
+14
+19318
+3546
+1352
+43
+46
+17571
+1352
+2064
+14
+15718
+1991
+19319
+19320
+43
+5391
+5168
+5780
+43
+43
+10
+19321
+1927
+19322
+533
+19323
+1559
+19324
+9
+19325
+12185
+38
+19
+19326
+590
+19327
+19328
+19329
+19330
+19331
+4053
+19332
+19333
+19334
+38
+15718
+29
+5007
+43
+43
+19335
+514
+14
+48
+112
+6766
+8566
+1543
+19336
+12987
+6950
+32
+19337
+19338
+272
+11762
+48
+48
+140
+18969
+14
+2724
+7208
+554
+48
+14
+2197
+19339
+19340
+19341
+14
+1107
+43
+286
+57
+15718
+19342
+19343
+19344
+1612
+14660
+48
+14
+14
+19345
+14962
+9
+19346
+14477
+19347
+19348
+43
+19349
+19350
+14
+19351
+19352
+19353
+2770
+616
+19354
+823
+19355
+19356
+736
+13943
+19357
+3546
+19358
+2287
+19359
+19360
+2865
+586
+5780
+20
+43
+48
+19361
+1524
+9
+590
+19362
+15718
+237
+19363
+155
+18846
+19364
+354
+415
+17112
+491
+19365
+397
+7253
+43
+19366
+8668
+9400
+19367
+43
+4963
+14477
+12923
+13566
+3421
+683
+43
+19368
+16012
+19369
+43
+19370
+112
+19371
+104
+1100
+19372
+19373
+43
+1696
+18954
+7053
+19374
+155
+493
+19
+1989
+43
+590
+3213
+43
+349
+349
+495
+19375
+9
+19376
+19377
+19378
+19
+15
+13532
+19379
+19380
+19381
+4
+43
+19382
+19383
+152
+19384
+19199
+17042
+48
+19385
+18299
+18982
+17602
+19386
+1012
+286
+12987
+48
+19387
+1886
+43
+237
+19388
+823
+19389
+12462
+43
+19390
+1920
+7053
+14
+19391
+2577
+19392
+14
+8508
+19393
+18951
+19394
+15718
+17027
+15
+19395
+2
+13769
+1232
+14689
+43
+19396
+322
+270
+19397
+36
+10500
+19398
+13807
+14
+13656
+16437
+2314
+19399
+14
+14527
+19400
+19401
+19402
+14
+43
+2446
+19
+6776
+597
+19403
+14884
+19404
+19405
+48
+590
+48
+19406
+745
+8218
+19407
+1655
+19408
+138
+736
+12907
+19409
+19410
+19411
+19
+43
+14102
+18045
+43
+2042
+19412
+514
+19413
+43
+16180
+8220
+19414
+19415
+15718
+398
+19416
+4963
+155
+2260
+15
+19417
+19418
+2197
+32
+18448
+43
+233
+18846
+1232
+19419
+19420
+19421
+14477
+19422
+43
+3875
+2035
+19423
+3546
+19424
+19425
+57
+14
+16240
+720
+6054
+43
+590
+14
+57
+19426
+34
+43
+2
+43
+19427
+14856
+19
+19
+8444
+38
+13182
+48
+89
+554
+19428
+14477
+19404
+19429
+19430
+14
+2577
+5088
+250
+1116
+3546
+19431
+188
+590
+9
+43
+19432
+43
+19404
+4918
+1051
+6341
+11210
+19433
+19434
+19435
+18045
+43
+5827
+19436
+536
+43
+720
+19437
+764
+19438
+286
+9396
+19439
+14599
+9024
+19
+5780
+14
+15
+14
+19440
+12807
+17608
+201
+48
+185
+19441
+9039
+12647
+155
+1976
+43
+19
+19442
+176
+823
+349
+3546
+15718
+14
+7117
+14363
+4963
+43
+19443
+583
+671
+16681
+299
+18695
+19444
+3569
+19445
+8668
+5217
+6766
+19446
+19447
+3553
+19448
+590
+140
+8668
+8855
+19167
+736
+10356
+15718
+15
+19449
+19450
+19451
+741
+43
+19452
+2882
+19453
+15718
+19454
+416
+19455
+19
+43
+19
+19456
+19457
+6400
+19458
+32
+3297
+18869
+19459
+6249
+8787
+12987
+19460
+1790
+43
+1051
+15975
+19461
+19462
+112
+720
+11963
+7053
+6766
+17508
+3546
+2
+19463
+19404
+1251
+19
+164
+1889
+19464
+823
+4803
+590
+2
+590
+19465
+8668
+736
+57
+11483
+19466
+19467
+43
+3484
+590
+2
+9
+19468
+188
+19469
+19470
+1912
+590
+12987
+43
+2577
+9
+3546
+140
+19471
+19472
+19473
+19474
+19475
+13361
+155
+48
+823
+16640
+22
+22
+478
+19476
+19477
+11646
+17043
+19478
+18980
+1091
+19479
+19480
+14603
+741
+2117
+554
+1444
+1120
+14604
+98
+11158
+19481
+11754
+43
+19482
+155
+155
+9
+19483
+19484
+19485
+53
+19486
+19487
+17281
+19488
+19489
+1817
+19490
+19491
+19492
+3546
+19493
+15718
+19494
+597
+43
+14804
+2
+2561
+6468
+19495
+19496
+13848
+19497
+590
+43
+43
+15718
+19105
+809
+2983
+57
+19498
+19499
+19500
+19501
+1798
+43
+19502
+707
+18163
+14
+18980
+14604
+11301
+43
+19503
+19504
+19505
+19
+17433
+43
+2121
+590
+19506
+6776
+19507
+15718
+19508
+19404
+19509
+9
+19510
+19511
+1011
+349
+16085
+15718
+7053
+17799
+13663
+14477
+464
+19512
+286
+57
+8392
+19513
+861
+249
+17730
+19514
+1559
+19
+8041
+19515
+8460
+43
+9259
+5208
+19516
+8367
+11428
+57
+19517
+15718
+14
+19518
+1912
+18695
+5298
+13954
+19519
+43
+590
+17635
+19520
+13375
+491
+43
+19521
+43
+5780
+14
+19522
+19523
+19524
+1578
+1542
+590
+286
+18695
+14
+4050
+5780
+19525
+16387
+19526
+19527
+43
+823
+590
+57
+9688
+43
+18982
+19
+10
+1021
+57
+14770
+18503
+19
+1561
+554
+14467
+10500
+2040
+19528
+616
+745
+19529
+43
+11754
+19530
+19531
+590
+43
+19532
+17972
+19
+514
+9
+43
+4803
+9
+13798
+209
+17314
+1524
+48
+43
+349
+43
+1244
+43
+19533
+19534
+19535
+137
+370
+958
+19536
+2
+3034
+16092
+19537
+19538
+188
+10
+13150
+590
+19539
+464
+8188
+15324
+590
+14
+373
+3484
+10287
+19540
+3030
+19541
+4907
+43
+138
+19542
+590
+19543
+354
+15572
+1817
+8895
+19
+18980
+19544
+19545
+19
+19546
+590
+19547
+196
+19
+19548
+197
+7855
+15
+19549
+613
+8668
+19550
+19551
+625
+19552
+14
+8220
+43
+18951
+8110
+4963
+1765
+4963
+19553
+736
+155
+19554
+19555
+2415
+20
+2804
+590
+19556
+32
+16118
+16283
+13915
+2406
+19557
+19558
+493
+19559
+13361
+19560
+43
+19404
+19561
+19562
+5561
+43
+22
+590
+736
+19563
+349
+19564
+43
+155
+43
+3876
+1481
+1100
+19565
+398
+19566
+715
+1471
+3546
+1710
+19567
+15874
+6950
+19568
+19569
+14
+590
+19570
+3251
+19571
+14843
+19572
+514
+112
+9
+19573
+15718
+19
+19
+155
+11593
+16437
+249
+19574
+42
+301
+43
+6086
+9
+590
+971
+3546
+19575
+809
+19576
+536
+19577
+1810
+19578
+3546
+349
+7053
+4028
+590
+5314
+3417
+736
+14
+19
+43
+14843
+8392
+14527
+15
+17342
+2624
+19579
+19580
+3492
+342
+122
+19581
+43
+19582
+5489
+43
+493
+43
+2561
+43
+19583
+19584
+19585
+19586
+19587
+15989
+43
+1112
+3546
+590
+19588
+4
+9
+2733
+19199
+19
+19589
+19590
+590
+19591
+19592
+3546
+48
+19593
+19
+1648
+339
+3546
+19594
+57
+19404
+19595
+590
+19596
+38
+19597
+19598
+741
+3546
+19599
+16329
+25
+18577
+1470
+15718
+5207
+19600
+5415
+43
+5780
+1502
+43
+590
+19601
+14477
+1481
+196
+19602
+43
+43
+1765
+4806
+15718
+9
+8668
+43
+12953
+19603
+19604
+19605
+827
+4821
+19606
+19607
+19335
+8668
+19608
+19609
+3944
+14
+19610
+19404
+19611
+548
+12777
+4411
+19612
+43
+19
+3546
+19
+6837
+19404
+43
+14477
+2
+19613
+19614
+541
+15
+590
+19615
+590
+4084
+19616
+89
+20
+19304
+35
+19617
+20
+19618
+14
+14
+8297
+1961
+647
+15718
+770
+5780
+19619
+19
+13466
+19620
+19
+365
+15718
+14477
+10
+19621
+19
+19622
+43
+6122
+2006
+736
+19623
+16437
+19624
+2035
+113
+155
+2260
+18774
+19625
+2260
+57
+13205
+284
+10
+19626
+19627
+590
+19628
+1295
+5780
+89
+358
+8392
+19618
+19629
+164
+19630
+19631
+16527
+89
+1232
+19
+5371
+19632
+19633
+19634
+15718
+9
+12987
+2859
+18695
+1688
+7110
+43
+1300
+19635
+14
+590
+15669
+1013
+19
+6883
+19
+48
+19
+13279
+19636
+43
+19637
+18742
+98
+17919
+2804
+43
+7377
+14
+57
+292
+19638
+43
+590
+19639
+43
+1604
+303
+19640
+15220
+19641
+14527
+736
+19642
+19643
+17032
+43
+286
+19644
+3519
+10899
+286
+19404
+137
+19056
+19618
+19645
+19646
+16437
+14240
+18100
+19647
+19648
+19649
+19650
+19651
+19652
+2672
+9567
+19653
+19404
+16866
+19654
+5169
+19655
+19656
+590
+134
+1870
+11762
+32
+349
+19657
+248
+248
+590
+1517
+19658
+2577
+337
+19659
+5211
+1765
+19660
+1768
+4905
+19661
+1696
+590
+3546
+19662
+3488
+19663
+1385
+14477
+736
+19664
+43
+19665
+533
+8355
+1901
+8244
+18980
+43
+3330
+18982
+12245
+15718
+13566
+446
+19666
+8853
+349
+284
+590
+7053
+337
+15737
+19667
+13465
+707
+14
+590
+1961
+15881
+19668
+373
+188
+14175
+352
+17941
+155
+19669
+43
+19670
+7328
+4722
+590
+1442
+349
+19432
+19671
+286
+9163
+357
+19672
+18045
+19673
+14477
+14
+9
+2197
+9
+19674
+9
+19675
+19676
+19677
+19678
+3546
+5188
+2029
+249
+8255
+3559
+349
+3546
+43
+16092
+19679
+17698
+337
+19680
+19
+14
+590
+590
+1104
+248
+19681
+19618
+19682
+9474
+19683
+19684
+15
+19685
+10
+533
+15054
+3546
+1228
+1606
+8953
+19686
+15
+7137
+15718
+11762
+303
+764
+823
+19687
+15924
+7137
+19688
+19689
+736
+823
+155
+19690
+3353
+19691
+19692
+17085
+19693
+3330
+3546
+286
+19694
+3546
+43
+209
+15
+590
+19695
+19696
+19697
+19698
+19699
+19
+337
+43
+19700
+19701
+704
+19702
+2593
+43
+57
+16102
+19703
+19704
+14342
+14660
+1605
+590
+19705
+19706
+19707
+19708
+19709
+19
+1090
+19710
+19
+43
+4684
+10
+32
+286
+7137
+152
+10356
+19711
+2051
+19712
+9
+317
+286
+2762
+20
+1310
+3546
+14
+2042
+57
+19713
+19714
+1112
+17608
+19715
+18982
+2593
+155
+14477
+16981
+3
+19
+2412
+19716
+19717
+24
+1955
+19718
+14185
+43
+6058
+19719
+19720
+590
+32
+19
+16866
+19721
+19722
+2356
+9400
+19655
+19723
+19724
+14369
+6095
+590
+736
+14
+43
+5267
+38
+707
+19725
+155
+8716
+155
+19726
+19727
+213
+19728
+19729
+665
+4793
+43
+7053
+18980
+590
+19730
+19731
+19732
+15718
+736
+286
+2804
+286
+19733
+19734
+286
+533
+19735
+19736
+19737
+19738
+9
+19739
+2310
+14527
+19655
+155
+1018
+43
+19740
+15
+2009
+19741
+9
+373
+286
+14477
+19199
+14
+12534
+19
+19742
+19743
+112
+2804
+2
+14477
+42
+19744
+491
+15718
+7053
+448
+137
+770
+1513
+590
+15718
+19745
+284
+6595
+22
+14
+19746
+19747
+19748
+19749
+484
+11970
+43
+19750
+5267
+19
+19751
+13343
+2314
+57
+19097
+19752
+18980
+91
+19753
+19754
+19755
+284
+1131
+19756
+19370
+19
+3546
+213
+16437
+9
+19757
+43
+19758
+822
+42
+19759
+43
+5410
+19760
+76
+3546
+16437
+15647
+19761
+43
+15718
+19762
+1514
+43
+272
+19763
+19764
+3275
+1710
+19765
+7053
+19766
+19092
+43
+3472
+11762
+19655
+19767
+19768
+19769
+6518
+16437
+8610
+19
+4411
+19770
+43
+19771
+19772
+19773
+188
+57
+8849
+8392
+249
+286
+1559
+9
+15384
+19774
+137
+15718
+19775
+3546
+35
+19776
+19777
+142
+19618
+3546
+19618
+43
+286
+3546
+590
+7291
+19778
+554
+3546
+14
+19779
+5080
+1812
+19
+590
+19780
+19781
+112
+1961
+9184
+3546
+9402
+18045
+9102
+6565
+971
+142
+7053
+12363
+377
+19618
+379
+19782
+19783
+19784
+10527
+9
+19785
+19786
+19
+16826
+19787
+19655
+16437
+15649
+19788
+1920
+19789
+19618
+6766
+13282
+12067
+19790
+19791
+3546
+3995
+19
+19618
+16272
+18321
+43
+14604
+13841
+188
+19792
+647
+19793
+19794
+590
+19795
+19796
+19797
+6504
+19798
+14
+14
+3546
+19799
+683
+10311
+1364
+464
+19800
+1765
+317
+5780
+201
+554
+7137
+19801
+19792
+15989
+19802
+19803
+1226
+19804
+19805
+823
+19806
+19807
+827
+1559
+19808
+349
+1013
+19809
+3310
+19810
+36
+19811
+19792
+19812
+19813
+705
+43
+19
+590
+19814
+6950
+1514
+13985
+19815
+18176
+57
+32
+10946
+19816
+8351
+17865
+19404
+19817
+19
+19818
+286
+9
+305
+19819
+4487
+284
+823
+155
+989
+5101
+590
+11483
+19820
+8721
+303
+7855
+213
+19821
+9
+248
+1513
+188
+43
+19822
+213
+411
+14
+4502
+19823
+6877
+337
+249
+34
+14
+19824
+19825
+19826
+20
+19827
+377
+16126
+14
+19828
+20
+19829
+303
+861
+284
+20
+13150
+1428
+213
+3546
+19830
+19831
+12101
+286
+14604
+248
+5780
+19832
+15718
+3353
+1011
+564
+19833
+303
+1425
+19655
+8392
+15886
+19834
+14
+19835
+3546
+19836
+6335
+5780
+4274
+3050
+19837
+10
+16437
+19618
+19838
+20
+15718
+19839
+736
+43
+19840
+4174
+14
+379
+2314
+7053
+19841
+19218
+2694
+15718
+1224
+286
+19806
+152
+9
+517
+18695
+19842
+19843
+1310
+8351
+2029
+19618
+19
+5780
+14477
+2006
+48
+9245
+19844
+14477
+14
+19618
+1560
+19845
+19846
+19042
+19847
+16437
+19848
+1924
+19849
+29
+19850
+19851
+19806
+2164
+57
+3790
+188
+1444
+8444
+349
+1502
+18120
+18695
+19
+19852
+286
+19853
+248
+958
+286
+19854
+14483
+19855
+19856
+19857
+16826
+19858
+720
+19
+19859
+13150
+13913
+14603
+19860
+14
+43
+823
+19861
+4550
+19862
+19863
+19864
+5791
+19439
+19
+590
+19865
+15
+3497
+4
+111
+57
+15718
+349
+43
+12005
+19866
+43
+4801
+554
+19867
+19491
+4406
+1090
+1386
+815
+225
+2
+5344
+19618
+19868
+14
+19
+3546
+9
+248
+18896
+19869
+155
+19870
+19871
+19872
+16024
+1234
+1369
+590
+43
+736
+19655
+2446
+7053
+19873
+19
+19874
+3491
+323
+8779
+586
+7137
+19875
+14
+19806
+16445
+19876
+43
+155
+19877
+15406
+590
+590
+3842
+19878
+19879
+8244
+19880
+19618
+19618
+10729
+19881
+13959
+32
+19882
+2
+19883
+2561
+2356
+36
+790
+14363
+19884
+19885
+861
+19886
+19887
+15718
+19806
+12807
+188
+15718
+19888
+827
+155
+4398
+19889
+989
+286
+112
+1444
+484
+7137
+19890
+827
+7053
+2234
+19
+2032
+1513
+19891
+741
+2259
+14477
+590
+590
+18695
+15285
+1083
+16190
+10381
+19892
+19893
+2040
+1013
+573
+14363
+6741
+590
+736
+19894
+3546
+19895
+14
+19896
+19897
+9
+12067
+736
+1013
+915
+19618
+790
+2849
+286
+14
+213
+5780
+5088
+19898
+1563
+323
+16466
+2117
+554
+2047
+19899
+736
+19900
+286
+1051
+15087
+33
+1083
+17320
+590
+3034
+7923
+19901
+2
+12913
+12093
+19902
+19618
+19903
+112
+1944
+16310
+4278
+14604
+19904
+5791
+19905
+19906
+16183
+43
+19907
+16437
+19908
+3491
+9
+19909
+3546
+19910
+19911
+736
+17604
+188
+3546
+11966
+32
+43
+19912
+9410
+19913
+19914
+43
+14
+19915
+7419
+19916
+112
+19917
+736
+2446
+48
+1139
+19918
+104
+43
+349
+19919
+18771
+188
+7032
+19920
+18891
+15
+1051
+6363
+19921
+3251
+18684
+1907
+19922
+823
+3427
+43
+14
+13375
+19923
+14477
+19404
+19618
+2415
+2314
+189
+5249
+398
+19924
+19925
+19926
+19927
+500
+3546
+18561
+5283
+554
+20
+1559
+35
+19928
+19929
+4634
+16437
+12247
+284
+14846
+43
+19930
+1559
+8566
+10
+13848
+15718
+140
+14770
+19931
+16121
+15592
+19932
+19933
+213
+19934
+213
+284
+19935
+19936
+14
+19
+647
+1112
+19937
+14363
+590
+19938
+10503
+19
+284
+18503
+11870
+19939
+19618
+19940
+32
+15718
+19941
+14
+349
+1559
+19942
+43
+736
+736
+19943
+3546
+99
+19646
+19618
+15718
+17698
+7260
+19944
+14
+14
+48
+18683
+19945
+970
+1566
+188
+13656
+19946
+303
+19947
+13566
+19
+4083
+15718
+19948
+1529
+19949
+19950
+19951
+119
+8566
+3635
+1157
+7053
+248
+19952
+19953
+176
+1021
+9
+4747
+19954
+303
+5623
+7987
+7208
+19
+10
+13179
+4196
+337
+1889
+19404
+19955
+19956
+19957
+2577
+19958
+19959
+2260
+19
+19960
+284
+19961
+19962
+17903
+19963
+19964
+9
+43
+276
+3
+1992
+11321
+19965
+17698
+1234
+1013
+228
+19966
+303
+14
+7137
+1244
+77
+713
+4963
+19967
+19404
+827
+19968
+11754
+15
+19969
+6741
+3546
+823
+19970
+1051
+590
+379
+19971
+19972
+19439
+19973
+745
+13282
+9
+7053
+19974
+16
+3546
+16855
+349
+1688
+19975
+671
+19976
+19289
+43
+770
+9
+19
+1517
+14
+19977
+19978
+8566
+13140
+15054
+5627
+14
+60
+1364
+19979
+13279
+19980
+597
+590
+19981
+19982
+12987
+19983
+32
+178
+12973
+19
+19984
+1236
+25
+19985
+17920
+1224
+2476
+10094
+19655
+60
+303
+14523
+6766
+19986
+19987
+15718
+19988
+8460
+140
+14143
+43
+43
+19806
+188
+19989
+19990
+9
+1051
+17774
+15384
+7836
+15
+19991
+19992
+19993
+19
+19994
+213
+5623
+12479
+19995
+98
+43
+16375
+19996
+248
+957
+19
+19997
+349
+8668
+590
+19998
+19999
+20000
+1415
+1013
+20001
+590
+15718
+19
+20002
+736
+137
+20003
+1920
+20004
+20005
+1574
+19
+16014
+1222
+7799
+14422
+20006
+19806
+286
+20007
+188
+20008
+590
+1300
+5561
+2
+303
+19404
+20009
+10003
+20010
+2577
+323
+5022
+20011
+19
+32
+19404
+17541
+20012
+4966
+7276
+5963
+20013
+590
+20014
+57
+790
+20015
+10
+20016
+20017
+827
+8685
+20018
+20019
+1229
+736
+20020
+554
+20021
+20022
+2166
+20023
+7609
+1817
+5582
+613
+14477
+20024
+57
+20025
+20026
+2694
+14020
+14
+14
+20027
+20028
+590
+9
+4227
+3172
+20029
+22
+19404
+20030
+249
+29
+1912
+20031
+20032
+43
+1765
+2764
+7855
+20033
+20034
+15080
+20035
+16831
+19404
+17661
+20036
+3546
+19655
+9
+98
+14
+651
+11483
+155
+20037
+19
+20038
+3743
+20039
+583
+4
+16437
+20040
+7053
+9
+20041
+19404
+11762
+19806
+16165
+286
+590
+19618
+6565
+2577
+20042
+15584
+19917
+20043
+3546
+16437
+20044
+43
+20045
+3546
+14977
+500
+5438
+16437
+15718
+209
+30
+20046
+20047
+20048
+4278
+20049
+536
+519
+20050
+3507
+19
+29
+20051
+22
+19381
+20052
+20053
+20054
+10381
+8668
+20055
+1013
+10310
+20056
+16866
+22
+16798
+590
+317
+20057
+1107
+20058
+16437
+13908
+1224
+20059
+80
+1870
+20060
+57
+43
+20061
+358
+14
+373
+20062
+19618
+6915
+20063
+20064
+20065
+20066
+14
+14429
+20067
+20068
+20069
+1212
+20070
+20071
+20072
+20073
+20074
+20075
+3958
+20076
+3256
+19
+20077
+3470
+20078
+201
+647
+4088
+2550
+1091
+486
+6505
+764
+38
+286
+16437
+43
+17374
+20079
+36
+20080
+20081
+20082
+20083
+20084
+19618
+554
+20085
+20086
+10028
+43
+373
+20087
+1112
+6214
+11762
+20088
+20089
+57
+936
+568
+11298
+17229
+20090
+286
+43
+3546
+16925
+20091
+1437
+20092
+20093
+3546
+20094
+597
+3698
+99
+15718
+137
+20095
+20
+20096
+1779
+7053
+19009
+9
+201
+20097
+14
+20098
+736
+20099
+20100
+20101
+823
+20
+138
+1047
+576
+11762
+15718
+43
+20102
+20103
+22
+20104
+590
+457
+10
+14603
+2770
+1107
+6395
+20105
+8668
+286
+57
+20106
+764
+3546
+20107
+20108
+19
+20109
+14
+19618
+5297
+20110
+16640
+20111
+20112
+2733
+823
+20113
+17555
+18539
+2577
+32
+42
+43
+20
+14
+20114
+20115
+7815
+1716
+590
+19
+14603
+7516
+6741
+712
+22
+20116
+16866
+43
+10356
+14
+20117
+20118
+43
+7137
+5627
+20119
+4765
+936
+915
+20120
+8218
+14
+20121
+8110
+590
+415
+18325
+7137
+11754
+201
+647
+14299
+15718
+20122
+14
+872
+20123
+20124
+19806
+11321
+16925
+9
+10
+7419
+16437
+15810
+1013
+13150
+2637
+20125
+7137
+20126
+20127
+590
+43
+11389
+20128
+1013
+3546
+736
+201
+274
+19806
+1230
+20
+18852
+15718
+19404
+4165
+19091
+10500
+9
+43
+1513
+20129
+14
+2164
+11754
+20130
+1574
+15
+1578
+15718
+835
+43
+19618
+1316
+13713
+647
+7379
+20131
+20132
+20133
+4426
+20134
+14973
+349
+1115
+5144
+57
+15718
+3
+20135
+19404
+20136
+20137
+20138
+35
+736
+19618
+764
+188
+20139
+873
+22
+411
+3236
+15718
+9738
+323
+9
+2561
+20140
+20141
+43
+9
+249
+179
+5670
+2197
+20142
+20143
+20144
+20145
+20146
+15718
+20147
+43
+14148
+20148
+11341
+15925
+20149
+19404
+1012
+2264
+15655
+1051
+1013
+20150
+19618
+20151
+15351
+20152
+1765
+20153
+20154
+14604
+20155
+20156
+20157
+19806
+201
+2517
+20158
+2349
+19
+43
+2594
+9
+20159
+19852
+19
+20160
+20161
+14
+14
+16881
+43
+14477
+590
+9
+349
+12404
+14148
+9194
+20162
+140
+665
+19404
+2
+590
+7379
+20163
+2476
+9
+3
+9713
+554
+80
+827
+5316
+739
+20164
+12620
+20165
+19
+20166
+20167
+272
+20168
+2
+536
+20169
+20170
+3546
+590
+19091
+20171
+286
+20172
+18145
+20173
+20174
+15186
+20175
+616
+3546
+590
+20176
+1249
+48
+1048
+6217
+20177
+20178
+20179
+14477
+3794
+20180
+16028
+2804
+16310
+20181
+1912
+20182
+14816
+1253
+20183
+20184
+20185
+12957
+15718
+736
+20186
+20187
+20188
+286
+4907
+19792
+8809
+20189
+2577
+14
+20190
+1012
+80
+11976
+2884
+6058
+19618
+67
+4313
+823
+2
+9
+13566
+358
+43
+43
+1082
+1425
+20
+20191
+1542
+20192
+1148
+14947
+20193
+5522
+736
+365
+20194
+2577
+20195
+20196
+3635
+43
+373
+19335
+16798
+20197
+20198
+9363
+7053
+20199
+3543
+20200
+35
+590
+48
+20201
+20202
+9688
+9
+20203
+590
+1013
+9
+20204
+20205
+20206
+10117
+13137
+1244
+20207
+19
+14
+20208
+14
+9
+3553
+20209
+20210
+16242
+20211
+15018
+20212
+646
+1107
+20213
+20214
+5080
+2577
+17698
+19
+20215
+17571
+736
+19618
+736
+9
+18283
+590
+15718
+20216
+20217
+349
+20218
+14961
+1051
+286
+20219
+20220
+20221
+286
+9
+20222
+1276
+105
+19
+20223
+3236
+10
+832
+20224
+245
+970
+20225
+3546
+448
+20226
+8188
+14
+3329
+20227
+20228
+9
+20229
+3546
+15718
+20230
+188
+43
+19618
+2430
+286
+14066
+20231
+590
+9440
+5791
+20232
+20233
+43
+15533
+43
+272
+43
+3105
+25
+20234
+209
+14
+20235
+20236
+178
+345
+15718
+185
+5837
+19404
+43
+178
+4963
+1105
+6341
+590
+15541
+57
+192
+248
+349
+5755
+349
+15158
+2330
+43
+18579
+19618
+13279
+20237
+43
+20238
+20239
+18154
+20240
+2129
+915
+20241
+15718
+20242
+6364
+20243
+586
+6028
+13566
+3213
+4126
+20244
+60
+11087
+20245
+736
+9
+11762
+12005
+8668
+43
+16014
+286
+8188
+1956
+4765
+20246
+10946
+20247
+8668
+16981
+20248
+736
+20249
+14
+369
+2804
+20250
+14343
+822
+411
+590
+20251
+365
+11762
+590
+19618
+20
+16925
+20252
+20253
+20254
+20255
+5990
+10
+20256
+19618
+1710
+20257
+19806
+8853
+20258
+9
+14420
+5438
+12555
+1991
+20259
+16656
+2561
+20260
+411
+14
+1107
+274
+590
+20261
+10
+20262
+5920
+20263
+20264
+590
+20265
+43
+80
+14
+20266
+20267
+20268
+20269
+2694
+2314
+3546
+20270
+1927
+10038
+1083
+20271
+14
+15
+1765
+14148
+3553
+590
+831
+14215
+823
+9
+736
+20272
+20273
+2790
+590
+5080
+17821
+20274
+20275
+2577
+6776
+14
+20276
+305
+20277
+9
+20278
+736
+19939
+736
+1364
+10004
+707
+9396
+14
+32
+20279
+15649
+43
+20280
+19
+2577
+323
+5803
+43
+4963
+736
+15718
+18951
+590
+20281
+613
+15595
+20282
+2896
+43
+501
+1154
+19
+14127
+14185
+7032
+20283
+3546
+2770
+509
+3
+19
+43
+15744
+20284
+43
+20285
+20286
+20287
+20288
+8668
+32
+1382
+5820
+282
+2694
+2476
+20289
+32
+590
+57
+20290
+554
+14
+20291
+15925
+9
+6924
+20292
+20293
+20294
+1112
+1444
+10094
+20295
+14026
+20296
+20297
+17112
+2577
+17338
+9
+2561
+1234
+20298
+736
+10946
+590
+20299
+43
+1295
+20300
+20301
+1612
+20302
+15
+9
+1578
+20303
+9
+11966
+9
+20304
+861
+14216
+6011
+20305
+286
+272
+590
+20306
+11822
+20307
+201
+286
+352
+14
+4547
+20308
+20309
+15193
+14
+17635
+20310
+20311
+19655
+14
+3546
+20312
+15647
+20313
+1051
+20314
+14
+305
+2459
+20315
+20316
+20317
+20318
+20319
+2835
+861
+19618
+590
+668
+2
+43
+15
+19
+14363
+14868
+14
+20320
+19404
+32
+20321
+98
+20322
+176
+43
+19
+13349
+491
+349
+18661
+14477
+3732
+20323
+1560
+19618
+20324
+20325
+411
+20326
+842
+17920
+15718
+20327
+20328
+20329
+20330
+20331
+20332
+15718
+20333
+192
+2
+19
+19
+22
+19618
+19806
+20334
+20335
+590
+4952
+155
+3546
+17872
+20336
+20
+20337
+11321
+3909
+540
+20338
+2577
+20339
+20340
+20341
+536
+22
+20342
+7053
+20343
+20344
+1091
+2794
+1013
+196
+2577
+11482
+20345
+20346
+616
+590
+379
+20347
+349
+32
+20348
+20349
+43
+5659
+43
+5780
+20350
+13179
+2325
+12397
+43
+57
+14666
+10356
+20351
+36
+20352
+20353
+18956
+14477
+188
+8100
+20354
+20355
+1245
+2971
+7053
+19618
+20356
+20357
+274
+19618
+19618
+9
+7328
+14
+20358
+20359
+12397
+19618
+20360
+936
+1536
+20361
+821
+32
+20362
+20363
+20364
+15141
+14
+14131
+4506
+7048
+20365
+20366
+20367
+7701
+15718
+823
+15718
+590
+43
+12987
+20368
+9
+20369
+14
+1716
+18503
+272
+20370
+20371
+20372
+20373
+10230
+20374
+20
+19
+2253
+590
+677
+955
+20375
+15589
+751
+20376
+20377
+209
+20378
+20379
+20380
+12241
+8367
+861
+20381
+20382
+20383
+20384
+18982
+20385
+19655
+19404
+1738
+20386
+1942
+2463
+707
+20387
+11230
+209
+43
+4023
+20388
+14604
+20389
+20390
+20391
+20392
+3
+20393
+18695
+20394
+19
+19618
+650
+19618
+2410
+1217
+590
+20395
+20396
+20397
+5780
+3546
+15824
+19618
+1019
+222
+2561
+20398
+20399
+19
+683
+20400
+20401
+20402
+707
+155
+32
+43
+43
+19
+20403
+20404
+20405
+2064
+20406
+9
+590
+16437
+19618
+20407
+15586
+59
+736
+2316
+2316
+164
+541
+13257
+201
+20408
+20409
+43
+98
+14
+610
+9
+20410
+7053
+20411
+20412
+19618
+590
+20413
+19618
+8297
+916
+20414
+18951
+3546
+6766
+20415
+15718
+10163
+736
+22
+415
+20416
+155
+20417
+20418
+20419
+15384
+2144
+8392
+5780
+20420
+286
+1169
+20421
+12231
+1738
+57
+20422
+15654
+19
+10
+19618
+379
+1513
+1224
+19655
+20423
+20424
+20425
+19618
+20426
+20427
+19404
+4126
+20428
+20429
+9526
+89
+590
+20430
+20431
+20432
+6095
+20433
+20434
+20435
+57
+20436
+14299
+349
+1011
+20437
+20438
+20439
+20440
+373
+20441
+20442
+7477
+20443
+7045
+20444
+10287
+20445
+2593
+1696
+865
+32
+46
+764
+590
+590
+9
+19618
+43
+590
+1765
+19917
+20446
+20447
+369
+20448
+20449
+16205
+18045
+20450
+18100
+9497
+19
+14
+19797
+2733
+14
+20451
+19618
+43
+8668
+155
+4961
+15718
+17482
+8188
+15718
+20452
+12987
+439
+20453
+19
+14
+20454
+18798
+1716
+20455
+20456
+20457
+20458
+3353
+20459
+20460
+707
+3034
+7053
+20461
+155
+4963
+20462
+345
+14001
+20463
+57
+7912
+14
+20464
+5780
+1316
+20465
+15
+20466
+20467
+9
+20468
+1529
+12987
+736
+20469
+14477
+4684
+20470
+20471
+2
+43
+20472
+209
+590
+1082
+20473
+1965
+1013
+20474
+57
+17084
+9
+43
+138
+20475
+20476
+7253
+20477
+20478
+20479
+8188
+6518
+7536
+20480
+720
+1912
+16925
+20481
+20482
+20483
+6571
+20484
+20485
+14477
+20486
+15
+20487
+20488
+14148
+20489
+20490
+1166
+5773
+20491
+20492
+29
+865
+720
+3317
+12304
+8882
+20493
+379
+3546
+2009
+20
+43
+14
+20494
+20495
+19655
+20496
+32
+18956
+19655
+20497
+15718
+19618
+1566
+4028
+915
+590
+282
+20498
+590
+20499
+845
+19742
+9
+43
+2260
+14
+13582
+345
+20500
+20501
+19
+9
+43
+14001
+32
+20502
+20503
+2260
+590
+20504
+1991
+20505
+647
+35
+20506
+5438
+8882
+590
+19806
+590
+20507
+5780
+19618
+43
+19618
+8255
+4565
+245
+188
+8367
+12013
+20508
+20509
+20510
+20511
+1307
+272
+590
+590
+446
+5197
+349
+20512
+20513
+2314
+201
+155
+20514
+11315
+155
+66
+2832
+8188
+155
+7053
+464
+15654
+345
+20515
+19618
+14
+14
+1612
+20
+4441
+196
+188
+20516
+15718
+19618
+4141
+20517
+345
+14
+43
+590
+2064
+554
+440
+20518
+17151
+20519
+397
+1520
+43
+20520
+349
+20521
+22
+43
+20522
+17228
+20523
+20524
+590
+20525
+20526
+19618
+14
+213
+590
+2035
+20527
+3546
+9
+13807
+5314
+3546
+14477
+10
+14
+14
+1809
+4918
+9801
+20528
+20529
+53
+14
+20530
+155
+3
+155
+15718
+484
+1765
+20531
+19404
+20532
+89
+770
+1224
+3067
+823
+5217
+345
+14562
+19218
+272
+590
+590
+19
+19
+4775
+20533
+1287
+20534
+19618
+20535
+20536
+590
+16205
+2561
+12987
+20537
+20538
+20539
+19
+155
+20
+43
+20540
+590
+20541
+20542
+20543
+18283
+736
+12402
+7521
+43
+20544
+17834
+595
+17670
+3421
+10
+20545
+272
+2260
+20546
+14604
+15315
+14260
+89
+20547
+20548
+2029
+20549
+3546
+345
+379
+20550
+20551
+1442
+20552
+15718
+18956
+10
+213
+3417
+20553
+558
+18683
+751
+17698
+20554
+2
+20555
+16844
+15718
+2975
+345
+20
+20556
+80
+14477
+209
+20557
+5438
+3546
+16437
+13854
+20558
+6441
+20559
+9
+20560
+1224
+20561
+3546
+43
+20562
+1559
+647
+20563
+1230
+19
+192
+249
+3546
+20564
+713
+6071
+20565
+20435
+20566
+20567
+12987
+20558
+736
+20568
+736
+1112
+43
+4313
+20569
+14
+19091
+14363
+648
+9941
+12827
+20570
+20571
+16844
+1157
+15308
+57
+20572
+2790
+9898
+20573
+20574
+20
+3546
+3546
+713
+590
+80
+112
+1920
+20575
+20576
+349
+20577
+20578
+2694
+736
+19618
+4028
+13539
+20579
+20388
+6741
+5052
+7364
+915
+20580
+349
+736
+20581
+20582
+20583
+20584
+20585
+20586
+20587
+354
+20588
+272
+43
+5117
+7176
+745
+1698
+745
+7137
+647
+20589
+20590
+35
+20591
+20592
+15267
+20593
+736
+20594
+14342
+7053
+1727
+9
+683
+20595
+12832
+1508
+647
+32
+43
+20596
+14
+19
+590
+20597
+15718
+43
+4341
+590
+19
+13959
+38
+2865
+8256
+417
+32
+13566
+19197
+9
+15001
+7379
+14
+32
+15718
+736
+20598
+6741
+2125
+823
+3353
+20599
+20600
+10880
+10574
+3546
+15718
+20601
+9
+20602
+16437
+14
+22
+20603
+20604
+7053
+32
+16743
+1710
+6701
+20605
+590
+15
+19
+3435
+20606
+57
+14603
+2844
+12480
+349
+8149
+19618
+20607
+18798
+9320
+1889
+20608
+77
+11995
+19
+8015
+20609
+323
+20610
+18503
+14
+20611
+20612
+915
+14
+20613
+5601
+32
+18951
+286
+3546
+14477
+19618
+18045
+5333
+19618
+590
+17920
+647
+3546
+188
+20614
+19
+3407
+209
+20615
+19404
+6420
+3
+14477
+16437
+15
+1208
+185
+590
+20616
+19618
+20617
+14477
+17247
+720
+1569
+493
+590
+1212
+17872
+3213
+18862
+20
+20618
+13307
+213
+20619
+20620
+3546
+272
+20621
+43
+20622
+590
+20623
+8967
+377
+736
+20624
+286
+178
+590
+736
+20555
+20625
+20626
+3050
+19
+2314
+1251
+791
+590
+34
+18951
+357
+5780
+1013
+20627
+16389
+20628
+20629
+713
+761
+20630
+533
+1013
+5542
+10
+1442
+646
+20631
+3
+20632
+5780
+20633
+20634
+337
+590
+20635
+16927
+3999
+20636
+590
+17698
+7743
+1217
+1385
+2925
+6741
+20637
+20638
+57
+18052
+590
+6294
+20639
+1688
+10230
+20640
+20641
+2517
+20642
+20643
+32
+842
+20644
+19
+3059
+1870
+3546
+284
+3546
+20645
+20646
+20647
+20648
+9
+222
+18695
+20649
+3
+519
+2697
+20650
+20651
+7053
+20652
+13945
+6028
+533
+493
+504
+1208
+20653
+284
+43
+613
+9
+43
+20654
+3480
+2872
+43
+9
+590
+20655
+6950
+8668
+590
+20656
+3
+19618
+8668
+20141
+14363
+188
+3976
+20657
+20658
+1056
+791
+20659
+19618
+3546
+2804
+590
+17602
+4441
+20660
+20661
+20662
+3067
+1517
+1051
+741
+20663
+20664
+20665
+43
+4
+20666
+188
+4196
+19
+8996
+3546
+1013
+1912
+6571
+713
+20667
+2260
+205
+57
+3546
+20
+20668
+1765
+15718
+1716
+8999
+590
+3559
+20669
+188
+3546
+20670
+2035
+18455
+10
+248
+303
+20671
+20672
+323
+20673
+764
+736
+1710
+20674
+20
+2694
+20675
+713
+10
+20
+3252
+188
+8218
+19042
+4441
+19
+964
+736
+13370
+736
+5904
+411
+6354
+209
+14
+12987
+14363
+323
+286
+15
+20676
+19618
+590
+13127
+17545
+590
+20677
+3546
+18814
+20678
+20679
+2129
+1100
+1961
+1013
+10787
+20680
+89
+1300
+155
+917
+20681
+20682
+20683
+20684
+19576
+248
+2316
+464
+20685
+20686
+29
+590
+736
+20687
+20688
+20689
+1738
+5780
+10
+15718
+19618
+20690
+20691
+20692
+19618
+6205
+19
+20693
+8351
+20694
+32
+2775
+7053
+18025
+20695
+2537
+20696
+20697
+590
+20698
+15649
+43
+2
+155
+10
+1847
+20699
+4907
+14
+20700
+3546
+2243
+19
+43
+38
+20701
+590
+2550
+20702
+9
+274
+213
+20703
+1465
+35
+6877
+155
+284
+213
+3994
+43
+11762
+20704
+1559
+274
+1870
+590
+8668
+19
+4081
+248
+43
+20705
+19806
+590
+16991
+20706
+20707
+12936
+20708
+20709
+8218
+9
+647
+345
+736
+19806
+19
+43
+20710
+790
+20711
+14127
+10
+248
+745
+112
+22
+20712
+590
+20713
+20714
+43
+337
+474
+590
+3317
+357
+665
+43
+43
+14
+278
+20715
+8668
+18695
+3546
+20716
+9
+13045
+10
+15
+15540
+209
+18954
+19618
+176
+20717
+647
+19323
+137
+20700
+248
+1013
+590
+32
+10038
+872
+155
+20718
+14363
+20719
+20720
+20721
+19
+20722
+478
+5601
+9
+345
+12788
+188
+20723
+20724
+554
+15718
+8351
+19618
+736
+12987
+14
+20725
+155
+20726
+13375
+20727
+20728
+48
+971
+3732
+14
+25
+15
+20729
+19618
+2476
+3546
+20730
+590
+20731
+20732
+14604
+519
+16472
+590
+286
+7053
+3546
+3476
+616
+823
+2593
+19618
+19
+14
+24
+586
+20
+1208
+12584
+20733
+20734
+6364
+20735
+590
+20736
+20737
+20
+3546
+12768
+18128
+286
+286
+2121
+20738
+3417
+19618
+155
+590
+590
+19624
+648
+32
+2694
+209
+15718
+19
+1018
+6785
+9400
+14
+3543
+358
+19806
+43
+20739
+18552
+501
+3944
+823
+3599
+38
+20740
+533
+20741
+20742
+20743
+20744
+20745
+590
+20746
+349
+286
+17467
+8566
+590
+14001
+43
+795
+20747
+14477
+1208
+1018
+3376
+7053
+1817
+20748
+10
+9
+5601
+13375
+99
+590
+16
+14
+1021
+20749
+201
+20750
+20751
+43
+15496
+89
+345
+19792
+5099
+2637
+3743
+14
+11618
+20752
+20753
+15718
+18178
+2356
+20754
+20755
+29
+20756
+155
+4144
+6571
+20757
+20758
+554
+20759
+573
+20760
+12987
+17356
+720
+20761
+20762
+20
+14
+20763
+8668
+1764
+20764
+2
+1575
+20765
+14477
+14
+20766
+317
+20767
+274
+20768
+20769
+683
+286
+20770
+18283
+339
+970
+152
+20771
+20772
+14
+3546
+20773
+43
+112
+39
+4717
+554
+155
+20774
+286
+1091
+345
+4581
+3546
+20775
+9
+3546
+5441
+20776
+2577
+2253
+665
+20777
+20778
+20779
+14
+20780
+20781
+20
+16305
+971
+57
+3553
+20782
+20783
+14477
+720
+20784
+20785
+3695
+5689
+2415
+849
+20786
+1437
+12333
+3353
+13474
+10706
+20787
+826
+14
+66
+590
+20788
+20789
+20790
+9
+2
+1109
+16672
+8668
+20791
+43
+16437
+2
+19
+19404
+2164
+20792
+20793
+20
+1655
+20794
+20795
+15718
+12987
+20
+15744
+12254
+1684
+970
+80
+19655
+9
+272
+590
+1310
+20796
+9
+764
+15718
+5316
+474
+11073
+137
+188
+20499
+20797
+279
+20798
+411
+20799
+20800
+43
+10439
+5208
+19618
+10
+2446
+1229
+647
+4174
+109
+1742
+736
+7855
+32
+1100
+20801
+20802
+15975
+57
+18816
+14689
+213
+16941
+379
+349
+13279
+3330
+60
+286
+19618
+20803
+4485
+648
+20804
+554
+20805
+43
+349
+20806
+19618
+43
+12893
+20807
+1011
+19618
+15
+20808
+13543
+1738
+20809
+38
+1559
+29
+20810
+213
+18695
+15535
+11321
+20811
+827
+345
+5780
+20812
+519
+349
+18896
+1559
+20813
+20814
+4084
+6571
+20815
+43
+20816
+43
+20817
+20818
+491
+4820
+20819
+20820
+20821
+345
+20822
+17
+15649
+10028
+152
+1423
+20823
+20824
+20825
+1927
+20826
+625
+2694
+9314
+43
+20827
+736
+19618
+20828
+3546
+590
+32
+590
+19404
+20829
+19618
+17602
+18683
+1630
+19618
+590
+57
+464
+8392
+8351
+20830
+179
+20831
+18982
+20832
+20833
+20834
+19618
+9796
+19404
+10
+14
+207
+14
+284
+20835
+1082
+20836
+6140
+3059
+20837
+20838
+43
+10621
+15718
+2015
+20839
+3546
+20840
+57
+16012
+20841
+20842
+13138
+2254
+19
+827
+155
+349
+415
+20843
+7799
+9
+20844
+2832
+20845
+20846
+2694
+20847
+20848
+20849
+20850
+20851
+20852
+20
+53
+590
+3
+19618
+20853
+43
+137
+20854
+20855
+365
+20856
+20174
+185
+20857
+20858
+554
+19
+20859
+43
+15820
+248
+17670
+20860
+12397
+43
+20861
+2314
+6441
+399
+5418
+2260
+823
+16437
+20
+20862
+20863
+213
+7379
+823
+20864
+19
+2197
+14916
+3408
+2694
+3
+20865
+736
+12996
+20
+43
+554
+7908
+20866
+20867
+248
+20868
+1234
+354
+3548
+57
+14152
+20869
+14274
+3546
+20
+595
+303
+32
+201
+20870
+20871
+1112
+15583
+19618
+209
+20872
+3491
+19
+19618
+590
+7328
+155
+16375
+1605
+248
+2015
+20873
+20874
+20875
+323
+9
+4230
+20876
+2770
+4441
+4230
+20877
+1859
+14
+19
+15699
+293
+495
+9
+971
+446
+4118
+20878
+20879
+14680
+8297
+823
+20880
+345
+38
+20881
+791
+1100
+20161
+2804
+590
+14
+18054
+14
+1384
+248
+209
+554
+20882
+20883
+1961
+20884
+43
+590
+20885
+140
+305
+20886
+2577
+1091
+20887
+20888
+20889
+20890
+20891
+10993
+20892
+13666
+3192
+20893
+1425
+18257
+2197
+20894
+20895
+4963
+19
+20896
+32
+3546
+20897
+155
+19
+5780
+1100
+736
+5582
+141
+5632
+1066
+1157
+13908
+13943
+2260
+43
+16696
+2
+20898
+248
+573
+20899
+20900
+15694
+16437
+20901
+14477
+284
+19478
+12560
+736
+20902
+349
+13149
+43
+20428
+20903
+20904
+1013
+20905
+519
+43
+345
+20906
+2577
+32
+43
+590
+9
+519
+9
+43
+3335
+17356
+1765
+57
+20907
+14082
+10
+842
+14
+20908
+809
+43
+20909
+13528
+43
+1912
+20910
+32
+20911
+665
+736
+8668
+20912
+20913
+14
+43
+20914
+192
+3546
+1508
+736
+20915
+201
+2064
+19404
+16927
+20916
+791
+286
+20917
+9
+20918
+20919
+20920
+20921
+20922
+3291
+57
+17247
+1090
+19618
+5804
+14
+20923
+20924
+20925
+18372
+3546
+20926
+20927
+20928
+20929
+2029
+20930
+20931
+519
+1927
+35
+15718
+19
+398
+9485
+4544
+2
+19
+3553
+43
+590
+7027
+17112
+10487
+20932
+20
+20933
+20934
+872
+20935
+590
+19655
+286
+736
+20936
+349
+1559
+11715
+2314
+2316
+554
+19618
+14
+14603
+4269
+66
+20937
+1961
+59
+349
+20938
+14
+20939
+12642
+43
+13976
+20940
+13361
+720
+20941
+20942
+2694
+16826
+20943
+3296
+20944
+19965
+352
+43
+5344
+19404
+20945
+3752
+19
+2919
+201
+11808
+12987
+12987
+10
+323
+20946
+3546
+20947
+1566
+43
+20948
+2197
+412
+43
+11754
+286
+20572
+1924
+18695
+20949
+20950
+20951
+22
+9
+1502
+683
+20952
+7053
+17635
+20953
+14
+20954
+20955
+43
+20956
+590
+20957
+7053
+1864
+20958
+694
+19
+345
+17083
+89
+14538
+14477
+19304
+14603
+20959
+249
+20960
+20961
+20962
+228
+222
+20963
+20964
+17251
+15718
+43
+6121
+32
+20965
+4752
+12202
+616
+20966
+8351
+14388
+20967
+4544
+736
+2577
+10031
+20968
+4963
+20969
+1051
+20970
+20971
+736
+20972
+20973
+9
+20448
+10
+19
+155
+8255
+5823
+1559
+448
+155
+358
+4364
+20974
+7145
+20975
+286
+16981
+20976
+12005
+1442
+849
+20977
+17872
+20978
+20979
+590
+736
+20980
+764
+736
+20981
+402
+20982
+20983
+3546
+20984
+12005
+20985
+13807
+20986
+11087
+209
+809
+20987
+11335
+43
+1465
+20988
+292
+2459
+20989
+7053
+715
+18951
+4766
+19
+43
+20990
+18956
+1817
+19
+590
+20991
+1716
+14
+155
+20572
+20992
+15718
+14477
+20993
+20994
+20
+20995
+20996
+19655
+14477
+3543
+20997
+5267
+590
+20998
+20999
+35
+3995
+21000
+647
+2733
+823
+7238
+21001
+683
+21002
+595
+826
+2577
+155
+19618
+2330
+3546
+34
+14527
+823
+43
+155
+3421
+21003
+815
+548
+164
+694
+21004
+6251
+369
+155
+2790
+43
+21005
+21006
+971
+357
+21007
+25
+18982
+21008
+14
+397
+21009
+43
+20326
+188
+21010
+21011
+43
+1364
+21012
+21013
+17571
+11995
+21014
+1314
+2029
+16535
+21015
+10439
+38
+12067
+2804
+1090
+590
+665
+14
+6095
+21016
+57
+9
+21017
+11754
+272
+32
+21018
+21019
+13874
+21020
+21021
+21022
+15744
+14001
+12743
+3095
+21023
+14
+1048
+349
+349
+2804
+677
+915
+13564
+21024
+8743
+349
+2124
+19618
+3978
+21021
+43
+9
+272
+1112
+18120
+19
+3546
+21025
+10004
+21026
+2314
+590
+43
+21027
+21028
+21029
+2314
+19
+3546
+21030
+19
+286
+21031
+6095
+21032
+15718
+2314
+14
+21033
+590
+21034
+21035
+14
+21036
+19655
+554
+590
+17635
+736
+20
+399
+21037
+2164
+21038
+736
+21039
+155
+14351
+21040
+3484
+417
+9
+5533
+4029
+3546
+21041
+21042
+14
+736
+196
+15718
+21043
+647
+1226
+43
+21044
+13039
+16788
+3546
+3316
+4387
+21045
+21046
+43
+123
+4278
+21047
+20555
+16240
+21048
+2314
+15193
+1566
+21049
+7537
+21050
+21051
+155
+21052
+21053
+21054
+554
+10
+1168
+21055
+21056
+21057
+3239
+57
+671
+15809
+21058
+14
+3119
+399
+597
+21059
+43
+14363
+14770
+21060
+201
+43
+11274
+1013
+21061
+3546
+19
+3546
+2859
+58
+21062
+345
+21063
+21064
+15718
+19618
+201
+43
+14
+21065
+20206
+43
+19
+19618
+1013
+21066
+21067
+18100
+14
+823
+21068
+345
+2476
+21069
+8210
+1824
+3239
+21070
+345
+20774
+20
+519
+21071
+43
+590
+12761
+3743
+514
+21072
+590
+19618
+6950
+827
+21073
+554
+788
+736
+16437
+15
+12203
+21074
+21075
+554
+15845
+7053
+568
+823
+14
+21076
+14
+6732
+21077
+21078
+104
+345
+736
+43
+19655
+12987
+14
+201
+21079
+21080
+19792
+3546
+7137
+6617
+21081
+5344
+486
+155
+20
+17082
+19
+104
+21082
+2733
+647
+43
+21083
+57
+21084
+21085
+21086
+201
+21087
+21088
+43
+19695
+15718
+21089
+21090
+286
+21091
+21092
+19792
+590
+16437
+21093
+1991
+21094
+21095
+21096
+21097
+345
+21098
+21099
+21100
+18806
+20
+21101
+57
+4227
+43
+14604
+42
+9410
+21102
+3
+2459
+15592
+43
+18283
+16180
+21103
+21104
+12788
+21105
+43
+11483
+3236
+16681
+17670
+21106
+21107
+6283
+7815
+21108
+1051
+19404
+20737
+21109
+1889
+22
+21110
+3546
+21111
+2830
+155
+21112
+278
+21113
+590
+43
+18637
+32
+21114
+349
+11762
+32
+1870
+188
+57
+778
+21115
+14
+764
+349
+99
+21116
+2728
+43
+1310
+19752
+6571
+1961
+21117
+21118
+19618
+2019
+21119
+21120
+8967
+4126
+21121
+2260
+8214
+14
+7917
+5495
+5299
+14
+20343
+2042
+7053
+1508
+2009
+21122
+21123
+196
+17911
+21124
+2804
+4414
+21125
+827
+19806
+43
+15168
+736
+21126
+21127
+21128
+5601
+6441
+20773
+21129
+1992
+21130
+21131
+21132
+21133
+21134
+16790
+21135
+3406
+1765
+554
+1543
+21136
+7045
+14477
+43
+533
+11762
+1605
+155
+736
+21137
+21138
+155
+14477
+6571
+2657
+19
+286
+3772
+155
+5410
+21139
+43
+21140
+2260
+43
+21141
+4367
+21142
+4929
+4793
+20340
+21143
+3546
+14933
+4808
+765
+21144
+11087
+1716
+323
+141
+43
+3978
+1749
+155
+21145
+519
+35
+10439
+22
+5204
+2537
+5877
+21146
+1027
+13566
+16780
+9
+590
+21147
+21148
+59
+32
+21149
+20555
+590
+823
+590
+3559
+21150
+3546
+14240
+713
+21151
+823
+21152
+19806
+43
+21153
+137
+349
+21031
+7053
+185
+21154
+141
+597
+7146
+590
+21155
+21156
+14192
+5318
+21157
+887
+21158
+21159
+21160
+2944
+21161
+21162
+32
+21163
+7053
+13710
+21164
+10727
+15
+21165
+21166
+5908
+6776
+19618
+32
+21167
+21168
+9
+1648
+1224
+3546
+21169
+2356
+3354
+10
+349
+57
+1710
+43
+21170
+21171
+3476
+19
+21172
+20952
+14
+43
+4414
+8743
+11362
+21173
+590
+17879
+21174
+1091
+590
+104
+7053
+21175
+18047
+736
+10
+21176
+197
+736
+4682
+683
+19
+5027
+1021
+2694
+3
+15497
+13973
+345
+21177
+13974
+8380
+745
+1056
+345
+19618
+19618
+349
+155
+9934
+21178
+21179
+9123
+15824
+21180
+694
+21181
+104
+21182
+2260
+20384
+286
+20572
+1011
+14792
+9
+14
+21183
+8392
+2
+317
+245
+21184
+21185
+590
+736
+21186
+98
+823
+21187
+16890
+1222
+272
+736
+21188
+21189
+21190
+3546
+32
+13624
+16899
+13566
+155
+1961
+17635
+21191
+21192
+21193
+21194
+201
+21195
+16
+14844
+19404
+15406
+21196
+21197
+21198
+19
+155
+2285
+1655
+10
+9873
+19618
+18798
+21199
+823
+8210
+21200
+15561
+18951
+2318
+21201
+21202
+590
+6617
+43
+19271
+21203
+464
+14
+19618
+14797
+274
+21204
+17136
+21205
+21206
+12987
+5582
+66
+21207
+21208
+21209
+736
+377
+16437
+648
+1847
+21210
+823
+21211
+21212
+43
+8297
+869
+33
+3546
+21213
+379
+21214
+2476
+21215
+3995
+17947
+17981
+21216
+590
+21217
+5650
+2804
+21218
+823
+21219
+554
+16387
+14215
+20
+590
+21220
+19618
+197
+21221
+21222
+21223
+43
+21224
+21225
+9
+19439
+13484
+21226
+1224
+21227
+21228
+19618
+43
+1154
+1503
+14603
+19883
+14102
+2415
+1013
+19
+43
+21229
+809
+1965
+19
+21230
+7935
+10439
+11762
+16850
+21231
+21232
+1716
+2540
+209
+21233
+14
+21234
+21235
+3546
+554
+21236
+43
+590
+590
+1160
+970
+19918
+270
+590
+21237
+4812
+1160
+19
+21238
+43
+21239
+21240
+21241
+15718
+21242
+590
+286
+21232
+19655
+77
+5438
+14
+194
+286
+21243
+412
+32
+21244
+17670
+11702
+1224
+707
+19618
+20
+21245
+21246
+7379
+21247
+2879
+14
+21248
+21249
+1042
+43
+21250
+14
+57
+188
+736
+1502
+10356
+21251
+2
+21252
+21253
+730
+12067
+736
+21254
+3546
+43
+1716
+7053
+14
+1696
+6504
+21255
+317
+286
+21256
+1749
+21257
+1051
+20952
+19
+21258
+20
+15718
+19965
+1082
+57
+509
+1533
+20600
+536
+6571
+21259
+8270
+138
+4288
+647
+19404
+21260
+9
+14
+19618
+14477
+15718
+21261
+1107
+345
+14
+20291
+8512
+21262
+15595
+590
+7799
+6571
+39
+373
+21263
+21264
+21265
+18455
+19
+21266
+3546
+873
+21267
+15718
+5780
+21268
+20
+21269
+20657
+21270
+7855
+736
+3546
+21271
+21272
+155
+21273
+10
+19618
+21274
+14
+21275
+21276
+10439
+7270
+155
+5780
+828
+21277
+19
+4315
+6071
+32
+14
+286
+3546
+201
+14
+21278
+11754
+14524
+19
+14520
+21279
+19618
+590
+345
+21280
+533
+20
+12158
+15592
+21281
+21282
+21283
+21284
+2006
+590
+21285
+21286
+21287
+119
+3669
+9402
+2762
+12987
+533
+2593
+9
+20572
+21288
+3395
+669
+720
+21289
+19404
+21290
+590
+15592
+686
+21291
+590
+21292
+21293
+17473
+1559
+21294
+590
+19618
+185
+10117
+1090
+10303
+7137
+21295
+9162
+2577
+21296
+19
+274
+286
+15718
+209
+21297
+1696
+19618
+3546
+21298
+590
+761
+21299
+15971
+21300
+5203
+4
+140
+6533
+14
+21301
+11707
+9
+16589
+14477
+21302
+8249
+13569
+21303
+21304
+32
+15718
+19618
+345
+19
+11762
+21305
+12005
+21306
+21307
+4907
+590
+13801
+3990
+286
+345
+1517
+3341
+21308
+21309
+228
+379
+21310
+21311
+21312
+21313
+5780
+21314
+21315
+21316
+10
+13538
+5627
+155
+43
+15718
+19
+21317
+349
+21318
+14604
+2287
+21319
+1012
+1154
+12684
+9
+21320
+5780
+19
+6776
+17608
+20
+20
+1164
+21321
+16118
+21322
+14
+8668
+21323
+21324
+10230
+57
+17228
+1976
+21325
+9
+22
+21326
+155
+8789
+19852
+21327
+21328
+10
+18283
+21329
+13624
+764
+209
+21330
+14363
+19048
+5803
+1109
+590
+99
+338
+21331
+14
+720
+14001
+20127
+201
+19
+21332
+2
+21333
+514
+21334
+201
+1716
+12989
+21335
+21336
+1013
+21337
+14
+823
+14
+538
+222
+21338
+1442
+554
+19
+21339
+9
+10028
+21340
+43
+21341
+21342
+345
+21343
+21344
+21345
+21346
+19
+4118
+15
+21347
+590
+495
+554
+19
+323
+21348
+21349
+286
+21350
+14
+21351
+18919
+5601
+43
+29
+2550
+19618
+21352
+5803
+21353
+19
+4518
+21354
+3213
+21355
+21356
+21357
+14
+19
+7835
+21358
+16180
+228
+21359
+21360
+179
+1139
+595
+8249
+11754
+8301
+4278
+11754
+21361
+19
+21362
+764
+21363
+12987
+21364
+43
+4
+21365
+16437
+5803
+349
+4278
+21366
+21367
+15718
+43
+5627
+60
+21368
+21369
+43
+19404
+21370
+613
+568
+3839
+21371
+736
+21372
+11308
+495
+19618
+21373
+21374
+14
+21375
+16126
+18045
+43
+21376
+16437
+21377
+21378
+14
+21379
+12561
+15356
+286
+19618
+196
+873
+11362
+21380
+18095
+32
+21381
+14
+21382
+849
+14
+43
+1668
+286
+16883
+5582
+21383
+21384
+11483
+1157
+66
+3842
+21385
+1517
+21386
+10222
+7053
+887
+155
+15720
+20
+9
+21168
+590
+14
+647
+21387
+222
+7379
+21388
+21389
+1870
+736
+14
+2349
+2
+17670
+3978
+21390
+1559
+21391
+21392
+533
+21393
+2446
+19618
+21336
+286
+590
+1765
+43
+3546
+10236
+21394
+16437
+38
+21395
+99
+845
+736
+16437
+21396
+21397
+590
+43
+21398
+17144
+43
+13285
+1013
+1765
+345
+2134
+21399
+17571
+1208
+21400
+21401
+21402
+21403
+21404
+10699
+7896
+21405
+32
+20
+1013
+19
+19404
+14
+1012
+19655
+536
+286
+15054
+19618
+20941
+5780
+10
+346
+21088
+872
+176
+21406
+16437
+20702
+21407
+17119
+21408
+3484
+43
+20677
+21409
+21410
+21411
+19
+6877
+21412
+57
+8668
+10
+21413
+21414
+43
+21415
+12807
+43
+3546
+2733
+736
+21416
+10439
+21417
+8188
+1991
+21418
+21419
+21420
+3546
+583
+590
+14
+21421
+915
+5318
+590
+764
+21422
+104
+19618
+57
+21423
+18896
+21424
+21425
+345
+683
+21426
+9
+2694
+736
+18951
+21427
+138
+21428
+1465
+21429
+2018
+21430
+176
+2064
+16389
+21431
+19404
+3546
+9144
+9934
+21432
+398
+19
+35
+21433
+7653
+3251
+18047
+284
+7053
+21434
+248
+3353
+7536
+155
+21435
+21436
+21437
+736
+12185
+14
+21438
+21439
+1013
+8668
+827
+14
+48
+1051
+736
+213
+25
+18283
+16437
+21440
+8041
+14
+14
+19618
+17229
+21441
+15718
+21442
+21443
+872
+1870
+57
+21444
+21445
+19
+19
+15718
+213
+5211
+21446
+14
+248
+21447
+14603
+17519
+823
+21448
+1991
+21449
+1190
+248
+590
+21450
+21451
+21405
+21452
+1912
+19
+21453
+1696
+15718
+1425
+12987
+1224
+16640
+15
+21454
+14
+323
+3546
+590
+12404
+19404
+21455
+590
+248
+6439
+1612
+10640
+176
+5344
+590
+10230
+16437
+590
+21456
+201
+21457
+5134
+21458
+19404
+32
+823
+9
+21459
+14
+21460
+8668
+19618
+21461
+303
+1385
+36
+11762
+35
+14604
+823
+349
+345
+21462
+7231
+21463
+21464
+21465
+305
+9
+21466
+19
+21467
+20
+13230
+337
+21468
+21469
+2314
+1559
+16429
+21176
+14
+20
+43
+20
+14
+8249
+15975
+21470
+303
+104
+14
+736
+14
+21471
+196
+6571
+915
+155
+43
+21472
+21473
+3546
+337
+21474
+21475
+21476
+21477
+20803
+21478
+284
+18139
+21479
+21480
+19
+15718
+14020
+286
+713
+10
+13207
+21481
+43
+590
+590
+16437
+12321
+32
+21482
+590
+21483
+21484
+1415
+21485
+21486
+43
+21487
+21488
+21489
+303
+345
+2281
+16437
+19618
+5801
+9102
+3768
+43
+21490
+21491
+21492
+705
+14603
+1082
+19
+4023
+6496
+21050
+1912
+4916
+1168
+8668
+19
+770
+21493
+21494
+8208
+15718
+11754
+349
+720
+303
+1234
+9
+15718
+20794
+2537
+21495
+21496
+21497
+21498
+57
+14
+21499
+19404
+21500
+446
+19
+14
+21501
+665
+11754
+21502
+17698
+43
+19404
+21503
+248
+185
+21504
+5780
+21505
+4278
+564
+43
+21506
+590
+590
+21507
+590
+155
+4126
+21508
+305
+8280
+3978
+2243
+21509
+683
+15384
+22
+20181
+21510
+19618
+16887
+19918
+21511
+19
+21512
+19
+21513
+915
+21514
+554
+248
+43
+14
+21515
+590
+21516
+19
+112
+21517
+2790
+19618
+20
+8668
+21518
+21519
+1012
+8403
+1208
+21520
+3964
+21521
+647
+4907
+19618
+21522
+21523
+272
+21524
+337
+349
+21525
+248
+21526
+21527
+278
+155
+5592
+303
+18045
+21528
+12987
+8367
+21529
+21530
+345
+21531
+21532
+21533
+573
+3546
+4
+315
+21534
+21535
+323
+9410
+590
+284
+21536
+21537
+14604
+1047
+21538
+13364
+13913
+379
+10222
+237
+19
+659
+21539
+1655
+17136
+411
+21540
+19404
+21541
+43
+43
+21542
+19618
+20
+19
+57
+989
+21543
+43
+15718
+590
+18780
+21544
+1927
+9
+2841
+305
+3
+21545
+21546
+2412
+21547
+13111
+2310
+21548
+14
+43
+1559
+3546
+21549
+21550
+21551
+15720
+3601
+201
+15718
+8849
+14477
+19618
+3944
+13566
+21552
+21553
+9628
+43
+155
+43
+286
+21554
+2314
+137
+14
+21555
+155
+21556
+8392
+21557
+345
+464
+5211
+21558
+21559
+21560
+15
+495
+21561
+5780
+21562
+2463
+15
+5780
+43
+8098
+590
+2
+842
+1364
+21563
+21564
+823
+590
+21565
+43
+19456
+286
+19
+21566
+2286
+345
+10111
+14020
+21567
+21568
+21569
+14477
+536
+770
+21570
+21571
+21572
+12668
+103
+21573
+21574
+337
+14
+590
+21575
+19
+19404
+248
+137
+14
+15274
+21576
+19618
+21577
+323
+21578
+21579
+1382
+5725
+337
+21580
+21581
+2
+770
+25
+16511
+590
+10727
+19241
+9
+188
+9
+21582
+237
+14477
+17871
+736
+21583
+6096
+349
+21584
+99
+1119
+138
+21585
+286
+3546
+590
+14
+43
+18695
+57
+21586
+590
+19664
+21587
+21588
+17602
+178
+19618
+32
+11754
+16826
+741
+1153
+8188
+21589
+185
+3546
+77
+14
+21590
+540
+21591
+5780
+736
+3376
+196
+21592
+1991
+52
+6217
+21593
+242
+21594
+14420
+32
+21595
+21596
+14477
+21597
+21598
+21599
+21600
+4083
+2314
+5498
+14
+57
+6883
+21601
+89
+15
+2577
+21602
+736
+16991
+43
+10
+164
+43
+590
+25
+1090
+21603
+284
+21604
+18695
+21605
+21606
+14477
+21607
+21608
+21609
+915
+250
+736
+21610
+284
+21611
+286
+19655
+18047
+19838
+21612
+21613
+736
+349
+14477
+9
+15
+14
+345
+14523
+21614
+21615
+10591
+20600
+303
+21616
+12987
+536
+827
+21617
+19618
+9
+790
+21618
+80
+21619
+14
+21620
+213
+2004
+21621
+590
+3601
+21622
+43
+19618
+16461
+1559
+250
+437
+20576
+1310
+14
+21623
+15720
+12987
+20315
+21624
+21625
+357
+873
+21626
+22
+5780
+21627
+656
+21628
+3100
+248
+554
+284
+18045
+349
+21629
+286
+337
+21630
+345
+1013
+21631
+89
+554
+6363
+21632
+2135
+43
+21633
+21634
+21635
+11087
+21636
+1831
+440
+104
+823
+21637
+21638
+303
+554
+19460
+1011
+21639
+5780
+188
+2
+21640
+9
+14
+3480
+339
+21641
+21642
+114
+845
+115
+21643
+21644
+21645
+2
+305
+337
+21646
+248
+2
+21647
+21648
+21649
+21650
+57
+590
+736
+3546
+43
+15718
+286
+736
+21651
+14
+13361
+7053
+1648
+971
+21652
+16437
+358
+21653
+1961
+21654
+1531
+15718
+2832
+21655
+21656
+18283
+15718
+4606
+303
+21657
+21658
+21659
+21660
+21661
+19618
+21662
+21663
+21664
+21665
+155
+712
+21666
+43
+20952
+21667
+2476
+19618
+248
+10787
+43
+21668
+21669
+10439
+736
+21670
+1018
+3354
+823
+43
+2287
+13409
+21671
+3575
+205
+21672
+3546
+20
+8809
+2733
+21673
+21674
+248
+440
+9
+14
+665
+19
+286
+21675
+43
+10439
+15718
+177
+20383
+66
+4963
+17602
+12987
+665
+15592
+2121
+8188
+21676
+645
+57
+590
+21677
+9
+21678
+284
+21679
+21680
+21681
+19
+17372
+19618
+21682
+17834
+5208
+43
+43
+823
+16180
+373
+43
+823
+17608
+278
+365
+21683
+345
+715
+12987
+2
+736
+21684
+21685
+2029
+286
+21686
+2787
+21687
+21688
+10439
+791
+21689
+19618
+770
+3546
+17698
+2694
+18695
+21690
+3204
+19
+21691
+14
+590
+8297
+15718
+14
+19618
+1503
+736
+21692
+21693
+1382
+2414
+1316
+21694
+21695
+3546
+155
+21696
+270
+104
+19
+15349
+18695
+19
+21697
+536
+21698
+21699
+21700
+284
+21701
+3239
+14
+13566
+21276
+8668
+43
+21702
+21703
+21704
+15718
+17625
+1012
+491
+3369
+43
+10880
+590
+764
+21705
+5075
+3553
+590
+19218
+36
+21706
+1606
+43
+21707
+21708
+14
+2029
+21709
+21710
+10727
+2117
+17039
+4128
+2944
+43
+15971
+11754
+823
+15
+5169
+21711
+12479
+6341
+5117
+21712
+11822
+14
+19199
+16725
+823
+19618
+15275
+21713
+3546
+1385
+10439
+21714
+13375
+21715
+1817
+823
+43
+21716
+1224
+590
+770
+8297
+345
+14
+286
+845
+3546
+21717
+19618
+1382
+21718
+21719
+15054
+3435
+19
+19618
+590
+21720
+21721
+14
+249
+14
+48
+21722
+5387
+15989
+13973
+43
+373
+9
+20
+19
+2804
+21723
+1249
+7835
+43
+736
+18597
+692
+8508
+17698
+21724
+11762
+21725
+398
+13151
+2837
+19
+14363
+6627
+736
+21726
+3484
+19218
+6518
+21727
+15718
+720
+286
+1442
+43
+345
+19852
+21728
+6430
+9
+14079
+32
+377
+43
+213
+192
+2314
+21729
+736
+21730
+20
+19618
+21731
+14
+21732
+18283
+21733
+3546
+3045
+20
+46
+823
+15914
+736
+3546
+21734
+2197
+43
+43
+21735
+3546
+21736
+21737
+345
+19618
+971
+3995
+379
+21738
+2540
+6595
+7011
+178
+1157
+1047
+21739
+8501
+57
+4269
+21740
+38
+2
+7053
+21741
+21742
+21743
+19
+15718
+201
+590
+43
+21744
+21745
+21746
+176
+21747
+11995
+21748
+590
+21749
+1082
+16437
+21750
+9
+21751
+21752
+21753
+1224
+21754
+7137
+416
+7053
+188
+14
+2302
+21755
+13988
+21756
+19
+21757
+21758
+19
+80
+21759
+21760
+14986
+11762
+21761
+21762
+43
+665
+43
+21763
+21764
+424
+21765
+21766
+19618
+14
+21767
+2316
+21768
+19
+21769
+13266
+3324
+21770
+21771
+21772
+14477
+21773
+21774
+21775
+21776
+15220
+21777
+21778
+21779
+736
+3546
+5197
+21780
+21781
+15718
+14
+19585
+21782
+10913
+21783
+21784
+21785
+13150
+21786
+1107
+770
+13361
+1991
+21787
+21788
+15535
+21789
+21790
+19
+2734
+9
+16917
+2459
+4313
+21791
+11483
+16389
+3546
+317
+11754
+21792
+21793
+21794
+98
+9
+7045
+4185
+770
+21795
+19404
+21796
+5780
+3353
+21797
+21798
+21799
+21800
+21801
+21802
+14342
+3
+21803
+21804
+352
+21805
+1166
+21806
+155
+21807
+345
+155
+5169
+14
+16
+21350
+14
+4665
+21808
+21809
+155
+1578
+193
+7137
+6571
+18418
+21810
+583
+736
+19618
+19618
+3546
+15718
+415
+21811
+21812
+21813
+21814
+21815
+19304
+21816
+683
+1109
+590
+57
+3755
+2314
+22
+20586
+21817
+1542
+3546
+1021
+3546
+19404
+153
+20340
+188
+21818
+32
+9
+21819
+21820
+3546
+6095
+21821
+1961
+21822
+21823
+18047
+21824
+22
+213
+284
+19
+21825
+21826
+20
+76
+21827
+286
+21828
+21829
+35
+3546
+21830
+21831
+21832
+21833
+1612
+14856
+349
+21834
+43
+5438
+590
+21835
+21836
+19
+736
+10239
+6950
+1090
+155
+16619
+21837
+1817
+43
+35
+4414
+665
+18982
+19404
+248
+12118
+19
+18453
+19918
+20
+59
+21838
+809
+22
+8876
+8668
+349
+3546
+21839
+213
+16447
+21840
+2
+21841
+21842
+18695
+2039
+14
+21843
+20803
+164
+1208
+248
+303
+303
+15
+21844
+21845
+21846
+349
+1615
+21847
+155
+21848
+536
+21849
+43
+1384
+284
+21850
+14
+248
+3978
+345
+284
+21851
+14604
+14
+21852
+21853
+303
+19618
+178
+21854
+193
+15718
+3546
+590
+337
+337
+19
+21855
+736
+533
+209
+736
+213
+21856
+21857
+21858
+345
+179
+1364
+284
+21859
+19
+303
+213
+20888
+21860
+21861
+284
+1425
+590
+18695
+21862
+248
+21863
+21864
+1295
+1442
+3470
+5326
+21865
+4750
+491
+358
+9
+21866
+20
+3978
+10497
+21867
+34
+21868
+21869
+5083
+21870
+736
+21871
+5075
+14
+14
+15718
+6086
+322
+21872
+15939
+22
+11483
+21873
+21874
+248
+3216
+1481
+554
+590
+9
+590
+14660
+21875
+272
+21876
+222
+10
+14
+1529
+21877
+20952
+337
+21878
+1648
+16
+21879
+43
+270
+21880
+971
+21579
+3228
+7835
+4028
+21881
+1559
+43
+21882
+14240
+21883
+12864
+21884
+14299
+21885
+222
+15718
+21886
+21887
+21888
+590
+11482
+19413
+303
+14
+29
+1765
+12222
+651
+1217
+21889
+5755
+21890
+43
+21891
+5085
+6214
+138
+6841
+5561
+21892
+43
+21893
+21894
+20825
+80
+21895
+209
+21896
+12772
+13721
+99
+1066
+21897
+21898
+345
+21899
+10117
+21900
+646
+21901
+2804
+7137
+590
+21902
+14
+21903
+154
+1082
+21904
+21905
+21906
+17112
+21907
+21908
+21909
+21910
+21911
+823
+5780
+17136
+790
+57
+21912
+18683
+736
+19618
+57
+13721
+21913
+9804
+3858
+590
+57
+21914
+1566
+21915
+21916
+21917
+14369
+32
+13748
+21918
+1189
+21919
+21920
+345
+424
+21921
+14
+13721
+43
+21922
+3452
+1442
+155
+2655
+13721
+21923
+590
+21855
+9900
+2577
+16981
+1208
+9
+19119
+21924
+21925
+19655
+9
+8351
+21926
+10
+1056
+21927
+201
+25
+4414
+21928
+21929
+590
+19
+19
+19618
+590
+21930
+11683
+19
+21931
+21932
+21933
+13721
+15718
+345
+3546
+4651
+20
+21934
+43
+590
+10287
+8210
+2537
+43
+21935
+16437
+19404
+21936
+21937
+21938
+19618
+21939
+533
+15718
+21940
+14
+43
+21941
+770
+1559
+349
+18418
+13045
+112
+20
+21942
+646
+21943
+21944
+36
+21945
+573
+21946
+21947
+14
+201
+14
+651
+1765
+2314
+9
+32
+15718
+915
+21948
+4028
+14
+21949
+21950
+19852
+590
+1134
+1310
+6877
+19618
+20572
+590
+5719
+15141
+9
+250
+590
+1481
+21951
+2324
+19852
+823
+21952
+554
+21953
+19655
+286
+590
+21954
+13803
+15649
+21955
+115
+10
+7172
+17277
+373
+683
+21956
+1049
+21957
+14
+20
+21958
+21959
+1536
+6997
+21960
+57
+21961
+590
+2419
+13721
+21947
+5197
+21962
+5085
+4634
+2
+21963
+3546
+6950
+21964
+21965
+21966
+21967
+822
+21968
+18327
+13411
+21969
+317
+7053
+14629
+10
+3270
+7053
+19342
+20600
+6877
+21970
+21971
+21972
+57
+3086
+5839
+3095
+9837
+21973
+188
+21974
+17635
+2358
+21975
+19
+21976
+4873
+16437
+17749
+21689
+13570
+21947
+15718
+12053
+21977
+21978
+568
+19618
+19
+16437
+1508
+590
+14
+21979
+21980
+6341
+43
+21981
+19618
+345
+21982
+43
+19
+14
+868
+196
+19618
+1817
+209
+11471
+1612
+21983
+172
+2035
+736
+9
+345
+357
+155
+590
+349
+21373
+21984
+155
+19500
+21985
+21986
+345
+1912
+19618
+573
+3548
+9
+21987
+797
+21988
+10789
+21947
+14001
+21989
+15718
+286
+736
+4028
+1300
+8334
+2372
+3546
+2260
+21990
+21991
+736
+736
+2733
+43
+4364
+19
+21992
+5085
+14
+21993
+21994
+3546
+21995
+345
+21996
+155
+683
+14477
+38
+21997
+43
+21998
+19472
+21999
+736
+736
+7053
+14
+22000
+22001
+7032
+22002
+22003
+14
+686
+19
+22004
+648
+590
+43
+22005
+16437
+22006
+272
+22
+21631
+134
+1481
+22007
+9
+827
+5438
+3978
+22008
+345
+19
+3296
+22009
+10791
+19618
+21947
+43
+15461
+1542
+22010
+43
+22011
+9
+9
+12005
+22012
+887
+1765
+19404
+22013
+14
+14604
+21947
+22014
+57
+12788
+15220
+22015
+22016
+4
+21681
+11282
+19
+4
+12166
+2734
+22017
+3546
+590
+21698
+22018
+22019
+21776
+14
+22020
+13564
+345
+2
+22021
+155
+22022
+22023
+15595
+164
+22024
+57
+21088
+22025
+16205
+862
+9
+22026
+53
+22027
+3546
+22028
+57
+22029
+4388
+22030
+22031
+104
+8244
+1425
+22032
+22033
+22034
+80
+2289
+22035
+21689
+14363
+15718
+22036
+1604
+38
+823
+5083
+22037
+14
+21947
+22038
+2234
+21947
+22039
+19
+590
+936
+345
+2197
+6776
+22040
+22041
+15718
+17515
+16609
+32
+22042
+22043
+48
+22044
+137
+8307
+14
+590
+22045
+21315
+2935
+22046
+15718
+22047
+22048
+3546
+872
+22049
+554
+22050
+7717
+2
+590
+22051
+590
+22
+22052
+9688
+13721
+22053
+5780
+22054
+357
+1310
+22055
+4
+22056
+284
+19
+35
+19
+19
+519
+19
+248
+22057
+16437
+590
+22058
+14477
+2476
+1870
+20555
+3546
+22059
+22060
+13361
+11321
+1961
+2561
+16437
+19
+22061
+19
+13721
+22062
+22063
+16693
+21689
+1049
+58
+21947
+22064
+3546
+6741
+1696
+22065
+3598
+284
+248
+9
+590
+14
+14
+22066
+22067
+590
+13529
+1109
+22068
+21947
+22069
+590
+16484
+213
+22070
+22071
+4055
+22072
+22073
+22074
+19939
+22075
+20199
+590
+3546
+736
+22076
+19655
+17571
+22077
+303
+80
+13675
+22078
+11471
+8351
+7716
+9
+736
+22079
+1047
+14
+22080
+46
+18209
+22081
+7078
+3546
+303
+21947
+8668
+500
+590
+365
+4502
+20
+2804
+22082
+43
+2064
+14001
+14363
+337
+228
+22083
+22084
+22085
+1013
+3546
+201
+8226
+250
+22086
+2640
+474
+22087
+22088
+6496
+43
+22089
+19618
+21947
+1559
+3
+1425
+1066
+358
+11321
+22090
+22091
+8668
+22092
+9
+22093
+22094
+22095
+14603
+155
+681
+840
+15718
+1181
+22096
+10407
+209
+269
+9
+3317
+554
+14477
+21947
+22097
+213
+595
+701
+21947
+209
+2550
+22098
+354
+22099
+22100
+20305
+590
+22101
+5457
+436
+21947
+8668
+14
+248
+155
+15718
+16844
+16443
+13150
+15
+2733
+201
+19
+22102
+22103
+590
+22104
+22105
+209
+22106
+19
+1091
+20803
+22107
+1160
+10
+317
+590
+22108
+22109
+19618
+4056
+14
+14000
+22110
+823
+4752
+22111
+484
+43
+24
+4414
+22112
+22113
+22114
+11685
+2764
+9705
+21776
+15476
+22115
+1710
+22116
+22117
+5085
+22118
+22119
+19404
+22120
+57
+2577
+11762
+43
+3353
+1208
+22121
+22122
+1352
+736
+57
+15
+22123
+22124
+12987
+22125
+155
+22126
+2733
+3875
+3684
+14
+2139
+13721
+22127
+22128
+671
+22129
+19
+22130
+2577
+22131
+869
+15
+22132
+6571
+736
+171
+22133
+1384
+707
+1502
+22134
+43
+764
+3
+14
+43
+12603
+169
+22135
+22136
+29
+3546
+77
+5204
+22137
+22138
+43
+22139
+4055
+21947
+3220
+196
+22140
+22141
+22142
+8297
+14
+43
+14603
+1680
+16234
+22143
+22144
+21947
+155
+22145
+36
+2911
+12588
+22146
+21947
+22147
+1605
+9
+19
+22148
+6612
+1199
+22149
+21947
+22150
+1332
+43
+19404
+22151
+21947
+349
+16826
+22152
+4174
+7137
+1863
+3546
+22153
+1384
+14604
+2476
+1181
+22154
+22155
+3601
+8668
+13961
+20
+89
+22156
+20
+22157
+22158
+21338
+8234
+4979
+22159
+22160
+21947
+694
+665
+16450
+2410
+22161
+13721
+14
+22162
+345
+250
+22163
+1300
+19218
+22164
+22165
+19
+519
+14
+21745
+5976
+7053
+736
+22166
+22167
+38
+20952
+554
+15718
+286
+22168
+14
+21778
+22169
+3553
+22015
+22170
+22171
+345
+7855
+8566
+2577
+22172
+3546
+671
+1011
+21689
+19618
+22173
+22174
+286
+22175
+11754
+1326
+22176
+22177
+18695
+377
+554
+22178
+21869
+736
+22179
+11212
+13566
+43
+286
+14
+590
+22180
+98
+22181
+22182
+22183
+19209
+22184
+22185
+17011
+1316
+22186
+590
+22187
+169
+14
+22188
+15718
+20
+22189
+5209
+22190
+22191
+22192
+209
+14856
+3546
+22193
+22194
+22195
+22196
+4028
+43
+1864
+286
+14604
+5780
+22197
+22198
+237
+19618
+4552
+1090
+43
+22199
+8214
+7747
+576
+21904
+1181
+43
+19
+22200
+22201
+16826
+22202
+32
+22203
+22204
+22205
+13493
+699
+19635
+22
+21947
+22206
+11341
+22207
+646
+1742
+19
+22208
+1853
+19618
+5344
+43
+14
+22209
+591
+22210
+2260
+22211
+2561
+14477
+4450
+13721
+19519
+590
+22212
+2035
+22213
+9095
+12404
+7835
+19618
+823
+22214
+19618
+43
+22215
+1112
+22216
+22217
+15583
+3995
+57
+22218
+19
+22219
+3601
+448
+14363
+19844
+1112
+22220
+8255
+22221
+14477
+9
+736
+22222
+736
+10
+910
+14
+155
+10392
+21947
+725
+2872
+16822
+22223
+15586
+22224
+22225
+1425
+43
+1013
+22226
+22227
+22228
+764
+22229
+22230
+22231
+43
+21947
+13721
+22232
+19
+22233
+19
+590
+19404
+2577
+22234
+22235
+57
+22236
+22237
+18982
+2577
+3470
+43
+22238
+19618
+22239
+519
+345
+1154
+736
+6095
+22240
+3172
+13721
+20058
+19
+590
+22241
+12300
+22242
+22243
+17670
+29
+19618
+7053
+590
+4650
+10
+43
+15718
+3330
+2577
+19
+22244
+1134
+8936
+286
+21031
+14
+2830
+931
+14420
+15044
+3369
+142
+21999
+13355
+22245
+22246
+15718
+736
+22247
+20572
+14604
+3546
+20679
+19618
+2790
+17464
+8668
+2042
+8351
+7037
+22248
+22249
+1364
+22250
+14
+14102
+19618
+22251
+43
+22158
+2449
+1559
+22252
+209
+22253
+43
+22254
+19
+1425
+22255
+22
+22256
+2415
+9194
+22257
+22258
+22259
+590
+22260
+19852
+22261
+2928
+22262
+720
+22263
+19404
+713
+19655
+590
+7379
+21698
+554
+22264
+43
+8188
+8297
+3601
+185
+18695
+3546
+7516
+8037
+201
+1563
+22265
+3546
+21947
+22266
+14482
+22267
+22268
+590
+22269
+613
+57
+155
+3657
+625
+22270
+22271
+20
+1066
+22272
+764
+2561
+21947
+18798
+14
+196
+22273
+22274
+22275
+22276
+21947
+22277
+21947
+14
+22278
+5773
+22279
+155
+11762
+3
+22280
+4028
+167
+379
+14856
+6096
+57
+2065
+15718
+2
+22281
+14603
+21338
+2
+1100
+16589
+22282
+22283
+22284
+590
+345
+1912
+338
+22285
+22286
+764
+22287
+823
+590
+15569
+20
+13943
+57
+3546
+21088
+22288
+3546
+5438
+19342
+22289
+17687
+345
+21947
+14
+14
+286
+4441
+22290
+15
+22291
+185
+22292
+14
+22293
+20
+22294
+22295
+2764
+22296
+22297
+21947
+19404
+736
+15324
+22298
+13721
+873
+21947
+1115
+22299
+21947
+22300
+13566
+2
+11471
+345
+155
+11762
+21947
+179
+22301
+22302
+4075
+17602
+2733
+22303
+8188
+1508
+21947
+16102
+14
+7242
+736
+22304
+19655
+22305
+137
+43
+43
+22306
+2
+22307
+3546
+13111
+22308
+22309
+15229
+14
+3546
+22310
+80
+14
+286
+4502
+1095
+6335
+8668
+15
+43
+2121
+22311
+18503
+286
+412
+22312
+22313
+11966
+15
+286
+22314
+11341
+22315
+15054
+253
+15054
+14524
+43
+8367
+2019
+21947
+22316
+7053
+2629
+19
+22317
+22318
+22319
+178
+2537
+5773
+20555
+22320
+9
+22321
+22322
+22323
+8021
+20877
+736
+554
+22324
+22325
+3546
+21947
+21947
+21947
+89
+13721
+22326
+1533
+2882
+19
+272
+43
+3559
+22327
+22328
+22329
+6766
+22330
+22331
+3546
+22332
+20616
+22333
+12987
+22334
+19618
+22335
+677
+22336
+349
+22337
+21689
+707
+8668
+590
+7855
+22338
+1529
+345
+22339
+22340
+89
+6766
+9
+22341
+9
+20991
+22342
+22343
+1011
+15683
+590
+140
+1051
+176
+20952
+22344
+12696
+13721
+2287
+21947
+19472
+1529
+165
+21947
+8297
+22345
+22346
+22347
+3546
+22348
+7137
+677
+22349
+14
+7137
+2
+242
+1364
+9389
+67
+21947
+22350
+22351
+22352
+22353
+22354
+22355
+21689
+22356
+16340
+5085
+43
+43
+22357
+4502
+43
+8668
+22041
+345
+14
+248
+22358
+10793
+22359
+22360
+22361
+665
+1571
+13260
+14
+22362
+167
+22363
+823
+22364
+22365
+21947
+22366
+16453
+19852
+1208
+590
+43
+736
+1961
+7053
+14532
+16437
+21947
+1112
+22367
+22368
+17340
+345
+19797
+1013
+29
+43
+823
+46
+9
+21947
+7053
+22369
+8220
+22370
+19404
+43
+172
+14
+22371
+19404
+22372
+228
+21947
+12584
+3546
+22373
+677
+22374
+21777
+9
+8508
+22375
+5039
+22376
+9
+12404
+20803
+8297
+19404
+915
+21889
+43
+22377
+590
+9
+237
+495
+15308
+1961
+22378
+20876
+2593
+9
+22379
+22380
+43
+720
+22381
+34
+22382
+22383
+3775
+15
+7137
+554
+22384
+345
+43
+98
+7183
+7176
+14
+15718
+590
+345
+38
+22385
+22386
+286
+22387
+590
+5780
+1423
+22388
+22389
+983
+2310
+22390
+1316
+155
+1169
+4756
+6560
+19655
+1976
+22391
+14
+590
+9024
+22392
+22393
+22394
+7835
+14477
+7174
+22395
+22396
+22397
+590
+915
+1696
+1214
+22398
+19404
+21031
+515
+22399
+1307
+22400
+21507
+14524
+872
+12596
+22401
+21947
+22402
+2537
+15
+15718
+22403
+22404
+22405
+825
+590
+43
+22406
+7855
+8458
+22407
+22408
+379
+22409
+19618
+21947
+22410
+22411
+9
+22412
+3978
+22413
+22414
+209
+15
+16378
+3546
+2795
+22415
+32
+22416
+22417
+20199
+1091
+3546
+14363
+22418
+22419
+22420
+6095
+22421
+590
+21689
+22422
+43
+22423
+3353
+22424
+15238
+32
+2577
+14363
+22425
+22426
+22427
+22428
+7855
+1834
+13721
+176
+19655
+22429
+21947
+2019
+14
+22430
+20199
+22065
+19618
+14
+3546
+514
+22431
+22432
+22433
+22434
+590
+736
+22435
+20952
+18045
+6939
+22308
+22196
+665
+17277
+1316
+7835
+14689
+22436
+586
+29
+677
+22437
+17247
+22438
+2
+19057
+16609
+22439
+22440
+415
+13721
+22441
+590
+736
+22442
+17920
+19655
+13375
+19793
+14
+8465
+1765
+6950
+20819
+22443
+22444
+22307
+22445
+13030
+19655
+22446
+22447
+13721
+15718
+32
+22448
+193
+22449
+9410
+43
+590
+3553
+3251
+22450
+22451
+2314
+22452
+5780
+345
+533
+736
+15
+22453
+3546
+155
+2410
+66
+4313
+3546
+13721
+736
+19
+22454
+14
+178
+809
+22455
+22456
+736
+22457
+14604
+1688
+22458
+22459
+1112
+19
+22460
+2514
+21776
+11754
+10004
+17151
+598
+22461
+10381
+345
+14025
+284
+15718
+872
+155
+7053
+14
+1559
+22462
+22463
+22464
+1203
+22465
+22466
+22467
+5764
+5314
+13721
+9
+14001
+18184
+19
+22468
+1745
+286
+18823
+358
+15718
+22469
+12220
+13474
+21045
+22470
+8668
+57
+590
+22471
+22472
+12864
+303
+32
+2135
+14477
+22473
+22474
+2459
+22475
+22476
+11934
+22477
+248
+22478
+22479
+736
+349
+43
+22480
+22481
+22482
+590
+121
+22483
+22484
+22485
+14603
+19119
+14
+14
+20228
+22486
+14
+7987
+286
+3192
+1234
+14
+22487
+248
+21107
+3416
+22488
+568
+21947
+14477
+22489
+5387
+736
+11428
+9
+22490
+213
+3978
+14603
+17470
+5502
+32
+17277
+14603
+4747
+10
+22491
+213
+14
+13721
+22492
+76
+337
+22493
+21947
+16826
+17302
+213
+9
+3421
+337
+176
+21947
+22494
+22495
+2064
+2356
+22496
+22497
+22498
+20708
+18047
+736
+22499
+345
+3546
+21947
+21947
+22500
+4
+5420
+21947
+590
+22501
+345
+1961
+14
+15718
+43
+736
+43
+20
+3407
+590
+21947
+155
+43
+22502
+22308
+22503
+201
+22504
+1559
+22505
+158
+22506
+554
+22507
+9
+13721
+5441
+22508
+22509
+43
+22510
+43
+1038
+22511
+303
+22512
+823
+11754
+22513
+5780
+21031
+43
+17412
+22514
+22515
+7053
+1820
+17871
+8668
+22
+22516
+590
+22517
+32
+2577
+14
+22518
+22519
+19655
+13721
+1442
+21947
+13150
+22520
+8961
+22521
+22522
+1060
+590
+13495
+17911
+22523
+22524
+22525
+22526
+12117
+22527
+15356
+21947
+22528
+286
+52
+2
+14179
+286
+14363
+22529
+22530
+22308
+19
+1508
+1696
+16826
+22012
+22531
+7053
+22532
+8094
+22533
+15207
+22534
+6171
+19624
+17062
+19655
+3546
+936
+22535
+22536
+43
+590
+22537
+15718
+323
+2310
+590
+22538
+22539
+9
+3
+399
+13150
+22540
+57
+22541
+13913
+868
+22542
+3546
+19618
+590
+323
+19618
+13721
+286
+19939
+5780
+22420
+19618
+15718
+3546
+21947
+1508
+21947
+22543
+248
+22544
+15718
+14
+22545
+790
+9123
+1423
+4502
+345
+18045
+5085
+22546
+22547
+22548
+5344
+4
+22549
+22550
+153
+43
+4765
+2035
+7053
+14
+2593
+301
+22551
+22552
+2804
+22553
+1180
+43
+1514
+57
+99
+18882
+22554
+345
+57
+349
+19995
+22555
+5080
+5601
+57
+3978
+323
+22556
+665
+43
+22557
+1115
+15718
+22558
+43
+337
+21947
+22559
+22560
+35
+16258
+10
+22561
+13721
+1090
+345
+14079
+5908
+19618
+14343
+1961
+14
+272
+17608
+590
+411
+19618
+22562
+19
+16437
+22563
+19404
+19220
+22564
+22565
+2
+14
+20
+22566
+16437
+22567
+43
+10245
+15
+22568
+22569
+4403
+2851
+6468
+2818
+14808
+872
+2015
+713
+7991
+2579
+7291
+21947
+22570
+6372
+9
+597
+25
+2694
+22571
+586
+22572
+22573
+1666
+22268
+14856
+2577
+22574
+43
+22575
+14
+19852
+3546
+22576
+22577
+22578
+536
+22579
+22580
+22581
+19
+1364
+19
+22582
+22583
+19740
+46
+22584
+22585
+736
+14477
+9
+22586
+20555
+19618
+1048
+13721
+155
+18038
+19838
+3452
+13721
+22587
+22588
+222
+22589
+22
+398
+2446
+286
+22590
+8685
+22591
+3908
+823
+17136
+57
+303
+16992
+16443
+1415
+22592
+3491
+22593
+22594
+272
+14477
+19618
+22595
+12404
+6122
+201
+22596
+20765
+519
+1914
+303
+43
+2919
+15
+57
+22597
+398
+3484
+43
+590
+590
+14
+19618
+201
+22598
+5100
+14
+647
+21107
+16826
+17267
+18517
+823
+3553
+770
+10
+22599
+22600
+22601
+464
+225
+22602
+43
+1011
+57
+22603
+19
+22604
+1524
+284
+1224
+22605
+18503
+43
+284
+14
+43
+22606
+22607
+286
+22608
+345
+15718
+22609
+29
+7835
+14604
+22610
+286
+22611
+213
+17855
+22612
+14
+22613
+22614
+2316
+43
+16437
+1442
+22615
+22616
+4441
+22617
+22618
+303
+519
+22619
+43
+15845
+155
+736
+345
+9
+349
+22620
+677
+590
+22621
+12404
+22622
+10
+22623
+22624
+15881
+590
+16899
+590
+12858
+4907
+8668
+22625
+16798
+22626
+548
+17859
+345
+14
+18686
+1287
+647
+22627
+22628
+43
+21053
+22629
+399
+590
+22630
+10999
+4441
+22631
+22632
+13721
+21947
+15718
+2769
+22633
+22634
+823
+21947
+22635
+22636
+209
+2
+188
+345
+8981
+18978
+7577
+20575
+284
+303
+345
+1222
+22637
+19618
+22638
+18896
+22639
+6095
+22640
+22641
+22268
+15645
+2
+20
+179
+22642
+1048
+17136
+345
+14477
+22643
+21947
+43
+10318
+3546
+38
+8351
+8355
+19
+22644
+22645
+22308
+9
+6877
+1696
+2446
+22646
+590
+1823
+16975
+22647
+21947
+15951
+11822
+590
+22648
+1300
+349
+1605
+22649
+22650
+15718
+276
+15914
+21947
+14
+22651
+46
+22652
+22653
+14420
+21947
+590
+19404
+337
+2561
+22654
+21689
+22655
+201
+484
+2
+248
+22656
+19404
+10
+270
+22657
+22658
+6741
+279
+345
+14604
+22659
+22660
+22661
+345
+20555
+22662
+8351
+554
+6776
+19
+12404
+21947
+17404
+519
+13807
+43
+590
+1927
+22663
+1531
+22664
+9
+5117
+1226
+11321
+590
+2756
+22665
+22666
+57
+303
+345
+337
+22667
+22668
+43
+16947
+3491
+22669
+22670
+286
+43
+22671
+22672
+35
+2356
+9837
+436
+22673
+6505
+671
+22674
+286
+22675
+8668
+16322
+2015
+22676
+22677
+22678
+22679
+13700
+43
+538
+22680
+12684
+22681
+7053
+590
+19618
+5780
+2577
+43
+9
+16437
+9
+683
+21947
+22682
+740
+22683
+11762
+286
+5119
+18869
+43
+155
+1203
+22684
+5780
+22685
+7276
+60
+590
+22686
+1955
+32
+10230
+22687
+323
+22688
+303
+1423
+2768
+21889
+349
+20
+284
+22689
+590
+7379
+2
+1577
+22690
+823
+3546
+6096
+43
+736
+57
+541
+22028
+3546
+19618
+1013
+10782
+1739
+22691
+57
+196
+15718
+22692
+22693
+22694
+43
+6496
+1465
+2310
+1091
+15690
+20
+43
+18257
+22695
+20
+43
+2550
+358
+411
+448
+13721
+7053
+22696
+22697
+209
+284
+22698
+17956
+13721
+22699
+849
+495
+12152
+14
+345
+30
+22700
+14
+22701
+21694
+590
+345
+21947
+3
+8246
+22702
+9
+20
+22703
+20132
+9
+7585
+541
+22704
+5085
+373
+22705
+823
+155
+32
+272
+6950
+22706
+7855
+19
+16102
+13578
+22707
+22708
+22709
+98
+4827
+2035
+11762
+22710
+22711
+14477
+22712
+22713
+22714
+6496
+3546
+6114
+19136
+14
+22715
+6518
+14
+22716
+20572
+1637
+13452
+14
+22717
+57
+22718
+331
+22719
+22720
+21947
+43
+22721
+22722
+18792
+22723
+22724
+15718
+22725
+344
+2764
+57
+32
+77
+14604
+22726
+959
+823
+1765
+590
+19655
+22727
+14
+3866
+21947
+2577
+22728
+21689
+9
+19852
+21947
+9
+4502
+286
+22729
+22730
+14
+22731
+2
+2
+1082
+3601
+823
+19
+22732
+15
+22
+22268
+21947
+22733
+22734
+2260
+22735
+19618
+3546
+13721
+22268
+19655
+1720
+720
+25
+32
+1792
+286
+519
+22736
+22737
+21947
+21331
+22738
+2
+11482
+22739
+21947
+15718
+3601
+590
+590
+1364
+1648
+22740
+8668
+1203
+22741
+22742
+9738
+18064
+22743
+15718
+22744
+22745
+43
+10274
+9
+18695
+19266
+2009
+18798
+13721
+1765
+5791
+19618
+15720
+22746
+278
+22747
+9
+22748
+22749
+19229
+9563
+22750
+20499
+22308
+22751
+22752
+19618
+345
+19618
+22753
+22754
+22755
+790
+22756
+22757
+14856
+18484
+21947
+22758
+22759
+19618
+5267
+1559
+22760
+43
+10848
+7624
+9
+2790
+397
+1229
+18512
+5085
+20657
+19
+22761
+19618
+18896
+22762
+1991
+22763
+1524
+22764
+13801
+22765
+22766
+22767
+19970
+5489
+22768
+13405
+590
+9
+19618
+12230
+14477
+1234
+19491
+263
+22769
+3546
+1364
+22770
+21947
+22771
+358
+22772
+1571
+43
+22773
+249
+4684
+2744
+29
+22774
+60
+15914
+1559
+286
+8249
+22775
+10848
+265
+22776
+15167
+22777
+22778
+7046
+3546
+22599
+14
+19
+15618
+22779
+554
+13179
+20
+85
+2259
+286
+22780
+8668
+2577
+3978
+1352
+736
+2733
+397
+5438
+22781
+1051
+22782
+1423
+188
+5197
+5773
+22783
+22784
+22785
+15
+14079
+15031
+178
+736
+770
+22786
+519
+22787
+21947
+19655
+10790
+22788
+22789
+5299
+22790
+1107
+345
+2243
+137
+22791
+19
+22792
+21947
+19655
+1109
+19
+9
+16
+21947
+22793
+17973
+2
+21947
+22794
+22795
+35
+9837
+22796
+2
+43
+22797
+22798
+2697
+4125
+3546
+5085
+22799
+22800
+188
+1612
+11822
+22801
+13508
+9913
+22802
+590
+22803
+22804
+22805
+22806
+4765
+22807
+14
+22808
+736
+11509
+1423
+345
+14079
+22809
+15718
+4367
+22810
+22811
+57
+15914
+286
+21947
+22812
+19852
+373
+22813
+13721
+22814
+22815
+22816
+22817
+19160
+22818
+14
+19792
+822
+7835
+155
+349
+22819
+22820
+345
+22821
+10137
+32
+2040
+2577
+21947
+22822
+1553
+20
+18047
+22823
+155
+13721
+21947
+3067
+14
+155
+15
+22824
+22825
+1812
+22826
+345
+2577
+7451
+992
+22827
+22828
+22829
+1157
+10146
+590
+1214
+21947
+590
+22830
+80
+22831
+1112
+5650
+2042
+736
+22832
+21947
+22833
+22
+176
+21841
+22834
+22835
+13143
+7256
+21947
+18683
+32
+22836
+43
+6480
+590
+8508
+4990
+1109
+11029
+7053
+22837
+22838
+19618
+99
+22839
+345
+20
+15718
+22840
+936
+22841
+3978
+14524
+8999
+349
+22842
+345
+3546
+19618
+22843
+22844
+484
+597
+12194
+22845
+10031
+345
+137
+43
+22846
+19
+22847
+22308
+7855
+464
+3543
+43
+265
+32
+22
+22848
+22849
+13721
+15824
+22850
+22851
+14276
+22852
+19618
+16695
+22853
+17385
+16402
+915
+4906
+5599
+19618
+736
+6627
+59
+46
+43
+5326
+286
+2577
+22124
+22854
+22855
+22856
+590
+9143
+16437
+5649
+22857
+22858
+22859
+272
+14
+345
+22860
+43
+213
+213
+22861
+590
+21947
+22862
+15068
+736
+21947
+22863
+89
+22864
+10737
+2694
+14604
+9
+2410
+22865
+665
+22866
+18896
+21947
+713
+736
+22867
+19160
+21030
+345
+22868
+4227
+5780
+22869
+284
+286
+9
+22870
+22871
+22872
+8465
+2310
+14363
+213
+9
+22873
+17790
+3546
+20942
+22874
+19737
+22875
+915
+9
+22876
+138
+22877
+22878
+1559
+272
+823
+22879
+22420
+22880
+22881
+22882
+22883
+590
+1290
+22884
+2804
+14
+9
+2000
+22885
+484
+18951
+22886
+1090
+770
+248
+19
+22308
+22887
+22888
+22268
+6883
+13528
+21689
+115
+2415
+43
+7835
+22889
+14
+4313
+18798
+22890
+1901
+21947
+14
+22891
+22892
+22893
+14
+19618
+590
+22894
+14
+19618
+5837
+20572
+10
+9
+1091
+770
+538
+379
+19
+590
+20
+43
+22895
+4364
+22896
+19792
+22897
+11480
+5780
+22898
+19618
+13721
+22899
+736
+590
+19852
+57
+10256
+590
+8849
+22900
+15167
+13721
+8566
+14404
+14477
+22901
+345
+22902
+14477
+21947
+1385
+6950
+22903
+22904
+8393
+15718
+35
+845
+19618
+286
+4808
+22905
+3095
+3546
+2260
+694
+7231
+13721
+22906
+7364
+22907
+43
+22908
+22909
+2314
+155
+15718
+20
+345
+554
+22910
+10151
+3291
+1082
+22911
+533
+22912
+1012
+2804
+22865
+5791
+22913
+11754
+22914
+22915
+1920
+3544
+22916
+14477
+4414
+43
+43
+22917
+98
+22918
+22919
+14
+3435
+22920
+648
+20949
+736
+22921
+22922
+20803
+19
+3546
+9
+303
+22923
+22924
+19
+736
+3406
+138
+19618
+337
+12621
+22925
+17466
+22926
+5085
+590
+9156
+22927
+3546
+616
+8249
+22928
+3546
+22929
+9578
+14604
+43
+22930
+19404
+66
+20572
+22931
+22407
+15419
+22932
+22933
+590
+764
+53
+22934
+519
+22935
+365
+13721
+736
+5725
+18061
+284
+19478
+9410
+22936
+19
+32
+21947
+554
+590
+22937
+764
+19
+349
+14363
+24
+22938
+22939
+4441
+21947
+616
+22940
+22941
+19618
+2243
+18448
+590
+15914
+22942
+1437
+712
+22943
+22944
+286
+22945
+58
+712
+248
+8103
+14679
+1716
+21947
+1943
+22946
+114
+22947
+3546
+1606
+19
+11754
+22948
+4263
+15989
+19618
+16102
+22949
+22950
+19618
+22951
+19
+337
+1612
+19206
+19618
+8566
+17687
+3553
+22855
+43
+19618
+730
+2253
+15718
+1021
+22952
+17043
+22953
+274
+22954
+21693
+14
+1310
+345
+22955
+15973
+22956
+22957
+303
+14770
+196
+19
+19852
+22958
+7137
+21947
+17553
+3291
+44
+303
+21947
+22959
+22960
+1082
+4502
+10239
+5476
+22961
+13721
+2834
+3546
+19
+736
+14
+345
+29
+19655
+22962
+22963
+5215
+22964
+209
+590
+22965
+22409
+22966
+590
+222
+22967
+18345
+533
+4518
+32
+915
+14001
+22968
+4683
+1100
+1605
+22969
+736
+2419
+43
+22970
+7835
+533
+597
+15623
+1503
+14604
+19
+345
+873
+1289
+66
+57
+22971
+19
+4278
+22972
+19
+3626
+915
+9
+22973
+22974
+19797
+5764
+9986
+22975
+6883
+22976
+57
+19618
+14
+21947
+22977
+3546
+11321
+2926
+736
+500
+3546
+222
+21947
+21947
+16024
+22978
+22979
+3276
+17112
+8668
+736
+22980
+22981
+22982
+60
+22983
+22984
+22985
+22986
+22987
+9
+15718
+22988
+22989
+538
+22990
+7835
+20390
+22991
+14
+1115
+43
+29
+286
+19
+12743
+19924
+22992
+22993
+22994
+4441
+7053
+9
+18440
+22995
+761
+19489
+22996
+22997
+22998
+5780
+3626
+3546
+22999
+142
+23000
+23001
+23002
+286
+15
+3546
+23003
+23004
+14603
+286
+3491
+13721
+21947
+17799
+16437
+23005
+23006
+43
+303
+23007
+13168
+323
+3973
+379
+14477
+23008
+827
+23009
+22308
+23010
+1012
+23011
+1612
+665
+16826
+43
+23012
+2243
+720
+16981
+23013
+7835
+23014
+23015
+12916
+23016
+248
+284
+284
+1905
+46
+590
+590
+209
+2577
+23017
+23018
+19965
+23019
+19
+823
+590
+15718
+354
+412
+10338
+23020
+18882
+19
+15
+35
+21045
+15068
+1513
+23021
+19
+19618
+1688
+23022
+21947
+23023
+22
+15718
+23024
+2983
+337
+20280
+284
+19918
+11192
+13721
+284
+16477
+11274
+22268
+345
+12987
+8460
+3816
+671
+4808
+23025
+249
+286
+23026
+213
+6095
+14
+15513
+23027
+23028
+15
+23029
+1442
+19655
+19404
+23030
+1356
+1513
+23031
+12560
+6766
+32
+23032
+21947
+23033
+272
+9396
+23034
+23035
+338
+2459
+22922
+284
+7032
+14
+23036
+736
+1765
+337
+23037
+21947
+8255
+590
+248
+23038
+23039
+248
+2
+590
+23040
+250
+8566
+23041
+10781
+11762
+23042
+1870
+137
+23043
+590
+21947
+57
+16437
+32
+745
+5990
+10063
+7444
+2790
+2135
+43
+21947
+19965
+15718
+57
+3546
+23044
+9
+721
+23045
+213
+23046
+23047
+32
+19
+23048
+2
+13908
+15496
+11754
+3546
+98
+23049
+23050
+23051
+23052
+23053
+23054
+18695
+2197
+14
+19618
+23055
+286
+590
+23056
+15845
+19
+1698
+14477
+23057
+23058
+13570
+514
+23059
+23060
+23061
+7208
+23062
+1021
+23063
+23064
+43
+43
+23065
+286
+1559
+23066
+9
+13721
+8188
+9
+23067
+18744
+736
+7666
+23068
+155
+14
+345
+23069
+23070
+23071
+3551
+32
+286
+23072
+720
+5085
+23073
+736
+240
+2008
+23074
+2042
+19
+2476
+23075
+5119
+23076
+910
+1529
+21947
+23077
+1172
+349
+12337
+1100
+23078
+18695
+6449
+23079
+16
+9
+2260
+8188
+23080
+6786
+736
+23081
+23082
+590
+19
+23083
+13801
+23084
+15718
+109
+736
+19618
+23085
+23086
+43
+13721
+286
+14
+11283
+3601
+23087
+23088
+8668
+1090
+590
+23089
+12531
+9
+3546
+2561
+20
+18792
+823
+1386
+23090
+23091
+2561
+2026
+20087
+35
+14
+338
+23092
+345
+8297
+4441
+9
+345
+23093
+286
+21947
+32
+23094
+3601
+23095
+23096
+23097
+790
+11321
+1300
+713
+23098
+533
+20442
+23099
+17903
+4166
+9
+15
+2309
+21947
+23100
+23101
+10
+23102
+23103
+23104
+2
+3543
+23105
+1082
+22236
+14
+23106
+23063
+11762
+16178
+15720
+2260
+21947
+9
+2944
+23107
+764
+23108
+19618
+14343
+10163
+286
+23109
+23110
+23111
+1310
+4634
+554
+23112
+21947
+349
+1051
+586
+9788
+386
+3946
+18503
+23113
+23114
+12307
+18503
+1169
+398
+1051
+345
+590
+43
+19456
+23115
+345
+86
+590
+17360
+96
+250
+23116
+23117
+14477
+1181
+707
+23118
+13721
+43
+32
+137
+21689
+23119
+23120
+23121
+89
+21947
+21947
+7053
+23122
+274
+43
+915
+23123
+590
+23124
+519
+23125
+23126
+5611
+9
+53
+23127
+1524
+13754
+23128
+21947
+6571
+23129
+23130
+1425
+23131
+43
+1688
+349
+23132
+590
+1765
+19
+3546
+155
+179
+9410
+1190
+317
+9
+23133
+23134
+23135
+17670
+12402
+23136
+1356
+9577
+18807
+12479
+20952
+23137
+349
+23138
+645
+3978
+19618
+23139
+23140
+23141
+23142
+1559
+19
+11341
+10
+23143
+14
+5326
+23144
+23145
+5110
+12203
+23146
+23147
+14
+590
+23148
+15718
+3601
+3649
+20785
+155
+23149
+3544
+1605
+23150
+19
+3546
+868
+23151
+23152
+23153
+14477
+586
+1051
+23154
+23155
+1224
+6095
+14
+57
+590
+736
+3546
+23156
+8566
+57
+3546
+1095
+46
+19
+21947
+209
+23157
+9
+23158
+590
+23159
+23160
+3385
+23161
+23162
+683
+16826
+2
+18862
+23163
+1052
+23164
+590
+4677
+21689
+720
+19404
+23165
+23166
+2
+377
+5099
+19618
+736
+9
+23167
+2121
+590
+32
+736
+1382
+379
+3546
+14342
+274
+23168
+20803
+23169
+14
+178
+560
+23170
+23171
+18695
+23172
+19
+22
+1612
+590
+22474
+14604
+2414
+16437
+823
+3546
+43
+23173
+23174
+19
+2577
+7137
+8297
+14
+15810
+23175
+21031
+14693
+345
+23176
+19795
+18978
+209
+832
+20803
+2
+249
+14621
+23177
+590
+23178
+1310
+736
+23179
+23180
+3553
+43
+1710
+13721
+57
+9422
+14
+21947
+43
+23181
+16
+22
+1517
+23182
+7940
+9
+19095
+11522
+23183
+809
+23184
+23185
+23186
+23187
+32
+1593
+3034
+23188
+23189
+32
+736
+15914
+15
+23190
+3546
+23191
+23192
+20
+2
+23193
+9
+23194
+1149
+2
+21947
+5780
+23195
+23196
+32
+616
+22282
+23197
+23198
+1847
+286
+250
+23199
+201
+23200
+21947
+222
+23201
+12005
+790
+23202
+827
+23203
+14
+15471
+573
+11
+703
+23204
+43
+23205
+399
+19618
+9
+43
+23206
+736
+3559
+590
+2234
+2061
+16437
+18503
+823
+57
+23207
+272
+23208
+7208
+23209
+6480
+23210
+22057
+1812
+23211
+57
+345
+9
+155
+32
+590
+23212
+377
+23213
+8668
+365
+14
+23214
+5218
+4441
+20
+1698
+21947
+20555
+43
+21947
+23215
+272
+20373
+3546
+23216
+2476
+9
+19
+23217
+286
+20864
+9
+14814
+2550
+1332
+23218
+43
+8392
+18798
+15718
+14477
+23219
+35
+20616
+15718
+23220
+23221
+23222
+19
+7835
+370
+19404
+4816
+23223
+1517
+19618
+23224
+23225
+23226
+16102
+23227
+590
+14001
+18695
+3119
+16825
+9
+23228
+357
+23229
+14
+842
+43
+823
+323
+286
+32
+23230
+23231
+23232
+23233
+3
+345
+1992
+43
+13721
+43
+971
+15
+23234
+7945
+12120
+23235
+23208
+23236
+13721
+16437
+822
+43
+2
+23237
+23238
+1513
+23239
+9
+14477
+23240
+20085
+23241
+8392
+23242
+8476
+23243
+23244
+14
+19618
+13207
+23245
+22618
+23246
+19
+23247
+23248
+23249
+9
+23250
+23251
+7167
+14343
+11551
+23252
+3546
+9
+23103
+3
+23253
+23254
+23255
+18376
+1823
+19404
+19
+1051
+14
+23256
+286
+590
+613
+16121
+43
+23257
+23258
+2249
+23259
+19
+23260
+736
+19618
+23261
+14001
+683
+60
+21689
+5614
+9939
+43
+23262
+5757
+3546
+590
+43
+1867
+590
+35
+720
+13721
+23263
+11209
+21627
+19335
+5851
+13721
+23264
+23265
+13484
+23266
+13721
+23267
+14
+21947
+23268
+15
+558
+43
+13150
+19404
+22041
+23269
+23270
+15
+23271
+15914
+7962
+23272
+15541
+15167
+6354
+590
+15718
+23273
+23274
+17571
+23275
+1051
+23226
+349
+19618
+5022
+155
+142
+23276
+23277
+18778
+736
+9
+286
+155
+23278
+23279
+19143
+23280
+23281
+15718
+647
+23282
+23111
+10
+23283
+1716
+4775
+358
+201
+541
+265
+23284
+17698
+13638
+23285
+5780
+915
+23286
+23287
+5085
+23288
+43
+3546
+23289
+23290
+809
+21791
+23291
+23292
+14363
+23293
+1116
+9
+13375
+23294
+23295
+1100
+23296
+1739
+43
+21947
+23297
+14846
+23298
+3546
+23299
+736
+23300
+23301
+2577
+21535
+19
+20
+349
+2035
+23302
+23303
+19618
+9
+1765
+23304
+5085
+2625
+5820
+18914
+265
+12005
+3002
+20
+89
+2410
+5410
+19655
+23063
+43
+23305
+23306
+590
+3546
+23307
+5837
+23308
+23309
+3787
+345
+201
+23310
+23311
+201
+1559
+23312
+14
+23313
+349
+349
+21947
+23314
+3543
+23315
+19091
+590
+23316
+4765
+21947
+23317
+1332
+18003
+10791
+19618
+22276
+23318
+9
+5627
+23319
+23320
+38
+3546
+6533
+23321
+23322
+23323
+15595
+2260
+23324
+3325
+23325
+201
+736
+17571
+1834
+23326
+23327
+23328
+17815
+14122
+872
+21947
+590
+32
+122
+3
+1696
+12067
+23329
+20
+23330
+23331
+2
+222
+23332
+14
+4292
+13721
+736
+19618
+155
+23333
+23334
+23335
+23336
+23337
+21947
+23338
+23339
+286
+2243
+11735
+5085
+692
+23340
+23341
+23342
+5326
+342
+32
+10349
+23343
+23344
+23345
+35
+23346
+1012
+989
+3601
+15483
+590
+23347
+23348
+317
+23349
+32
+179
+3559
+538
+23350
+554
+14856
+43
+3546
+1056
+23351
+21947
+484
+357
+23352
+19
+19
+21689
+3598
+590
+13412
+23353
+823
+23354
+23355
+21947
+736
+23356
+6341
+20776
+23357
+43
+19965
+13721
+17380
+46
+23358
+23359
+3155
+23360
+10946
+23361
+1716
+43
+272
+23362
+10356
+23363
+155
+13361
+9591
+23364
+21947
+11364
+14846
+19
+22865
+19792
+1423
+23365
+14
+15
+89
+8149
+13721
+13721
+101
+736
+14
+57
+13721
+21669
+140
+23366
+19
+23367
+15914
+15442
+17871
+57
+19618
+23368
+23369
+14
+23370
+3958
+12359
+209
+9
+13721
+20
+23371
+21947
+4263
+590
+19404
+573
+23372
+23373
+23374
+12534
+19618
+3030
+13721
+13976
+23375
+23376
+4824
+7379
+21689
+2
+23377
+14604
+23378
+21947
+23379
+3759
+554
+586
+590
+3
+43
+10
+9
+21947
+23380
+23381
+23382
+23383
+3546
+21947
+23384
+21031
+23385
+8460
+3638
+19404
+14
+22688
+416
+14
+23386
+23387
+23388
+43
+17809
+23389
+424
+21947
+23390
+10
+23391
+9
+43
+89
+23392
+23393
+4775
+21947
+9
+19
+23394
+23395
+23396
+2243
+23397
+23398
+9
+1696
+4764
+23399
+15824
+3543
+23400
+185
+21947
+21199
+1038
+23401
+43
+4441
+2459
+19
+5271
+823
+21947
+8855
+20
+1566
+155
+14363
+19
+19
+8356
+23402
+23403
+23404
+23405
+4702
+23406
+349
+554
+14
+23407
+4741
+9953
+14
+1316
+23408
+590
+3492
+23409
+32
+20
+23410
+21947
+15718
+3446
+712
+14
+286
+736
+2694
+19
+23411
+9118
+14
+6877
+590
+13721
+20952
+23412
+9
+23413
+9210
+590
+23414
+29
+12987
+16981
+43
+286
+1157
+12067
+590
+590
+12987
+23415
+1559
+188
+640
+23416
+43
+14
+14
+533
+10
+7291
+1529
+155
+23417
+7137
+23418
+3553
+20185
+349
+14420
+21947
+18982
+23419
+1465
+3546
+19
+736
+23420
+46
+23421
+21947
+23422
+4824
+19
+23423
+2
+15718
+23424
+23425
+23426
+7032
+23427
+9630
+5041
+286
+23428
+590
+1716
+337
+112
+19
+23429
+32
+19091
+23430
+345
+22042
+21947
+3473
+590
+23431
+6430
+3005
+19618
+13721
+14
+23432
+57
+43
+1870
+8789
+23433
+809
+178
+323
+23434
+22420
+331
+19
+178
+23417
+21947
+23435
+2804
+23436
+379
+23437
+23438
+23439
+25
+7053
+23440
+3059
+19918
+12845
+23441
+590
+23442
+9871
+4441
+8849
+179
+936
+23443
+590
+23444
+736
+137
+23445
+13129
+23446
+590
+736
+22010
+23314
+23447
+9
+13343
+1559
+2042
+12934
+5085
+736
+23448
+671
+23449
+23450
+768
+4296
+43
+23451
+1107
+23452
+683
+23453
+6571
+15718
+17466
+23454
+57
+4544
+19984
+23063
+379
+3543
+19404
+23455
+23456
+19
+2975
+6766
+14
+10737
+12307
+176
+23457
+23458
+683
+19413
+9396
+7291
+5780
+23459
+23460
+23461
+137
+23462
+19
+6055
+736
+21947
+736
+20952
+22587
+21947
+3251
+7053
+23226
+9
+823
+23463
+34
+665
+23464
+5085
+23465
+19
+32
+18995
+23466
+23467
+16780
+23468
+23469
+286
+23470
+19618
+14
+23471
+23472
+13049
+11966
+23473
+764
+18045
+23474
+23475
+23476
+20245
+19
+23477
+1559
+20785
+9177
+43
+23478
+23479
+23480
+1090
+1316
+18956
+590
+14
+23481
+6038
+15718
+23482
+259
+19
+43
+19618
+13566
+12976
+1091
+104
+495
+23483
+23484
+23485
+164
+3034
+16437
+23486
+272
+35
+5973
+23487
+416
+823
+23488
+23489
+2
+23490
+43
+720
+21947
+14
+23491
+23492
+21947
+23493
+201
+6571
+849
+590
+23494
+10028
+222
+14
+16437
+21947
+1013
+57
+15039
+736
+11995
+23495
+23496
+6011
+23497
+23498
+19
+23499
+23500
+23501
+1082
+22
+250
+19
+19
+23502
+23503
+155
+936
+23504
+16437
+590
+23505
+345
+23506
+19404
+23507
+43
+23508
+23509
+23510
+865
+377
+23511
+23512
+647
+21947
+19404
+23513
+286
+104
+23514
+23515
+213
+23516
+23517
+23518
+284
+43
+370
+21027
+20
+590
+12033
+23519
+23520
+345
+23521
+141
+8668
+3228
+10
+349
+5071
+2770
+2537
+23522
+284
+590
+1529
+590
+18951
+23523
+1018
+23524
+21849
+23525
+18978
+23526
+23527
+9054
+23528
+21947
+12893
+2260
+23529
+21947
+989
+23530
+20
+411
+586
+286
+736
+14477
+19618
+23531
+2
+23532
+590
+43
+23533
+4693
+23534
+1688
+15718
+12757
+17495
+43
+590
+349
+1716
+14079
+43
+9497
+345
+188
+379
+23535
+12579
+42
+43
+23536
+23537
+20340
+13566
+23538
+23539
+378
+13721
+3492
+248
+66
+248
+23540
+3842
+15718
+2202
+9
+21947
+279
+23541
+21947
+21947
+823
+38
+19618
+20
+14
+8668
+12404
+5780
+23542
+915
+3849
+22042
+495
+671
+2
+23543
+23544
+23545
+23546
+23547
+23548
+15699
+22666
+248
+23549
+13265
+43
+23550
+3
+20507
+13474
+16557
+303
+683
+13405
+15914
+23551
+23176
+23552
+23553
+6874
+23554
+23555
+23556
+23557
+248
+23558
+736
+17011
+23559
+23560
+3
+872
+14
+736
+80
+1364
+23359
+23561
+1107
+1604
+23103
+23562
+2561
+21811
+23563
+23564
+23565
+337
+7328
+18132
+323
+8566
+23566
+12987
+23567
+17698
+248
+23568
+23569
+284
+756
+23570
+38
+9
+23571
+1870
+11420
+5689
+112
+21947
+21947
+2449
+823
+823
+20952
+23572
+284
+23573
+23574
+23575
+1517
+2
+23576
+19618
+213
+2035
+23577
+1112
+23359
+23578
+19404
+248
+23579
+23580
+23504
+345
+23581
+5577
+13279
+23582
+23583
+11995
+23584
+23585
+21947
+560
+23586
+8566
+14
+284
+590
+5622
+15
+12466
+259
+14477
+15
+3
+1012
+9
+736
+15718
+8668
+23587
+23588
+23589
+23590
+14604
+23591
+43
+3546
+7835
+3553
+22403
+2804
+23592
+57
+23593
+43
+337
+16281
+371
+736
+3546
+23594
+8566
+827
+9
+590
+23595
+23063
+23596
+23597
+23103
+736
+23598
+23599
+23600
+13361
+19
+15718
+756
+14
+823
+1049
+13721
+19
+32
+19
+23601
+19655
+8668
+23602
+21947
+23603
+43
+23604
+1316
+19218
+96
+43
+1104
+18250
+736
+23605
+2197
+19405
+14
+23606
+23607
+7137
+338
+736
+936
+1157
+23608
+23609
+19
+43
+23610
+43
+209
+23611
+2159
+19
+4463
+23612
+23613
+345
+23614
+11762
+23615
+13616
+590
+178
+10356
+23616
+23617
+23618
+1502
+22308
+23619
+23620
+23621
+23622
+2769
+538
+249
+23623
+20533
+345
+23624
+865
+57
+23625
+77
+1604
+9
+23626
+590
+201
+23627
+20773
+16437
+19404
+8668
+19009
+23628
+5438
+11754
+23629
+5085
+9759
+20
+14
+23630
+23631
+57
+11321
+213
+23632
+770
+16866
+286
+5833
+23633
+53
+1961
+1520
+23634
+3081
+2919
+23635
+1352
+23313
+23636
+13943
+23637
+21947
+21947
+272
+16437
+16
+23638
+303
+32
+9
+23639
+1961
+48
+23640
+201
+16437
+23641
+43
+23642
+23643
+23644
+349
+14527
+43
+23645
+23646
+1508
+2
+15718
+647
+3396
+23647
+590
+15
+23648
+1100
+19852
+1442
+19
+23649
+5820
+2577
+823
+19618
+23650
+2593
+23651
+23652
+43
+165
+23653
+23654
+23655
+23656
+16437
+23657
+554
+43
+57
+18064
+23658
+1655
+4765
+10
+23659
+736
+22
+23660
+23661
+286
+14477
+23662
+14001
+19
+713
+23663
+6571
+1066
+23664
+23665
+1291
+23666
+3546
+225
+22
+590
+3546
+514
+23667
+18951
+15572
+3978
+23668
+8351
+19
+683
+5780
+6950
+19
+11210
+21947
+9
+23669
+4963
+303
+23670
+845
+936
+23671
+11341
+7236
+23672
+7053
+286
+122
+23673
+736
+23674
+3546
+23675
+736
+286
+21947
+5022
+21947
+16437
+4263
+5067
+21031
+23676
+188
+23677
+23678
+22075
+2
+23679
+23680
+16118
+21776
+21947
+17151
+43
+20803
+57
+19404
+2
+13721
+12827
+286
+272
+958
+2561
+23681
+23682
+720
+5780
+286
+402
+14816
+1082
+3
+590
+23683
+5415
+2824
+14216
+7379
+248
+23684
+14175
+23685
+23686
+1870
+349
+213
+399
+23687
+213
+8696
+590
+303
+89
+21947
+337
+2561
+23688
+9
+23689
+23690
+18045
+11762
+2577
+43
+23063
+23691
+1316
+23692
+213
+32
+23693
+23694
+21947
+13721
+2911
+23695
+23696
+21947
+21947
+23697
+13721
+43
+21947
+213
+1026
+23507
+22
+3252
+1559
+974
+10
+887
+21947
+2804
+14102
+23698
+337
+1991
+345
+1606
+823
+19
+20113
+9
+303
+176
+14
+32
+155
+23699
+23226
+23700
+23701
+590
+3034
+23702
+23703
+5438
+16253
+23704
+1042
+19091
+23705
+284
+554
+16826
+970
+23706
+248
+412
+345
+7835
+23707
+22865
+1316
+17151
+14001
+495
+21080
+14033
+23708
+21947
+5833
+23709
+15720
+23710
+23711
+21947
+23712
+7137
+23713
+9
+736
+3546
+188
+155
+14
+2694
+14
+20
+22371
+303
+23714
+345
+1905
+303
+248
+23715
+14586
+22963
+23716
+15820
+18823
+707
+2
+303
+23717
+23718
+14
+303
+284
+23719
+23720
+213
+23721
+21947
+23722
+22
+349
+21947
+12987
+20797
+1930
+9
+23723
+23724
+7053
+23725
+23726
+892
+349
+14477
+23727
+2790
+8610
+3876
+13129
+23728
+823
+736
+19618
+23729
+15
+519
+15718
+23730
+1212
+248
+23731
+23732
+20
+23733
+590
+5085
+155
+590
+1961
+23734
+823
+323
+14
+43
+12080
+23735
+9245
+23736
+23737
+23738
+590
+11762
+18234
+17064
+19618
+23739
+23740
+13476
+23741
+887
+23742
+19
+337
+284
+23743
+21849
+23744
+23745
+2281
+23746
+694
+213
+213
+15320
+22042
+21947
+7945
+4012
+4543
+23747
+23748
+9
+23749
+16144
+23750
+14
+23751
+284
+23752
+16190
+9
+23753
+57
+15713
+23754
+8566
+457
+104
+15820
+9
+17698
+337
+23755
+345
+301
+22986
+222
+18283
+19618
+213
+823
+23756
+23757
+5085
+317
+8244
+15718
+23758
+286
+10406
+13713
+23759
+5773
+23760
+155
+23761
+23762
+32
+5119
+137
+9
+1696
+23763
+303
+3026
+23764
+23765
+23766
+12431
+2567
+23767
+4128
+23768
+5908
+323
+23769
+317
+323
+9
+19
+23770
+323
+23771
+23772
+18816
+23773
+379
+21403
+590
+23774
+21689
+155
+736
+19
+23775
+4502
+23776
+23777
+43
+2975
+21947
+15054
+23778
+349
+10356
+1051
+35
+32
+23779
+23780
+23781
+35
+23782
+178
+1356
+590
+13721
+15068
+23783
+23784
+77
+43
+1901
+14
+14
+10096
+23785
+21947
+19618
+23786
+23787
+14020
+23788
+915
+23789
+648
+20
+23103
+19655
+23790
+590
+14603
+15
+590
+23791
+286
+1154
+345
+23792
+19
+23793
+1765
+22505
+21947
+21698
+3546
+22242
+23794
+43
+21310
+345
+23795
+788
+23796
+3724
+23797
+23798
+14599
+23799
+23800
+140
+23801
+19
+57
+349
+18695
+19486
+13361
+193
+3
+9
+13721
+23802
+43
+22187
+57
+57
+23803
+1517
+349
+14
+23804
+590
+23805
+17151
+23806
+16411
+23807
+19618
+9
+842
+1224
+23808
+337
+23809
+446
+19
+1027
+14
+10846
+23810
+23811
+15718
+23812
+1107
+17273
+7379
+23813
+15718
+2609
+23814
+19618
+43
+7183
+32
+57
+19
+2
+3669
+21947
+21947
+23815
+23816
+21947
+16573
+23817
+23818
+23819
+20143
+18616
+8668
+43
+23820
+573
+155
+23821
+3546
+19
+21947
+23822
+23823
+3546
+10177
+19404
+23824
+21107
+23825
+3275
+23826
+415
+861
+23827
+19618
+23828
+23829
+4306
+927
+43
+23168
+7053
+140
+1578
+19792
+23830
+13721
+303
+23831
+21947
+22
+43
+1384
+23832
+23833
+6907
+23834
+19655
+23835
+52
+98
+23836
+1226
+21049
+15460
+7053
+22
+20
+865
+23226
+349
+265
+188
+43
+707
+21947
+17151
+23837
+349
+19
+23838
+590
+19
+23839
+23840
+29
+16413
+15810
+23841
+7458
+586
+21947
+23842
+23843
+1223
+23844
+23845
+23846
+23847
+23848
+23842
+23849
+23850
+23851
+43
+155
+23852
+19
+23853
+358
+14175
+349
+3626
+23854
+19618
+19
+345
+23855
+736
+23856
+137
+23857
+590
+1384
+23858
+5085
+21947
+1112
+23859
+23860
+349
+5041
+23861
+2550
+3139
+495
+7448
+1867
+23862
+23863
+23864
+23865
+13279
+23866
+9
+23867
+533
+2415
+20
+845
+23868
+43
+23869
+23870
+23871
+23872
+23873
+19852
+23874
+491
+23875
+23464
+1307
+155
+23876
+7137
+16437
+1048
+2
+23877
+23878
+2859
+21947
+349
+23879
+15718
+23880
+736
+2537
+15951
+23881
+23426
+23882
+1082
+32
+43
+15384
+23883
+23884
+1696
+23885
+819
+590
+16102
+57
+23886
+23887
+8297
+17956
+11471
+89
+23888
+272
+736
+23889
+23890
+23891
+23892
+23893
+23894
+554
+1496
+23895
+14
+671
+1716
+23896
+9481
+23897
+9187
+6744
+57
+23898
+23899
+590
+19618
+137
+137
+21947
+22099
+5085
+23842
+7291
+1224
+22
+12987
+6784
+7053
+1154
+23900
+23901
+1768
+23902
+66
+19792
+1090
+23903
+7598
+14001
+1991
+1091
+23904
+1222
+19618
+17151
+23905
+9389
+21280
+21947
+23906
+4625
+286
+23907
+4827
+23908
+23909
+2694
+23910
+2769
+15442
+23911
+43
+3546
+9
+20572
+1942
+14
+23912
+7276
+9
+790
+12013
+566
+23913
+358
+23914
+11013
+19618
+2410
+1920
+11607
+21947
+15975
+21947
+647
+14
+21947
+590
+2577
+736
+23915
+89
+936
+9
+23916
+10
+1571
+249
+23917
+155
+2035
+286
+23918
+7053
+915
+13375
+5764
+32
+185
+823
+23919
+2561
+23920
+349
+730
+155
+57
+1442
+1012
+736
+23921
+23922
+1524
+19618
+1149
+4578
+3546
+23923
+7855
+9797
+23924
+19797
+22233
+5601
+80
+1442
+5331
+5075
+379
+23925
+7276
+16910
+2617
+237
+23926
+13721
+18982
+23927
+23928
+4368
+3059
+736
+23929
+89
+23930
+14392
+23931
+7778
+736
+23932
+3546
+590
+77
+19
+155
+4364
+23933
+23934
+19404
+23935
+23103
+10030
+14
+23936
+23937
+616
+345
+23938
+15718
+23939
+23940
+23941
+16885
+15718
+19618
+764
+806
+23942
+23943
+2804
+23944
+122
+23945
+3546
+43
+303
+13721
+23946
+647
+32
+23947
+23948
+1066
+23949
+1307
+23842
+188
+20785
+23950
+9
+23951
+17136
+89
+32
+554
+17635
+8297
+736
+345
+23952
+345
+14
+720
+2117
+3572
+303
+13721
+23953
+22666
+23220
+17151
+337
+213
+19160
+23954
+17151
+23955
+17698
+1508
+21999
+248
+43
+248
+23956
+9
+13807
+720
+23842
+284
+23957
+20773
+416
+21947
+23958
+23959
+21947
+23960
+23961
+23962
+23963
+23964
+647
+817
+10
+2577
+13721
+248
+2
+3544
+3546
+2117
+736
+284
+345
+23965
+23966
+736
+13566
+32
+339
+213
+1612
+18041
+9
+13655
+573
+23967
+248
+23968
+23969
+23970
+23971
+19618
+402
+23972
+1425
+3546
+248
+349
+23973
+14001
+43
+590
+23974
+15718
+23975
+43
+23976
+248
+23977
+23978
+10028
+872
+23979
+5085
+23980
+22986
+23981
+1300
+14001
+23358
+13721
+43
+21947
+398
+643
+1716
+23982
+790
+14147
+4278
+22891
+23983
+303
+22
+299
+20952
+23984
+19
+23985
+23986
+23987
+17151
+89
+4278
+23988
+23989
+23990
+23991
+43
+15718
+23992
+10004
+15718
+1314
+22
+1529
+43
+23993
+21947
+14
+464
+1150
+23994
+248
+7053
+23995
+12042
+29
+17151
+936
+23996
+23997
+23998
+21947
+21475
+23999
+43
+6817
+43
+14604
+491
+20
+7053
+38
+24000
+590
+24001
+43
+24002
+720
+24003
+60
+32
+1423
+345
+5316
+21947
+22639
+13150
+14
+349
+14909
+24004
+18664
+337
+2336
+24005
+24006
+24007
+19810
+20040
+14131
+24008
+3601
+24009
+24010
+14693
+19618
+6741
+736
+24011
+24012
+6364
+2841
+2
+24013
+19618
+24014
+416
+16736
+57
+21947
+317
+21947
+1824
+15718
+7053
+19
+201
+284
+57
+24015
+24016
+590
+345
+24017
+24018
+13848
+13721
+14477
+590
+21947
+21947
+24019
+7855
+24020
+303
+24021
+24022
+19618
+10789
+13038
+736
+24023
+22505
+24024
+24025
+24026
+24027
+590
+19
+7357
+9
+21947
+790
+22
+19618
+14591
+15
+345
+24028
+9
+554
+21947
+349
+24029
+590
+2
+9
+23226
+43
+24030
+22355
+519
+533
+637
+24031
+14
+14477
+10
+303
+19618
+24032
+736
+868
+9449
+24033
+24034
+60
+13361
+21627
+3842
+2859
+24035
+12618
+23842
+24036
+14013
+17638
+24037
+19218
+590
+21947
+7183
+21947
+9
+19218
+24038
+24039
+24040
+24041
+24042
+17151
+112
+20600
+17608
+815
+24043
+24044
+24045
+8807
+286
+12534
+2600
+24046
+15718
+13320
+24047
+24048
+114
+24049
+18798
+590
+590
+43
+7134
+1822
+17
+57
+1538
+2
+5907
+53
+18553
+8798
+155
+24050
+24051
+3978
+1612
+12701
+155
+24052
+24053
+590
+17151
+24054
+24055
+24056
+1011
+19
+736
+1090
+24057
+13343
+2260
+24058
+24059
+24060
+24061
+2577
+23688
+354
+16976
+24062
+590
+2694
+14
+24063
+24064
+18695
+1172
+23805
+248
+21947
+24065
+2009
+24066
+24067
+6741
+23196
+5780
+16826
+2
+24068
+2724
+5310
+38
+213
+9
+24069
+24070
+13721
+24071
+20
+24072
+14
+24073
+379
+24074
+19655
+7276
+17410
+6171
+13045
+3678
+24075
+60
+2859
+34
+21947
+7855
+20315
+21947
+21947
+21947
+373
+43
+21947
+495
+1612
+17670
+43
+21947
+24076
+16118
+3543
+10147
+189
+24077
+24078
+24079
+32
+24080
+4278
+24081
+823
+24082
+3546
+250
+19439
+17400
+23842
+1224
+7855
+958
+15993
+24083
+24084
+24085
+3684
+3256
+590
+8668
+1716
+349
+286
+24086
+683
+17670
+3599
+7855
+13721
+647
+7379
+24087
+3546
+24088
+15
+19404
+17119
+9713
+19618
+4407
+249
+22183
+24089
+24090
+20
+4461
+20
+1047
+10356
+17698
+24091
+2
+57
+20340
+1198
+24092
+533
+24093
+590
+2983
+209
+24094
+5085
+24095
+24096
+24097
+24098
+24099
+1991
+1531
+24100
+19
+57
+14914
+24101
+24102
+14000
+24103
+9759
+17151
+1026
+1559
+213
+24104
+213
+23842
+19
+24105
+57
+9
+24106
+201
+24107
+7208
+24108
+24109
+24110
+35
+7835
+3341
+21947
+284
+1559
+19
+24111
+24112
+284
+24113
+3876
+24114
+14216
+7960
+209
+14
+554
+98
+43
+29
+9
+9
+24115
+6501
+17151
+3546
+20600
+349
+2577
+22787
+590
+23571
+155
+24116
+1300
+24117
+19
+155
+24118
+19618
+24119
+590
+17340
+736
+32
+1044
+303
+349
+15971
+349
+19
+24120
+24121
+14
+32
+22442
+554
+349
+19618
+24122
+213
+1870
+345
+22417
+24123
+19618
+24124
+3546
+24125
+554
+284
+2415
+24126
+43
+24127
+1810
+2
+397
+8939
+5780
+4126
+24128
+24129
+15
+16437
+24130
+284
+24131
+15
+24132
+24133
+15718
+24134
+3251
+9
+155
+554
+24135
+24136
+43
+590
+6283
+24137
+595
+24138
+3553
+23842
+11057
+7117
+24139
+43
+9118
+1696
+24140
+20952
+24141
+349
+21486
+24142
+22
+16413
+23842
+21947
+2499
+220
+415
+15718
+15718
+1300
+57
+24143
+15
+3546
+598
+179
+201
+1300
+8766
+14
+43
+6408
+21947
+24144
+169
+19
+155
+24145
+24146
+213
+38
+24147
+21689
+32
+13721
+24148
+24149
+24150
+24151
+24152
+354
+24153
+6130
+9
+24154
+24155
+3599
+4024
+12214
+20952
+24156
+337
+24157
+5577
+14420
+5627
+2988
+24158
+22888
+4364
+24159
+19618
+21947
+24160
+3950
+9
+24161
+24162
+24163
+24164
+14
+15718
+303
+21031
+14
+245
+2197
+2609
+24165
+43
+24166
+43
+12987
+586
+5662
+19618
+24167
+20
+286
+9
+24168
+24169
+11966
+9
+24170
+10
+9
+2476
+286
+43
+24171
+7855
+32
+9
+1244
+43
+2356
+671
+1688
+5791
+345
+24172
+1220
+24173
+22
+18982
+1051
+24174
+24175
+24176
+323
+32
+19
+24177
+24178
+89
+32
+286
+21049
+18683
+19618
+13848
+22599
+19494
+1384
+590
+21947
+10031
+19091
+24179
+24180
+9
+16102
+16436
+24181
+24182
+5505
+24183
+9
+14
+24184
+9
+43
+12821
+5119
+15
+60
+19
+595
+4993
+14477
+21834
+17871
+21947
+942
+24185
+2556
+24186
+24187
+24188
+13131
+24189
+590
+1157
+2728
+19192
+53
+24189
+3546
+14982
+24190
+24191
+24192
+6480
+6400
+705
+286
+5601
+15797
+590
+24193
+24194
+24195
+590
+24196
+19
+720
+1578
+9
+24197
+24198
+3546
+24199
+24200
+24201
+4242
+379
+20
+1089
+24202
+24203
+573
+613
+24204
+24205
+1364
+24206
+24207
+872
+222
+24208
+1745
+323
+12425
+24209
+15914
+43
+24210
+155
+24211
+19
+32
+24212
+873
+17151
+24213
+720
+24214
+6950
+6531
+20040
+24215
+590
+24216
+24217
+566
+10789
+44
+2577
+43
+24218
+24219
+24220
+13582
+24221
+349
+713
+24222
+10559
+8171
+13721
+24223
+24224
+142
+43
+9363
+16413
+24225
+15
+15989
+38
+1696
+137
+616
+24226
+24227
+11087
+21947
+24228
+4296
+19573
+24229
+24230
+1700
+24231
+683
+24232
+24233
+1812
+24234
+15718
+24235
+24236
+10003
+14
+17596
+736
+21947
+7183
+43
+32
+19618
+21947
+19
+7053
+43
+3484
+14
+286
+4463
+272
+4306
+24237
+7291
+915
+597
+43
+1768
+5627
+24238
+32
+1648
+790
+24239
+24240
+13150
+3353
+249
+3601
+533
+4055
+1559
+9526
+24241
+5515
+24242
+23741
+4821
+8669
+590
+19
+590
+14
+24243
+1920
+590
+24244
+554
+42
+24245
+24246
+14
+3067
+2289
+17821
+21947
+24247
+349
+564
+24248
+24249
+10
+2733
+20
+809
+24250
+24251
+155
+378
+32
+24252
+43
+24253
+2769
+43
+24254
+16640
+57
+1251
+24255
+66
+24256
+4745
+1688
+24257
+77
+19
+9
+15512
+19
+24258
+18234
+17151
+24259
+24260
+1302
+3978
+43
+971
+15589
+8297
+16437
+24261
+2882
+142
+2
+24262
+11341
+24263
+446
+21698
+24264
+17151
+11364
+24265
+24266
+23573
+24267
+19939
+1382
+13361
+15720
+24268
+8593
+4185
+7053
+797
+24269
+17
+21947
+14240
+595
+15718
+24270
+1605
+11639
+1112
+24271
+509
+342
+12987
+24272
+24273
+24274
+24275
+48
+19618
+24276
+16437
+24277
+1749
+736
+286
+1082
+6571
+20
+24278
+24279
+22666
+24280
+8668
+24281
+24282
+35
+43
+24283
+11
+19797
+24284
+24285
+4
+15
+345
+24286
+24287
+8508
+24288
+115
+59
+16437
+1013
+58
+5022
+3546
+790
+32
+24289
+43
+1091
+9
+59
+24290
+1047
+232
+590
+14363
+667
+2830
+249
+19763
+815
+17062
+24291
+32
+24292
+7256
+11762
+23196
+345
+24293
+333
+1992
+15824
+24294
+24295
+20
+32
+17151
+19
+24296
+11822
+707
+2302
+24297
+24298
+3
+23464
+2772
+1580
+24299
+24300
+24301
+590
+1051
+21126
+5499
+24302
+15718
+2
+249
+19618
+178
+9
+915
+538
+3553
+24303
+24304
+24305
+4547
+24306
+32
+24307
+24308
+19
+24309
+43
+24310
+24311
+23842
+15720
+10356
+11601
+13566
+7522
+22
+43
+3743
+11647
+4422
+24312
+24313
+24314
+24315
+19
+24316
+4790
+3553
+24317
+1559
+24318
+24319
+14
+155
+1612
+4609
+21947
+24320
+14
+24321
+1655
+22986
+13283
+57
+24322
+2550
+24323
+43
+541
+18703
+24324
+19618
+237
+15718
+24325
+7034
+57
+24326
+590
+14477
+590
+2305
+24327
+15107
+24328
+24329
+24330
+24331
+2260
+439
+345
+16139
+9160
+22643
+299
+23647
+14363
+21947
+272
+24332
+13721
+14
+24333
+1157
+4
+11428
+842
+24334
+43
+1566
+9
+43
+142
+24335
+122
+1680
+3708
+1668
+1124
+745
+24336
+7835
+16152
+24337
+1013
+24338
+16079
+6950
+21947
+349
+24339
+1716
+24340
+286
+24341
+1712
+15718
+8668
+24005
+201
+24342
+1688
+12
+155
+21681
+196
+2828
+24343
+14
+16437
+18707
+24344
+24345
+24346
+24347
+6395
+24348
+647
+1513
+13721
+24349
+24350
+24351
+24352
+819
+20
+24353
+3546
+9
+13615
+228
+24354
+24355
+24356
+16656
+2410
+7183
+24357
+11102
+2042
+11321
+1817
+15824
+43
+1481
+24358
+24359
+2790
+2577
+19618
+24360
+21947
+590
+736
+23842
+10147
+345
+14
+24361
+24362
+14079
+1169
+24363
+11421
+24364
+1765
+14621
+14000
+24365
+24366
+24367
+43
+4409
+1870
+15718
+12005
+15718
+23842
+24368
+24369
+12987
+1817
+24370
+2502
+18364
+370
+24371
+5253
+24372
+845
+21947
+24373
+24374
+19618
+16437
+17151
+2446
+590
+345
+13721
+1382
+24375
+10727
+647
+17151
+349
+590
+24376
+5075
+35
+3
+10
+24377
+24378
+32
+7835
+43
+8566
+15
+24379
+345
+43
+19
+2609
+2550
+24380
+12987
+17602
+23842
+11420
+13721
+24381
+24382
+5248
+21947
+24383
+590
+478
+249
+24384
+265
+24385
+24386
+209
+14102
+13570
+14477
+24387
+12506
+104
+1517
+24388
+24389
+24390
+24391
+20280
+24392
+24393
+196
+43
+3353
+286
+24394
+24395
+19618
+57
+554
+24396
+24397
+4463
+19
+43
+491
+23103
+21947
+24398
+24399
+24400
+22963
+57
+21947
+24401
+24402
+24403
+10111
+24404
+8208
+14
+24405
+4414
+24406
+24407
+2129
+24408
+32
+9
+24409
+57
+24410
+21947
+24303
+24411
+24412
+2
+19
+24413
+23166
+19
+24414
+21689
+32
+4745
+24415
+286
+24416
+590
+19618
+1920
+21947
+2197
+8134
+15718
+2764
+2550
+720
+16089
+2
+24144
+3270
+24417
+13405
+583
+21947
+24418
+7810
+7835
+24419
+286
+13652
+745
+3050
+15718
+13721
+647
+24420
+519
+24303
+9
+24421
+24422
+14363
+24423
+24424
+24144
+24425
+170
+3546
+24426
+827
+24427
+24428
+23190
+24429
+24430
+590
+15
+345
+21947
+19655
+7855
+7053
+10
+19
+24144
+16931
+13993
+1244
+13721
+24431
+13375
+66
+24432
+11273
+823
+18695
+17151
+24433
+1817
+24434
+24435
+2356
+5780
+24436
+24437
+24438
+2
+15
+2733
+1517
+20142
+19
+24439
+4502
+4124
+24440
+5318
+1677
+21947
+24441
+590
+590
+14
+60
+24442
+1698
+24443
+24444
+564
+2550
+1655
+24445
+22371
+43
+24446
+3034
+89
+2577
+24447
+16437
+24303
+4536
+15718
+9
+24448
+2314
+24449
+24450
+2446
+8976
+237
+7183
+286
+24451
+18784
+11413
+23103
+24452
+4961
+16102
+24453
+19655
+9
+827
+24454
+651
+4985
+4388
+24455
+3546
+15476
+24456
+20792
+24457
+24458
+590
+19
+15
+3601
+15
+43
+24459
+17151
+24460
+10470
+24461
+286
+24462
+24463
+24464
+24465
+15
+24466
+24467
+809
+19
+1230
+24468
+185
+14
+21947
+13173
+9
+155
+24469
+3546
+24470
+10123
+24471
+2254
+19
+2
+17865
+77
+24472
+764
+2804
+89
+24473
+3062
+14363
+24474
+373
+13721
+1021
+9649
+78
+24475
+24476
+249
+14216
+286
+24477
+2410
+736
+17151
+24478
+24479
+70
+8701
+19
+43
+4116
+24480
+1011
+358
+24481
+10117
+24482
+259
+24483
+24484
+24485
+24486
+9
+9
+21776
+3546
+17151
+590
+5659
+24487
+24488
+2459
+24489
+24490
+16079
+8669
+24491
+12260
+24492
+1160
+24493
+1696
+24494
+23842
+24495
+18896
+274
+17151
+11394
+24496
+1300
+3546
+14
+24497
+286
+89
+17151
+5085
+24498
+683
+24499
+25
+24500
+590
+24501
+590
+14
+647
+20
+24502
+16437
+19
+349
+24503
+24504
+24505
+2
+7717
+24506
+165
+5780
+19918
+2694
+24507
+24508
+24509
+24510
+24511
+4088
+915
+24512
+24513
+17144
+21031
+554
+11471
+19618
+155
+14185
+112
+168
+24514
+24515
+990
+3484
+24516
+24517
+13343
+345
+9
+1316
+1286
+24518
+14597
+111
+5257
+18283
+196
+24519
+18982
+137
+24520
+464
+16437
+22962
+16437
+274
+24521
+6171
+1056
+43
+36
+24522
+16571
+14
+15489
+686
+24523
+19868
+24524
+19618
+436
+24525
+24526
+18589
+24527
+1013
+720
+424
+22986
+24528
+7137
+13364
+345
+24303
+541
+16437
+24335
+4293
+24529
+4050
+24303
+1291
+24530
+24531
+13662
+24532
+24533
+24534
+24535
+736
+24536
+14
+24537
+5780
+24538
+14001
+2
+13988
+24539
+24540
+554
+17136
+24541
+23619
+24542
+24543
+24544
+32
+24545
+17920
+19839
+14240
+24546
+3546
+1013
+24547
+9
+7835
+24548
+20700
+24144
+1542
+35
+861
+7835
+4398
+342
+554
+24549
+7601
+19323
+24550
+3236
+17136
+3
+24551
+583
+21889
+48
+24552
+24553
+22802
+57
+17151
+24554
+23103
+18423
+24555
+24556
+2330
+36
+17670
+6430
+66
+24557
+13721
+24558
+24559
+19655
+15
+590
+20
+10967
+24560
+24561
+9
+24562
+24563
+188
+10
+24564
+89
+19797
+12404
+12005
+24565
+286
+24566
+43
+66
+57
+21947
+5197
+24567
+24568
+24569
+647
+24570
+14532
+1382
+19618
+322
+24571
+24572
+19931
+3007
+16437
+24573
+19386
+24574
+1021
+43
+7053
+24575
+14604
+12768
+23600
+9060
+24576
+17151
+1013
+15914
+13375
+43
+9578
+14477
+1612
+24577
+43
+24578
+24579
+22307
+23110
+3055
+24580
+24581
+23842
+17603
+10
+1013
+24582
+23196
+1961
+24583
+9
+20141
+24584
+21947
+24585
+24586
+24587
+24588
+24589
+11087
+1716
+9
+17698
+12005
+12402
+6782
+21947
+16640
+19618
+17151
+17754
+1901
+12987
+3278
+2042
+155
+14
+20228
+24590
+24591
+57
+2577
+24592
+519
+24593
+583
+155
+21776
+24594
+24595
+21947
+24596
+24597
+24598
+24599
+24600
+5085
+4824
+24601
+24602
+9
+20
+873
+566
+18695
+2132
+736
+2790
+24603
+24604
+345
+2537
+24605
+24606
+24607
+43
+519
+24608
+24609
+1566
+286
+14
+1423
+379
+590
+8351
+19618
+22787
+10
+24610
+3546
+24335
+24611
+24612
+24613
+492
+155
+8962
+21947
+14
+6430
+24614
+92
+349
+23579
+1680
+19618
+24615
+24616
+1198
+15718
+1481
+21947
+24617
+2117
+9
+24339
+1914
+22
+24618
+10
+138
+21947
+155
+24619
+43
+2117
+213
+19
+19852
+4055
+43
+24620
+43
+14586
+23196
+24621
+24622
+19618
+284
+1524
+20115
+1578
+21689
+284
+249
+43
+24623
+7600
+248
+14529
+24624
+149
+17633
+283
+57
+24625
+10230
+303
+13848
+24626
+24627
+411
+17151
+24628
+1109
+1155
+24629
+354
+399
+24630
+80
+2146
+13897
+5780
+24631
+24632
+541
+23842
+2008
+345
+24633
+3743
+24634
+3421
+24635
+24636
+590
+24637
+8256
+24638
+24639
+19618
+1578
+14
+19091
+14
+24640
+647
+24641
+1524
+4293
+1710
+24642
+22260
+24643
+12987
+24644
+13529
+24645
+24646
+43
+24647
+17151
+13721
+3842
+18616
+20
+24648
+24649
+3345
+8883
+9
+24650
+24651
+24652
+10
+24653
+573
+6531
+21730
+209
+3755
+23226
+1295
+16445
+736
+114
+16437
+17136
+24654
+8458
+303
+21796
+590
+6179
+4827
+24655
+24656
+5757
+323
+24657
+1765
+188
+24658
+590
+533
+24659
+24660
+24661
+24662
+2243
+213
+155
+24663
+303
+832
+736
+19337
+1559
+24664
+286
+2314
+14
+8779
+2
+19
+2410
+286
+4028
+155
+24665
+16437
+9
+3546
+3546
+1357
+19218
+14477
+8814
+24666
+24667
+21999
+19883
+286
+3316
+590
+24668
+24669
+20952
+24670
+24671
+5085
+19581
+24672
+15437
+8668
+24673
+21947
+24674
+377
+24675
+3543
+24676
+1870
+4808
+14
+24677
+24678
+24679
+24680
+24681
+12584
+46
+14
+24682
+14914
+24683
+9
+861
+16629
+872
+8186
+21947
+24684
+971
+24685
+354
+22091
+15085
+24686
+19
+6341
+13361
+20
+155
+24687
+2035
+349
+1764
+3904
+89
+345
+19
+24688
+24689
+19
+80
+8297
+89
+4317
+24690
+3546
+2264
+43
+15718
+24691
+345
+284
+24692
+24485
+21947
+24693
+16681
+8994
+3546
+3959
+43
+3353
+24694
+4550
+24695
+15718
+43
+20339
+1637
+7276
+3
+32
+4028
+14
+24696
+7014
+24697
+448
+24698
+590
+164
+201
+24699
+11224
+5169
+24700
+24701
+821
+5627
+24702
+24703
+24704
+24705
+24706
+9
+515
+24707
+590
+22818
+646
+24708
+24709
+349
+43
+827
+24710
+24711
+24712
+590
+24713
+5908
+12117
+14668
+24714
+21776
+1230
+24715
+1920
+24716
+23842
+137
+19404
+887
+24717
+24718
+14
+9705
+24719
+6341
+1100
+19618
+930
+9475
+24720
+14
+24721
+24722
+24723
+21776
+24303
+14546
+14363
+19404
+17136
+21947
+22
+1316
+14147
+80
+1559
+769
+1181
+536
+17670
+18978
+14
+2721
+232
+43
+23603
+24724
+12684
+209
+7855
+590
+24725
+23842
+89
+14
+936
+1090
+3546
+43
+19404
+19618
+7980
+76
+3258
+46
+24725
+24726
+24727
+43
+24728
+24729
+345
+1817
+20156
+24730
+3546
+24731
+24732
+22029
+286
+24733
+176
+24734
+15592
+24735
+14079
+24736
+6364
+2694
+213
+24737
+4502
+24738
+57
+8188
+24739
+1559
+21947
+24740
+3421
+14477
+13405
+19918
+989
+861
+303
+1749
+8351
+590
+861
+1364
+21947
+21627
+24741
+2238
+19
+14
+24742
+24743
+19618
+24744
+699
+24745
+248
+24746
+15589
+14
+9
+21947
+5085
+590
+23842
+24747
+345
+24748
+24749
+15
+24750
+464
+323
+58
+2
+554
+24751
+12987
+24752
+3034
+3546
+22556
+24753
+590
+13502
+2
+6086
+2314
+590
+24754
+16645
+24755
+43
+12987
+13721
+24756
+412
+24757
+24758
+23842
+379
+24759
+8392
+1688
+736
+19618
+24760
+24761
+2117
+19618
+24762
+24763
+590
+8566
+19618
+24764
+24765
+1051
+24766
+24767
+24768
+725
+21893
+24769
+9
+24770
+24771
+60
+24772
+1244
+77
+1051
+24773
+24774
+5319
+43
+1442
+24775
+7208
+43
+14477
+24776
+14
+24777
+24778
+12618
+5267
+24779
+188
+32
+24780
+24781
+140
+13721
+25
+24782
+24783
+1465
+1615
+24784
+683
+21947
+9801
+3553
+24785
+24786
+9
+213
+9
+1244
+24144
+24787
+24788
+6877
+24789
+21261
+24790
+20623
+24791
+24792
+1425
+345
+9
+345
+3546
+14017
+98
+15539
+2348
+14945
+18695
+21947
+24793
+24794
+24795
+1949
+123
+349
+24796
+12722
+24797
+303
+24798
+57
+21947
+5963
+24799
+345
+23867
+2577
+349
+32
+1870
+2410
+19
+19
+24800
+248
+872
+43
+19
+989
+24303
+18631
+13721
+99
+24801
+590
+554
+24802
+25
+24803
+2476
+1992
+24804
+35
+24805
+303
+14981
+14
+554
+57
+24806
+14477
+19
+24807
+1867
+24808
+24809
+2919
+3546
+24810
+24811
+155
+259
+24812
+349
+24813
+24814
+14
+24815
+2694
+3601
+24816
+24817
+21681
+19
+201
+24818
+24819
+24820
+491
+213
+43
+24821
+9
+23103
+12077
+24822
+12005
+24823
+22196
+24425
+284
+24824
+9
+24144
+1812
+18760
+14616
+32
+19618
+9
+1765
+1364
+11762
+15718
+24825
+9
+14363
+24826
+1604
+24827
+554
+9402
+104
+24828
+43
+43
+713
+21776
+1083
+19618
+17151
+13150
+24829
+24830
+9
+213
+15718
+19618
+24831
+24832
+24833
+16437
+24834
+19618
+11754
+21947
+32
+2865
+24303
+21947
+24835
+24836
+24837
+24838
+16437
+23226
+24839
+43
+2
+24840
+24841
+24842
+24843
+12912
+24844
+14660
+541
+8392
+18045
+24845
+24846
+24847
+196
+24848
+14
+24849
+1222
+590
+24850
+13721
+24851
+14
+155
+24852
+823
+3546
+24853
+24854
+43
+24855
+19655
+24856
+9
+21947
+15
+24857
+15718
+24858
+17151
+509
+18612
+19618
+665
+24859
+77
+24860
+24861
+358
+24862
+104
+32
+15718
+222
+24863
+24864
+13721
+22
+1745
+138
+14
+5418
+17472
+1529
+24865
+15718
+2694
+2
+11966
+4226
+24866
+9
+24867
+345
+24868
+24869
+13721
+323
+24870
+6877
+19
+19
+2
+24871
+24872
+19
+155
+24873
+249
+10
+21947
+411
+13566
+23842
+357
+24471
+373
+379
+24144
+24874
+24875
+24876
+19797
+1382
+24877
+14477
+24878
+358
+20125
+155
+24879
+4293
+14102
+24880
+11483
+24881
+9630
+19618
+9
+24882
+19
+24883
+43
+6400
+24884
+14001
+14340
+57
+24885
+671
+24886
+13721
+12351
+19
+24887
+736
+21947
+24888
+6095
+66
+15
+155
+24332
+15
+14563
+647
+24889
+303
+415
+21947
+105
+22
+16437
+16443
+24890
+14
+19
+24891
+13179
+9
+19
+24892
+24893
+590
+22717
+24894
+19618
+24895
+1316
+23231
+43
+24896
+24897
+201
+24898
+12387
+179
+19783
+14
+17151
+24899
+14660
+17484
+2764
+7855
+9
+24900
+24901
+2
+1442
+24902
+24903
+24904
+3171
+7835
+19
+2042
+345
+57
+24905
+764
+1226
+11754
+2499
+250
+24906
+15
+590
+24907
+24908
+24909
+590
+24910
+24144
+14001
+24911
+13566
+24912
+13497
+2818
+24913
+24914
+24915
+14216
+24916
+24917
+57
+365
+24918
+15720
+17151
+9
+9
+554
+21627
+2427
+24919
+24920
+2260
+590
+24921
+2314
+32
+14
+24303
+24922
+12366
+24923
+6950
+22888
+24924
+24925
+24926
+8291
+24927
+536
+4141
+3976
+24896
+24928
+8151
+14
+590
+24929
+24930
+66
+115
+24931
+14
+43
+1090
+176
+15
+590
+872
+910
+349
+18047
+1181
+10642
+15406
+14001
+16437
+32
+14369
+24932
+24933
+24934
+19209
+24935
+19
+20
+14
+104
+24936
+24937
+369
+665
+21947
+24303
+24938
+43
+24939
+5627
+286
+1048
+21947
+24940
+24941
+6147
+15718
+11995
+5920
+24942
+9
+15718
+21947
+24943
+24944
+24945
+19
+9
+14
+20
+1517
+286
+9
+21947
+24946
+15
+342
+14477
+495
+24947
+4702
+11423
+2459
+43
+24948
+38
+665
+24949
+14477
+9
+9
+24950
+24207
+24896
+4128
+24951
+24952
+14
+18734
+590
+14
+14477
+9
+19655
+24953
+272
+24954
+24955
+2804
+24956
+155
+2386
+286
+24957
+24958
+19
+24959
+415
+8685
+24960
+3546
+21947
+24961
+323
+86
+19
+5665
+24962
+24963
+24964
+7835
+568
+24965
+24966
+9560
+21540
+24967
+14
+137
+24968
+24969
+13623
+17670
+24970
+14185
+10793
+13721
+7053
+22308
+3546
+7183
+201
+2694
+24971
+24972
+720
+23842
+22230
+17716
+21269
+43
+24973
+19
+21947
+24974
+7137
+24975
+24976
+24977
+20187
+12
+13721
+12250
+4278
+3353
+14454
+8392
+8809
+665
+5316
+19
+24978
+345
+24979
+936
+24980
+24981
+14001
+11762
+832
+179
+24982
+24983
+323
+24984
+24985
+18896
+24986
+89
+43
+19478
+24987
+765
+7273
+345
+1425
+57
+915
+14
+24988
+19
+415
+24989
+22
+2
+24990
+21947
+23653
+9
+24991
+24992
+201
+16899
+24993
+15718
+3353
+5781
+12479
+188
+272
+17911
+12987
+24994
+57
+9
+24995
+17412
+24996
+24997
+43
+140
+24998
+349
+8994
+3546
+286
+24999
+25000
+25001
+25002
+9497
+741
+345
+17698
+14369
+25003
+6595
+7053
+3476
+3649
+7729
+228
+196
+25004
+15517
+5650
+14
+10482
+669
+25005
+707
+8787
+25006
+14369
+590
+9
+213
+5791
+21947
+43
+25007
+6058
+24303
+9
+14369
+373
+25008
+595
+736
+5299
+597
+19
+25009
+25010
+1991
+14369
+8188
+25011
+19458
+24303
+25012
+3546
+3330
+25013
+25014
+25015
+48
+14
+8967
+25016
+1542
+9275
+278
+25017
+25018
+25019
+14
+4388
+19091
+3417
+1051
+590
+25020
+1513
+25021
+19918
+25022
+665
+25023
+25024
+2234
+25025
+14
+25026
+25027
+21947
+9
+12402
+5085
+25028
+3546
+10
+9
+21849
+25029
+25030
+43
+14
+13365
+25031
+284
+5629
+25032
+1991
+25033
+3353
+19965
+7276
+17136
+25034
+10846
+2197
+25035
+14
+13721
+25036
+590
+19618
+1425
+9
+24045
+286
+15589
+745
+2537
+14477
+11762
+1920
+10
+25037
+25038
+185
+15730
+9396
+590
+25039
+5614
+3976
+25040
+590
+3546
+303
+590
+590
+590
+43
+19252
+25041
+16126
+25
+25042
+25043
+3
+25044
+14
+25045
+57
+25046
+20
+8624
+18798
+19
+720
+176
+14363
+9622
+590
+19218
+9
+25047
+25048
+25049
+13721
+9
+24144
+10642
+764
+25050
+15718
+590
+25051
+464
+57
+19618
+21689
+201
+1245
+25052
+25053
+936
+248
+25054
+19655
+25055
+25056
+1637
+25057
+25058
+2764
+14477
+6877
+1330
+25059
+2367
+303
+25060
+4414
+25061
+25062
+13566
+1765
+25063
+4387
+4411
+17136
+13721
+590
+286
+1051
+21947
+18896
+590
+14369
+25064
+971
+15718
+7835
+19003
+337
+25065
+16637
+3546
+849
+590
+35
+3251
+25066
+25067
+694
+14603
+19404
+25068
+3034
+209
+57
+213
+3
+19618
+3546
+14
+17033
+25069
+337
+12777
+736
+13721
+43
+7014
+303
+1066
+25070
+10094
+8171
+6518
+2694
+694
+1090
+25071
+648
+411
+25072
+25073
+25074
+14385
+478
+4585
+25075
+14381
+25076
+20852
+25077
+25078
+15989
+43
+25079
+15
+14079
+272
+25080
+3844
+19404
+1287
+15471
+849
+971
+25081
+736
+19
+365
+18423
+25082
+590
+11423
+19109
+25083
+25084
+43
+25085
+1082
+43
+25086
+14
+89
+25087
+1465
+155
+43
+25088
+8668
+25089
+1013
+8787
+15496
+18695
+1021
+25090
+2770
+25091
+25092
+1300
+9
+3417
+25
+3546
+17698
+5438
+13721
+25093
+25094
+24978
+17635
+25095
+7855
+25096
+15718
+19618
+19
+25097
+25098
+303
+19618
+25099
+25100
+3546
+3546
+21834
+4764
+25101
+25102
+25103
+2836
+25104
+25105
+1021
+25106
+25107
+15949
+4116
+13150
+1842
+25108
+25109
+14369
+2577
+43
+25110
+25111
+11757
+303
+647
+7053
+16437
+25112
+25113
+1112
+25114
+554
+25110
+3546
+43
+25115
+21947
+16648
+19
+24045
+2577
+24335
+590
+25116
+25117
+25118
+3095
+24144
+1316
+25119
+25120
+14477
+25121
+25122
+25123
+14
+397
+19
+25124
+25125
+24978
+25126
+25127
+25128
+21947
+43
+20666
+25129
+25130
+14693
+1529
+6741
+19618
+24862
+730
+19
+21729
+2971
+1604
+5601
+20
+25131
+15718
+5780
+1236
+25132
+25133
+8103
+16687
+345
+349
+19655
+590
+12987
+24303
+15824
+15285
+25134
+590
+4
+14
+25135
+8297
+25136
+25137
+25138
+12544
+4313
+19241
+4650
+17151
+25139
+13813
+14127
+25140
+25141
+1090
+25142
+13956
+25143
+14
+9
+24802
+20
+21947
+25144
+25145
+15797
+10672
+25146
+19618
+284
+25147
+345
+25148
+25149
+284
+25097
+590
+11370
+13721
+25150
+711
+154
+4055
+213
+1160
+2764
+25151
+2537
+2561
+17606
+1224
+16205
+25152
+25153
+365
+2314
+3657
+25154
+6950
+11341
+25155
+43
+9
+1051
+449
+43
+9688
+32
+21947
+1423
+590
+2635
+586
+25156
+25157
+3407
+12772
+2764
+887
+25158
+25159
+3330
+6354
+25160
+20
+22
+25161
+25162
+6300
+25163
+707
+8208
+9
+25164
+337
+21947
+8248
+21947
+349
+25165
+25166
+19
+736
+3484
+25167
+138
+22
+349
+25168
+2865
+25169
+284
+23364
+12315
+3546
+3546
+1987
+4364
+25170
+19
+6518
+358
+14477
+43
+323
+5780
+25171
+7812
+43
+590
+15718
+14
+25172
+8392
+5628
+25173
+25174
+25175
+303
+25176
+2040
+25177
+25178
+25179
+357
+1091
+9355
+20218
+736
+19618
+15220
+16437
+25180
+25181
+201
+17920
+14369
+25182
+14
+14477
+345
+7215
+9
+5085
+7283
+13721
+1508
+24896
+597
+25183
+14869
+3484
+25184
+20773
+3872
+590
+25185
+21947
+13230
+345
+1716
+14369
+25186
+16437
+25187
+284
+25188
+3546
+4550
+2260
+770
+19618
+14
+25189
+25190
+25191
+140
+13137
+337
+25192
+845
+25193
+25194
+25195
+21947
+12893
+19
+1181
+9
+24978
+284
+495
+25196
+25197
+25139
+43
+2733
+2113
+19
+15809
+25198
+541
+25199
+213
+25200
+5310
+21698
+25201
+379
+25202
+25203
+25204
+17698
+23103
+25205
+2197
+3251
+25206
+25207
+1316
+213
+3546
+161
+58
+25208
+822
+16
+25209
+155
+25210
+98
+2502
+21947
+514
+338
+8994
+25211
+23495
+13988
+20952
+284
+24532
+1090
+286
+337
+713
+25212
+1090
+590
+25213
+25214
+11762
+25215
+24617
+25216
+349
+25217
+14660
+14001
+1224
+43
+249
+25218
+18037
+25219
+509
+222
+43
+14827
+21947
+237
+43
+15718
+24144
+12287
+10
+17151
+3546
+25220
+284
+2577
+25221
+25222
+25223
+89
+25224
+25225
+15718
+7053
+25226
+14619
+25227
+43
+25228
+21276
+586
+11966
+25229
+590
+915
+7835
+17151
+25230
+25231
+425
+25232
+411
+349
+590
+25233
+35
+25234
+3546
+13648
+16121
+25235
+323
+25236
+4411
+4547
+24144
+25237
+155
+1224
+303
+25238
+57
+17151
+24036
+12987
+25239
+5780
+25240
+43
+24045
+25241
+9
+18896
+53
+21698
+1203
+21569
+32
+24896
+25242
+20199
+25243
+25244
+586
+25245
+25246
+25247
+821
+57
+1885
+19597
+25248
+770
+25249
+12479
+25250
+25251
+25252
+1018
+57
+25253
+24725
+1021
+2260
+4490
+2978
+25254
+25255
+12934
+25256
+25257
+24045
+1090
+25258
+25259
+14887
+5085
+25260
+2287
+19655
+720
+9
+25261
+9939
+25262
+20803
+25263
+35
+138
+15718
+19618
+14143
+14000
+2971
+25264
+1310
+25265
+14477
+25266
+25267
+248
+4550
+213
+299
+25268
+25269
+57
+22963
+4760
+19618
+23103
+23741
+25270
+1415
+2318
+43
+303
+1700
+25271
+19439
+20
+9705
+349
+25272
+25273
+25274
+487
+19618
+13713
+22963
+25275
+5650
+24978
+2042
+20212
+43
+590
+1655
+25276
+6766
+25277
+1700
+3546
+12812
+14
+1956
+536
+15824
+14
+19
+1384
+10094
+25278
+24896
+18044
+25279
+19334
+25280
+2756
+1688
+21947
+15238
+1048
+25281
+155
+19
+9688
+25282
+7048
+1047
+590
+2577
+4166
+8895
+345
+14
+25283
+1295
+155
+25284
+11966
+25285
+25286
+24303
+25287
+25288
+25289
+4502
+25290
+25291
+57
+25292
+25293
+7835
+25294
+24896
+966
+15311
+25295
+3128
+25296
+21947
+19797
+13721
+21947
+5376
+379
+6341
+5415
+57
+25297
+9
+43
+13721
+554
+893
+25298
+25299
+20
+5085
+20
+32
+7110
+25300
+25301
+8297
+24144
+17228
+10002
+590
+3601
+8188
+20450
+9
+25302
+5780
+14369
+25303
+43
+25304
+20530
+24646
+1316
+1812
+25305
+18548
+25306
+176
+590
+98
+8188
+25307
+21031
+43
+683
+21999
+24303
+25308
+12987
+25309
+25310
+24303
+2909
+379
+24303
+3034
+98
+7053
+24061
+21947
+25311
+25312
+4463
+25313
+14
+57
+9
+43
+25314
+43
+25315
+1823
+25316
+651
+1425
+25317
+25318
+24978
+21947
+25319
+1049
+25320
+817
+2314
+25321
+17670
+25322
+14477
+9
+14
+269
+19
+25323
+25324
+25325
+25326
+2476
+5119
+14477
+25327
+519
+15544
+21947
+13721
+16024
+19
+24896
+25328
+59
+25329
+1617
+25330
+4237
+1680
+25331
+345
+736
+8244
+43
+43
+13721
+43
+25332
+286
+2
+8295
+14000
+25333
+379
+3553
+25334
+9
+2040
+22
+282
+303
+25335
+14369
+21947
+19
+25336
+970
+25337
+5074
+21889
+3546
+25338
+25339
+448
+25340
+1013
+25341
+23103
+209
+14369
+9
+17872
+25342
+14527
+15406
+349
+16211
+14363
+24896
+25343
+13721
+15718
+25344
+14
+198
+24896
+21834
+3999
+7991
+15
+1514
+43
+25345
+16437
+17635
+19646
+23406
+25346
+3034
+25347
+25348
+25349
+15718
+25350
+19618
+25351
+1615
+25352
+20
+3546
+38
+15
+1612
+765
+2
+25353
+25354
+25355
+590
+18317
+25356
+1090
+25357
+1513
+5085
+60
+25358
+2260
+2
+25359
+43
+11249
+19797
+21947
+89
+14215
+25360
+25361
+560
+25362
+25363
+2556
+25364
+25365
+20019
+201
+25366
+411
+1605
+16437
+17236
+25367
+43
+155
+357
+590
+9402
+25368
+25369
+2577
+25370
+25371
+25372
+25373
+25374
+25375
+12987
+25376
+13375
+3484
+24303
+10
+1013
+25377
+25378
+25379
+5085
+590
+8668
+25172
+25380
+22308
+10117
+1425
+21031
+2728
+25381
+25382
+1991
+155
+19
+4458
+25383
+2577
+25384
+9
+736
+573
+14
+10298
+20161
+25385
+21947
+9
+14515
+77
+24045
+13721
+9560
+25386
+155
+25387
+178
+8351
+24303
+25388
+345
+286
+1425
+9
+25389
+590
+13760
+15511
+25390
+25391
+22587
+25392
+2308
+25393
+25394
+25395
+25237
+4315
+6928
+809
+25396
+25397
+5085
+2061
+25398
+323
+25399
+22
+590
+14369
+9
+25400
+21947
+2776
+25401
+25402
+16103
+22923
+11321
+286
+25403
+16437
+1300
+17151
+7208
+25404
+77
+17144
+25405
+3546
+21947
+22652
+1090
+23368
+25406
+25407
+25408
+2
+25237
+25409
+24896
+2
+25410
+21998
+25411
+25412
+9
+15718
+9
+25413
+14
+16
+25414
+155
+208
+9
+25415
+52
+3026
+25416
+3546
+25417
+20700
+25418
+17670
+1384
+597
+4
+189
+19618
+25419
+250
+25420
+25421
+713
+43
+25422
+3842
+25423
+25424
+9
+3
+764
+24303
+4536
+43
+2406
+707
+25425
+25426
+1384
+16003
+554
+14962
+25427
+25428
+25429
+25430
+10028
+25431
+155
+23103
+209
+13116
+4747
+19
+25432
+25433
+1295
+2324
+25434
+1870
+24302
+25435
+25436
+439
+25437
+13905
+25438
+14369
+25439
+1710
+1021
+3546
+22
+412
+4855
+25440
+2
+24303
+25441
+7053
+25442
+3645
+57
+25443
+1542
+23103
+590
+15572
+25444
+915
+15
+25445
+25446
+25447
+21947
+6701
+25448
+25449
+21947
+23103
+18998
+13905
+25450
+3981
+43
+3655
+201
+35
+554
+915
+17151
+286
+15718
+13375
+14477
+25334
+13721
+25451
+19
+736
+43
+2804
+18798
+248
+32
+4536
+337
+25452
+25453
+25454
+228
+25455
+76
+188
+25456
+25457
+3863
+25458
+14369
+345
+9
+25227
+25459
+9
+6275
+2609
+6764
+25460
+25461
+3546
+442
+13855
+25462
+25463
+3546
+25464
+201
+12937
+25465
+19576
+21627
+3241
+1559
+12671
+25466
+248
+44
+736
+25467
+25468
+25469
+13139
+345
+25470
+9
+25471
+24864
+52
+19655
+6950
+8218
+43
+43
+5438
+25472
+25473
+20803
+337
+9396
+248
+25474
+25475
+590
+32
+2542
+25476
+345
+2769
+57
+1364
+25477
+16671
+25478
+14581
+25479
+5755
+25480
+13988
+337
+1559
+15718
+25481
+14776
+24303
+25482
+2029
+25483
+25484
+25485
+248
+25486
+3610
+25487
+21947
+12832
+5085
+25488
+5963
+25489
+21947
+25490
+15718
+25491
+25492
+8668
+2
+21947
+2009
+12053
+286
+25493
+21908
+25494
+194
+25495
+43
+1364
+25496
+25497
+25498
+32
+43
+3
+43
+15718
+590
+24256
+745
+18685
+25499
+43
+25500
+1364
+25501
+25502
+14
+1961
+8798
+15718
+4550
+1444
+272
+25503
+3310
+2
+1566
+4425
+941
+9
+10
+25504
+21947
+25505
+19528
+18503
+23323
+25506
+25507
+16466
+13131
+25508
+25509
+25510
+5085
+15699
+2
+25364
+25511
+647
+24864
+720
+15718
+25512
+14
+9
+25513
+25514
+25515
+495
+6095
+595
+25516
+43
+11822
+4403
+4808
+25517
+25518
+10
+590
+248
+13721
+1991
+16118
+21689
+686
+25519
+19618
+25520
+379
+25521
+25522
+5627
+14363
+3546
+21947
+25523
+25524
+21689
+9561
+24864
+10
+25525
+13721
+155
+284
+24725
+25526
+25527
+25528
+2769
+14240
+16
+14
+7891
+303
+1559
+286
+357
+43
+25529
+248
+25530
+1765
+15038
+653
+25531
+25532
+25533
+17920
+1812
+751
+3546
+21672
+9
+25534
+831
+21627
+9705
+9
+1247
+533
+188
+3
+14131
+25535
+278
+21563
+8967
+3964
+21689
+10946
+25536
+25537
+24303
+25538
+13721
+20682
+25539
+1212
+213
+6096
+19
+23103
+25540
+12255
+89
+6621
+2790
+1423
+303
+3939
+3978
+1716
+8566
+14369
+25541
+25542
+25543
+19
+237
+24045
+3543
+25544
+18064
+25545
+18045
+14369
+18798
+4463
+25546
+272
+2253
+339
+20228
+9
+2086
+25547
+25548
+25549
+25550
+17920
+43
+15
+24896
+2135
+10325
+21947
+24144
+7053
+1989
+43
+25551
+25552
+25553
+16437
+22977
+590
+25554
+25555
+25556
+22075
+292
+25557
+20952
+484
+25558
+2
+3976
+14
+14
+18048
+2998
+2325
+25559
+42
+15978
+13375
+5780
+25560
+16437
+10
+15556
+14369
+1208
+24896
+1286
+1715
+7923
+2694
+25237
+25561
+22268
+13748
+24303
+15308
+25562
+19618
+25563
+25564
+694
+25565
+23832
+1578
+10356
+13307
+155
+188
+19
+19
+8098
+25566
+25567
+19
+25568
+192
+11736
+25569
+19304
+345
+1048
+25570
+3171
+25571
+25572
+21947
+14
+222
+25573
+15718
+12
+3491
+5542
+647
+25574
+16437
+7379
+339
+25575
+25576
+19618
+1442
+1208
+9842
+14001
+713
+25577
+25578
+25579
+25580
+57
+23608
+11483
+25581
+25582
+24303
+11995
+25583
+21947
+595
+25584
+25585
+25586
+21947
+17134
+185
+25587
+3480
+25588
+25589
+43
+15783
+1559
+19618
+3546
+1154
+2356
+3601
+25590
+349
+25584
+25591
+616
+25592
+25593
+25594
+25595
+25596
+155
+25597
+7836
+222
+19618
+12479
+14477
+24144
+14477
+43
+11762
+19
+25598
+2694
+25599
+3601
+25600
+14369
+21869
+5340
+286
+10642
+209
+25601
+19618
+20339
+1425
+18612
+25602
+345
+25603
+21689
+345
+13754
+10356
+14369
+10265
+6655
+3543
+13317
+2415
+19404
+14477
+25334
+1229
+14
+98
+21947
+1612
+57
+8566
+43
+1765
+25604
+25605
+19618
+1220
+25606
+590
+358
+25607
+25608
+25609
+18384
+286
+25610
+25611
+189
+25237
+25612
+25613
+25614
+25615
+25616
+365
+3546
+25617
+25618
+892
+2260
+1013
+25619
+25620
+887
+9
+677
+12722
+15718
+2157
+43
+683
+25621
+25622
+4851
+8367
+24864
+25623
+20616
+43
+25624
+25625
+286
+14477
+25626
+11762
+25627
+57
+21947
+25628
+137
+20442
+6883
+25629
+3546
+14
+13721
+19655
+25630
+14660
+590
+17698
+1295
+10094
+25631
+16437
+25632
+25633
+4550
+25634
+15762
+3395
+788
+25635
+25636
+109
+915
+25637
+536
+24725
+4806
+16190
+2694
+22666
+590
+25638
+3546
+25639
+17920
+16121
+720
+19
+24303
+25640
+24877
+4550
+14017
+20
+24864
+15718
+21689
+25641
+25642
+21529
+25643
+13721
+57
+25644
+43
+554
+25645
+25646
+25647
+25334
+25648
+25649
+21947
+345
+25650
+377
+13721
+17151
+1566
+286
+25651
+2029
+15718
+25652
+3787
+25653
+3546
+43
+1562
+10030
+2593
+6616
+179
+3239
+15216
+1605
+3548
+201
+2697
+25654
+15054
+196
+2243
+25655
+25656
+25657
+25658
+19
+25237
+25659
+18695
+57
+2175
+25660
+19
+13721
+590
+3546
+14369
+4414
+8668
+25661
+10338
+25159
+5031
+3908
+24919
+23697
+23103
+2
+272
+509
+25662
+11702
+19655
+25663
+24864
+19
+4961
+14
+24896
+4
+15718
+19286
+25664
+7855
+25503
+12741
+1295
+9
+554
+14
+25665
+19
+13721
+9993
+25666
+25667
+590
+25668
+24045
+286
+2476
+590
+17284
+2609
+2318
+2540
+14369
+14477
+9
+25669
+20
+46
+1241
+3546
+14363
+193
+19618
+13127
+2260
+248
+2287
+9
+11211
+25670
+25671
+3050
+14343
+1011
+25672
+25673
+25674
+20
+613
+19404
+1300
+1208
+57
+114
+379
+495
+2550
+1384
+25675
+25676
+25677
+25678
+10
+25679
+24207
+1972
+18896
+25237
+23406
+590
+590
+1051
+25680
+4463
+25681
+25682
+19
+7855
+4951
+2
+2029
+1172
+155
+25683
+25684
+303
+25685
+25686
+14
+25687
+25688
+23603
+213
+416
+25689
+2
+19
+25690
+43
+18874
+845
+20
+745
+745
+18749
+25691
+554
+25692
+25237
+17670
+25693
+5780
+8869
+720
+19
+25694
+10406
+25695
+613
+590
+14369
+590
+25696
+14369
+25697
+15
+25698
+7855
+213
+16118
+17151
+3353
+20
+18956
+25699
+4518
+14369
+4315
+248
+25700
+303
+25701
+15004
+23608
+14363
+8668
+373
+286
+9784
+1364
+5415
+15
+379
+22787
+13721
+32
+15018
+25702
+1212
+2622
+16437
+22273
+16480
+25703
+25704
+2958
+1090
+1085
+3
+25705
+25706
+21332
+25707
+19
+3119
+19618
+25237
+14369
+19404
+25708
+14
+25709
+25710
+4263
+590
+25711
+15718
+7154
+25712
+14
+25713
+337
+7531
+21947
+25714
+19
+7532
+9539
+15
+18792
+10236
+337
+14369
+24896
+8297
+303
+25715
+38
+345
+303
+303
+25716
+15000
+411
+2
+25717
+2733
+5204
+20768
+3546
+25718
+25719
+25720
+2009
+25721
+25722
+25723
+21947
+25724
+20572
+13523
+20
+14
+25725
+590
+25726
+590
+4116
+764
+286
+25727
+13529
+25728
+4550
+19618
+25729
+25730
+34
+25
+43
+24978
+5558
+25731
+185
+25237
+590
+1316
+25732
+1488
+25733
+379
+16790
+21988
+25734
+5877
+24896
+14583
+14477
+1578
+43
+7053
+736
+1082
+25735
+17151
+115
+1562
+286
+25736
+1212
+14
+25737
+284
+25738
+15511
+2131
+25683
+21947
+13721
+43
+19618
+25739
+9144
+1018
+827
+22317
+25740
+586
+19404
+25741
+25742
+25743
+7419
+25744
+1013
+665
+21947
+3599
+14124
+12005
+5188
+720
+9
+25745
+25746
+25747
+15
+590
+43
+25748
+11995
+15
+1465
+25749
+24497
+286
+9
+440
+22
+25750
+19655
+25751
+23103
+4793
+21885
+720
+5780
+57
+14604
+1169
+25752
+25753
+2697
+15094
+14477
+3034
+8668
+25754
+25755
+137
+345
+3
+25756
+2195
+14369
+25757
+2197
+22967
+16780
+2197
+25237
+4550
+25758
+25759
+25760
+3660
+25761
+18942
+25762
+25763
+745
+1446
+25764
+1100
+248
+25765
+25766
+14604
+9
+25767
+9
+597
+24896
+13361
+19404
+25768
+25769
+19618
+249
+25770
+25771
+21689
+12729
+23103
+13566
+24715
+19
+72
+2
+13721
+17151
+7457
+15
+22
+43
+248
+1013
+24896
+15844
+25772
+25773
+25683
+590
+9
+43
+25162
+21947
+14
+25774
+21947
+5085
+25775
+16028
+25776
+25777
+6517
+57
+14604
+345
+19618
+25778
+57
+19618
+720
+25779
+12987
+17083
+43
+25780
+1090
+15854
+201
+25781
+155
+209
+24725
+22308
+25782
+25783
+25784
+10230
+25785
+43
+11762
+23103
+9617
+25786
+648
+2197
+43
+9
+18406
+25787
+25788
+89
+337
+13959
+25789
+14
+25790
+12808
+3553
+2577
+25791
+14
+22468
+590
+2499
+25792
+736
+24785
+32
+14
+25793
+43
+14369
+3279
+286
+14
+18778
+17151
+3
+25794
+43
+25795
+1976
+25796
+25797
+25798
+25799
+21486
+272
+8465
+315
+13721
+16466
+13721
+19655
+15718
+15
+16118
+9
+11162
+25800
+32
+1829
+25801
+25802
+8668
+25803
+25804
+25805
+25806
+554
+8668
+25807
+43
+25808
+25809
+19091
+337
+24303
+14369
+43
+25810
+25811
+286
+10477
+590
+23103
+25812
+736
+14
+18372
+14363
+3546
+2694
+25813
+13721
+25814
+849
+25815
+21947
+18670
+573
+20941
+24864
+14435
+25816
+1091
+11754
+14
+11176
+25817
+5833
+6341
+432
+14
+25818
+14
+3291
+25819
+3335
+10946
+24978
+5780
+19
+25820
+25821
+20161
+25822
+25823
+248
+25382
+25824
+8297
+3546
+24864
+345
+32
+2056
+25825
+25826
+25827
+4581
+25828
+18421
+1889
+25829
+25830
+3
+13578
+25334
+15
+345
+9234
+25831
+2035
+25832
+14369
+6457
+25833
+25834
+16866
+286
+25835
+2029
+2389
+1234
+20339
+2197
+1637
+21947
+25836
+209
+25837
+19
+1382
+32
+25838
+25839
+25840
+25841
+1542
+25842
+665
+25237
+9
+286
+25843
+3484
+7604
+19618
+25844
+25845
+9566
+25846
+677
+4020
+201
+25847
+25848
+3601
+248
+21947
+4518
+8218
+25659
+21947
+14658
+7291
+1316
+24864
+284
+43
+2052
+5582
+10993
+707
+25334
+25849
+25850
+25851
+25852
+7053
+22308
+23103
+23603
+213
+25853
+21371
+2577
+1147
+19
+14
+25854
+17480
+25855
+25856
+19091
+25857
+25858
+98
+25859
+14604
+3546
+57
+9449
+590
+1542
+7137
+17349
+15
+25860
+25202
+2724
+25861
+14
+13372
+32
+213
+1051
+25862
+19618
+13721
+25863
+25864
+21698
+25865
+14369
+2
+1765
+21835
+12397
+665
+3546
+1100
+22717
+2882
+4441
+25866
+19618
+337
+8668
+25867
+694
+25868
+284
+18695
+2121
+25869
+20
+25870
+24303
+989
+3978
+9
+32
+3119
+25871
+6110
+25872
+25873
+20
+25874
+8427
+24907
+25875
+1715
+4616
+25876
+213
+25877
+155
+57
+1244
+25878
+491
+25879
+1563
+303
+8029
+10290
+9
+21126
+6372
+25880
+337
+358
+303
+16121
+25881
+25882
+25883
+1742
+248
+25884
+25885
+25584
+1090
+25886
+19
+1018
+15705
+213
+25887
+25888
+23666
+15
+25889
+18798
+272
+32
+25890
+19
+720
+25891
+25892
+24951
+24896
+24896
+3484
+442
+25893
+4
+25894
+4684
+25895
+18045
+6741
+14
+24862
+5649
+3546
+24864
+25896
+25897
+25898
+3546
+1812
+3543
+25899
+25900
+21698
+6212
+25901
+3546
+14
+25902
+11593
+43
+24303
+1134
+345
+25903
+3546
+1817
+25904
+25905
+1357
+25906
+272
+2314
+590
+9
+5780
+590
+514
+25907
+2
+25908
+25909
+590
+25910
+19618
+14079
+25911
+566
+43
+13721
+21947
+7917
+96
+4285
+2809
+1991
+13721
+25912
+1049
+286
+1542
+25913
+2
+590
+17082
+25914
+2476
+8255
+19618
+514
+10011
+43
+25915
+98
+25916
+25917
+43
+2314
+1517
+25918
+303
+14369
+24862
+25919
+19931
+590
+373
+4550
+15718
+25920
+25921
+25636
+21031
+201
+303
+25922
+25923
+25924
+25925
+25926
+25927
+1961
+8280
+25928
+19362
+25929
+25930
+23547
+2830
+24978
+25931
+25932
+14
+25933
+14477
+14369
+5614
+15718
+13721
+1423
+25934
+19
+23727
+3543
+3546
+25935
+2197
+25936
+25937
+25938
+9578
+25939
+155
+25940
+14
+18300
+72
+7743
+25941
+3546
+25942
+11754
+590
+155
+6785
+7053
+286
+5088
+10946
+25943
+809
+373
+25944
+22963
+24303
+14
+9410
+25945
+25946
+25947
+25948
+25949
+25584
+25950
+12
+25951
+4280
+24725
+25952
+2764
+20339
+13111
+16140
+25953
+25954
+2201
+10030
+137
+4050
+21947
+25955
+5204
+464
+12067
+16885
+25237
+170
+3546
+14
+13721
+22
+6459
+25956
+18178
+1577
+25957
+14604
+25958
+25959
+1300
+1160
+20
+373
+25683
+345
+13721
+20645
+13721
+19618
+201
+25960
+19618
+3030
+13721
+1364
+19
+554
+25871
+3709
+21045
+3338
+373
+22940
+43
+349
+9123
+18982
+3546
+3546
+36
+19
+25961
+25962
+19931
+6261
+533
+3546
+6794
+25963
+6928
+25964
+13721
+25965
+14
+159
+24144
+25584
+25146
+25966
+19218
+8188
+43
+590
+43
+19618
+3353
+25967
+228
+25659
+7053
+2707
+23103
+25968
+6095
+1082
+25969
+25970
+25971
+22986
+2009
+43
+25972
+286
+25973
+25974
+10108
+25975
+9410
+23103
+17654
+23071
+2136
+23196
+25976
+1817
+1765
+3546
+4990
+25977
+48
+14369
+15
+25978
+19
+25979
+25980
+538
+17151
+188
+25981
+25237
+15038
+25982
+16437
+25983
+15718
+286
+25984
+21689
+25985
+6518
+9
+25986
+270
+16618
+25987
+286
+11762
+24896
+6004
+20329
+25988
+5085
+25989
+18695
+25990
+16798
+25991
+22787
+495
+20063
+590
+19
+21689
+25992
+4463
+25993
+16
+53
+25994
+25995
+32
+32
+25996
+14369
+1743
+24303
+1804
+25997
+43
+14369
+25998
+14369
+25999
+26000
+26001
+14069
+26002
+1961
+26003
+554
+26004
+21947
+26005
+19478
+519
+89
+26006
+15824
+5803
+272
+26007
+2000
+19618
+188
+26008
+958
+26009
+15998
+26010
+26011
+554
+26012
+26013
+1013
+22065
+1961
+554
+26014
+26015
+1021
+26016
+9
+142
+1524
+26017
+12506
+14
+19404
+26018
+9
+7886
+19655
+15592
+9937
+26019
+590
+5780
+3394
+1529
+17609
+13721
+3077
+9
+536
+11762
+9
+21947
+26020
+26021
+13721
+14
+19
+21031
+43
+26022
+586
+26023
+1991
+26024
+2316
+11762
+1013
+26025
+26026
+613
+19
+377
+345
+26027
+24864
+26028
+18045
+26029
+26030
+24303
+26031
+26032
+26033
+26034
+26035
+14369
+349
+1642
+3067
+19091
+12987
+179
+24725
+213
+19
+43
+26036
+26037
+736
+7053
+19
+21734
+1300
+26038
+19
+17084
+26039
+5627
+155
+26040
+1012
+21689
+8015
+19618
+57
+2410
+10
+8351
+32
+12067
+26041
+7357
+3546
+23490
+26042
+26043
+14477
+554
+9
+26044
+26045
+6950
+26046
+26047
+26048
+98
+14369
+2537
+32
+26049
+20195
+8248
+21947
+101
+8053
+26050
+11804
+3546
+1912
+9
+19
+15718
+17151
+26051
+12826
+5117
+26052
+1384
+26053
+1784
+26054
+915
+26055
+26056
+17112
+89
+21947
+26057
+9
+26058
+26059
+15541
+11282
+26060
+225
+26061
+278
+665
+14
+14278
+21947
+19218
+13566
+26062
+26063
+590
+26064
+89
+590
+22302
+57
+26065
+43
+52
+3546
+2577
+26066
+21947
+1364
+16102
+13396
+26067
+12005
+26068
+26069
+14369
+7912
+1382
+1011
+17982
+3546
+17400
+155
+12404
+208
+8721
+20068
+16941
+4411
+32
+24896
+26070
+26071
+24864
+26072
+345
+13721
+1742
+26073
+24725
+14363
+647
+6571
+14477
+17911
+26074
+573
+2978
+43
+8367
+26075
+26076
+590
+19
+26077
+20497
+872
+720
+26078
+12005
+861
+13721
+349
+1100
+3546
+21689
+24732
+519
+26079
+26080
+155
+26081
+14369
+590
+26082
+11647
+9617
+18045
+26083
+26084
+3546
+10385
+43
+3546
+17151
+677
+26085
+647
+22918
+736
+14369
+4221
+1300
+1561
+26086
+272
+26087
+4388
+26088
+43
+26089
+13539
+17136
+26090
+19404
+26091
+13721
+1739
+24339
+16437
+24978
+1768
+207
+2
+26092
+26093
+26094
+14
+9
+26095
+317
+26096
+26097
+26098
+19
+7137
+26099
+21947
+3546
+590
+26100
+26101
+8668
+8967
+1107
+18045
+22963
+43
+862
+38
+26102
+26103
+26104
+19
+2
+2040
+26105
+26106
+345
+1917
+16102
+971
+3601
+26107
+590
+26108
+14
+43
+19823
+26109
+26110
+9
+3978
+21947
+26111
+528
+1172
+14
+24864
+26112
+345
+15104
+26113
+13375
+14369
+32
+17698
+24303
+282
+26114
+29
+14
+865
+14
+677
+26115
+24864
+26116
+26117
+17151
+4463
+1234
+26118
+26119
+26120
+14
+26121
+26122
+1612
+26123
+2694
+9
+566
+16437
+26124
+7987
+26125
+26126
+4230
+4550
+4764
+26127
+26128
+2
+26129
+13330
+1018
+14001
+24565
+24864
+19618
+26130
+7291
+26131
+53
+21689
+4
+14369
+590
+43
+14369
+17151
+26132
+26133
+4088
+12768
+21947
+26134
+5085
+7014
+13721
+26135
+12152
+26136
+15
+5780
+26137
+1090
+26138
+26139
+26140
+26141
+14363
+1112
+26142
+26143
+26144
+790
+234
+26145
+590
+3242
+398
+14
+26146
+8392
+13701
+140
+1382
+26147
+26148
+2009
+26149
+26150
+26151
+14369
+14
+26152
+21947
+14
+26153
+43
+349
+14369
+26154
+26155
+19797
+5446
+22
+26156
+1520
+720
+17136
+23122
+26157
+16014
+1090
+26158
+379
+43
+26159
+24725
+26160
+4463
+358
+26161
+14693
+7053
+26162
+590
+26163
+7048
+14814
+26164
+26165
+57
+399
+57
+26166
+26167
+25237
+26168
+14369
+26169
+14369
+19
+19618
+14185
+26170
+590
+21947
+24144
+845
+26171
+32
+43
+519
+3546
+25237
+26172
+345
+1021
+26173
+16118
+25833
+9
+1465
+14369
+21947
+26174
+6776
+17846
+345
+26175
+1100
+26176
+590
+9
+21947
+26177
+26178
+43
+2733
+26179
+26180
+19618
+137
+1738
+4918
+26181
+57
+13856
+8798
+4526
+20645
+26182
+21947
+333
+21689
+7137
+1013
+26183
+14909
+26184
+26185
+554
+26186
+15694
+22
+26187
+13721
+286
+26188
+14
+2919
+26189
+26190
+19
+43
+345
+14
+24790
+24303
+26191
+14
+29
+4088
+26192
+17151
+14
+26001
+1870
+26193
+14
+26194
+1010
+379
+26195
+26196
+968
+597
+26197
+26198
+23541
+4550
+377
+590
+43
+26199
+13484
+887
+26200
+21947
+26201
+286
+26202
+9
+26203
+26204
+23290
+286
+18591
+1224
+26205
+24864
+18019
+21947
+345
+1823
+26206
+43
+6620
+9431
+26207
+26208
+26209
+25683
+26210
+3546
+590
+24303
+26211
+1091
+19
+14604
+26212
+358
+3546
+3559
+26213
+26214
+21689
+36
+24303
+26215
+9400
+25659
+26216
+7137
+26217
+323
+3546
+25683
+7032
+1612
+8037
+26218
+5117
+501
+345
+720
+590
+13721
+26219
+7982
+24303
+19538
+26220
+26221
+590
+26222
+2770
+3330
+26223
+14
+3519
+827
+26224
+26225
+15
+3338
+484
+18383
+26226
+11822
+1208
+26227
+14604
+26228
+21947
+8668
+15906
+19
+4855
+20942
+26229
+25237
+3546
+25659
+15240
+736
+14477
+26230
+26231
+2034
+104
+8967
+16102
+924
+5326
+7588
+26232
+26233
+3978
+26234
+7053
+4518
+8110
+558
+14
+19109
+457
+590
+26235
+26236
+26237
+1502
+13361
+19
+26238
+19618
+2832
+21947
+26239
+14
+809
+590
+14
+3553
+26240
+19618
+26241
+19030
+23192
+14
+26242
+7855
+26243
+14477
+26244
+10
+4070
+564
+26245
+3119
+647
+21947
+26246
+519
+26247
+590
+14992
+14935
+26248
+26249
+12479
+59
+22269
+7357
+32
+26250
+26251
+1924
+26252
+1870
+18655
+16925
+9543
+3546
+590
+26253
+13405
+26254
+26255
+16437
+26256
+140
+26257
+26258
+17151
+26259
+43
+25927
+2260
+11274
+89
+26260
+11321
+9
+98
+22468
+112
+9779
+624
+3330
+2019
+495
+10
+22552
+5305
+14477
+286
+1316
+8177
+19
+26261
+20265
+26262
+10706
+26263
+26264
+26265
+23727
+26266
+14
+10364
+26267
+19
+7835
+43
+26268
+15
+26269
+6261
+1316
+474
+14342
+26270
+26271
+26272
+14
+26273
+533
+26274
+26275
+22500
+17136
+26276
+4550
+26277
+26278
+13131
+736
+14000
+21885
+22
+25334
+11762
+6479
+26279
+26280
+7477
+26281
+26282
+26283
+20340
+21947
+26284
+5085
+13361
+43
+2804
+15718
+32
+713
+1989
+19
+8188
+115
+209
+827
+345
+6627
+57
+26285
+26286
+1100
+185
+26287
+14369
+26288
+13484
+14
+26289
+26290
+21947
+1817
+14604
+15914
+645
+26291
+26292
+208
+1013
+16437
+8994
+26293
+24862
+26294
+23406
+3546
+9
+13619
+21947
+26295
+26296
+14
+26297
+26298
+25140
+745
+26299
+43
+14363
+9
+21947
+209
+3764
+43
+17151
+33
+17151
+26300
+14962
+24864
+16949
+26301
+9849
+8316
+1425
+3546
+1066
+26302
+1514
+26303
+24896
+26304
+5614
+26305
+17228
+26306
+26307
+155
+915
+2561
+590
+9
+13721
+1512
+590
+5085
+26308
+26309
+10
+286
+43
+14369
+26310
+19
+9
+26311
+26312
+3546
+6499
+5780
+43
+20946
+43
+26313
+590
+26314
+1124
+26315
+26316
+26317
+26318
+14
+19
+26319
+26320
+26321
+26322
+14
+887
+43
+19209
+16118
+5085
+272
+2325
+713
+26323
+57
+26324
+590
+57
+12722
+196
+2577
+1817
+373
+817
+26325
+5085
+26326
+26327
+2410
+349
+26328
+3950
+10846
+1655
+26329
+2121
+20676
+671
+2577
+590
+861
+22236
+24269
+26330
+3343
+188
+19931
+16819
+26331
+11762
+3546
+16695
+3924
+26332
+26333
+26334
+26335
+21947
+32
+26336
+26337
+590
+26338
+155
+22075
+24227
+26339
+3546
+2064
+6251
+18045
+26340
+13721
+25237
+26341
+487
+2427
+26342
+3460
+21947
+25928
+25758
+26343
+19
+1021
+19209
+1823
+26344
+26345
+2029
+790
+53
+4550
+77
+18136
+26346
+2197
+16125
+23103
+16369
+26347
+14369
+26348
+21947
+26349
+286
+12936
+14369
+26350
+6560
+26351
+349
+26352
+25564
+188
+26353
+26354
+590
+26355
+24207
+10621
+2694
+26356
+14369
+26357
+21947
+26358
+3978
+22
+26359
+26360
+26361
+424
+26362
+14
+26363
+26364
+22308
+4502
+26365
+13149
+26366
+4550
+26367
+536
+6010
+1338
+26368
+10642
+26369
+286
+14369
+26370
+26371
+352
+3376
+23547
+3978
+9
+26372
+155
+26373
+21947
+26374
+26375
+24864
+26376
+2310
+26377
+6950
+26378
+21947
+15216
+9
+24423
+19618
+26379
+586
+1222
+155
+14477
+3243
+26380
+14
+3546
+43
+1961
+18579
+14
+14477
+590
+26381
+3484
+26382
+26383
+16941
+8651
+26384
+936
+26385
+14369
+251
+26386
+43
+43
+26387
+26388
+20
+9
+26389
+26390
+26391
+26392
+26393
+26394
+3171
+5627
+19618
+14
+43
+2260
+14604
+26395
+26396
+1369
+1882
+26397
+13307
+26398
+10
+26399
+13897
+21947
+24303
+26400
+3649
+26401
+26402
+554
+17653
+13457
+26403
+14
+26404
+13149
+26405
+2694
+26406
+568
+590
+26407
+43
+26408
+26409
+26410
+155
+23037
+2260
+26411
+26412
+26413
+25683
+26414
+26415
+23103
+25683
+24144
+1710
+14
+26416
+554
+26417
+26418
+3553
+26419
+9
+26420
+26421
+19618
+9
+24864
+11762
+14
+43
+26422
+26423
+26424
+89
+5085
+14369
+26425
+26426
+22963
+3
+21947
+43
+19
+21947
+26427
+17151
+3546
+43
+17607
+21947
+19404
+26428
+9837
+19
+1870
+26429
+1051
+26430
+9
+43
+25584
+8188
+26431
+5803
+4
+26432
+764
+26433
+3546
+26434
+15718
+22
+26435
+26436
+70
+26403
+26437
+5584
+26438
+1224
+26439
+26440
+14843
+26441
+827
+26442
+155
+10428
+26443
+18951
+26444
+590
+5085
+26445
+26446
+13129
+12987
+43
+250
+43
+26447
+26448
+60
+26449
+26450
+671
+12304
+272
+1364
+26451
+26452
+43
+14369
+14152
+2769
+16118
+26453
+26454
+3252
+15647
+26455
+2040
+8465
+14343
+26456
+8188
+2733
+3
+25683
+26457
+26458
+7835
+323
+57
+26459
+19618
+2065
+25683
+26460
+26461
+12
+24896
+26462
+26463
+26464
+22042
+9
+26465
+16121
+822
+15809
+17346
+683
+26466
+15718
+8668
+15
+22798
+26467
+2029
+15
+8670
+1090
+14
+514
+6341
+3553
+43
+357
+25140
+20161
+1875
+8351
+8103
+43
+2
+26468
+26469
+6877
+14
+446
+286
+19618
+14211
+26470
+26471
+10
+13150
+10486
+26472
+19
+5085
+1961
+26473
+21947
+21947
+7183
+4855
+15810
+26474
+19
+24896
+558
+3946
+26475
+21947
+14369
+26476
+8953
+415
+3546
+1559
+14
+2728
+26477
+26478
+3470
+9
+22
+12155
+26479
+26480
+9
+13721
+2
+26481
+9819
+791
+26482
+21947
+26483
+26484
+19
+12067
+17790
+14477
+26485
+26486
+26487
+26488
+590
+3546
+14369
+10774
+26489
+26490
+15466
+26491
+26492
+11374
+823
+26493
+590
+14
+26494
+26495
+9
+22485
+96
+43
+3063
+17151
+26496
+26497
+915
+26498
+11964
+26499
+2
+646
+536
+26500
+24725
+1834
+272
+26501
+26502
+3801
+26503
+6499
+19
+20941
+7053
+25683
+26504
+26505
+590
+647
+26506
+6072
+26507
+26508
+7907
+26509
+25237
+4387
+26510
+26511
+1200
+345
+974
+222
+26512
+26513
+2795
+3105
+26514
+26515
+338
+21947
+26516
+7810
+26517
+14603
+26518
+26519
+32
+19618
+11229
+21947
+2449
+26520
+286
+1542
+8496
+26521
+11754
+26522
+9
+26403
+26523
+1817
+715
+26524
+26525
+3317
+21947
+3546
+936
+590
+26526
+827
+26527
+26528
+26529
+19
+2
+26530
+15948
+26531
+19928
+872
+26532
+19
+1011
+736
+26533
+590
+26534
+24017
+4650
+832
+11845
+26535
+26536
+26537
+249
+26538
+18695
+26539
+18695
+348
+23343
+249
+17039
+26540
+21947
+26541
+26542
+26543
+806
+25140
+26544
+26545
+21947
+26546
+9074
+32
+4550
+26547
+590
+26548
+26549
+26550
+10642
+19
+286
+6877
+26551
+58
+43
+26552
+19
+9410
+43
+26553
+201
+14369
+25584
+16876
+21689
+24039
+25683
+3546
+25584
+15
+1066
+17151
+26554
+14
+26555
+3546
+26556
+196
+554
+14369
+19
+25334
+286
+9
+17033
+22
+9074
+26557
+43
+554
+26558
+415
+17411
+26559
+24896
+19618
+26560
+3546
+43
+26561
+26562
+10
+399
+26563
+16017
+14000
+26564
+43
+5451
+26565
+26566
+14369
+15718
+19
+272
+2260
+26567
+15
+1605
+26568
+286
+286
+26569
+26570
+590
+349
+26571
+19
+26572
+19
+533
+8297
+4463
+20442
+19
+333
+26573
+26574
+5780
+1559
+21947
+26575
+12005
+8668
+19
+26576
+3353
+536
+26577
+16653
+26578
+11428
+286
+26579
+14
+70
+590
+16826
+21947
+586
+43
+26580
+24896
+3417
+15
+26581
+26582
+26583
+20643
+23530
+2324
+57
+8127
+17635
+17151
+1154
+2012
+26584
+25584
+9
+17345
+22666
+4388
+20470
+26585
+286
+15683
+26586
+14369
+14604
+26587
+1529
+1542
+3030
+26588
+26589
+213
+26590
+1090
+25140
+26591
+3452
+14
+26592
+26593
+21947
+26594
+26595
+26596
+26597
+303
+26598
+26599
+379
+21947
+11215
+26600
+14
+26601
+7208
+19618
+25140
+209
+25735
+26602
+26603
+26604
+26476
+26605
+26339
+3908
+17294
+14369
+26606
+15
+23103
+248
+2561
+284
+26607
+1578
+26608
+349
+284
+26609
+4028
+9900
+26610
+26611
+19
+3446
+4899
+358
+3976
+303
+14
+22573
+26612
+213
+15584
+26613
+5654
+26614
+26615
+23885
+17653
+26616
+337
+284
+8668
+11995
+15
+26617
+10
+26618
+26619
+26620
+26621
+1356
+19
+14369
+9384
+26622
+248
+4367
+8743
+15718
+26623
+10
+16727
+26624
+26625
+24864
+26626
+2342
+26627
+272
+1513
+26628
+15
+26629
+586
+19918
+20
+7855
+26630
+590
+26631
+57
+19220
+3546
+26632
+337
+26633
+7364
+7256
+66
+26634
+20563
+18325
+25584
+337
+176
+21947
+26635
+26636
+26637
+1774
+5780
+17691
+9
+26638
+24896
+21947
+26639
+43
+43
+7458
+1011
+26640
+15193
+26641
+17405
+16684
+337
+15939
+13566
+272
+590
+303
+8100
+19
+19618
+13213
+15907
+43
+26642
+491
+26643
+554
+284
+9
+26644
+19
+2770
+13349
+13343
+554
+671
+26645
+43
+26646
+9
+20
+2006
+43
+26647
+24864
+26648
+26649
+26650
+20866
+14
+915
+19
+25904
+26651
+26652
+26653
+2804
+24207
+20315
+26654
+26655
+26656
+24238
+26657
+9
+66
+26658
+19
+337
+26659
+26660
+26661
+736
+26662
+26663
+201
+26664
+349
+345
+26665
+26666
+8668
+26667
+26668
+286
+25009
+5904
+26669
+26670
+26671
+43
+1382
+12438
+22103
+26672
+2117
+26673
+274
+720
+349
+14
+8798
+26674
+2040
+25683
+18386
+26675
+26676
+26677
+142
+26678
+5780
+7048
+827
+26679
+2410
+14604
+13566
+14020
+14
+26680
+357
+26681
+26682
+26683
+26493
+115
+26684
+272
+3287
+590
+26685
+3601
+21947
+26686
+3559
+17151
+26687
+8256
+24449
+26688
+26689
+22633
+20328
+14369
+21947
+590
+26690
+23464
+1425
+286
+26691
+26692
+26493
+21947
+14
+17871
+26693
+2415
+337
+842
+3480
+26694
+4278
+1696
+20
+26695
+15820
+2496
+20
+213
+26696
+1013
+26697
+26698
+18718
+26699
+21689
+705
+4367
+9245
+26700
+24303
+19
+19618
+53
+248
+26701
+26702
+16826
+26703
+43
+5085
+736
+26704
+26705
+26706
+26707
+14770
+26708
+26709
+26710
+29
+178
+19
+590
+26711
+17151
+5393
+13721
+1991
+26712
+26713
+26714
+590
+80
+26715
+21947
+8953
+24
+8566
+825
+14369
+26716
+701
+26717
+8668
+274
+14
+14
+14
+26718
+13296
+284
+1082
+19404
+26719
+26720
+736
+15107
+26721
+26722
+3546
+3546
+358
+26723
+18824
+9210
+26724
+13721
+8668
+112
+647
+17320
+25129
+23579
+9
+1482
+3034
+26725
+26726
+823
+26631
+286
+1612
+32
+13411
+23226
+16387
+29
+3546
+9497
+26727
+345
+26728
+17698
+26729
+43
+26730
+4634
+736
+114
+26731
+26732
+3484
+14
+1224
+24303
+14
+1745
+12987
+14001
+26733
+17151
+26734
+26735
+3435
+915
+26736
+15560
+1090
+140
+411
+736
+12832
+1882
+26493
+272
+12
+196
+1961
+26737
+590
+15718
+16440
+5085
+26738
+20
+284
+736
+43
+26739
+26740
+1529
+19
+1787
+43
+16826
+20442
+26741
+26742
+43
+26743
+26744
+3546
+26745
+26746
+13721
+2957
+18695
+26239
+43
+24725
+26747
+3546
+14369
+10616
+26748
+26749
+26493
+19
+57
+26750
+26751
+67
+9
+15
+337
+14369
+3546
+43
+26752
+26753
+26754
+9
+26755
+14
+12987
+19489
+15
+26756
+26757
+19
+16944
+2
+11308
+4551
+3119
+2764
+11321
+137
+9
+4805
+736
+26758
+140
+25140
+2577
+3
+301
+26759
+717
+26760
+26761
+26762
+17749
+26763
+19
+823
+25683
+26764
+554
+369
+26765
+43
+5085
+26766
+19852
+2
+19
+3546
+24174
+26767
+828
+849
+1090
+26403
+7835
+26768
+590
+3546
+1812
+26769
+26770
+26771
+213
+43
+1090
+14186
+26772
+17151
+16024
+26493
+26773
+26774
+1051
+554
+11321
+26775
+13435
+26776
+1172
+590
+9
+26777
+38
+286
+16102
+26778
+26779
+1605
+15683
+665
+16028
+26780
+590
+3546
+137
+248
+21947
+19
+284
+284
+3252
+14477
+26781
+26782
+7009
+1562
+4221
+26783
+14515
+15718
+26784
+3251
+665
+3119
+19817
+15718
+2998
+3394
+564
+303
+10389
+248
+26785
+26786
+26787
+9
+3546
+590
+484
+26788
+248
+159
+26789
+26790
+24505
+20442
+8392
+26791
+26792
+155
+286
+32
+349
+24541
+25140
+188
+1513
+24908
+60
+26793
+26794
+8210
+751
+26795
+26796
+213
+303
+590
+1160
+284
+26797
+26798
+25778
+1768
+26676
+26799
+23207
+9
+26800
+4179
+32
+4735
+26801
+4550
+16437
+9343
+26802
+26803
+26804
+16118
+284
+5438
+26805
+26806
+26807
+14477
+248
+26808
+24896
+26809
+14603
+4684
+26810
+14369
+26811
+19404
+26812
+10654
+24303
+15657
+43
+1018
+26813
+286
+23226
+24864
+14363
+26814
+26815
+26816
+26817
+21947
+26818
+11762
+26819
+21689
+26820
+26821
+26822
+26403
+14871
+26823
+20339
+43
+25237
+26676
+202
+26824
+213
+26825
+736
+26826
+26827
+26828
+26829
+8330
+26830
+795
+26831
+19404
+26549
+3544
+2733
+1561
+18081
+14
+2281
+11822
+20470
+26832
+3353
+3546
+303
+2577
+24998
+57
+26833
+12
+24144
+720
+2
+26834
+12480
+14369
+2577
+3994
+213
+16024
+248
+26835
+26836
+58
+18860
+26837
+736
+16788
+26838
+26839
+6991
+26840
+26841
+26842
+26843
+26844
+4581
+26845
+1812
+25140
+1100
+26846
+14909
+26847
+19
+647
+2
+4463
+349
+46
+536
+26848
+484
+26849
+32
+26545
+26850
+4406
+26851
+26852
+26853
+14369
+6939
+26854
+43
+11762
+26855
+26856
+26857
+26858
+26859
+24423
+25683
+16240
+26792
+663
+3753
+26860
+26861
+8392
+4550
+26862
+14660
+8188
+14363
+1090
+26863
+345
+7585
+14363
+26864
+26865
+26866
+43
+26867
+5780
+26868
+20
+213
+26869
+26870
+11471
+14369
+590
+14
+26871
+21689
+26872
+284
+14369
+19618
+1543
+26873
+1829
+26874
+18382
+43
+2318
+24324
+9
+25683
+26496
+3546
+19655
+26875
+647
+26876
+2832
+19969
+21947
+20617
+9
+21947
+25237
+345
+26877
+26878
+2040
+26879
+24207
+11548
+2463
+1961
+323
+26880
+337
+337
+1244
+20646
+213
+1790
+248
+5022
+10
+26881
+270
+14369
+5314
+213
+1038
+2902
+26882
+26883
+8460
+26884
+6840
+736
+1696
+26885
+26886
+26887
+26888
+3484
+26889
+21149
+14
+26890
+43
+15
+137
+26891
+26892
+21947
+26893
+21947
+1384
+9
+26894
+26029
+26895
+26896
+2561
+11808
+43
+3546
+20340
+20897
+345
+213
+4028
+26897
+26898
+6364
+7516
+22684
+26899
+17151
+26900
+248
+9
+26901
+284
+303
+10702
+57
+213
+26902
+12152
+43
+23196
+3994
+720
+26903
+18503
+26904
+3
+26905
+590
+26906
+590
+8465
+43
+3546
+26907
+4441
+26908
+26909
+26910
+32
+25237
+3764
+25281
+26911
+13721
+1817
+3
+26184
+26912
+14369
+720
+15718
+26913
+379
+11754
+411
+20470
+15
+19618
+26914
+6915
+17670
+26915
+26916
+26917
+26918
+26919
+26920
+26921
+1021
+13150
+3790
+26922
+514
+26923
+14
+3546
+14649
+14
+26924
+26925
+26926
+26403
+573
+13721
+26927
+12180
+26928
+14
+1787
+26929
+9
+43
+248
+3417
+26724
+9
+519
+4241
+3828
+26930
+26931
+1513
+26932
+26933
+19
+13974
+4502
+213
+1369
+26934
+26935
+26936
+26937
+1091
+48
+16413
+7045
+2009
+5704
+694
+590
+26938
+26939
+19618
+15
+26940
+4650
+23425
+26941
+11889
+57
+11762
+26942
+5629
+22
+26943
+26944
+188
+26945
+57
+26946
+411
+19
+14369
+872
+14604
+26947
+26948
+26949
+1021
+20600
+17749
+26950
+491
+11428
+590
+26951
+26952
+26953
+12987
+286
+26954
+26955
+17972
+3601
+5561
+590
+17490
+1961
+138
+26956
+2733
+590
+26957
+26958
+26959
+764
+26960
+286
+57
+442
+26961
+26962
+43
+26963
+4209
+26964
+24864
+16437
+14
+415
+26965
+501
+26966
+11762
+9524
+26967
+26968
+26969
+26970
+19618
+188
+46
+345
+3546
+9
+20339
+26971
+2619
+26972
+17338
+12468
+3546
+26973
+21681
+43
+1011
+1082
+590
+26974
+26975
+590
+24864
+936
+1870
+519
+2514
+26976
+645
+590
+286
+43
+5780
+3187
+26977
+26978
+26979
+26980
+32
+14079
+26981
+5627
+872
+26982
+10
+16389
+26983
+26984
+26985
+568
+14604
+647
+43
+5780
+1817
+22
+24207
+12684
+20871
+2540
+26986
+284
+185
+26987
+26988
+6286
+16437
+2459
+2514
+26989
+590
+26990
+284
+14369
+4803
+15939
+3546
+9
+26991
+182
+736
+3546
+19618
+26992
+26403
+19
+345
+26993
+26994
+15728
+342
+213
+26995
+345
+446
+345
+14369
+5773
+15718
+19573
+26996
+26997
+5271
+26998
+26999
+317
+43
+27000
+24640
+345
+27001
+286
+5188
+665
+1529
+27002
+790
+3546
+27003
+27004
+57
+57
+27005
+27006
+27007
+7944
+4217
+19
+13721
+66
+27008
+1502
+27009
+25584
+27010
+519
+18364
+27011
+24716
+27012
+349
+24896
+1907
+10
+27013
+27014
+27015
+24207
+178
+14369
+286
+3994
+99
+827
+18695
+25442
+27016
+1295
+19009
+18205
+3546
+2902
+3406
+3546
+9
+16607
+646
+379
+590
+209
+303
+21245
+3601
+27017
+8994
+155
+21439
+27018
+9796
+213
+2415
+27019
+464
+337
+2601
+14369
+326
+27020
+648
+27021
+590
+478
+1287
+21889
+27022
+77
+15045
+1749
+647
+910
+27023
+27024
+19618
+27025
+27026
+25683
+43
+13721
+646
+27027
+27028
+43
+25140
+21947
+349
+27029
+27030
+89
+15
+27031
+27032
+21522
+21947
+8668
+43
+21947
+66
+2537
+590
+303
+22963
+2019
+1743
+43
+27033
+27034
+27035
+1181
+27036
+19
+3994
+24873
+250
+89
+20770
+57
+5169
+27037
+265
+25237
+26484
+27038
+19
+27039
+27040
+27041
+1889
+27042
+27043
+27044
+27045
+25097
+25683
+27046
+104
+19
+27047
+19404
+27048
+13848
+10781
+23103
+14
+34
+27049
+27050
+178
+14
+8967
+720
+14369
+882
+27051
+14532
+2882
+32
+27052
+12916
+18833
+15797
+1415
+27053
+27054
+27055
+27056
+27057
+1066
+27058
+27059
+8188
+17151
+27060
+27061
+27062
+27063
+2329
+25584
+27064
+27065
+27066
+24896
+27067
+5561
+5780
+1160
+25683
+2577
+2287
+4979
+3421
+3546
+27068
+27069
+27070
+24303
+27071
+590
+1157
+27072
+865
+27073
+3317
+10
+19
+27074
+14477
+3484
+27075
+27076
+27077
+2
+27078
+27079
+27080
+15050
+317
+27081
+27082
+15718
+2029
+27083
+25144
+27084
+694
+10727
+590
+4502
+14276
+249
+14369
+412
+209
+27085
+27086
+27087
+27088
+14
+27089
+5041
+27090
+1542
+27091
+7379
+249
+7981
+27092
+5780
+27093
+20470
+27094
+1961
+27095
+92
+22
+317
+27096
+19
+27097
+6095
+411
+27098
+2668
+27099
+20
+27100
+27101
+10028
+1817
+4982
+1870
+3862
+790
+11282
+27102
+27103
+3601
+15320
+27104
+26706
+89
+12987
+27105
+137
+19
+19618
+27106
+27107
+27108
+1955
+27109
+14
+26975
+10038
+14
+14645
+16121
+27110
+27111
+1870
+411
+19404
+13721
+4020
+3546
+27112
+27113
+17
+27114
+14
+27115
+27116
+2733
+3978
+15718
+23550
+26744
+24896
+24303
+20161
+43
+25584
+2043
+27117
+27118
+9
+24896
+14
+27119
+6499
+27120
+822
+24725
+21041
+27121
+590
+1765
+417
+27122
+27123
+27124
+27125
+27126
+1139
+27127
+27128
+27129
+17119
+425
+14
+27130
+8004
+27131
+14
+104
+6122
+5908
+27132
+11762
+11341
+201
+3546
+27133
+27134
+27135
+1219
+8762
+27136
+25140
+27137
+9
+27138
+4126
+4765
+936
+27139
+21947
+22420
+10604
+3034
+3067
+6188
+27140
+11321
+7053
+3
+27141
+4028
+32
+27142
+27143
+27144
+27145
+27146
+21187
+27147
+18896
+2560
+179
+13721
+745
+14369
+21027
+3034
+27148
+9796
+14
+345
+27149
+27150
+3546
+27151
+1524
+24038
+303
+142
+15718
+27152
+7053
+14369
+446
+8098
+1523
+66
+27153
+27154
+27155
+27156
+27157
+27158
+24
+27159
+15
+27160
+2140
+19618
+19618
+8019
+4388
+27161
+705
+43
+23103
+15728
+52
+14369
+21689
+9
+27162
+989
+20541
+22666
+27163
+27164
+27165
+1924
+27166
+23881
+43
+27167
+2015
+27168
+22555
+2260
+1559
+1169
+21947
+14
+349
+27169
+27170
+590
+3
+20315
+19994
+284
+245
+27171
+23418
+299
+24896
+27172
+491
+104
+27173
+27174
+13721
+590
+3553
+7053
+27175
+27176
+27177
+15556
+665
+38
+9
+8392
+27178
+13721
+554
+27179
+25683
+1812
+27180
+3546
+18364
+27181
+11211
+43
+27182
+27183
+345
+11321
+27184
+7991
+17206
+27185
+1604
+16024
+1502
+43
+21031
+6812
+27186
+9
+27187
+18503
+21947
+3546
+27188
+27189
+9
+27190
+365
+11283
+21947
+27191
+4414
+27192
+27193
+24340
+27194
+27195
+9460
+18695
+2449
+27196
+196
+27197
+27198
+21947
+4550
+27199
+24050
+27200
+15589
+17151
+25683
+9
+712
+27201
+43
+23770
+1605
+27202
+21947
+27203
+26403
+27204
+8280
+43
+10848
+27205
+21947
+27206
+1765
+21947
+1470
+14
+27207
+27208
+27209
+21689
+25584
+24864
+20161
+23890
+27210
+694
+27211
+21947
+27212
+27213
+24864
+3732
+2769
+14
+19655
+25140
+27214
+27215
+27216
+1384
+57
+43
+14
+14477
+164
+27217
+5780
+27218
+27219
+13841
+11822
+1021
+27220
+11792
+27221
+764
+26922
+5780
+3239
+12203
+399
+1013
+27222
+446
+1615
+692
+9
+26493
+27223
+27224
+1513
+27225
+5577
+2489
+15
+2260
+27088
+1310
+19618
+27226
+9617
+27227
+2459
+27228
+3601
+15
+1465
+27229
+616
+2791
+2919
+15
+26744
+7288
+22
+1047
+27230
+2882
+27231
+3546
+27232
+20
+27233
+8721
+27234
+20764
+27235
+27236
+7717
+14477
+286
+27237
+286
+35
+24045
+430
+18503
+14
+43
+17136
+17972
+27238
+27239
+27240
+25636
+590
+9194
+590
+1013
+25239
+27241
+14
+2694
+9
+27242
+590
+27243
+27244
+14079
+27245
+377
+11802
+24864
+5297
+26493
+14477
+1320
+27246
+27247
+491
+222
+286
+677
+12
+590
+541
+1291
+2308
+18539
+720
+286
+4075
+4550
+142
+14795
+2287
+345
+14
+22666
+225
+22
+27248
+27249
+9688
+27250
+237
+27251
+27252
+323
+21947
+27253
+25237
+27254
+17151
+21563
+201
+323
+137
+495
+27255
+27256
+5559
+60
+27257
+14369
+19
+910
+27258
+27259
+14369
+3394
+24896
+25237
+43
+15
+5438
+27260
+27261
+27262
+2919
+201
+13721
+770
+14369
+20470
+27263
+27264
+27265
+1222
+15718
+19618
+2941
+27266
+14363
+24303
+66
+27267
+14
+2260
+1107
+27268
+3790
+21947
+25683
+27269
+15718
+27270
+2790
+8566
+14562
+8724
+27271
+1716
+14240
+27272
+720
+16437
+8297
+89
+15824
+21947
+19
+286
+27150
+286
+24303
+27273
+22986
+176
+495
+9688
+27274
+14369
+2577
+27275
+303
+27276
+22
+1090
+1444
+27277
+16206
+27278
+1514
+27279
+13680
+43
+8280
+272
+27280
+201
+915
+10111
+27281
+27282
+201
+27283
+19
+26493
+27284
+25237
+27285
+616
+11
+27286
+14
+19
+14000
+24303
+27287
+27288
+27178
+27289
+43
+27290
+12807
+464
+16305
+27291
+27292
+19797
+19618
+14369
+590
+27293
+27294
+12772
+27295
+27296
+14
+27297
+32
+17872
+6354
+18695
+990
+43
+19
+19852
+25996
+14
+21689
+27298
+27299
+8226
+21947
+27300
+3546
+10621
+590
+14175
+3978
+43
+17663
+27301
+32
+27302
+25683
+228
+23727
+3546
+26493
+27303
+24725
+4550
+27304
+27305
+43
+301
+27306
+4550
+590
+14989
+20
+1021
+736
+43
+1295
+27307
+27308
+9688
+373
+25584
+23406
+27309
+25237
+27310
+3310
+2356
+27311
+14369
+4547
+27312
+27313
+5085
+2412
+43
+24725
+15718
+13721
+1316
+27314
+1710
+222
+7991
+15
+1356
+27315
+345
+13721
+8297
+21669
+21371
+27316
+27317
+27318
+27319
+424
+25140
+27320
+3480
+5075
+648
+533
+1730
+26496
+27321
+43
+27322
+1157
+692
+27323
+27324
+27325
+27326
+11483
+18429
+27327
+92
+27328
+27329
+25683
+17151
+27330
+26647
+27331
+307
+27332
+197
+971
+14131
+27333
+616
+27334
+27335
+2694
+14369
+27336
+27337
+27338
+27339
+27340
+27341
+8098
+24303
+27342
+317
+27343
+2074
+10787
+14
+89
+27344
+19
+586
+25
+27345
+17151
+345
+27346
+15
+26744
+23741
+2124
+57
+849
+10
+27347
+13127
+27348
+6132
+24303
+1382
+251
+21947
+862
+8351
+27349
+27350
+27351
+27352
+1688
+23216
+21947
+18895
+27353
+10
+1965
+13178
+43
+21947
+27354
+27355
+27356
+14477
+27357
+27358
+1352
+27359
+27360
+369
+27361
+7855
+43
+14604
+19618
+27362
+683
+25683
+533
+272
+27363
+25683
+27364
+14369
+27365
+1779
+3828
+27366
+27367
+27368
+27369
+27370
+24303
+3
+89
+27371
+736
+27372
+14369
+27373
+3546
+27374
+14477
+27178
+25237
+17151
+27375
+98
+5085
+323
+27376
+2356
+16818
+668
+27377
+11762
+7053
+5798
+10156
+14
+286
+27378
+27120
+17
+9994
+19386
+495
+6439
+6468
+27379
+24303
+27380
+27381
+1160
+27382
+5085
+519
+1169
+27383
+27384
+7795
+1517
+27385
+5085
+27386
+16437
+27387
+43
+27388
+18914
+4055
+27389
+14363
+12426
+27390
+14
+27391
+27392
+14369
+27393
+1615
+12346
+12307
+24303
+32
+12916
+14369
+21947
+27394
+27395
+15718
+18928
+27396
+7053
+27397
+27398
+43
+2694
+27399
+24725
+19618
+27400
+14
+21337
+14
+27401
+1364
+27402
+57
+27403
+25871
+3752
+10356
+27404
+27405
+27406
+27407
+27408
+22
+442
+26744
+25683
+8188
+26493
+25683
+27409
+27410
+272
+27411
+3546
+27412
+736
+27413
+27414
+590
+27415
+27416
+27417
+1047
+21689
+27418
+13905
+1674
+20
+2121
+27419
+20
+27420
+27263
+43
+25237
+27421
+27422
+3732
+27423
+24896
+14369
+27424
+27425
+349
+25382
+21689
+19618
+1046
+21947
+27426
+15718
+27427
+7835
+25237
+23103
+590
+27428
+21947
+27429
+4518
+12005
+24303
+21947
+27430
+20616
+25140
+27431
+43
+27432
+155
+27433
+27434
+27435
+9837
+8073
+13721
+1012
+27436
+590
+27437
+25237
+27438
+27439
+14
+27440
+21947
+36
+23103
+15308
+27441
+19618
+27442
+27443
+14603
+38
+27444
+27445
+590
+7053
+27446
+27447
+19838
+27448
+27449
+27450
+14369
+412
+5780
+43
+27451
+6130
+27452
+27453
+27454
+15718
+9
+23103
+43
+19404
+14477
+27455
+7053
+44
+27456
+18357
+27457
+5390
+27458
+27459
+13307
+14477
+43
+27460
+27461
+2325
+27462
+27463
+27464
+27465
+19
+27466
+721
+27467
+27468
+4426
+14000
+12351
+27469
+3826
+18988
+14
+1316
+25140
+286
+27470
+14604
+26496
+27471
+13285
+17608
+4896
+27472
+7836
+9
+1529
+27473
+13713
+43
+6950
+27474
+23406
+14
+19450
+27475
+17338
+2865
+27476
+27477
+21947
+23559
+27478
+27479
+27480
+1047
+15824
+24034
+22986
+43
+15971
+14369
+27481
+27482
+2040
+27483
+27484
+7253
+27485
+11822
+27486
+27487
+29
+26157
+19
+27488
+27489
+27490
+19
+15338
+27491
+1991
+8188
+27492
+27493
+27494
+24725
+27495
+27496
+27497
+17136
+9
+27498
+27499
+13905
+26680
+27500
+1493
+27501
+27502
+872
+6110
+14659
+13721
+27503
+286
+43
+27206
+27504
+77
+21947
+14369
+27505
+27506
+27507
+349
+27508
+554
+192
+21045
+20
+1168
+27509
+2
+27510
+2700
+8244
+140
+14477
+27511
+27512
+4516
+590
+27513
+7053
+27514
+21947
+25382
+21030
+27515
+3484
+3310
+98
+2
+43
+24303
+27516
+1013
+519
+14
+1021
+27517
+4388
+2040
+43
+665
+3546
+19618
+16437
+1385
+14
+27518
+1966
+27519
+27520
+201
+24864
+6518
+27521
+16687
+26030
+14
+27522
+14
+590
+12359
+590
+14
+27523
+27524
+13390
+27525
+379
+12055
+27526
+13111
+27527
+25871
+11928
+27528
+3978
+27529
+2694
+178
+21576
+668
+43
+27530
+2998
+15
+27531
+22684
+5085
+345
+24896
+1870
+43
+27532
+27533
+21947
+272
+27534
+27535
+22420
+1011
+13411
+9
+19618
+27536
+699
+27287
+19618
+24303
+5614
+10
+27537
+27538
+27539
+293
+27420
+14947
+80
+2694
+12307
+27540
+25237
+27541
+27542
+274
+12987
+27543
+14477
+5904
+14369
+27544
+27545
+27546
+14369
+22963
+27547
+1051
+26683
+27548
+43
+3546
+1021
+566
+24864
+11404
+707
+19582
+9
+43
+22442
+874
+428
+27287
+3543
+590
+27549
+27550
+104
+339
+590
+27551
+24733
+43
+349
+24896
+736
+27552
+519
+27553
+13307
+27554
+27555
+5085
+57
+27556
+25237
+27557
+2581
+8249
+27558
+13278
+8218
+27559
+43
+650
+6950
+27560
+19
+27561
+6395
+9
+27562
+27563
+590
+3330
+27564
+23727
+27565
+2027
+17749
+25584
+1172
+1012
+24036
+24303
+96
+8994
+13721
+27566
+13721
+25140
+32
+27567
+5297
+27568
+27569
+21947
+27570
+27571
+27572
+27573
+5725
+10003
+6225
+57
+286
+27574
+43
+18048
+21947
+2
+566
+26680
+5780
+590
+4900
+2694
+27575
+27576
+10748
+27577
+57
+25943
+349
+27578
+19618
+14693
+18250
+201
+412
+14909
+27579
+23504
+21669
+27580
+27581
+27582
+19050
+1090
+22
+11593
+27583
+25794
+23754
+46
+11944
+6874
+27584
+25237
+16925
+59
+13374
+1692
+21689
+20
+27585
+27586
+5085
+19217
+2338
+27587
+590
+14
+14369
+1605
+14000
+338
+1860
+14369
+7137
+15718
+398
+5908
+27588
+27589
+15824
+24725
+43
+345
+3105
+27590
+26493
+15
+27591
+286
+27592
+14
+20
+349
+9
+27593
+1559
+984
+345
+27594
+27595
+249
+19618
+411
+1864
+13721
+27596
+270
+27597
+6950
+29
+25382
+89
+26808
+27598
+27599
+24303
+6505
+440
+27600
+24864
+26065
+19
+141
+27601
+14369
+27602
+10706
+27603
+15718
+32
+19618
+25140
+22461
+43
+27604
+15268
+590
+27605
+27606
+18874
+19792
+14079
+590
+21698
+1481
+15
+3768
+179
+3470
+736
+3601
+27607
+237
+27608
+27609
+8367
+25683
+736
+13807
+27610
+14
+1912
+27611
+9
+1300
+2841
+188
+6360
+27612
+8188
+43
+27613
+27614
+27615
+27616
+11593
+27617
+4387
+27618
+27619
+27620
+27621
+20897
+27622
+48
+43
+22963
+43
+26496
+27623
+27624
+228
+27625
+27626
+15718
+7053
+25659
+478
+3
+19
+19
+5049
+10
+19
+683
+1051
+21947
+27495
+27627
+22391
+27628
+10
+18982
+15824
+317
+27629
+27630
+27631
+27632
+1066
+22
+22492
+27633
+27634
+27635
+27636
+27637
+12987
+2694
+43
+9
+27287
+1157
+23530
+284
+6950
+11995
+22963
+27638
+354
+25710
+19618
+24896
+736
+27639
+11321
+27640
+616
+27641
+736
+590
+4521
+4169
+27642
+349
+24896
+27643
+936
+27599
+19618
+14363
+19655
+12778
+201
+14
+1465
+27644
+6595
+3978
+27645
+13721
+7799
+27646
+26724
+32
+646
+27647
+27648
+27649
+27650
+27651
+12987
+25683
+12987
+43
+3003
+628
+416
+9
+27652
+2721
+736
+19
+2939
+14001
+27653
+27654
+590
+14
+20280
+27655
+27656
+57
+14477
+12987
+27657
+1100
+27658
+27659
+694
+568
+15718
+27660
+7152
+213
+27661
+176
+27662
+3003
+23103
+770
+27663
+19618
+27664
+27665
+13703
+27666
+24864
+27667
+27668
+6335
+27669
+2561
+2537
+23834
+15298
+155
+27670
+17
+1332
+25871
+27671
+27672
+14
+43
+25683
+27673
+6285
+43
+736
+43
+24920
+27674
+27675
+32
+27676
+14477
+27677
+10415
+43
+27678
+12588
+27679
+14477
+14878
+9784
+590
+2
+490
+27680
+10961
+14369
+60
+6086
+57
+27681
+2164
+6557
+27682
+76
+43
+27683
+27684
+6171
+590
+27685
+27686
+6765
+8188
+24864
+27687
+21947
+27688
+24303
+27689
+14369
+27690
+14130
+13843
+27691
+27692
+1100
+1153
+3546
+137
+27693
+20
+27694
+358
+27695
+1577
+5080
+624
+15718
+6505
+27696
+188
+27697
+736
+24862
+915
+19618
+590
+21896
+10591
+3546
+27698
+665
+27699
+27700
+27701
+27702
+14
+12987
+6054
+745
+4550
+43
+18946
+817
+34
+27703
+286
+27704
+3546
+19
+27705
+27706
+27707
+15853
+14
+27708
+15718
+2
+89
+27709
+9
+8297
+14102
+9
+27710
+19
+27711
+16290
+27712
+27072
+27713
+736
+18577
+27714
+686
+5477
+27715
+5119
+27716
+25237
+26744
+27717
+345
+317
+5204
+27718
+2197
+6214
+27287
+17151
+1559
+27719
+25140
+25280
+2944
+1688
+15662
+43
+269
+15718
+27720
+26389
+27721
+27722
+5088
+5764
+740
+27723
+282
+24864
+20
+14477
+25237
+16437
+3
+613
+725
+24753
+27724
+27725
+10
+27726
+27727
+27728
+554
+27729
+21947
+1234
+27730
+27731
+27732
+3546
+27733
+4086
+27734
+27735
+27069
+665
+27736
+20
+5438
+43
+27737
+27738
+464
+179
+27739
+27740
+1976
+27741
+225
+20655
+10218
+12987
+23506
+2
+15308
+1012
+15928
+27742
+27743
+27744
+10642
+27745
+317
+4598
+437
+27746
+590
+3053
+27747
+720
+14
+17872
+27748
+27749
+27750
+1885
+14
+22
+43
+14363
+27751
+27752
+18982
+14
+14521
+8668
+25683
+21947
+20329
+3
+13557
+27753
+27754
+14477
+196
+27755
+32
+21776
+27756
+27757
+24303
+533
+11647
+27758
+6263
+25683
+27759
+26361
+648
+27760
+3994
+27761
+15647
+352
+14000
+15718
+18334
+17670
+23741
+27762
+27763
+590
+18742
+24303
+25200
+2197
+590
+12600
+19618
+27764
+9
+14
+27765
+231
+19
+27766
+370
+19
+3119
+8249
+18795
+9
+27767
+286
+6275
+1529
+27768
+27769
+27770
+27771
+4463
+27772
+27773
+27774
+1860
+27775
+2043
+2577
+138
+24327
+27776
+27777
+27778
+1160
+9
+9402
+24864
+27779
+597
+20572
+19405
+15718
+99
+27780
+27781
+14369
+43
+14
+27782
+1563
+9
+972
+19655
+27783
+27784
+590
+27785
+22797
+27786
+27787
+25237
+14
+720
+27788
+14000
+27789
+27790
+43
+17048
+15406
+1021
+14604
+15797
+2072
+2301
+27791
+5383
+27792
+3638
+22895
+15824
+27793
+27794
+272
+15
+8160
+14369
+27260
+12214
+21947
+6877
+590
+27795
+11479
+354
+27796
+27797
+27798
+554
+10
+14
+27799
+57
+15989
+27800
+14175
+14369
+14369
+705
+209
+17635
+14604
+15718
+27801
+27802
+209
+27803
+25140
+26496
+1517
+27804
+27805
+15
+9
+27806
+36
+22552
+598
+8351
+26066
+8392
+547
+19
+77
+27807
+27808
+249
+27809
+832
+286
+27810
+4144
+9979
+25140
+27811
+2058
+27812
+176
+27813
+27814
+27815
+27816
+27817
+14804
+19
+4684
+27818
+4028
+3317
+27819
+1523
+286
+27820
+27821
+2260
+27822
+25683
+27823
+464
+3192
+13361
+17135
+22
+16014
+27824
+27825
+27548
+19
+27826
+7137
+27827
+573
+9
+301
+17151
+9
+1169
+27828
+1870
+27829
+2764
+16024
+2694
+27830
+165
+27831
+27832
+21947
+590
+25683
+26984
+43
+14477
+25140
+27833
+815
+27834
+590
+301
+822
+14369
+14369
+2260
+17136
+3546
+27835
+14369
+27836
+590
+27837
+14369
+24896
+8027
+27838
+1349
+27839
+213
+27840
+1444
+27841
+11
+5665
+27842
+14
+276
+43
+27843
+27844
+13411
+27845
+861
+27846
+345
+1406
+817
+2790
+910
+24303
+27847
+6341
+27848
+27849
+21947
+345
+590
+16763
+213
+303
+27850
+9
+27851
+13721
+27852
+185
+1458
+24303
+27853
+27854
+27855
+27856
+248
+21947
+26496
+284
+1604
+345
+1674
+213
+17151
+24896
+213
+286
+213
+27857
+25871
+7876
+27858
+27859
+5837
+137
+27860
+194
+27861
+27862
+24864
+297
+548
+27863
+14369
+27864
+27865
+19792
+3553
+27866
+27867
+26724
+683
+14363
+27868
+26744
+27869
+27870
+12479
+936
+14
+14
+27871
+9
+11394
+27872
+4550
+284
+27873
+27874
+27875
+683
+19618
+14604
+27876
+27877
+27878
+43
+9
+2769
+57
+27234
+18548
+2
+27879
+16
+27880
+27881
+27882
+17151
+3279
+27883
+27884
+27885
+14604
+554
+13905
+16645
+27886
+1021
+43
+43
+7855
+213
+213
+27887
+14369
+14
+14
+57
+15718
+317
+249
+27888
+27889
+27890
+43
+27891
+24303
+3546
+15
+6285
+936
+27892
+5085
+665
+27893
+27894
+248
+23231
+21187
+25683
+27895
+27896
+337
+337
+27897
+21947
+22
+18522
+27898
+27899
+1765
+27900
+11841
+222
+27901
+17072
+14477
+23103
+12260
+27902
+16014
+21186
+213
+43
+27903
+19
+317
+5780
+1749
+27904
+20803
+3470
+590
+27905
+27906
+23842
+57
+213
+27907
+3994
+43
+27908
+18650
+337
+27909
+4388
+21689
+14473
+27910
+27911
+15356
+337
+248
+43
+1524
+284
+27912
+1551
+27913
+29
+24296
+720
+3546
+464
+14
+3081
+13307
+20161
+5872
+27914
+27915
+27916
+6518
+15989
+16437
+14
+349
+19618
+1116
+2
+1012
+27917
+24896
+27918
+22896
+764
+590
+43
+590
+3546
+659
+70
+442
+27919
+7610
+27920
+3067
+19618
+590
+9
+12814
+27921
+1382
+9692
+14102
+10017
+2476
+14241
+27922
+18695
+27923
+2832
+590
+272
+27924
+19
+2
+27925
+27926
+861
+20260
+736
+1352
+345
+19
+27927
+412
+14
+22
+43
+2550
+14
+27928
+27929
+4701
+27930
+9629
+19160
+13905
+26744
+17151
+13905
+7588
+27931
+222
+27932
+14
+16205
+27933
+22237
+11827
+9266
+27934
+19
+590
+27935
+25584
+5755
+845
+27936
+27937
+27938
+21776
+741
+5467
+22
+365
+12893
+27939
+27940
+590
+10642
+303
+27941
+27942
+27943
+63
+27944
+22901
+21947
+19484
+14369
+27945
+14363
+1655
+464
+165
+19
+4896
+27946
+27069
+25683
+27947
+16437
+17144
+11634
+27948
+14019
+21947
+24614
+25683
+573
+27719
+2406
+1912
+2567
+19
+27949
+27950
+27951
+27952
+27953
+337
+27954
+16413
+7855
+27955
+14
+4856
+27956
+15953
+1508
+27957
+248
+27958
+27959
+862
+24896
+29
+337
+27960
+652
+12621
+21947
+3546
+27961
+21186
+25237
+14369
+1082
+27962
+25159
+7137
+123
+26786
+27963
+1834
+19
+2260
+29
+1384
+27964
+3350
+21689
+27965
+14
+286
+248
+7600
+7117
+15027
+12987
+9
+799
+2865
+14477
+8297
+14
+14
+2877
+14000
+3978
+6850
+89
+24507
+27966
+613
+284
+27967
+27968
+19852
+27969
+57
+345
+370
+349
+17093
+25871
+27970
+15
+32
+21947
+27971
+27972
+16102
+2561
+27973
+15718
+232
+27974
+5188
+27975
+43
+27281
+1112
+27976
+590
+43
+27069
+27977
+5188
+14369
+43
+342
+590
+27978
+27979
+27980
+27981
+19091
+6441
+24862
+6708
+3711
+27982
+27983
+25868
+1382
+590
+16
+3553
+27984
+345
+14
+57
+2334
+21627
+548
+20300
+43
+24303
+27985
+27986
+27987
+519
+27988
+16156
+27989
+24896
+27990
+1249
+16048
+21947
+6628
+9037
+4055
+4550
+32
+5085
+2550
+27991
+27992
+27993
+5188
+345
+887
+27994
+27096
+2561
+2619
+1157
+10470
+16437
+27995
+9
+43
+27996
+27997
+337
+9
+27998
+9
+25584
+22
+1561
+4684
+446
+25140
+23103
+590
+27999
+4550
+342
+15718
+5085
+25683
+1100
+14
+28000
+28001
+1382
+26158
+28002
+9
+20442
+19428
+28003
+12308
+19
+28004
+28005
+19
+28006
+14
+14
+590
+2029
+3994
+19618
+14422
+1066
+213
+28007
+28008
+14369
+8593
+815
+9
+20
+2
+28009
+28010
+26361
+28011
+303
+25237
+20764
+10230
+28012
+21947
+10946
+8668
+372
+28013
+28014
+822
+43
+19618
+23578
+14
+26724
+4824
+15833
+28015
+11483
+14
+28016
+28017
+28018
+28019
+22308
+349
+720
+248
+24896
+22963
+15
+248
+28020
+28021
+28022
+17151
+915
+28023
+9
+1502
+18054
+14369
+568
+284
+28024
+15718
+28025
+14369
+1517
+284
+28026
+28027
+28028
+25237
+14369
+28029
+24951
+647
+28030
+28031
+14
+28032
+284
+337
+28033
+19655
+28034
+345
+3546
+89
+28035
+301
+28036
+20700
+213
+3767
+28037
+3143
+22346
+11925
+28038
+14369
+19618
+14
+7797
+3546
+25140
+790
+14660
+1913
+2537
+6722
+284
+28039
+28040
+28041
+2197
+28042
+28043
+17872
+28044
+14
+19
+115
+28045
+43
+26169
+337
+337
+28046
+28047
+12055
+6885
+17119
+339
+9
+28048
+9
+28049
+337
+720
+23103
+15718
+7137
+28050
+17151
+349
+32
+345
+17668
+354
+248
+28051
+23406
+18045
+67
+24303
+28052
+9
+14
+337
+28053
+554
+26361
+4791
+2694
+23051
+12827
+590
+28054
+1543
+1364
+248
+590
+590
+3457
+19618
+28055
+1927
+39
+6018
+18435
+4387
+6877
+28056
+155
+1956
+9
+28057
+10
+28058
+15718
+303
+17801
+25749
+28059
+25140
+21947
+13905
+323
+43
+28060
+736
+26361
+10727
+28061
+27798
+19091
+28062
+43
+9
+17498
+3546
+11102
+1224
+28063
+28064
+28065
+720
+32
+17761
+28066
+42
+28067
+14
+1920
+28068
+28069
+14
+6533
+28070
+28071
+9
+28072
+21947
+21749
+20
+43
+7071
+23253
+3546
+28073
+3050
+21947
+1249
+15718
+671
+1356
+28074
+28075
+28076
+573
+9
+323
+28077
+28078
+12462
+11321
+2876
+25237
+24019
+590
+3428
+303
+28079
+28080
+590
+21776
+1508
+1655
+28081
+28082
+1655
+201
+14
+43
+17151
+2356
+19965
+21947
+14477
+248
+20
+77
+28083
+19797
+209
+25140
+2707
+28084
+28085
+28086
+745
+213
+28087
+28088
+28089
+32
+590
+14603
+1615
+14369
+1817
+286
+15793
+887
+28090
+28091
+28092
+3546
+14
+28093
+28094
+28095
+3484
+43
+28096
+6341
+4808
+27146
+765
+28097
+28098
+790
+21947
+764
+28099
+1352
+286
+352
+554
+25683
+28100
+28101
+5314
+25683
+19
+28102
+2410
+19
+7208
+352
+10607
+9
+28103
+272
+15718
+9
+14369
+28104
+28105
+137
+28106
+28107
+17151
+14369
+26496
+28108
+28109
+22308
+57
+9
+9
+28110
+4116
+27069
+28111
+28112
+28113
+14477
+915
+28114
+540
+28115
+28116
+213
+28117
+25
+942
+16012
+24896
+28118
+28119
+28120
+5188
+28121
+28122
+8668
+201
+1870
+28123
+25237
+1384
+17687
+28124
+28125
+18064
+28126
+28127
+28128
+28129
+28130
+28131
+14
+19
+14406
+7706
+28132
+7991
+89
+19618
+28133
+6571
+28134
+21458
+28135
+2042
+28136
+28137
+345
+28138
+590
+28139
+272
+28140
+32
+2260
+566
+28141
+25140
+15167
+19
+3546
+43
+28142
+3546
+17151
+43
+28143
+28144
+8208
+142
+28145
+28146
+17151
+1234
+5662
+21947
+2619
+14650
+28147
+28148
+28149
+28150
+28151
+28152
+19
+586
+286
+25584
+379
+58
+28153
+28154
+12005
+3546
+25
+4055
+28155
+1764
+28156
+17267
+25625
+19
+28157
+28158
+10179
+28159
+28160
+66
+14
+32
+28161
+20923
+28162
+28163
+3
+8188
+2762
+10
+2310
+14
+43
+19618
+317
+3994
+28164
+28165
+25943
+7053
+2430
+2841
+5188
+27178
+43
+1612
+21947
+2153
+28166
+1889
+140
+26040
+1991
+2316
+3484
+28167
+27719
+28168
+3546
+9234
+19
+21947
+1743
+25140
+28169
+9
+14660
+28170
+14
+28171
+23674
+5119
+18707
+13347
+28172
+2254
+24896
+568
+28173
+7071
+24698
+9012
+28174
+1514
+4055
+28175
+28176
+2728
+14577
+25172
+28177
+43
+13578
+1442
+4411
+8668
+28178
+1610
+25237
+28179
+18683
+16254
+24896
+28180
+28181
+28182
+28183
+18804
+2537
+590
+1745
+2463
+590
+15
+24303
+18693
+28184
+11217
+554
+24063
+28185
+28186
+43
+1401
+250
+2733
+19
+694
+2197
+43
+4452
+28187
+43
+1021
+28188
+24864
+14369
+13576
+12748
+14
+21833
+590
+4180
+28189
+301
+28190
+3546
+14
+9
+25584
+28191
+315
+573
+20383
+28192
+8188
+373
+28193
+28194
+20038
+14
+28195
+25140
+32
+3546
+28196
+13748
+28197
+3546
+15718
+43
+13721
+28198
+201
+28199
+27514
+43
+28200
+28201
+12768
+28202
+28203
+25683
+43
+28204
+23447
+28205
+5579
+3548
+11335
+4441
+28206
+827
+28207
+14369
+32
+8205
+720
+27069
+8566
+1870
+28208
+28209
+3484
+28210
+19
+28211
+89
+3323
+28212
+1689
+21947
+1765
+9
+28213
+28214
+25196
+19618
+24144
+1203
+3553
+28215
+28216
+13131
+28217
+179
+5297
+24862
+286
+43
+25237
+28218
+28219
+28220
+25943
+1615
+28221
+13721
+57
+17927
+6096
+3828
+18695
+10
+28222
+9123
+248
+28223
+3484
+21947
+28224
+914
+28225
+4897
+17451
+3790
+1345
+22
+14
+28226
+19
+590
+5085
+2058
+19
+22963
+1716
+12936
+28227
+9
+14
+28228
+28229
+6001
+28230
+28231
+11593
+43
+8160
+14175
+4594
+28232
+28233
+80
+25140
+286
+28234
+14369
+137
+205
+43
+19883
+43
+7048
+1131
+28235
+28236
+28237
+28238
+10
+28239
+28240
+213
+28241
+28242
+28243
+43
+286
+28244
+28245
+872
+2694
+4900
+417
+28246
+3353
+15
+28247
+24303
+28248
+25581
+286
+19206
+28249
+28250
+24896
+8297
+411
+19
+28251
+28252
+28253
+28254
+14808
+28255
+9095
+16205
+21689
+21947
+3546
+11535
+23103
+28256
+3546
+20367
+842
+28257
+16437
+28258
+13721
+19974
+28259
+19618
+4028
+28260
+28261
+28262
+315
+213
+446
+32
+21947
+28263
+19618
+554
+57
+32
+6459
+28264
+29
+1817
+28265
+28266
+25615
+28267
+28268
+28269
+28270
+28271
+28272
+3457
+28273
+1889
+3239
+13721
+1912
+67
+1961
+14369
+24303
+28274
+1765
+28275
+13721
+28276
+14
+14947
+28277
+57
+1190
+28278
+28279
+28280
+2061
+9
+28281
+28282
+28283
+15718
+9
+161
+4634
+22963
+28284
+26496
+28285
+26872
+20
+5282
+28286
+28287
+11971
+14369
+3978
+28288
+13375
+213
+26361
+16413
+28289
+21947
+19
+12987
+10745
+10094
+741
+28290
+349
+26744
+28291
+764
+9440
+25237
+28292
+337
+13569
+28293
+1021
+24303
+24207
+286
+3546
+28294
+28295
+29
+25140
+28296
+337
+28297
+5326
+3553
+28298
+24951
+345
+14604
+28299
+1900
+590
+14477
+28300
+28301
+28302
+28303
+28304
+28305
+829
+43
+28306
+12376
+25237
+14369
+284
+9
+1090
+5085
+446
+2
+28307
+28308
+5780
+26484
+14369
+15
+379
+28309
+28310
+9739
+28311
+554
+28312
+24015
+28313
+194
+14369
+284
+43
+28314
+24303
+1169
+32
+14363
+28315
+590
+6364
+590
+1090
+3601
+337
+28316
+28317
+28318
+28319
+7014
+21947
+345
+28320
+28321
+25382
+213
+16826
+590
+14363
+19705
+27146
+14369
+7492
+43
+9
+2570
+533
+274
+28322
+32
+345
+21947
+590
+21689
+28323
+248
+15718
+19618
+28324
+10510
+57
+28325
+16
+8994
+32
+27656
+14
+28326
+2064
+15654
+57
+442
+34
+22308
+2550
+28327
+286
+28328
+20773
+28329
+24303
+3655
+28330
+28331
+28332
+2331
+4918
+5780
+19
+43
+28333
+21947
+26001
+28334
+1502
+2865
+738
+28335
+28336
+3959
+22512
+23103
+28337
+28338
+28339
+28340
+6156
+14369
+28341
+6006
+2762
+28342
+28343
+28344
+43
+28345
+248
+25140
+28346
+5634
+323
+1172
+28347
+22
+22420
+13721
+24896
+28348
+24303
+28349
+28350
+24303
+43
+25683
+19
+8392
+1562
+4806
+736
+155
+16698
+9
+28351
+32
+1011
+590
+13323
+23418
+28352
+1234
+184
+3172
+1291
+8256
+2029
+20
+28353
+20108
+32
+18670
+23770
+21689
+114
+28354
+153
+303
+339
+26361
+28355
+8501
+21947
+1956
+303
+140
+28356
+28357
+179
+28358
+28359
+28360
+14477
+21947
+249
+292
+112
+6156
+960
+5438
+2314
+25481
+18951
+23951
+21947
+28361
+43
+15718
+28362
+19
+28363
+24896
+25140
+28364
+28365
+12864
+28366
+12722
+28367
+20340
+28368
+8297
+13721
+28369
+28370
+22815
+613
+28371
+12120
+28372
+28373
+13343
+28374
+13150
+10961
+28375
+28376
+13479
+28377
+28378
+14369
+28379
+272
+14369
+22
+349
+19
+25237
+1578
+7855
+28380
+43
+2040
+2
+28381
+736
+26962
+16
+28382
+28383
+28384
+28385
+28386
+2
+399
+28387
+28388
+28389
+213
+28390
+28391
+8594
+250
+2744
+70
+28392
+936
+25584
+2356
+28393
+15718
+18045
+829
+21947
+28394
+26912
+337
+468
+5271
+28395
+22075
+28396
+20265
+345
+28397
+446
+28398
+13721
+28399
+28400
+2960
+2764
+2260
+15473
+3814
+28401
+28402
+22587
+4682
+28403
+14369
+28404
+28405
+28406
+21947
+28407
+28408
+27087
+43
+43
+28409
+28410
+13721
+26496
+28411
+28412
+98
+28413
+379
+1385
+28414
+358
+751
+1559
+590
+14
+28415
+5188
+15718
+21947
+16121
+28416
+28417
+19
+28418
+72
+3546
+6741
+28419
+25683
+2
+792
+8668
+17730
+25683
+28420
+28421
+138
+25683
+1425
+28422
+28423
+28424
+28425
+28426
+28427
+1907
+14
+28428
+3075
+541
+28429
+2694
+28430
+7154
+28431
+683
+28432
+14
+14604
+2019
+201
+28433
+248
+21947
+28237
+28434
+554
+4403
+345
+590
+590
+28435
+19618
+28436
+8297
+11483
+27069
+14658
+28437
+5780
+14
+28438
+720
+43
+28439
+590
+28440
+354
+42
+13150
+28441
+25140
+18928
+4411
+20
+28442
+23103
+14369
+28443
+648
+16
+188
+14
+28444
+22030
+28445
+28446
+249
+4141
+2688
+586
+6877
+14
+28447
+237
+28448
+18982
+22236
+3316
+14
+28449
+14
+28450
+19
+349
+24303
+9490
+5648
+1605
+25584
+16338
+28451
+14369
+28452
+155
+27170
+28453
+28454
+1559
+28455
+28456
+103
+27748
+14330
+28457
+14330
+28458
+28459
+28460
+1481
+17151
+15824
+43
+12987
+23226
+28461
+28462
+713
+14
+28463
+28464
+28465
+164
+827
+28466
+21947
+28467
+3546
+3546
+28468
+13706
+27726
+1502
+509
+707
+14369
+18364
+8297
+28469
+5085
+28470
+28471
+28472
+4278
+5820
+80
+32
+165
+14
+28473
+28474
+16707
+14
+29
+10145
+28475
+28476
+4550
+27043
+28477
+57
+43
+28478
+28479
+28480
+14
+286
+28481
+14330
+28482
+3546
+19852
+474
+28483
+10505
+28484
+19927
+28485
+28486
+28487
+554
+20
+590
+21947
+28488
+28489
+349
+26744
+28490
+6907
+43
+28491
+28492
+28493
+509
+849
+28494
+28495
+3601
+28496
+5188
+28497
+548
+28498
+590
+28499
+28500
+28501
+20276
+27069
+915
+1157
+14369
+28502
+791
+28503
+14
+1021
+28504
+1578
+12067
+43
+19618
+345
+379
+27069
+28505
+14
+28506
+28507
+24303
+141
+3546
+373
+28508
+4002
+5649
+28509
+28510
+27146
+28511
+25237
+9
+28512
+17635
+736
+3297
+16126
+28513
+14369
+14369
+197
+8668
+28514
+60
+28515
+14330
+707
+11702
+484
+2197
+26119
+286
+13721
+28516
+28517
+9118
+1082
+2117
+28518
+28519
+14001
+14001
+28520
+14604
+20679
+28521
+19618
+21947
+28522
+141
+28523
+28524
+209
+28525
+21947
+15461
+28526
+20125
+43
+5659
+28527
+13721
+5773
+28528
+14
+22
+8351
+25943
+28529
+28530
+225
+28531
+1021
+28532
+43
+29
+14
+14369
+1765
+28533
+28534
+7543
+28535
+22121
+19655
+14
+28536
+3546
+482
+28537
+28538
+28317
+3546
+26666
+32
+1320
+23322
+28539
+21689
+12404
+28540
+38
+28541
+28542
+27719
+19
+10849
+21947
+16206
+19618
+28543
+13848
+28441
+2577
+15623
+28544
+25237
+2009
+1364
+4411
+28545
+28546
+282
+15
+10583
+331
+28547
+28548
+1502
+28549
+28550
+14477
+43
+1524
+28551
+28552
+26705
+28553
+495
+28554
+28555
+32
+590
+98
+28556
+28557
+18503
+590
+28558
+26786
+19
+18061
+28559
+2
+28560
+19
+28561
+28562
+57
+28563
+28564
+28565
+2540
+28566
+43
+28567
+248
+25683
+28568
+892
+1066
+1048
+28569
+7053
+25683
+533
+209
+1013
+28570
+1710
+16466
+14
+12344
+201
+8188
+28571
+43
+28572
+9060
+19
+77
+9
+345
+1524
+28573
+14
+20514
+4028
+28574
+8392
+19
+590
+3030
+28575
+21947
+11754
+10
+28576
+11514
+28577
+1765
+17151
+9
+536
+21947
+24896
+137
+96
+28578
+4285
+9
+242
+14
+5188
+1082
+60
+19965
+14
+28579
+18951
+8392
+28580
+28581
+28582
+14330
+28583
+28584
+27153
+28585
+1011
+28586
+28587
+28588
+5088
+5363
+1765
+6625
+5039
+3375
+28589
+28590
+28591
+28592
+104
+28593
+3546
+16437
+25584
+1234
+28594
+590
+16437
+28595
+28596
+3959
+28597
+5426
+17151
+1018
+27954
+28598
+19948
+28599
+28600
+1710
+590
+6518
+28601
+14369
+23438
+43
+10245
+5967
+5853
+28602
+21947
+28603
+138
+28604
+28605
+3598
+28606
+2338
+28607
+1947
+28608
+24207
+43
+28609
+5653
+12376
+9
+26452
+3872
+28610
+28611
+286
+57
+936
+24864
+989
+14369
+5204
+9705
+2314
+13150
+28612
+25943
+915
+28613
+10
+20175
+10
+43
+19618
+28614
+19
+28615
+28616
+43
+832
+28617
+345
+4144
+9
+28618
+590
+28428
+14
+28619
+28620
+28621
+57
+24896
+28622
+28623
+28624
+15718
+28625
+28626
+249
+2314
+167
+43
+14369
+2707
+28627
+28628
+28629
+15718
+1992
+15718
+14477
+28630
+19
+12902
+20
+446
+28631
+28632
+28633
+28634
+28635
+15476
+38
+590
+28636
+21698
+28637
+14369
+28638
+28639
+28640
+12479
+18683
+1234
+21031
+9
+92
+2314
+28641
+165
+43
+3422
+24303
+590
+28642
+736
+28643
+14369
+590
+14369
+28644
+201
+28645
+9095
+699
+28646
+397
+8566
+28647
+15446
+14214
+28648
+6364
+21947
+9
+28649
+17151
+21947
+28650
+28651
+28652
+28653
+28317
+9
+28654
+21947
+707
+2739
+18640
+57
+2117
+5204
+5188
+19713
+791
+48
+345
+2260
+28655
+3317
+2733
+25683
+2
+21947
+514
+8367
+24303
+169
+4518
+12936
+28656
+19618
+28657
+9922
+3353
+17264
+28658
+16866
+3546
+19
+11754
+1612
+28659
+28660
+1905
+5188
+114
+28661
+28662
+345
+398
+28663
+24725
+28664
+24896
+11966
+274
+28665
+28666
+28667
+21947
+28668
+9617
+28669
+1912
+28670
+2136
+19
+228
+28671
+19
+28672
+399
+238
+259
+10
+28673
+28674
+17151
+345
+28675
+25343
+590
+24227
+24864
+21268
+2029
+3179
+28676
+170
+43
+11192
+24864
+6122
+16178
+25683
+19624
+415
+5431
+28677
+26158
+28678
+28679
+2944
+28680
+28681
+28682
+13721
+27178
+5780
+28683
+28684
+28685
+13179
+28686
+28687
+25237
+28688
+25584
+1090
+5297
+23103
+28689
+28690
+19
+16375
+28691
+20
+19655
+28692
+590
+14477
+1021
+533
+24303
+201
+28693
+28694
+2314
+3546
+3546
+1961
+28695
+21698
+2446
+28696
+4230
+11185
+647
+21689
+7240
+14477
+586
+764
+28697
+28698
+18695
+28699
+14947
+140
+677
+28700
+14363
+446
+5976
+28317
+28701
+15261
+14
+345
+25237
+2577
+16102
+28702
+1765
+25140
+26506
+3546
+28703
+4088
+28704
+28705
+2135
+3543
+28706
+7753
+23343
+15914
+28707
+349
+28708
+155
+28709
+14477
+28710
+590
+24303
+24864
+28711
+13119
+19
+24896
+16205
+1234
+1425
+1051
+14330
+28712
+590
+21745
+28713
+17098
+28714
+3553
+28715
+28517
+24725
+5188
+10003
+28339
+249
+28549
+25140
+671
+28716
+28717
+28718
+28719
+16915
+28720
+28721
+19918
+3528
+13721
+509
+15186
+3546
+5820
+28722
+28723
+28724
+5085
+28725
+28726
+19
+6766
+28727
+1529
+286
+28728
+2764
+67
+24896
+14
+28729
+3317
+402
+560
+25683
+2316
+14
+3994
+28730
+14868
+1112
+349
+28731
+43
+28732
+28733
+43
+28734
+24725
+28735
+10963
+28736
+12987
+25237
+25921
+28737
+28738
+533
+28739
+19287
+1013
+9
+18982
+138
+15
+28740
+28741
+8465
+28742
+303
+28743
+16707
+5071
+647
+1927
+19
+25237
+4364
+14369
+21889
+15
+831
+43
+14369
+155
+28317
+21939
+10640
+13570
+16
+28744
+32
+28745
+20
+28746
+11552
+28747
+5438
+28748
+14
+3421
+28749
+28750
+19491
+28751
+26361
+28752
+1559
+10875
+5431
+11754
+17670
+28753
+28754
+10895
+21947
+19124
+25584
+9
+28755
+14
+590
+24725
+2
+12285
+28756
+1154
+27069
+349
+573
+43
+28757
+28758
+28759
+597
+28760
+357
+5691
+28761
+590
+20
+2733
+28762
+491
+77
+915
+491
+16826
+28763
+28764
+28765
+17466
+26496
+9
+43
+21947
+28766
+28767
+16883
+1443
+3601
+14369
+13150
+28768
+25
+552
+28769
+21947
+26496
+15718
+44
+14363
+28770
+1637
+28771
+25140
+28772
+28773
+24896
+5080
+28774
+590
+14369
+2330
+28549
+20
+19
+16067
+1425
+25683
+43
+28775
+28776
+28777
+533
+28778
+2668
+1047
+249
+2657
+28779
+10638
+28780
+14369
+9784
+1991
+80
+28781
+28782
+5803
+14816
+14846
+22986
+28783
+26744
+28784
+28785
+16437
+24303
+23603
+28786
+20694
+14965
+28787
+28788
+19
+22963
+28789
+18094
+28790
+28791
+1991
+19
+28792
+9497
+7379
+495
+24896
+28793
+590
+28794
+155
+8566
+24896
+28795
+19618
+317
+2762
+13721
+25140
+822
+14061
+2550
+28796
+3365
+12936
+14
+28797
+14604
+23103
+28798
+9
+28799
+354
+397
+28800
+9
+13307
+28801
+345
+28802
+15718
+19618
+590
+16437
+694
+8746
+872
+28803
+5547
+397
+28804
+4056
+4634
+1425
+7107
+28805
+21689
+9
+20952
+28806
+27069
+568
+14369
+845
+24864
+9
+28807
+3546
+28808
+683
+590
+7855
+104
+4364
+28809
+19618
+3546
+28810
+11907
+4001
+28811
+2243
+24725
+28812
+1314
+28813
+28814
+24864
+25683
+28815
+338
+28816
+26496
+28817
+25683
+3601
+28818
+28819
+8668
+28820
+28821
+14000
+28822
+28823
+28824
+14
+28825
+713
+4088
+24725
+15
+378
+22461
+13086
+14
+14
+14330
+3213
+3764
+2609
+155
+43
+2567
+28826
+738
+28078
+28827
+28828
+28829
+25237
+25140
+590
+57
+28830
+14477
+16437
+1481
+1066
+28317
+22236
+28831
+28832
+17385
+13111
+13848
+14369
+9688
+28833
+25140
+28834
+14
+28835
+19797
+112
+14
+1082
+12402
+378
+28549
+28317
+5481
+23806
+13150
+28836
+3476
+7154
+28837
+9410
+28838
+1605
+14868
+201
+7741
+26724
+379
+28839
+8210
+28840
+15183
+14369
+3408
+14369
+14369
+28841
+28842
+28843
+27669
+13566
+19
+28844
+1300
+28845
+28317
+16102
+28846
+28847
+10232
+2865
+28848
+24896
+1122
+14
+28849
+349
+57
+28850
+4
+28851
+25871
+14369
+28852
+21947
+28853
+14369
+15647
+23578
+16240
+3546
+24725
+28854
+20339
+19618
+28855
+720
+22850
+24862
+28856
+28857
+28858
+14
+4634
+28859
+1203
+815
+14
+19
+28860
+19618
+904
+28861
+2
+28862
+3067
+28863
+8418
+15683
+28864
+1465
+28865
+12746
+28866
+14369
+28867
+14345
+19
+19618
+28868
+245
+2065
+178
+3353
+13721
+28869
+28870
+28871
+1870
+14369
+28872
+1444
+28873
+43
+28874
+28875
+272
+24864
+14343
+990
+28876
+28877
+28878
+28879
+3598
+28880
+7176
+2
+194
+647
+827
+28881
+11308
+17326
+196
+5175
+28882
+3601
+15718
+9287
+28883
+11762
+22420
+32
+28884
+24862
+1300
+23139
+1228
+24864
+28885
+345
+590
+28886
+27726
+26069
+2286
+28887
+28888
+484
+4032
+1232
+28889
+28890
+89
+28317
+9343
+20952
+1100
+14
+24864
+16437
+28891
+28892
+28588
+57
+18695
+683
+28893
+28894
+24896
+245
+16826
+590
+28895
+28896
+9
+28897
+2744
+16883
+590
+25871
+17
+28898
+28899
+28900
+28901
+1112
+28902
+590
+16437
+22308
+9
+15442
+27669
+11733
+19618
+6156
+2476
+249
+26361
+19655
+28903
+590
+28904
+28905
+28906
+2
+18651
+14330
+28907
+25144
+27669
+28908
+13361
+28909
+9
+286
+28910
+28911
+15718
+1021
+1870
+17151
+15663
+28912
+14
+28913
+9
+28317
+28914
+20390
+278
+28915
+21947
+23853
+28916
+2550
+28917
+28918
+28919
+28920
+590
+21947
+28921
+28922
+4820
+24303
+349
+971
+28923
+28924
+28925
+28926
+89
+28927
+15718
+5188
+43
+28928
+28929
+9
+28930
+19304
+28931
+345
+24928
+28317
+28932
+28933
+1612
+28934
+19655
+4050
+4463
+28935
+28936
+26357
+46
+26724
+43
+28937
+15511
+2734
+43
+28938
+28939
+1559
+259
+9
+28940
+197
+14
+536
+25904
+14
+28941
+197
+28942
+28943
+19900
+28944
+32
+28945
+355
+43
+377
+19618
+14
+2
+32
+28946
+14369
+21947
+19091
+5780
+28947
+43
+28948
+9
+14
+28949
+28950
+1090
+28951
+1112
+28952
+28953
+28954
+28955
+827
+27167
+17920
+25237
+28956
+14
+1648
+28957
+5579
+28958
+28959
+286
+2577
+28960
+19618
+14330
+18443
+20952
+9738
+3601
+28961
+5144
+28962
+28963
+19618
+27172
+11803
+3546
+28964
+28965
+28966
+28967
+24864
+14363
+1082
+5085
+27279
+28968
+4463
+21689
+2415
+43
+15718
+28549
+22986
+345
+28969
+28951
+12344
+936
+28970
+28971
+345
+28972
+13179
+28973
+19
+1514
+3252
+28974
+1542
+28975
+4168
+9136
+21031
+1310
+28976
+24864
+28977
+24751
+28978
+22963
+14871
+9367
+19
+23103
+26431
+9039
+28979
+5099
+14369
+19618
+286
+28460
+14909
+11754
+2042
+18334
+28980
+24725
+28317
+15045
+7137
+28981
+14301
+2976
+2999
+28982
+15
+22099
+28317
+5629
+18951
+14330
+28451
+4441
+379
+28983
+1961
+28984
+19
+4963
+720
+21947
+28985
+25584
+558
+590
+590
+3546
+1425
+28986
+15718
+14186
+28987
+284
+28988
+28989
+19618
+28990
+18473
+1300
+24864
+28991
+18376
+28992
+28993
+19502
+7328
+28441
+25449
+284
+10
+213
+4264
+5757
+14369
+17136
+25140
+28994
+8427
+18951
+2029
+28995
+13721
+19797
+8653
+7440
+28996
+15718
+28997
+590
+25237
+28998
+27719
+8549
+213
+345
+12299
+28999
+14604
+29000
+29001
+11899
+286
+29002
+21689
+29003
+2415
+29004
+20
+720
+29005
+29006
+25749
+2762
+29007
+7537
+4651
+29008
+24640
+66
+337
+29009
+29010
+24725
+29011
+303
+27798
+15718
+14330
+29012
+29013
+29014
+10748
+29015
+43
+209
+29016
+29017
+209
+1154
+19618
+6095
+2316
+6407
+29018
+14363
+29019
+24864
+29020
+15
+213
+29021
+24303
+3546
+14369
+29022
+809
+213
+14604
+9
+8297
+3095
+248
+29023
+1442
+284
+29024
+29025
+23559
+1100
+29026
+2650
+1966
+19
+27798
+817
+12560
+20700
+29027
+7053
+29028
+20
+17151
+23226
+590
+7260
+43
+29029
+2197
+29030
+29031
+29032
+29033
+411
+337
+1517
+349
+43
+15810
+29034
+11966
+15539
+29035
+14330
+29036
+4518
+345
+18479
+43
+11429
+29037
+24725
+14
+303
+590
+648
+2793
+11966
+576
+24864
+2577
+14
+303
+1470
+29038
+43
+25683
+21947
+29039
+29040
+25661
+21371
+6305
+29041
+43
+16437
+15718
+29042
+24896
+29043
+29044
+43
+284
+14
+137
+19655
+1012
+17033
+4907
+29045
+66
+13721
+2415
+29046
+21947
+15486
+10117
+533
+22
+303
+29047
+590
+29048
+29049
+398
+29050
+25683
+24207
+6087
+345
+213
+29051
+861
+6364
+19
+18798
+495
+29052
+15718
+29053
+3546
+24751
+29054
+18346
+590
+67
+29055
+29056
+3553
+29057
+152
+14369
+29058
+301
+2117
+22
+29059
+590
+29060
+25683
+28299
+29061
+29062
+24896
+3353
+10720
+248
+1817
+2459
+2
+9410
+28295
+28441
+27669
+9
+24144
+248
+66
+590
+29063
+20265
+29064
+284
+17443
+29065
+15718
+29066
+1955
+2694
+13976
+29067
+14369
+590
+861
+6335
+17454
+4677
+29068
+29069
+2550
+29070
+8280
+590
+43
+286
+29071
+24303
+15718
+179
+590
+29072
+3546
+5188
+354
+3546
+29073
+14369
+29074
+29075
+15718
+29076
+137
+17670
+5641
+7053
+29077
+29078
+13721
+29079
+29080
+2902
+590
+1961
+3119
+29081
+16437
+29082
+15718
+29083
+1291
+28441
+357
+21947
+18493
+4422
+5820
+4414
+29084
+19852
+1716
+213
+9617
+29085
+25942
+11754
+2681
+16148
+29086
+29087
+43
+989
+242
+213
+29088
+21689
+2672
+2764
+5582
+29089
+1765
+29090
+22
+3553
+29091
+248
+29092
+22986
+23817
+446
+2971
+43
+28549
+43
+3546
+5561
+26484
+20681
+29093
+11312
+28991
+29094
+7053
+43
+345
+1987
+29095
+13721
+29096
+29097
+7137
+43
+29098
+10
+1896
+3417
+29099
+29100
+29101
+248
+29102
+345
+22292
+10049
+27719
+29103
+29104
+29105
+29106
+29107
+43
+29108
+15718
+29109
+29110
+29111
+1790
+19
+440
+1169
+3330
+17230
+3908
+14369
+29112
+29113
+809
+29114
+19852
+22142
+29115
+29116
+43
+20
+538
+17151
+590
+14
+29117
+736
+5904
+399
+29118
+3555
+21947
+19
+9
+1508
+590
+8686
+123
+16334
+29119
+671
+14
+9
+16437
+29120
+597
+29121
+5649
+21947
+14477
+29122
+29123
+25683
+6950
+5007
+18120
+29124
+29125
+29126
+29127
+209
+32
+14477
+14660
+29128
+98
+16116
+29129
+5780
+270
+24303
+249
+2314
+19
+597
+24725
+21947
+29130
+736
+29131
+29132
+29133
+27798
+14
+1013
+29134
+7912
+29135
+24
+10470
+29136
+155
+5780
+19618
+2032
+248
+29137
+1605
+19
+590
+24896
+6364
+24458
+22829
+29138
+6197
+29139
+822
+590
+19618
+663
+23770
+590
+29140
+1612
+29141
+21947
+29142
+1139
+43
+345
+14
+43
+14369
+583
+29143
+736
+28549
+15835
+19197
+29144
+21563
+24774
+29145
+18695
+5188
+29146
+29147
+15483
+3719
+29148
+29149
+13397
+1920
+29150
+25395
+29151
+29152
+29153
+27096
+29154
+10
+25683
+15
+29155
+29156
+29157
+5188
+11498
+3999
+29158
+284
+14363
+25943
+21947
+22823
+29159
+14369
+19797
+29160
+1626
+20700
+274
+29161
+29162
+1249
+29163
+5659
+27514
+10222
+21947
+736
+29164
+19618
+29165
+590
+8747
+43
+209
+4547
+29166
+29167
+29168
+29169
+29170
+201
+248
+852
+16079
+89
+29171
+27669
+29172
+590
+24303
+29173
+4518
+29174
+12307
+1013
+24811
+27836
+29175
+57
+9688
+27669
+16437
+29176
+720
+590
+590
+29177
+29178
+29179
+27719
+29180
+29181
+3187
+9
+178
+29182
+29183
+8744
+7053
+29184
+213
+24303
+865
+29185
+1234
+28877
+845
+3546
+509
+3745
+29186
+21947
+24303
+29187
+43
+14
+13721
+29188
+23226
+5780
+29189
+21947
+15398
+29190
+29191
+1382
+29192
+6068
+12987
+5773
+1605
+29193
+29194
+29195
+28317
+29196
+16798
+284
+3745
+15718
+337
+19868
+28317
+29197
+29198
+3546
+25140
+29199
+4055
+28317
+345
+19404
+7208
+19
+21730
+1763
+770
+29200
+1082
+29201
+21947
+1688
+29202
+14477
+5204
+730
+29203
+2260
+21003
+25293
+24045
+19404
+286
+583
+20
+536
+573
+29204
+29205
+19404
+29206
+15718
+14369
+28199
+13905
+694
+24207
+29207
+541
+29208
+3003
+284
+2
+29209
+29210
+29211
+29212
+6505
+29213
+590
+24303
+213
+57
+15
+4364
+14
+17
+29214
+29215
+19330
+14
+12497
+19951
+3553
+3601
+209
+43
+19
+18120
+29216
+29217
+284
+2577
+23103
+1169
+21394
+519
+18916
+2560
+5083
+2537
+337
+250
+29218
+29219
+29220
+29221
+1562
+7167
+29222
+29223
+8460
+23103
+29224
+6011
+5650
+29225
+21947
+24207
+29226
+989
+17151
+15517
+15718
+29227
+18995
+958
+39
+104
+29228
+13721
+2314
+137
+14957
+29229
+4055
+29230
+720
+29231
+13721
+248
+21947
+1247
+29232
+29233
+10364
+19
+16826
+15718
+349
+29234
+29235
+647
+11321
+8668
+28951
+29236
+8156
+590
+303
+225
+15718
+28951
+303
+26724
+272
+18684
+28317
+358
+29237
+29238
+15718
+29239
+24725
+14369
+2324
+21310
+2802
+29240
+213
+5188
+1011
+19655
+29241
+29242
+89
+29243
+2476
+14
+26361
+590
+286
+14
+1090
+8864
+29244
+1775
+2006
+19
+19618
+29245
+29246
+15718
+2287
+29247
+29248
+4269
+29249
+3317
+6263
+14369
+29250
+27153
+14477
+29251
+29252
+29253
+16967
+2000
+43
+5075
+15292
+213
+29254
+213
+29255
+14
+29256
+1765
+9
+18798
+3470
+17136
+29257
+19618
+14369
+317
+29258
+1604
+284
+19122
+6203
+14
+249
+29259
+345
+13279
+29260
+5629
+29261
+29262
+2314
+25237
+272
+4547
+14477
+29263
+554
+21947
+338
+590
+337
+29264
+29265
+29266
+538
+12402
+25683
+29267
+736
+1021
+43
+29268
+23990
+3007
+590
+29269
+861
+24896
+28549
+7537
+16154
+7379
+13848
+29270
+345
+14
+248
+27669
+29271
+12202
+26496
+29272
+14330
+29200
+29273
+21399
+29274
+29275
+29276
+3839
+4907
+8392
+8297
+14810
+29277
+29278
+29279
+29280
+14
+694
+29281
+24207
+28549
+4
+20
+3546
+29282
+142
+27669
+29283
+29284
+21947
+16180
+114
+2
+29285
+19
+554
+791
+936
+24864
+29286
+14369
+29287
+17151
+11762
+29288
+4196
+29289
+14369
+590
+12987
+590
+29290
+29291
+29292
+20199
+8392
+32
+337
+35
+14330
+13721
+1765
+18064
+14
+29293
+29294
+349
+29295
+29296
+15718
+14
+29297
+19
+736
+29298
+29299
+18951
+1779
+29300
+29301
+29302
+21947
+284
+29303
+730
+3353
+21947
+29304
+19
+28317
+29305
+15586
+25382
+12886
+29306
+3546
+26508
+4821
+29307
+29308
+29309
+15360
+29310
+15
+1529
+29311
+29312
+29313
+29314
+1606
+27669
+29315
+1720
+13721
+7381
+29316
+14
+7815
+29317
+3095
+25683
+349
+29318
+29319
+21947
+29320
+6766
+29321
+29322
+29323
+7996
+1245
+29324
+265
+29325
+29326
+27669
+29327
+29328
+590
+583
+190
+648
+720
+43
+43
+27798
+14604
+1749
+13265
+57
+5080
+59
+32
+26361
+28317
+29329
+19
+14
+43
+43
+1444
+671
+19
+29330
+936
+20
+29331
+3
+24896
+29332
+43
+25683
+15
+18914
+29333
+790
+2694
+18045
+29334
+590
+590
+29335
+1961
+29336
+29337
+14330
+29338
+1091
+970
+9
+57
+2832
+29339
+19
+29340
+590
+29341
+29342
+32
+14001
+9
+26496
+815
+12987
+22403
+29343
+2677
+29344
+25584
+19618
+19
+720
+14363
+345
+27669
+14330
+1090
+286
+29345
+9
+14604
+3353
+8668
+29346
+29347
+29348
+3994
+19
+3546
+10108
+165
+21947
+14604
+8566
+29349
+6087
+29350
+5085
+29351
+21947
+23363
+21947
+29352
+19965
+29353
+29354
+29355
+2540
+29356
+24303
+3540
+5929
+29204
+9
+15
+32
+377
+16375
+10
+18568
+16437
+26027
+14604
+15
+29357
+29358
+19618
+29359
+14330
+29360
+19
+817
+29361
+29362
+29363
+20442
+2512
+9102
+5188
+10777
+1434
+29364
+15718
+12005
+20984
+29365
+1051
+495
+29366
+29367
+590
+29368
+209
+29369
+29370
+14001
+3546
+10004
+15616
+2540
+14947
+19797
+1812
+25154
+1038
+2550
+21765
+29371
+21947
+9024
+5188
+29372
+29373
+29374
+43
+29375
+872
+29376
+21261
+564
+29377
+1356
+29378
+25237
+3428
+4230
+27069
+1870
+6950
+29379
+29380
+27024
+12989
+29381
+3546
+29382
+14369
+23313
+357
+225
+19404
+29383
+43
+16695
+29384
+11945
+29385
+20215
+22337
+29386
+29387
+1153
+736
+27415
+9364
+446
+15718
+29388
+28951
+24864
+14477
+4684
+24864
+29389
+279
+457
+29390
+25260
+11413
+15718
+23212
+29391
+29392
+1316
+345
+29393
+323
+22065
+448
+29394
+29395
+29396
+446
+89
+29397
+648
+19
+17048
+12404
+16258
+5623
+15824
+1634
+736
+25683
+29398
+99
+13765
+29399
+29400
+29401
+29402
+43
+29403
+3480
+29404
+16826
+2253
+18306
+29405
+21947
+29406
+24303
+1224
+1021
+29407
+28472
+4293
+29007
+9
+29408
+2206
+14947
+590
+495
+29409
+448
+29410
+20785
+9
+29411
+29412
+29413
+248
+2694
+15718
+58
+29414
+27669
+32
+19122
+24303
+9
+1765
+29415
+11
+10028
+29416
+345
+20
+665
+25140
+27669
+3655
+29417
+25140
+19237
+29418
+32
+13576
+16557
+13721
+29419
+24864
+29420
+7053
+2211
+5119
+12987
+29421
+28317
+28056
+12254
+28317
+43
+25172
+29422
+29423
+29424
+14
+29425
+15194
+8787
+29426
+13688
+29427
+28317
+22308
+397
+317
+19655
+29428
+29429
+345
+29241
+14369
+13140
+15
+28961
+514
+15718
+29430
+484
+29431
+7053
+29432
+21947
+29433
+29434
+9343
+14369
+29435
+99
+24725
+9560
+29436
+2804
+19
+14
+29437
+345
+138
+10
+2
+1051
+9
+7053
+29438
+29439
+29440
+554
+6363
+338
+16840
+18695
+27604
+29441
+25
+14369
+25829
+29442
+272
+286
+1222
+29443
+14
+365
+15479
+28606
+29444
+272
+19
+42
+29445
+2577
+2316
+24896
+29446
+29447
+495
+29448
+29200
+1198
+142
+14477
+29449
+28317
+14603
+29382
+29450
+28463
+19798
+349
+464
+17670
+29439
+29451
+17151
+29452
+25140
+25
+1425
+29453
+29454
+446
+23103
+19852
+190
+38
+29455
+43
+29456
+115
+29457
+29458
+29459
+29460
+29461
+6617
+11176
+29462
+29463
+671
+112
+736
+32
+22463
+29464
+19597
+416
+1100
+29465
+19
+20
+554
+2349
+349
+4803
+379
+29466
+13149
+270
+18310
+155
+29467
+29468
+3
+29469
+25237
+19794
+29470
+27669
+25237
+29471
+24896
+29472
+29381
+8249
+3546
+736
+29381
+5780
+29473
+29474
+29475
+2347
+25943
+29476
+29477
+29478
+29479
+18951
+554
+14
+29480
+29481
+29482
+29483
+17920
+9
+590
+7799
+53
+29484
+29485
+28951
+29486
+3349
+14947
+18869
+29487
+1356
+6011
+29488
+971
+29489
+29490
+29491
+25140
+1090
+15483
+15718
+9
+57
+29492
+29493
+590
+2733
+29494
+1244
+29495
+29496
+5780
+3546
+29497
+19
+8566
+15718
+590
+14477
+1798
+29498
+5588
+43
+25683
+29499
+29500
+13279
+379
+28317
+412
+29501
+3
+188
+29502
+349
+3994
+19
+29503
+1743
+6612
+446
+29504
+29505
+29506
+29507
+20992
+15718
+29508
+29509
+28317
+29510
+29511
+14369
+15
+7835
+345
+29512
+9
+29513
+29514
+21947
+29515
+5817
+590
+29516
+12696
+2577
+4028
+1799
+931
+89
+29517
+29204
+23208
+345
+29518
+29519
+29520
+495
+12893
+5773
+14
+15718
+19618
+15718
+29521
+28441
+22
+9
+29522
+29523
+1021
+590
+8668
+9
+43
+29524
+29525
+29526
+1273
+29527
+29528
+6068
+29529
+29530
+9
+29531
+3546
+21698
+29532
+21947
+29533
+9
+29534
+1852
+34
+12120
+28317
+43
+29535
+12158
+29536
+19404
+21947
+26127
+29537
+9
+29538
+29539
+29540
+32
+2649
+29541
+29542
+24896
+29543
+29544
+1300
+6251
+155
+29545
+14
+18064
+29275
+29546
+1812
+29547
+29548
+21689
+28951
+29549
+1018
+21947
+29550
+18199
+21689
+317
+536
+9
+29551
+29552
+43
+25943
+29553
+19
+2694
+43
+29554
+29555
+29556
+22
+29557
+104
+23226
+533
+24207
+19618
+20
+7385
+315
+29558
+2009
+29559
+12987
+27669
+25237
+21947
+29560
+484
+29561
+18503
+1907
+29562
+1559
+29563
+24161
+590
+1208
+29564
+249
+29565
+29566
+25
+3546
+27619
+15718
+29567
+8208
+6275
+29568
+29569
+29570
+590
+29571
+29572
+29573
+12988
+24896
+29574
+29575
+29576
+22963
+29577
+25683
+17813
+24896
+29578
+13721
+1401
+27420
+29579
+10
+29580
+9
+25624
+29581
+29582
+286
+25140
+29583
+12647
+29584
+29585
+10511
+16571
+29586
+29587
+155
+29588
+2260
+29589
+29590
+29591
+29592
+29593
+29594
+29595
+29381
+29596
+28549
+29597
+29598
+6505
+29599
+6468
+25683
+349
+29600
+8814
+19618
+28036
+4496
+29601
+1580
+14947
+29602
+29603
+43
+345
+27669
+29604
+29605
+707
+27087
+29606
+29607
+6766
+29608
+29609
+16254
+2694
+80
+29610
+22963
+15
+1517
+1384
+22919
+26501
+437
+29611
+9
+1768
+29612
+29613
+3575
+104
+15453
+2251
+112
+13566
+29614
+29381
+25659
+29615
+26040
+4055
+24725
+29616
+24303
+60
+15718
+21889
+115
+446
+7053
+1295
+5842
+43
+29617
+29618
+29619
+29620
+791
+29621
+29622
+2833
+24232
+1100
+2764
+6504
+9
+18736
+7253
+2744
+29623
+3743
+14415
+29624
+20694
+29625
+29626
+10094
+3553
+29627
+323
+20838
+21947
+358
+29628
+5923
+29629
+2029
+2117
+29630
+29631
+29632
+1524
+22963
+272
+29633
+6480
+29634
+1045
+29635
+29636
+29637
+11321
+23764
+89
+5188
+29638
+5188
+29639
+29640
+1212
+5188
+713
+29641
+29642
+43
+29643
+5780
+21373
+29644
+29645
+24303
+2988
+29646
+720
+20238
+29647
+12120
+29648
+1531
+14330
+29649
+29650
+2694
+21947
+29381
+29651
+29652
+29653
+138
+29654
+29655
+19
+29656
+104
+29657
+29658
+18695
+566
+19
+29659
+514
+1742
+29660
+29661
+14
+27117
+43
+24219
+936
+15853
+29662
+29663
+29664
+29204
+27739
+1870
+29665
+21947
+29666
+3790
+13961
+104
+15718
+29667
+7053
+27669
+323
+13721
+16437
+32
+19618
+20514
+21947
+6950
+115
+1011
+14560
+16979
+491
+5629
+29668
+29669
+564
+15718
+22
+29670
+13570
+4422
+3976
+29671
+24896
+29672
+29673
+43
+11787
+29674
+23103
+15540
+29675
+29200
+29676
+9
+29677
+1013
+29678
+29679
+29680
+29681
+29381
+29682
+9
+915
+16437
+17151
+29683
+861
+24178
+29684
+29685
+24896
+12893
+29686
+26031
+19091
+3551
+29687
+29688
+16826
+1961
+7053
+2042
+21689
+15718
+9749
+24896
+29689
+1870
+29690
+677
+10406
+24864
+29691
+29692
+14
+29693
+1680
+349
+29694
+24303
+25683
+29695
+2121
+27231
+12067
+12983
+29696
+29697
+43
+19091
+21947
+29381
+14369
+15718
+29698
+29381
+14947
+22
+29699
+29700
+29701
+29702
+5467
+2680
+439
+28317
+29483
+6364
+6950
+29703
+25237
+5806
+29704
+2686
+13943
+21031
+29705
+25625
+20518
+29706
+29707
+590
+1154
+29708
+29709
+29710
+29711
+43
+1168
+1090
+590
+28317
+8668
+11176
+20859
+245
+8218
+4934
+3345
+19928
+22461
+29712
+29713
+18668
+10910
+29714
+29715
+20
+197
+27669
+3119
+29716
+7835
+14
+29717
+2734
+14369
+9
+24864
+791
+22
+14481
+26710
+590
+29718
+29719
+27096
+1154
+13807
+29720
+43
+2117
+9
+29721
+590
+29722
+3055
+1425
+1514
+25659
+13823
+11436
+3626
+14477
+29723
+29724
+14369
+29725
+4357
+590
+2733
+259
+4461
+29726
+15914
+14
+28549
+29727
+1018
+39
+22
+14330
+15
+14369
+43
+25318
+5188
+29728
+29729
+29730
+2356
+3598
+4380
+650
+3601
+4502
+14477
+23828
+22236
+27669
+345
+29731
+4144
+5188
+21947
+29732
+57
+112
+18695
+29733
+43
+29734
+590
+29735
+21947
+5629
+29736
+14477
+5204
+24896
+109
+29737
+597
+15442
+3239
+19618
+29738
+29739
+24725
+278
+29740
+29741
+29742
+29743
+2117
+29744
+29745
+29746
+12582
+29747
+29748
+29749
+29750
+27669
+19404
+32
+14369
+17281
+26361
+29381
+12987
+9
+286
+29751
+17903
+14369
+29381
+13904
+3077
+16826
+201
+29752
+590
+10028
+29010
+29753
+29754
+29755
+590
+1637
+3994
+3719
+29381
+21563
+248
+4153
+201
+10117
+536
+303
+15
+936
+483
+248
+25683
+590
+15718
+29381
+185
+29756
+43
+25991
+5188
+24195
+29757
+272
+29758
+26496
+16121
+3655
+4677
+29759
+29760
+3546
+26286
+27096
+29761
+29762
+28317
+317
+18919
+29763
+10
+1011
+22986
+21947
+865
+209
+590
+29764
+28441
+29765
+436
+3376
+284
+13279
+43
+29766
+29767
+29768
+29769
+11471
+19
+5780
+373
+29770
+590
+29771
+791
+21947
+29772
+3546
+15718
+29773
+14477
+303
+14
+248
+29774
+14477
+436
+29775
+14604
+1425
+29776
+29777
+19618
+303
+826
+29778
+3
+29779
+20595
+4760
+279
+11995
+19928
+29780
+140
+5904
+29781
+29782
+29783
+14369
+2356
+15718
+1051
+554
+22986
+29784
+29785
+337
+13721
+590
+2302
+9
+14
+736
+29786
+43
+337
+12351
+43
+38
+28312
+1808
+29787
+24896
+21947
+29788
+1300
+2476
+29789
+14369
+26178
+1224
+15
+29790
+4452
+25943
+14
+29791
+20
+590
+29483
+15
+29792
+9
+9
+29793
+29381
+29794
+29795
+29796
+24144
+29797
+1090
+15718
+286
+345
+3559
+27669
+2588
+13721
+19318
+19618
+5085
+8683
+1442
+29798
+28317
+707
+3999
+19618
+1810
+590
+28441
+3904
+29381
+9617
+337
+20443
+29799
+3546
+28317
+29800
+860
+20952
+25237
+29801
+29802
+2787
+209
+19618
+29803
+286
+13566
+345
+1942
+29804
+29805
+21031
+29806
+1442
+248
+29807
+14
+248
+21947
+14
+7795
+2
+3546
+5438
+29808
+29381
+21698
+16180
+21869
+815
+29809
+29810
+1716
+109
+24864
+249
+21947
+29811
+303
+6071
+1168
+2769
+13307
+43
+3746
+14086
+14
+23323
+29812
+17871
+590
+29813
+29814
+3239
+29815
+590
+14161
+1047
+2026
+43
+21947
+373
+57
+196
+29816
+284
+590
+29817
+29818
+14
+43
+29819
+19
+15718
+29820
+21947
+20468
+43
+13957
+29821
+22
+29381
+20499
+3297
+24144
+21947
+29822
+80
+29823
+29824
+29825
+25584
+29826
+14079
+337
+29827
+29828
+9
+590
+2561
+2476
+29829
+28317
+10
+15989
+14330
+29830
+19618
+29381
+29831
+736
+303
+3484
+3546
+1502
+29832
+4862
+29833
+10
+29834
+29835
+25237
+337
+21111
+248
+14
+707
+18191
+590
+24864
+345
+29836
+29837
+3251
+29838
+4438
+1364
+1749
+2577
+19
+2593
+21947
+29839
+17467
+29840
+29841
+696
+3828
+6067
+29628
+820
+29842
+25237
+29843
+872
+43
+29844
+8367
+14369
+20339
+27331
+29845
+29846
+28549
+29847
+29848
+4634
+24896
+29849
+29850
+29851
+29852
+29853
+29854
+29855
+29856
+26744
+18479
+14369
+21947
+14369
+29381
+29381
+13721
+29857
+29858
+29859
+26672
+32
+43
+27414
+4441
+22204
+19618
+27669
+13957
+25
+29860
+519
+29861
+29862
+29863
+96
+10917
+29864
+9
+21947
+29865
+14560
+29866
+27669
+66
+13721
+12247
+14
+5134
+29867
+19618
+1513
+22230
+24403
+15
+713
+29868
+1415
+6341
+365
+29869
+29870
+18310
+9913
+1021
+6487
+2260
+28951
+29871
+29032
+344
+14604
+29872
+29873
+790
+17151
+213
+9
+3546
+29483
+29874
+29875
+5119
+2392
+29876
+29877
+29878
+29628
+25659
+17608
+29879
+29880
+9410
+19404
+29881
+89
+4278
+20883
+17749
+43
+29882
+10717
+15611
+29883
+5837
+16461
+8849
+20182
+15718
+29884
+791
+24920
+29885
+29886
+21947
+25945
+25530
+10
+29887
+15718
+286
+18234
+29888
+29889
+24303
+736
+1425
+14597
+24045
+29890
+29891
+2
+15789
+736
+21468
+29892
+9
+70
+21947
+736
+18234
+29893
+24144
+29894
+590
+28549
+25140
+25237
+29895
+29896
+3023
+29897
+1154
+57
+303
+21947
+29898
+24864
+29899
+43
+17412
+29900
+57
+7935
+1743
+43
+29901
+43
+14
+213
+19009
+15718
+29902
+29903
+16437
+29904
+16107
+29905
+29906
+14369
+3546
+29907
+29908
+29909
+29910
+29911
+19618
+4124
+27836
+4463
+21689
+29912
+29913
+1517
+14369
+8295
+1169
+29914
+29915
+29916
+29917
+29918
+915
+3353
+3252
+21947
+14
+28317
+6225
+694
+9774
+29919
+21931
+44
+29920
+16826
+14477
+9
+590
+27669
+29921
+10117
+345
+1812
+248
+6161
+43
+29922
+29923
+29924
+19618
+1051
+29925
+284
+15855
+29926
+24844
+57
+24896
+12956
+27669
+2342
+12067
+29927
+29928
+29929
+21947
+23867
+14
+14079
+4055
+12560
+179
+29930
+138
+29931
+29932
+21602
+137
+29933
+15158
+1612
+14276
+7799
+9
+1314
+2694
+21947
+248
+213
+7835
+14909
+29934
+5188
+29935
+25316
+12267
+20614
+2577
+29936
+19
+1109
+408
+77
+303
+24896
+29937
+29938
+29483
+29939
+25140
+29940
+13721
+3422
+2136
+10526
+3546
+29941
+8188
+29942
+29943
+29944
+19387
+358
+29945
+1859
+22989
+29946
+28549
+14079
+7053
+590
+13957
+27669
+19618
+29947
+25683
+29948
+13228
+379
+9
+16028
+29012
+43
+29949
+29950
+29951
+14604
+1090
+29952
+29953
+14369
+14
+15718
+25683
+3546
+29954
+29955
+29956
+29957
+29958
+5539
+15789
+29959
+43
+28441
+29960
+23578
+11995
+29961
+29962
+29963
+971
+1907
+14482
+14
+317
+29964
+1047
+14
+29965
+29966
+29967
+29968
+248
+1961
+6223
+29969
+29970
+5629
+248
+29971
+4463
+345
+14
+29972
+29973
+29974
+345
+6364
+29975
+2197
+29483
+29976
+29977
+21947
+25683
+411
+357
+345
+9
+28951
+10781
+29978
+25140
+13721
+27669
+29979
+558
+554
+5780
+29980
+286
+2135
+9600
+5791
+8668
+21889
+25934
+29981
+20132
+29982
+29983
+2795
+613
+29984
+3247
+29985
+29986
+2415
+3287
+28951
+29987
+590
+25668
+29988
+29989
+24144
+11702
+29990
+345
+29991
+590
+29992
+28441
+20161
+3874
+14
+1112
+197
+29993
+29994
+3081
+7053
+248
+29995
+29996
+713
+15207
+66
+21689
+4221
+29997
+6400
+3546
+9
+5326
+10094
+225
+29998
+28317
+1160
+29999
+30000
+7137
+30001
+14
+25683
+21947
+16515
+30002
+745
+30003
+30004
+30005
+25943
+27669
+30006
+19009
+21947
+30007
+2832
+30008
+30009
+29381
+3655
+24843
+30010
+22187
+5297
+6305
+30011
+1503
+337
+27
+16810
+8712
+2773
+1115
+15718
+24207
+9
+590
+30012
+29204
+303
+14363
+14079
+11238
+7508
+30013
+30014
+30015
+30016
+915
+11764
+29799
+21947
+19122
+5188
+4918
+19618
+30017
+185
+13721
+2035
+30018
+29032
+29720
+30019
+30020
+30021
+57
+590
+7706
+8367
+1010
+28745
+201
+19
+286
+30022
+30023
+873
+30024
+30025
+9060
+4634
+14175
+30026
+1168
+43
+30027
+322
+284
+21030
+30028
+13365
+11261
+30029
+43
+30030
+30031
+30032
+21947
+9636
+30033
+349
+30034
+43
+30035
+3484
+8442
+26475
+1021
+30036
+30037
+22
+9160
+19
+14330
+3491
+17749
+25237
+14369
+30038
+30039
+16066
+26940
+16974
+30040
+32
+30041
+519
+15939
+25943
+14436
+6504
+18020
+28951
+24864
+30042
+53
+590
+32
+30043
+76
+27069
+9
+2027
+30044
+30045
+30046
+19798
+30047
+30048
+14871
+5806
+213
+25237
+10389
+30049
+736
+30050
+30051
+30052
+21947
+27065
+19965
+30053
+30054
+32
+30055
+21947
+30056
+30057
+30058
+586
+677
+30059
+1481
+22
+15018
+10038
+15
+25943
+30060
+30061
+14369
+30062
+15718
+349
+3601
+20
+30063
+30064
+30065
+30066
+19563
+15
+30067
+647
+14330
+554
+30068
+590
+9
+548
+357
+25237
+19
+30069
+30070
+14
+30071
+14330
+28753
+43
+30072
+30073
+30074
+30075
+2836
+30076
+30077
+21947
+1011
+89
+201
+30078
+18640
+284
+30079
+13238
+5629
+30080
+30081
+155
+25140
+30082
+474
+19052
+28441
+30083
+6764
+30084
+43
+6976
+30085
+12832
+13543
+22492
+5780
+178
+30086
+29109
+11607
+29381
+14369
+683
+30087
+30088
+43
+19618
+30089
+29956
+11754
+21947
+2197
+28401
+30090
+12351
+3698
+9
+30091
+3546
+29204
+43
+5582
+26549
+4126
+22042
+28441
+30092
+165
+2694
+30093
+43
+1520
+446
+30094
+17635
+19
+1018
+30095
+15718
+30096
+19618
+3978
+2561
+5820
+18421
+14
+30097
+28441
+201
+30098
+6950
+1090
+3601
+23271
+30099
+30100
+30101
+30102
+228
+2902
+6728
+358
+30103
+1234
+9
+6261
+19
+30104
+27669
+14
+9
+26066
+1021
+2260
+29381
+3546
+1011
+14369
+8160
+43
+2330
+30105
+30106
+30107
+5803
+30108
+30109
+3546
+7259
+30110
+21947
+30111
+4752
+30112
+30113
+30114
+1517
+24725
+10
+2029
+30115
+1912
+30116
+3553
+10
+5791
+3067
+30117
+30118
+29381
+30119
+43
+27733
+29
+30120
+27404
+30121
+30122
+222
+30123
+21947
+1885
+60
+13349
+30124
+19
+19
+736
+18869
+30125
+29628
+13566
+14330
+15718
+23649
+2043
+12157
+30126
+345
+399
+6364
+14
+30127
+104
+1765
+6344
+20144
+17477
+14330
+1245
+30128
+20
+24862
+30129
+736
+30130
+30131
+3790
+30132
+30133
+19319
+286
+590
+30134
+2872
+30135
+18951
+43
+19
+30136
+30137
+8378
+30138
+373
+533
+25267
+30139
+25140
+30140
+590
+30020
+3330
+43
+30141
+18896
+30142
+30143
+1606
+15718
+30144
+30145
+2733
+30146
+24435
+19
+1920
+30147
+1765
+30148
+30149
+30150
+30151
+30152
+30153
+18248
+1332
+27069
+30154
+5188
+30155
+30156
+14102
+30157
+5188
+30158
+5088
+28317
+30159
+19618
+27564
+8455
+30160
+26361
+30161
+1056
+7577
+30162
+272
+30163
+30164
+28333
+24303
+30165
+20374
+30166
+30167
+1817
+30168
+2314
+27011
+30169
+14079
+43
+30170
+22999
+1808
+29381
+15
+30171
+30172
+7494
+30173
+30174
+30175
+14
+29799
+27069
+15
+30176
+21947
+19
+2356
+30177
+30178
+30179
+24303
+30180
+14001
+349
+30181
+26181
+14529
+17586
+30182
+2550
+30183
+7053
+30184
+30185
+30186
+20
+30187
+30188
+1066
+21947
+3059
+30189
+14330
+30190
+17271
+17872
+6924
+790
+17151
+30191
+30192
+30193
+590
+30194
+30195
+30196
+21689
+17529
+1401
+1423
+30197
+30198
+1596
+30199
+30200
+30201
+13807
+30202
+18951
+30203
+30204
+30205
+28923
+193
+1688
+15
+23103
+19618
+25829
+24896
+30206
+24725
+24725
+2476
+2787
+19206
+9210
+3858
+30207
+12397
+59
+30208
+29381
+30209
+17586
+30210
+15
+30211
+30212
+30213
+8686
+14604
+30214
+28549
+7053
+990
+30215
+7838
+21947
+2324
+34
+22963
+30216
+11259
+30217
+24207
+590
+1513
+30218
+8610
+24725
+28549
+29483
+24303
+2
+30219
+10583
+30220
+22986
+872
+7137
+30221
+43
+29799
+30222
+5326
+2254
+15718
+3546
+21947
+30223
+345
+677
+1090
+17691
+29381
+25140
+554
+30224
+5650
+25991
+30225
+13576
+25659
+17791
+24303
+15
+30226
+701
+10
+20
+30227
+4230
+30228
+671
+27875
+14
+1870
+30229
+18429
+22818
+15718
+30230
+30231
+8668
+12896
+27069
+30232
+3059
+30233
+21417
+30234
+26040
+30235
+30236
+554
+15541
+21576
+21947
+30237
+213
+30238
+18695
+15
+303
+30239
+114
+28036
+30240
+30241
+14
+29200
+872
+30242
+30243
+337
+495
+3034
+14477
+30244
+3546
+30245
+22599
+30246
+15398
+11217
+12359
+248
+30247
+37
+28661
+30248
+7749
+12956
+764
+30249
+43
+30250
+25683
+21031
+30251
+21947
+7014
+19404
+12696
+30252
+30253
+23162
+30254
+30255
+30256
+30257
+30258
+30259
+29163
+11321
+9
+16
+1011
+30260
+337
+1513
+30261
+30262
+26962
+1267
+30263
+27213
+2764
+99
+21947
+1710
+30264
+17151
+3994
+3908
+9
+30265
+30266
+14477
+19
+30267
+14
+26292
+30268
+32
+30269
+30270
+30271
+5188
+536
+21947
+30272
+30273
+3598
+57
+26496
+9
+30274
+28317
+286
+30275
+19655
+9266
+1442
+30276
+10729
+345
+23603
+30277
+19618
+30278
+30279
+25683
+284
+30280
+30281
+32
+30282
+30283
+2635
+29483
+3978
+790
+30284
+43
+30285
+248
+30286
+4747
+30287
+30288
+30289
+28317
+303
+248
+15
+2
+24303
+30290
+30291
+3994
+25237
+1234
+30292
+30293
+30294
+30295
+7738
+19118
+30296
+48
+9
+15592
+1217
+24303
+590
+25659
+29483
+29381
+28317
+30297
+26538
+2314
+1710
+3242
+590
+3435
+18798
+21849
+14330
+30298
+1655
+11762
+590
+30299
+25237
+30300
+24144
+30301
+30302
+29381
+30303
+30304
+3866
+30305
+16102
+6728
+30306
+20
+27669
+30307
+5085
+29381
+337
+30308
+6571
+30309
+7137
+9
+30310
+19
+8668
+30311
+30312
+3978
+30313
+185
+30314
+26984
+14369
+6145
+3601
+19095
+2040
+25584
+303
+30315
+27069
+2197
+25683
+30316
+30317
+3546
+333
+30318
+30319
+989
+19404
+13721
+411
+99
+2770
+5006
+1234
+4747
+14704
+29835
+1112
+4028
+5188
+30320
+303
+21947
+80
+30321
+586
+30322
+9
+411
+14369
+19
+1578
+24896
+29628
+3376
+30323
+14
+809
+286
+18064
+4278
+30324
+13848
+30325
+705
+14648
+337
+19404
+15718
+30326
+9
+21947
+30327
+4522
+28481
+5780
+9
+1168
+9110
+29381
+20
+27669
+14603
+30328
+14947
+30329
+30330
+30331
+30332
+30333
+590
+1961
+30334
+30335
+24469
+30336
+30337
+2668
+30338
+27669
+1870
+17808
+30339
+28549
+16437
+30340
+18091
+21947
+30341
+17144
+30342
+597
+30343
+24896
+3908
+7053
+323
+24725
+209
+21188
+7215
+29381
+26348
+30344
+43
+590
+519
+30345
+590
+29381
+25943
+590
+30346
+29381
+10
+19404
+30347
+1385
+8270
+30348
+17871
+30349
+25140
+323
+21947
+286
+28317
+30350
+29434
+10
+30351
+647
+6078
+23670
+30352
+7018
+25683
+1224
+14330
+17277
+30353
+23103
+590
+30354
+15939
+17571
+222
+9705
+9
+17670
+78
+590
+303
+30355
+30356
+18607
+30357
+6873
+30358
+6161
+30359
+338
+4
+7137
+30360
+30361
+19618
+30362
+14369
+2561
+30363
+155
+14233
+2260
+14369
+22689
+77
+24928
+21732
+30364
+14330
+30365
+1688
+30366
+30367
+6833
+11762
+22183
+19603
+392
+13905
+30368
+30369
+2392
+30370
+13405
+13725
+286
+21045
+2728
+3354
+5925
+3328
+30371
+8845
+26744
+17698
+14369
+43
+30372
+1112
+30373
+25683
+30374
+2449
+30375
+30376
+284
+590
+4990
+5107
+201
+29963
+3908
+647
+30377
+9
+6595
+19
+30378
+22317
+21947
+43
+155
+44
+27798
+4538
+337
+201
+30379
+1224
+14
+19
+417
+57
+26096
+11170
+30380
+373
+13905
+9214
+2342
+16031
+634
+390
+30381
+15476
+43
+3601
+3642
+668
+30382
+5267
+30383
+17151
+14604
+30384
+24045
+1051
+248
+12907
+5674
+30385
+30386
+3818
+14369
+3353
+30387
+30388
+7756
+30389
+15513
+13361
+349
+6171
+1112
+30390
+25140
+11754
+16505
+30391
+104
+1502
+9095
+44
+43
+17206
+25683
+21469
+34
+30392
+14477
+1524
+30393
+30394
+18760
+25237
+22473
+30395
+30396
+30397
+30398
+19267
+30399
+1217
+24864
+14
+30400
+554
+30401
+1470
+43
+249
+18780
+15
+30402
+29381
+14152
+10
+14
+30403
+30404
+3626
+3341
+21947
+30405
+8460
+13285
+3369
+30406
+446
+20
+284
+736
+10095
+30407
+30408
+590
+30409
+1889
+114
+140
+30410
+28317
+365
+590
+28549
+822
+2919
+590
+24000
+248
+30411
+30412
+25584
+590
+30413
+30414
+43
+14
+213
+3546
+19
+30415
+29483
+12067
+411
+24725
+4900
+1696
+736
+12987
+15824
+25237
+30416
+44
+30417
+378
+30418
+720
+30224
+30419
+21153
+24896
+337
+832
+43
+590
+2851
+248
+24896
+30420
+30421
+14369
+43
+14947
+3559
+28317
+4414
+30422
+17784
+1157
+30423
+104
+19404
+213
+3875
+17349
+6571
+32
+4808
+23752
+408
+30424
+16850
+30425
+24725
+30426
+19096
+43
+30427
+21689
+138
+26303
+16121
+12600
+25758
+286
+30428
+5134
+9
+30429
+213
+213
+43
+18684
+30430
+8297
+30431
+5119
+10239
+20
+590
+1382
+28317
+70
+29381
+43
+30432
+210
+17589
+30433
+19
+29956
+30434
+1559
+209
+29204
+26361
+19852
+30435
+30436
+28317
+10
+7291
+43
+57
+11482
+10527
+720
+14369
+1112
+30437
+30438
+30439
+30440
+18982
+30441
+18250
+1716
+590
+25140
+495
+30442
+6449
+30443
+30444
+30445
+11754
+30446
+1606
+1559
+43
+29483
+5188
+13484
+10
+303
+1364
+57
+3655
+352
+30447
+30448
+22
+30449
+28549
+21947
+1956
+30450
+213
+30451
+30452
+827
+345
+24864
+30453
+30454
+30455
+7137
+26570
+12254
+29916
+29013
+72
+9
+30456
+30457
+323
+30458
+1316
+2975
+30459
+30460
+3995
+14369
+30461
+18310
+7053
+30462
+222
+30463
+11762
+19
+12798
+9801
+8668
+15
+10527
+303
+590
+30464
+30465
+5007
+1234
+21201
+7053
+30466
+29434
+3208
+15
+30467
+15718
+30468
+38
+15533
+21947
+30469
+8668
+30470
+1574
+25683
+30471
+9402
+4364
+17972
+30472
+30473
+30474
+1593
+3546
+5318
+30475
+284
+683
+30476
+21947
+14947
+30477
+30478
+14330
+337
+19582
+27669
+12987
+30479
+9
+30480
+25237
+18951
+1514
+14369
+2043
+27669
+272
+3601
+30481
+30482
+30483
+15925
+6289
+3546
+8814
+1620
+337
+43
+707
+17749
+30484
+28317
+379
+30485
+30486
+13307
+4693
+13721
+14477
+4028
+30487
+30488
+3897
+25683
+29381
+15442
+30489
+30490
+26508
+30491
+7662
+12661
+345
+5336
+19618
+30492
+30493
+13721
+30494
+142
+6732
+27669
+736
+30495
+2410
+7014
+13538
+337
+2577
+15718
+12661
+337
+2768
+3546
+137
+30496
+28082
+1817
+5627
+21947
+30497
+30498
+30499
+19695
+30500
+590
+1961
+25237
+30501
+11
+30502
+22
+345
+5188
+590
+30503
+30504
+43
+30505
+30506
+30507
+29483
+16226
+1332
+3480
+8668
+30508
+24725
+19386
+4196
+30509
+5188
+3546
+30510
+18695
+30511
+14477
+30512
+30513
+30514
+2772
+30515
+14369
+24218
+20572
+30516
+30517
+2314
+647
+613
+2029
+5293
+14369
+19618
+26496
+21776
+683
+30518
+30519
+19618
+30520
+30521
+43
+30522
+2324
+9
+30523
+30524
+30525
+30209
+5780
+9649
+13721
+30526
+14
+10
+28353
+14825
+228
+349
+19
+5188
+30527
+30528
+1021
+30529
+7855
+30530
+48
+30531
+30532
+29483
+7835
+30533
+1809
+30534
+30535
+10
+104
+22680
+8244
+21947
+590
+29381
+30536
+30537
+2
+30538
+3080
+6505
+30539
+18100
+17094
+22552
+30540
+26132
+29381
+23474
+30224
+248
+831
+30541
+686
+30542
+30543
+11607
+30544
+30545
+30546
+29491
+8724
+647
+30547
+30548
+27669
+3328
+27669
+30549
+30550
+2406
+30551
+28317
+24045
+8610
+29483
+8244
+30552
+30553
+27669
+21698
+2208
+3719
+30554
+14369
+4012
+28317
+2593
+28549
+1082
+30555
+17921
+30556
+5267
+30557
+19435
+29381
+10356
+24864
+30558
+17005
+12431
+30559
+989
+272
+30560
+21947
+19
+21509
+1011
+30561
+14369
+30562
+457
+30563
+30564
+29483
+28317
+24860
+18744
+140
+18045
+24418
+1787
+25237
+29381
+7053
+43
+590
+590
+358
+7328
+9
+30565
+24144
+6341
+30566
+13585
+24864
+30567
+30568
+30569
+14369
+29483
+323
+4055
+8110
+15718
+2015
+27905
+15
+21947
+11762
+30570
+43
+20600
+30571
+16437
+15193
+2234
+30572
+30573
+30574
+30575
+590
+29981
+14369
+59
+4341
+1356
+30576
+1799
+24860
+30577
+3480
+30578
+15718
+18079
+1870
+30579
+21947
+30580
+29381
+24045
+30581
+29483
+14947
+30582
+1542
+5085
+3462
+19
+9060
+349
+379
+29381
+22308
+25943
+30583
+19
+1710
+3546
+590
+12287
+30584
+3546
+13229
+25
+21947
+1648
+349
+12222
+5561
+30585
+18982
+30586
+14215
+30587
+14666
+25276
+19
+30588
+590
+21947
+1442
+24725
+25364
+30589
+30590
+30591
+24864
+30592
+5085
+30593
+12987
+29629
+12479
+30594
+57
+5606
+30595
+30596
+30597
+249
+5085
+30598
+26744
+30599
+43
+17151
+1082
+30600
+30601
+29483
+30602
+27798
+5217
+30603
+30604
+25382
+43
+915
+30605
+2060
+29483
+30606
+30607
+26417
+7053
+25237
+30608
+30609
+24864
+30610
+30611
+1300
+15
+15949
+20816
+21031
+30612
+30613
+29483
+30614
+26361
+30615
+5314
+30616
+30617
+1203
+19
+14079
+10511
+30618
+5629
+24896
+19618
+26508
+590
+30619
+20636
+30620
+140
+30621
+26786
+30622
+21947
+26064
+28317
+30623
+30624
+19
+25316
+30625
+30626
+19
+43
+14
+30627
+3034
+30628
+1870
+1083
+15718
+5614
+373
+2
+30629
+30630
+38
+21947
+30631
+8668
+12404
+30632
+30633
+30634
+12062
+1226
+29381
+136
+140
+30635
+15718
+30636
+3913
+286
+14369
+25088
+30637
+4012
+20
+25237
+30638
+1517
+2975
+30639
+30640
+13721
+42
+23617
+30641
+1245
+3546
+671
+30642
+30643
+12987
+3228
+4364
+30644
+21689
+14330
+5785
+590
+17518
+30645
+2925
+24725
+13721
+30646
+21889
+15054
+30647
+30648
+29992
+713
+43
+155
+30649
+590
+30650
+286
+6060
+30651
+43
+17151
+9
+6766
+11754
+2733
+250
+20656
+242
+397
+30652
+9
+1332
+30653
+30580
+3531
+188
+30654
+30655
+12067
+30656
+30657
+30658
+26496
+24896
+23103
+30659
+30660
+30661
+20
+349
+30662
+30663
+188
+29483
+28147
+586
+29381
+30664
+30665
+14369
+8297
+30666
+30667
+164
+1153
+2342
+20
+21947
+10303
+30668
+259
+43
+1852
+4764
+30669
+13619
+9
+30670
+30671
+201
+10946
+3
+357
+30672
+30673
+9
+30674
+16817
+30675
+286
+358
+30676
+14477
+24896
+1889
+29381
+4138
+910
+3546
+21971
+30677
+11906
+30678
+566
+1295
+188
+3546
+30679
+11073
+8668
+19
+2409
+4765
+2260
+22236
+9
+30051
+412
+25620
+2764
+590
+15923
+736
+30680
+24864
+10117
+30681
+736
+14369
+30682
+1013
+30683
+30684
+30685
+30686
+349
+3601
+2
+25683
+1765
+43
+30687
+6893
+30688
+363
+2410
+11083
+25
+27669
+30689
+27669
+14330
+30690
+30691
+30692
+30693
+764
+30694
+30695
+30696
+13777
+14
+24045
+30697
+30698
+873
+30699
+2314
+2694
+30700
+11810
+28441
+30701
+30702
+1157
+30703
+30704
+30705
+30706
+24725
+30707
+8188
+30708
+30458
+27669
+7053
+30709
+30710
+30711
+30712
+30713
+4550
+26690
+13801
+30714
+30715
+30716
+915
+30717
+536
+60
+11087
+28490
+887
+18283
+590
+25971
+17371
+1716
+30718
+2834
+30719
+30720
+30721
+30722
+29984
+30559
+29381
+30723
+30724
+597
+30725
+30726
+30727
+1621
+19
+30728
+43
+30729
+30730
+30731
+30732
+30733
+19404
+30734
+30735
+1287
+30736
+30737
+19
+30738
+3546
+30739
+30740
+14947
+16437
+89
+23226
+10
+590
+30741
+6764
+18934
+30742
+30743
+26361
+2550
+345
+28317
+30744
+1508
+23752
+1698
+30745
+30746
+30747
+10
+1562
+15718
+21947
+2314
+30748
+3950
+30749
+30750
+25159
+30751
+23102
+286
+8668
+209
+30752
+27669
+2325
+21831
+30753
+18695
+19091
+27669
+30754
+2830
+30755
+30756
+6214
+9
+7855
+28317
+30757
+30758
+30759
+30760
+30761
+2065
+30762
+25237
+30763
+25943
+30764
+22098
+30765
+30766
+30767
+7559
+30768
+12987
+29381
+8249
+30769
+4821
+30770
+10
+345
+2804
+27482
+30771
+99
+20555
+30772
+4806
+30773
+30774
+30775
+30776
+27719
+18019
+43
+19618
+2471
+2459
+27669
+590
+9
+30777
+21947
+30778
+30779
+15
+4982
+3353
+17151
+109
+43
+519
+5074
+28441
+30780
+26040
+30781
+30782
+13841
+30783
+4387
+21947
+30784
+30785
+30786
+399
+30787
+1262
+21947
+7108
+30788
+590
+30789
+12231
+30790
+590
+2577
+2320
+5204
+11754
+25659
+43
+30791
+1824
+13662
+26649
+30792
+24864
+865
+30793
+25140
+14369
+30794
+67
+18605
+417
+30795
+30796
+22963
+1224
+19618
+70
+30797
+3546
+29483
+30798
+4364
+861
+14770
+3908
+30224
+30799
+39
+30800
+2459
+30801
+1612
+339
+30802
+817
+30209
+30803
+9629
+13576
+4278
+14343
+9
+20514
+30804
+17151
+30805
+30806
+25943
+30807
+590
+27669
+1300
+30808
+7053
+5601
+1423
+29483
+3546
+590
+30809
+21947
+845
+30810
+355
+14369
+30811
+24725
+30812
+30813
+30814
+12220
+5188
+30815
+590
+28317
+30816
+30817
+30818
+30819
+18186
+15207
+14604
+21337
+30820
+30821
+6334
+4425
+188
+3546
+1291
+14369
+15718
+30822
+30823
+30824
+272
+24896
+15825
+28317
+590
+19655
+57
+30825
+19
+2342
+12579
+30826
+21947
+30827
+13307
+18695
+28568
+19404
+24774
+9095
+2260
+9842
+20952
+1018
+190
+3764
+43
+2896
+30828
+2764
+25943
+14
+30829
+29381
+2049
+24144
+365
+98
+30830
+29483
+14841
+30831
+1018
+6364
+30832
+30833
+17270
+10430
+30834
+30835
+19
+21947
+30836
+1300
+28317
+30837
+30838
+30839
+14133
+43
+30840
+1220
+21947
+30841
+30842
+16437
+30843
+25172
+30844
+30845
+28317
+22
+17046
+30846
+573
+43
+27669
+30847
+30848
+12684
+20108
+30849
+30850
+15718
+30851
+15311
+19
+30852
+446
+4458
+30853
+345
+1992
+30854
+30855
+14363
+30856
+703
+30857
+30858
+861
+30859
+24333
+345
+30860
+14330
+9
+30861
+30862
+30863
+1012
+713
+15718
+26635
+30864
+3
+10360
+30865
+554
+20700
+590
+155
+30866
+30867
+29483
+28923
+416
+18896
+30868
+345
+30869
+30870
+590
+26011
+14
+24790
+30871
+345
+15
+3104
+17320
+15718
+19618
+14
+2314
+590
+1688
+4634
+30872
+21835
+590
+19064
+30873
+286
+30874
+30875
+30876
+17151
+14
+30877
+3626
+30878
+3551
+30879
+30880
+19
+5188
+3601
+10230
+29483
+1021
+22669
+30881
+29483
+30882
+22989
+14330
+38
+13566
+30883
+30884
+1559
+349
+43
+25172
+827
+43
+29497
+20
+30885
+30886
+30887
+5410
+14
+495
+19
+30888
+15
+30889
+14369
+89
+15942
+3546
+14604
+30890
+66
+43
+30891
+15
+30892
+32
+417
+228
+24131
+30893
+12722
+30224
+21499
+19582
+30894
+25237
+30895
+1961
+30896
+19
+30897
+24896
+30898
+304
+3546
+25666
+26711
+30899
+30900
+30901
+77
+827
+30902
+30903
+30904
+16437
+30905
+14330
+103
+30906
+27069
+25659
+1529
+1559
+5662
+12005
+27669
+14
+4306
+14
+30907
+30908
+30909
+30910
+30911
+58
+30912
+28441
+30913
+1245
+25604
+14477
+677
+29483
+30914
+3598
+4195
+281
+17151
+24045
+66
+14000
+43
+46
+30915
+30916
+29483
+25871
+43
+155
+30917
+30918
+18145
+2038
+2872
+30919
+43
+13279
+16437
+30920
+209
+30921
+25
+19655
+13583
+345
+89
+11174
+14527
+17151
+30922
+30923
+736
+13553
+30924
+24919
+1066
+29381
+89
+506
+533
+2
+14898
+442
+713
+14330
+25659
+6877
+30925
+8602
+29483
+3546
+1716
+30926
+349
+30927
+30928
+4028
+1786
+14330
+22308
+30929
+30930
+17608
+3546
+2
+14102
+6459
+30931
+3546
+21947
+30932
+29381
+57
+30933
+5085
+20952
+3546
+14185
+3546
+1521
+2264
+30934
+30935
+30936
+29153
+713
+245
+590
+21947
+30937
+2525
+2733
+30938
+43
+25140
+4502
+27719
+30939
+24896
+26484
+30940
+3044
+30941
+26484
+19618
+5085
+9
+2764
+30942
+30943
+21186
+484
+1444
+30944
+30945
+30946
+30947
+349
+2309
+842
+4086
+14477
+30948
+43
+30949
+22963
+11389
+303
+24063
+30950
+11995
+24144
+14909
+19404
+30559
+248
+30559
+10407
+12907
+915
+29483
+30951
+248
+1021
+30952
+30953
+829
+30954
+590
+30955
+30956
+25683
+30957
+30958
+9705
+30959
+30960
+26484
+25683
+30961
+915
+284
+19
+15718
+10961
+30962
+30963
+43
+284
+30964
+18568
+20514
+1332
+30965
+30966
+21947
+590
+2834
+30967
+30968
+19618
+7835
+30969
+590
+29483
+7522
+30970
+28317
+3790
+2064
+30971
+29483
+1234
+1710
+30972
+58
+23103
+30973
+249
+358
+21947
+358
+379
+32
+1471
+213
+30974
+30975
+6776
+14604
+8967
+713
+1222
+248
+30976
+817
+8256
+27669
+671
+30977
+15718
+30978
+14477
+16437
+73
+21947
+30979
+24951
+43
+14369
+7977
+24303
+27433
+1745
+14660
+26229
+927
+827
+30980
+30981
+25943
+9604
+43
+554
+30982
+30983
+751
+30984
+590
+248
+286
+30985
+677
+30986
+27446
+18946
+11845
+30987
+30988
+29381
+1562
+21947
+379
+2015
+30989
+15356
+3546
+30990
+30991
+1465
+30992
+590
+30993
+30994
+14369
+6095
+29483
+30995
+29381
+2804
+30996
+15259
+1562
+24144
+89
+3480
+9718
+1026
+19965
+66
+2728
+16853
+30997
+30998
+7137
+30999
+272
+1834
+31000
+590
+9
+12697
+31001
+20339
+31002
+2430
+3
+32
+974
+31003
+1169
+28441
+24896
+15824
+31004
+31005
+31006
+28317
+829
+13615
+179
+11138
+15470
+31007
+30051
+2004
+533
+31008
+24374
+29381
+27669
+590
+14369
+14369
+590
+13375
+27996
+1262
+12871
+31009
+31010
+29381
+15718
+1021
+29483
+14363
+31011
+31012
+31013
+22065
+14477
+29381
+43
+8188
+12563
+12053
+15718
+23464
+31014
+315
+303
+31015
+31016
+43
+4518
+278
+303
+31017
+18064
+17151
+31018
+14369
+31019
+3553
+491
+13721
+31020
+31021
+590
+31022
+31023
+20051
+31024
+9232
+4441
+15763
+103
+140
+3546
+25683
+21975
+31025
+31026
+31027
+29204
+31028
+27669
+30538
+286
+5451
+31029
+17151
+31030
+1300
+327
+31031
+3484
+31032
+31033
+21947
+31034
+31035
+16340
+1458
+27794
+2121
+19618
+31036
+29483
+31037
+590
+345
+31038
+31039
+31040
+1208
+8392
+31041
+2636
+31042
+31043
+736
+237
+31044
+26040
+3546
+25584
+791
+29799
+3251
+5089
+25140
+28317
+21853
+1013
+31045
+349
+915
+20532
+28317
+31046
+345
+31047
+26025
+21947
+16919
+648
+12351
+29483
+31048
+155
+31049
+20
+22420
+31050
+201
+3546
+188
+29434
+613
+31051
+15718
+31052
+24864
+9
+77
+4441
+18120
+22355
+13640
+164
+665
+31053
+140
+31054
+19618
+15718
+31055
+18283
+31056
+2485
+915
+31057
+31058
+872
+822
+19
+31059
+6617
+29381
+27669
+21947
+15068
+11670
+397
+31060
+8668
+31061
+3976
+27069
+31062
+31063
+31064
+1382
+31065
+24144
+22010
+590
+31066
+18045
+20404
+1559
+927
+590
+31067
+9
+26744
+31068
+19618
+31069
+1082
+179
+31070
+15980
+379
+43
+31071
+31072
+31073
+31074
+43
+31075
+16211
+11479
+31076
+3546
+22
+29628
+24896
+31077
+14001
+31078
+31079
+31080
+31081
+15
+31082
+10
+31083
+30559
+11582
+31084
+25904
+28549
+303
+25
+8244
+31085
+31086
+31087
+31088
+5780
+9
+12315
+25
+501
+8005
+284
+833
+411
+26744
+345
+31089
+31090
+31091
+3251
+31092
+43
+2694
+590
+29483
+5806
+31093
+31094
+25683
+2795
+31095
+21837
+9287
+188
+31096
+31097
+15348
+31098
+14871
+665
+19792
+31099
+286
+648
+970
+2197
+31100
+31101
+176
+31102
+20538
+590
+31103
+13086
+31104
+89
+19618
+43
+31105
+31106
+31107
+2975
+14477
+14477
+16826
+201
+16645
+26361
+30224
+736
+31108
+1018
+303
+20
+25943
+1051
+345
+29483
+4002
+8351
+14330
+30580
+21947
+31109
+31110
+153
+31111
+25140
+272
+14330
+18310
+31112
+323
+25237
+15569
+14369
+31113
+31114
+21947
+1543
+358
+30051
+2414
+3601
+25316
+12987
+24207
+31115
+31116
+31117
+31118
+286
+29483
+677
+31119
+20
+31120
+31121
+25237
+31122
+178
+31123
+31124
+43
+31125
+478
+27669
+23805
+43
+25943
+3950
+14520
+114
+18951
+31126
+31127
+1559
+31128
+31129
+29483
+26452
+31130
+32
+31131
+31132
+1502
+31133
+5390
+971
+15718
+14369
+30877
+31134
+31135
+31136
+303
+303
+27260
+6950
+28317
+284
+28179
+25659
+9
+14436
+31137
+303
+31138
+31139
+31140
+1047
+31141
+21947
+14330
+11672
+31142
+31143
+24896
+26158
+29381
+4414
+31144
+31145
+31146
+31147
+568
+31148
+31149
+590
+14363
+31150
+2253
+1082
+28441
+2260
+248
+1051
+31151
+31152
+1961
+15183
+286
+10601
+22371
+10793
+595
+19655
+24725
+24896
+43
+31153
+21947
+337
+31154
+18798
+31155
+25202
+21869
+2728
+22420
+11683
+590
+21947
+30877
+25584
+31156
+12987
+31157
+31158
+19
+548
+402
+31159
+19
+31160
+31161
+14643
+861
+2577
+1606
+98
+590
+31162
+9210
+24725
+31163
+3546
+24864
+12987
+1289
+15
+14477
+31164
+31165
+31166
+31167
+31168
+3546
+590
+31169
+31170
+971
+23666
+31171
+3546
+17920
+96
+31172
+43
+15649
+29381
+31173
+30917
+27548
+89
+446
+590
+536
+31174
+448
+323
+31175
+31176
+13905
+31177
+43
+31178
+31179
+8297
+14734
+31180
+15718
+31181
+373
+509
+31182
+31183
+4055
+31184
+379
+13848
+590
+590
+27798
+43
+31185
+31186
+2043
+213
+27669
+16948
+590
+14
+815
+5188
+31187
+31188
+31189
+13721
+17151
+31190
+23103
+26083
+31191
+179
+7983
+14814
+10111
+31192
+5188
+15
+31193
+284
+9
+17151
+57
+31194
+31195
+12474
+14000
+7810
+10
+31196
+14369
+19
+43
+6054
+2197
+31197
+17151
+31198
+2176
+349
+369
+5188
+31199
+31200
+31201
+31202
+1013
+1287
+25140
+31203
+29
+31204
+4056
+5840
+13840
+23103
+4278
+31205
+1066
+31206
+561
+554
+7053
+29381
+14330
+31207
+31208
+365
+31209
+25140
+31210
+14343
+345
+31211
+14369
+22311
+14947
+3059
+46
+31212
+31213
+31214
+7045
+365
+31215
+24144
+31216
+3553
+3978
+270
+19618
+2733
+8721
+31217
+6058
+24896
+31218
+31219
+21947
+201
+31220
+707
+25237
+43
+31221
+566
+60
+43
+31222
+31223
+2260
+31224
+19618
+2577
+13905
+26040
+31225
+31226
+31227
+12987
+31228
+31229
+26571
+31230
+3553
+31231
+31232
+5757
+9
+31233
+14363
+3598
+356
+22
+6970
+31234
+31235
+28441
+31236
+19618
+822
+31237
+19618
+30877
+15718
+25897
+31238
+1559
+31239
+167
+31240
+19618
+31241
+1870
+28326
+31242
+31243
+590
+30559
+25140
+20
+9
+24303
+32
+19655
+19618
+286
+17698
+265
+19189
+31244
+31245
+31246
+440
+31247
+31248
+29483
+31249
+15793
+31250
+5188
+2619
+3964
+14330
+6275
+29483
+31251
+5679
+31252
+31253
+31254
+9754
+11966
+9
+12
+16
+13539
+1094
+31255
+30224
+31256
+21947
+29799
+24725
+16089
+24864
+89
+5085
+15907
+31257
+7385
+27798
+20098
+554
+9
+3598
+17983
+250
+1011
+6331
+30877
+31258
+31259
+31260
+31261
+8668
+30794
+43
+1976
+1011
+31262
+9
+13721
+31263
+554
+3546
+13721
+31264
+24785
+249
+590
+31265
+349
+29381
+31266
+19618
+2308
+19618
+31267
+21947
+14369
+3601
+13576
+3
+31268
+590
+590
+43
+970
+31269
+24864
+31270
+155
+14369
+590
+19618
+9
+14369
+29002
+800
+2891
+27669
+27669
+590
+970
+5119
+12987
+14240
+31271
+31272
+30877
+14947
+15471
+25683
+30826
+31273
+30877
+31274
+77
+3978
+352
+590
+31275
+31276
+5119
+31277
+19618
+31278
+590
+21676
+31279
+1376
+24303
+21947
+31280
+286
+29483
+3406
+16451
+754
+31281
+31282
+31283
+11259
+25683
+809
+736
+31284
+9
+22
+31285
+9
+57
+1083
+14
+764
+23363
+19
+31286
+21947
+31287
+31288
+16437
+9
+736
+14660
+342
+31289
+31290
+27817
+12832
+590
+16466
+19836
+5976
+21309
+11940
+31291
+31292
+29381
+31293
+1612
+11934
+27669
+24864
+286
+2476
+2499
+31294
+31295
+31296
+7665
+14330
+677
+19209
+6877
+887
+9210
+31297
+12259
+43
+31298
+1521
+1027
+31299
+31300
+31301
+209
+2591
+31302
+31303
+31304
+31305
+3369
+53
+9
+32
+31306
+31307
+272
+31308
+31309
+16437
+31310
+8297
+1047
+3546
+15718
+379
+18683
+30559
+31311
+31312
+17902
+21947
+31313
+9
+21947
+31314
+31315
+31316
+31317
+11522
+29483
+26020
+31318
+43
+19618
+2316
+18896
+31319
+9
+21625
+3546
+31320
+24207
+31321
+27669
+11738
+31322
+31323
+11702
+89
+31324
+31325
+31326
+12987
+185
+14369
+31327
+533
+590
+25237
+31328
+19
+31329
+31330
+590
+16931
+22
+14330
+1920
+43
+15
+209
+31331
+31332
+6741
+30051
+31333
+720
+31334
+30877
+9782
+31335
+31336
+20496
+21947
+31337
+3546
+19618
+3343
+31338
+31339
+10
+4550
+248
+43
+21716
+8297
+19
+31340
+24588
+31341
+849
+31342
+31343
+15
+31344
+31345
+30877
+32
+155
+1013
+736
+15824
+4441
+31346
+887
+3994
+13396
+25943
+24045
+519
+30209
+29884
+10028
+25047
+31347
+31348
+29956
+21947
+31349
+590
+1090
+31350
+10362
+18112
+31351
+915
+31352
+77
+18695
+15853
+6197
+31353
+14603
+31354
+30224
+17834
+31355
+57
+8005
+4285
+31356
+27719
+21947
+17206
+1384
+31357
+31358
+31359
+31360
+31361
+31362
+2121
+30877
+1352
+18928
+18045
+66
+31363
+31364
+30877
+5512
+31365
+17168
+31366
+6395
+28441
+34
+29483
+3950
+31367
+31368
+31369
+29483
+31370
+31371
+27069
+28317
+31372
+13721
+31373
+31374
+31375
+9
+29786
+31376
+11472
+1046
+31377
+665
+19
+28317
+31378
+31379
+31380
+25237
+25584
+756
+13030
+14477
+31381
+14
+201
+31382
+138
+590
+43
+31383
+43
+24725
+98
+25382
+31384
+21045
+286
+29381
+30877
+89
+31385
+25140
+19618
+20897
+31386
+31387
+29483
+5085
+14660
+213
+19
+14369
+701
+29381
+31388
+28339
+24045
+11754
+31389
+30877
+29381
+31390
+31391
+10880
+19
+31392
+31393
+31394
+20536
+31395
+31396
+31397
+31398
+31225
+28317
+2
+1154
+25683
+20
+31399
+284
+31400
+31401
+3353
+2043
+14594
+7053
+16
+213
+24725
+17
+9
+30224
+29381
+590
+248
+31402
+42
+31403
+31404
+3546
+31405
+1847
+315
+248
+27798
+109
+14947
+31406
+1107
+21947
+31407
+31408
+345
+500
+1038
+31409
+19
+31410
+30224
+6179
+31098
+28317
+2264
+31411
+29483
+140
+21681
+10973
+30877
+1013
+31412
+28961
+1352
+31413
+5080
+31414
+21947
+31415
+14599
+31416
+25871
+53
+17
+14
+27798
+31417
+19618
+8668
+31418
+43
+24303
+31419
+8668
+9
+3601
+31420
+31421
+31422
+7835
+26727
+2314
+4609
+31423
+31424
+248
+1090
+470
+15718
+30877
+26496
+3546
+3160
+1992
+303
+31425
+31426
+7137
+31427
+25237
+1784
+20897
+9
+284
+31428
+2913
+31429
+170
+29628
+28317
+554
+31430
+22
+2668
+31431
+412
+43
+13390
+2489
+21776
+10
+19
+26508
+13776
+31432
+1224
+4550
+31433
+109
+1531
+31434
+31435
+284
+4028
+31436
+1924
+31437
+29483
+14001
+15718
+31438
+31439
+31440
+18695
+14369
+30877
+23103
+31441
+15
+31442
+20094
+31443
+20888
+4055
+9451
+31444
+31445
+16865
+303
+17033
+32
+22963
+31446
+43
+17136
+9
+4025
+19126
+29381
+13030
+1716
+685
+31447
+17084
+31448
+31449
+9939
+209
+29381
+31450
+28317
+25140
+590
+169
+18034
+31451
+31452
+19655
+541
+2593
+14369
+31453
+24303
+20
+9
+8721
+31454
+397
+415
+31455
+990
+716
+31456
+1765
+31457
+31458
+4684
+554
+14369
+536
+1131
+22064
+3408
+29381
+26496
+31459
+31460
+21689
+1335
+31461
+31462
+249
+9
+31463
+31464
+17151
+31465
+24675
+20
+13150
+10117
+31466
+43
+28339
+31234
+317
+31467
+31468
+27669
+23103
+14
+31469
+31470
+29381
+26744
+29483
+7253
+337
+1090
+31471
+31472
+411
+554
+15824
+31473
+491
+671
+31474
+31475
+31476
+590
+31477
+31478
+14369
+14
+915
+31479
+31480
+7868
+31481
+9
+29483
+31482
+6090
+31483
+28471
+31484
+31485
+31486
+941
+6877
+31487
+1817
+31488
+22
+720
+915
+31489
+31490
+5498
+24010
+31491
+31492
+19
+31493
+390
+29483
+2577
+31494
+14363
+31495
+29483
+31496
+31497
+249
+9
+16656
+5188
+19817
+28999
+970
+6595
+31498
+11304
+5780
+3546
+27069
+31499
+31500
+3599
+31501
+31502
+31503
+31504
+25683
+284
+9548
+533
+9994
+43
+25683
+14369
+57
+3
+12832
+31505
+2315
+590
+5169
+1332
+31506
+31507
+559
+27669
+15718
+31508
+31509
+31510
+1578
+590
+31511
+28000
+31512
+19
+31513
+31514
+165
+31515
+558
+213
+31225
+1765
+31516
+1927
+1352
+31517
+31518
+5085
+15631
+31519
+27669
+590
+379
+28877
+30650
+10750
+28317
+29483
+31520
+25237
+8961
+19
+18951
+22464
+7233
+31521
+345
+31522
+31523
+30921
+31524
+31525
+31526
+29799
+745
+31527
+31528
+15718
+31529
+24952
+9132
+31530
+14301
+2009
+31531
+8367
+3465
+31532
+30877
+24864
+28317
+31533
+5085
+31534
+31535
+8668
+31536
+24302
+16444
+31537
+446
+31293
+3553
+2259
+31538
+31539
+25237
+590
+30309
+31540
+30877
+491
+2187
+31541
+31542
+31543
+31544
+5659
+27069
+958
+31545
+196
+31546
+31293
+31547
+24207
+13721
+31548
+865
+2117
+18695
+345
+31197
+2515
+24896
+665
+13919
+31549
+1019
+1937
+31550
+15718
+31551
+31552
+22063
+1905
+14369
+9
+820
+15718
+1716
+201
+286
+19883
+16118
+31553
+7053
+31554
+31555
+15718
+31556
+284
+4463
+31557
+31558
+533
+31559
+31560
+26361
+5627
+31561
+31562
+77
+286
+31563
+14330
+31564
+29381
+30224
+7855
+854
+19618
+31565
+31566
+31567
+2728
+936
+29109
+29483
+373
+89
+337
+1831
+4144
+31568
+28317
+30309
+10
+15
+31569
+31570
+6991
+13721
+31571
+970
+25097
+31572
+5780
+9578
+10407
+7053
+358
+43
+213
+15
+31573
+31574
+16640
+31575
+8247
+29032
+12987
+31576
+31577
+25237
+24725
+7053
+43
+31578
+46
+31579
+30551
+31580
+24864
+3546
+213
+11838
+30921
+213
+31581
+31582
+284
+31583
+11607
+11754
+5780
+14477
+27669
+25943
+345
+274
+25943
+31584
+27473
+213
+29381
+31585
+15370
+1458
+16656
+10
+31586
+31587
+30877
+19618
+26647
+31588
+31589
+31590
+43
+2314
+27669
+29200
+31591
+1768
+9
+564
+1021
+286
+5707
+31592
+286
+29483
+4918
+2086
+6557
+31593
+9
+18607
+970
+11571
+337
+1051
+26190
+31594
+31595
+274
+19095
+3546
+21947
+9335
+31596
+284
+2993
+29032
+31597
+155
+21947
+2356
+31598
+31599
+554
+31600
+31601
+10356
+14477
+17
+720
+31602
+30877
+554
+2728
+28317
+6766
+31603
+11210
+31604
+43
+31605
+9
+1559
+18561
+31606
+14
+668
+23806
+3553
+31607
+19655
+31608
+31609
+590
+31610
+31611
+21947
+25140
+31612
+31613
+677
+31614
+1517
+15
+29628
+337
+31615
+31616
+31617
+29483
+66
+31618
+31619
+31620
+31621
+31622
+22
+5188
+22963
+29791
+25097
+337
+31623
+4808
+29483
+31624
+5188
+2694
+25237
+4242
+25109
+31625
+31626
+31627
+22
+13840
+12067
+31628
+2029
+4606
+13349
+19
+24896
+3575
+3457
+21126
+31629
+14477
+31630
+30877
+19372
+17997
+31631
+586
+31632
+12987
+31633
+303
+16472
+43
+31634
+1244
+31635
+32
+4174
+1862
+31636
+31637
+14369
+14330
+31638
+17039
+1745
+15718
+24403
+12987
+31639
+15718
+31640
+6736
+791
+66
+31641
+31642
+31643
+21947
+16437
+29483
+31644
+590
+31645
+30877
+2289
+25140
+43
+31646
+31647
+36
+15718
+9
+590
+29576
+31648
+31649
+24045
+1414
+43
+31650
+3
+18919
+2
+31651
+185
+21947
+31652
+31653
+31654
+31655
+31656
+1047
+31657
+31658
+13150
+31659
+30877
+317
+337
+2
+4055
+31660
+31661
+671
+2694
+28317
+19852
+3546
+31662
+1956
+29483
+1090
+14330
+5976
+25723
+15584
+736
+32
+178
+31663
+377
+3067
+730
+21947
+31664
+17144
+15
+5820
+31665
+2694
+517
+31666
+6459
+43
+25402
+13721
+31667
+12013
+19618
+31381
+11224
+5041
+24864
+882
+31668
+10
+970
+4808
+720
+18418
+31669
+29483
+248
+31670
+25140
+31671
+25943
+345
+3477
+590
+31672
+57
+31673
+4055
+31674
+31675
+24896
+13721
+245
+30224
+19618
+22868
+31676
+31677
+2260
+30458
+29204
+18136
+29483
+21031
+7137
+30877
+142
+14603
+9
+31678
+14369
+1604
+31679
+21947
+31680
+31681
+31682
+31683
+736
+31684
+16413
+14216
+7835
+17907
+18982
+2733
+25140
+5435
+590
+28549
+31685
+31686
+31687
+27939
+379
+31688
+31689
+31690
+31691
+38
+43
+15718
+28013
+31692
+337
+26361
+613
+31693
+6086
+112
+31694
+1384
+31695
+28140
+5780
+9
+13150
+7855
+32
+9
+31696
+31697
+31698
+31699
+10356
+2
+76
+2476
+2577
+249
+1208
+3104
+22075
+1423
+3470
+31700
+349
+15483
+24864
+27681
+13566
+1157
+1765
+31701
+12267
+5344
+20058
+43
+17151
+31702
+21776
+23841
+30877
+32
+590
+1012
+8798
+1224
+345
+31703
+19618
+1011
+3739
+24896
+19618
+611
+12788
+24896
+9
+31704
+31705
+3335
+15504
+2990
+1716
+31706
+14363
+1208
+31707
+4026
+1090
+1090
+179
+1051
+770
+8263
+24896
+286
+30051
+22
+337
+31708
+5085
+31709
+31710
+17151
+31711
+31712
+31713
+1765
+31714
+28500
+31715
+9
+1212
+31716
+31717
+27719
+9
+24144
+3
+31718
+19618
+345
+43
+31719
+31720
+4
+31721
+31722
+24725
+29381
+5387
+28441
+43
+28317
+31723
+18951
+31724
+31725
+14369
+15718
+9
+57
+5007
+31726
+22098
+29381
+16377
+29483
+31727
+345
+19
+22986
+9
+31728
+2769
+24725
+31729
+4028
+27669
+17151
+590
+31730
+29381
+14363
+31731
+24371
+590
+43
+2286
+286
+31732
+19852
+222
+24303
+11321
+590
+1115
+14330
+8967
+533
+17749
+2019
+14
+31733
+3546
+14477
+2
+30655
+20952
+590
+21947
+20792
+30877
+31734
+18951
+25683
+31735
+1514
+31736
+31737
+43
+31738
+14369
+30580
+31739
+6627
+31740
+43
+21947
+31741
+31742
+31743
+2976
+25943
+31744
+104
+19
+31745
+31746
+31747
+31748
+18695
+4124
+31749
+31750
+31751
+31752
+31753
+30877
+22963
+43
+18568
+31754
+31755
+25164
+2064
+1316
+15448
+14477
+13325
+43
+21947
+12987
+29463
+21947
+31756
+31757
+17151
+590
+30877
+9194
+19
+31758
+272
+5601
+31759
+3055
+30877
+42
+31760
+2694
+402
+3546
+30877
+31761
+14363
+31762
+590
+31763
+861
+15989
+554
+31764
+31765
+1224
+31766
+910
+9
+17920
+8668
+155
+31767
+554
+19585
+31768
+26496
+31293
+3406
+31769
+31770
+31293
+31771
+31772
+26779
+27110
+31773
+43
+272
+27279
+9
+379
+164
+19618
+272
+31774
+24864
+861
+566
+590
+31775
+31776
+2764
+8037
+14477
+751
+4028
+349
+23103
+3
+30851
+29483
+31777
+31778
+31779
+5085
+20517
+57
+20785
+31780
+10580
+179
+1100
+24045
+6499
+5438
+31781
+15718
+31782
+29483
+31293
+26744
+16966
+31783
+31784
+970
+31785
+31786
+31787
+770
+24864
+31788
+13721
+19404
+43
+31789
+31790
+31791
+25991
+10
+28441
+31792
+4805
+15481
+43
+31793
+24765
+26361
+31794
+19585
+8249
+3999
+590
+29381
+597
+21947
+31795
+31796
+1090
+31797
+3790
+15183
+23368
+14832
+25140
+31798
+28295
+1870
+31799
+4128
+31800
+25584
+26724
+1382
+738
+196
+31801
+43
+5415
+21947
+27069
+31802
+19
+31803
+31804
+31805
+25140
+31806
+379
+31807
+43
+27669
+1514
+242
+31808
+31809
+3764
+31810
+31811
+31812
+29799
+27069
+29951
+31813
+2260
+31814
+7357
+1356
+19618
+23103
+31815
+31816
+26011
+795
+1465
+21261
+10139
+31817
+31818
+104
+57
+14363
+31819
+31820
+29483
+29289
+21947
+1208
+27069
+1612
+43
+26040
+31821
+27448
+31822
+66
+31823
+29381
+31824
+5908
+21947
+703
+31720
+31825
+138
+4550
+402
+338
+31826
+14
+19655
+31827
+3061
+590
+1262
+484
+28441
+31828
+29849
+13848
+25140
+179
+345
+31829
+4793
+24045
+590
+1961
+21947
+4244
+29483
+10038
+28317
+31830
+3546
+31831
+30224
+27719
+8110
+31832
+8255
+25683
+590
+31833
+19868
+43
+2260
+14477
+19
+31834
+284
+28317
+31835
+9
+2764
+31836
+24896
+9
+31837
+43
+3301
+4468
+29483
+7137
+31838
+31839
+29381
+43
+24951
+31840
+282
+13721
+31841
+31842
+1942
+21095
+1559
+31843
+31844
+21947
+31845
+1562
+4855
+8675
+31846
+1513
+31847
+28000
+284
+14330
+1524
+31848
+43
+31849
+31850
+31851
+3546
+21776
+5629
+284
+14947
+17112
+31852
+1384
+286
+104
+707
+19
+26680
+20700
+21947
+176
+26680
+66
+25237
+31853
+31854
+29628
+31855
+31856
+31857
+13721
+31858
+248
+286
+43
+31859
+576
+16618
+590
+1090
+10717
+16205
+3417
+10578
+5022
+590
+5976
+19618
+8950
+31860
+31861
+25140
+25683
+31862
+31863
+1563
+303
+31864
+4441
+3095
+2314
+18920
+31865
+713
+31866
+13848
+9
+25237
+57
+9
+31867
+31868
+16391
+11762
+16437
+495
+303
+29381
+5085
+337
+19404
+31869
+31870
+1136
+43
+31871
+31872
+6518
+31873
+31874
+29200
+31875
+5627
+31876
+19618
+31877
+31878
+24458
+788
+31879
+5188
+24253
+5119
+7053
+31880
+23103
+31881
+31882
+373
+720
+540
+31883
+31884
+27159
+1907
+31885
+237
+13307
+31886
+24896
+3353
+31887
+597
+3546
+31888
+1224
+31889
+2733
+303
+31890
+248
+595
+31891
+284
+4441
+9707
+66
+21947
+20340
+12159
+31892
+31893
+196
+9351
+31894
+31895
+27798
+23103
+31896
+21947
+17151
+30260
+3044
+31897
+57
+31898
+31899
+31900
+31901
+43
+9
+29483
+31902
+25140
+31903
+970
+31904
+26706
+19918
+89
+43
+4055
+9
+31905
+303
+31906
+20058
+29483
+9
+27843
+53
+31907
+31908
+5852
+25140
+14001
+31909
+2577
+1524
+28804
+31910
+31911
+411
+32
+5614
+31912
+14947
+12573
+30143
+31913
+31914
+2550
+31915
+155
+30650
+791
+15718
+14330
+31916
+31917
+9
+31918
+15428
+31919
+31920
+21947
+31921
+29483
+25237
+4717
+42
+21207
+29483
+31922
+3546
+24026
+13848
+14330
+31923
+337
+31924
+8367
+21947
+31925
+14898
+29770
+26738
+31926
+179
+20616
+31927
+31928
+31929
+5188
+31930
+29381
+31931
+31932
+31933
+1113
+15629
+21947
+31934
+31935
+286
+716
+31936
+31937
+24144
+554
+31938
+31939
+20616
+323
+31940
+1716
+379
+15541
+970
+29381
+31941
+31942
+31943
+31944
+21689
+18394
+8263
+31945
+25159
+29381
+31946
+86
+57
+15718
+31293
+31947
+31948
+31949
+31950
+25659
+31951
+1083
+21776
+31952
+29381
+29483
+13721
+31953
+15718
+9
+27719
+29381
+31954
+9501
+189
+536
+30347
+30209
+29434
+31955
+31956
+31957
+31958
+31959
+31960
+861
+31961
+31962
+590
+11056
+736
+31963
+573
+24063
+31964
+31965
+21947
+213
+209
+31966
+345
+27069
+5083
+3546
+31967
+31968
+31168
+31969
+31970
+8030
+31971
+31972
+21889
+24864
+43
+31973
+31974
+28317
+15718
+31975
+352
+15718
+169
+576
+31976
+31977
+892
+20871
+31293
+31978
+4820
+3745
+14330
+412
+26136
+31168
+21394
+31979
+12956
+28317
+28317
+970
+31980
+31981
+12166
+12907
+14532
+4441
+19939
+31098
+1249
+43
+14369
+31982
+31983
+31984
+31985
+31986
+15718
+18503
+31987
+24896
+5614
+23103
+683
+31988
+31989
+25053
+339
+31990
+31991
+3317
+31992
+31993
+31994
+16205
+31995
+31996
+31997
+345
+31998
+597
+31999
+32000
+9
+19091
+24907
+30877
+32001
+9688
+32002
+25659
+60
+32003
+1224
+6873
+32004
+9
+1823
+5865
+18503
+3546
+32005
+12987
+464
+32006
+32007
+9048
+4
+1615
+32008
+21947
+1090
+30877
+32009
+32010
+138
+32011
+1314
+32008
+1437
+6557
+32012
+32013
+32014
+2136
+32015
+22420
+6171
+22411
+32016
+32017
+32018
+32019
+29798
+13721
+21031
+21947
+1356
+32020
+21947
+32021
+32022
+29381
+32023
+7987
+6382
+317
+21947
+21947
+7977
+1300
+31293
+23111
+32024
+43
+21947
+13484
+590
+32025
+32026
+32027
+32028
+14604
+21504
+32029
+696
+5297
+6595
+14477
+32030
+32031
+32032
+25140
+21863
+25584
+18045
+24896
+32033
+15718
+32034
+3908
+12202
+19
+1112
+1920
+18695
+32035
+19
+43
+21947
+32036
+16571
+7619
+32037
+25584
+1382
+2243
+1444
+32038
+32039
+32040
+16413
+32041
+31603
+43
+331
+31293
+9
+9560
+720
+14369
+915
+32042
+32043
+32044
+32045
+32046
+32047
+791
+32048
+32049
+1332
+32050
+31860
+345
+178
+32051
+14369
+2700
+32052
+32053
+12400
+21698
+32054
+9410
+16
+2697
+25683
+32055
+590
+209
+32056
+1249
+2243
+17151
+16437
+19
+3626
+1226
+32057
+32058
+8297
+32059
+248
+27669
+32060
+13721
+2302
+32061
+32062
+66
+30877
+32063
+32064
+32065
+1442
+213
+19091
+78
+30877
+28317
+1320
+32066
+30224
+32067
+303
+32068
+590
+21947
+28549
+29836
+32069
+32070
+32071
+345
+32072
+2591
+24864
+9
+32073
+338
+22963
+3353
+28317
+32074
+284
+19
+6732
+12798
+1425
+2314
+26724
+6072
+21947
+18792
+337
+30877
+15718
+32075
+590
+745
+32076
+915
+32077
+32078
+32079
+28317
+28549
+14330
+1234
+32080
+32081
+1295
+5188
+32082
+5780
+213
+25683
+14870
+13765
+865
+9160
+38
+32083
+32084
+18112
+10482
+213
+31293
+590
+9
+4441
+4278
+30260
+43
+14000
+32085
+2919
+699
+32086
+713
+32087
+29109
+201
+32088
+32089
+970
+32090
+751
+29483
+32091
+21947
+5791
+30224
+5627
+29387
+303
+29483
+32092
+19
+32093
+43
+3044
+32094
+303
+32095
+15718
+32096
+19009
+32097
+232
+2941
+28549
+32098
+32099
+25683
+14
+15718
+32100
+32101
+32102
+286
+66
+13897
+32103
+32104
+32105
+23706
+5188
+736
+13296
+32106
+32107
+13781
+24864
+32108
+18234
+10500
+1907
+32109
+14369
+20871
+9
+32110
+284
+2577
+590
+201
+109
+590
+32111
+16
+23547
+284
+32112
+25683
+32113
+541
+32114
+25683
+20514
+32115
+32116
+32117
+1454
+32118
+2155
+564
+32119
+30877
+1103
+30877
+4606
+337
+30877
+17151
+536
+9
+26744
+30877
+32120
+27178
+8460
+32121
+32122
+29981
+1226
+138
+590
+7835
+32123
+29483
+21947
+32124
+22
+686
+15718
+21377
+4388
+1018
+31293
+32125
+3546
+32126
+32127
+32128
+20
+590
+28522
+32129
+6122
+32130
+32131
+13279
+5908
+32132
+16121
+233
+32133
+32134
+970
+1384
+138
+17809
+28753
+14660
+30224
+1100
+32135
+32136
+32137
+6110
+32138
+27669
+32139
+19
+3
+29381
+1090
+3546
+9
+6095
+4954
+32140
+32141
+77
+2043
+1838
+491
+2525
+590
+272
+20232
+26736
+13594
+12097
+32142
+3875
+16511
+32143
+5344
+2577
+18503
+756
+16437
+32144
+14330
+1920
+9705
+1444
+32145
+32146
+1637
+29956
+31168
+9
+15481
+32147
+29483
+13260
+32148
+9
+27849
+32149
+14330
+2415
+29483
+21947
+10583
+24725
+10262
+1047
+3994
+32150
+11452
+32151
+31168
+736
+25237
+536
+23519
+25943
+15594
+32152
+32153
+345
+5893
+12005
+970
+21947
+12387
+32154
+357
+14947
+6086
+32155
+18346
+9
+18200
+17151
+26040
+5627
+31364
+24303
+15382
+18307
+1082
+25237
+1090
+3480
+32156
+9
+32157
+32158
+22986
+32159
+32160
+29381
+13675
+671
+29032
+32161
+32162
+21947
+32163
+32164
+11808
+3546
+32165
+32166
+7835
+29200
+32167
+32168
+411
+349
+24303
+19
+29
+32169
+19
+20
+112
+29381
+28490
+590
+32170
+32171
+19
+15804
+25140
+1018
+32172
+32173
+15718
+10933
+4403
+32174
+29661
+32175
+32176
+19618
+18045
+29381
+32177
+32178
+29200
+32179
+3548
+970
+30224
+43
+25140
+1335
+17670
+32180
+32181
+677
+7137
+32182
+30515
+21947
+32183
+13648
+31293
+32184
+115
+22960
+3484
+24332
+32185
+3059
+32186
+514
+18265
+936
+9
+32187
+32188
+1502
+89
+32189
+32190
+32191
+32192
+32193
+15
+31493
+25140
+21947
+3635
+21947
+7855
+20
+14369
+2673
+15167
+3470
+29483
+590
+4055
+22963
+9548
+32194
+32195
+32196
+7855
+24339
+10348
+32197
+1112
+32198
+25683
+25
+32199
+32200
+32201
+30051
+15
+32202
+32203
+15
+576
+32204
+32205
+1508
+5085
+14369
+20315
+21112
+24725
+32206
+32207
+15718
+13721
+32208
+19218
+3546
+32209
+21947
+32210
+32211
+7053
+9402
+554
+19238
+32212
+13721
+32213
+274
+9
+32214
+32215
+32216
+14563
+21947
+10
+24864
+32217
+915
+17144
+28549
+15497
+1824
+32218
+6302
+32219
+16839
+5097
+27669
+6294
+32220
+19624
+32221
+1012
+8188
+1870
+32222
+29483
+28549
+18048
+286
+32223
+30051
+22922
+32224
+32225
+32226
+31053
+29381
+1051
+32227
+32228
+26060
+32229
+59
+32230
+13474
+25778
+15
+29483
+42
+377
+19974
+7746
+32231
+32232
+32233
+590
+5780
+32234
+25683
+3050
+43
+32235
+3543
+32236
+32237
+32238
+7835
+29483
+14604
+3759
+24303
+1332
+32239
+5204
+590
+32240
+23507
+32241
+32242
+32243
+2733
+3081
+15718
+32244
+30577
+32245
+32246
+14120
+32247
+32248
+24725
+32249
+15718
+14477
+23226
+10818
+32250
+29483
+32251
+32252
+4684
+43
+29483
+32253
+32254
+3421
+32255
+1356
+32256
+3119
+32257
+32258
+26361
+32259
+57
+32260
+27798
+3484
+590
+32261
+32262
+31293
+3553
+32263
+590
+32264
+25140
+32265
+21698
+11702
+323
+27669
+28317
+4196
+1727
+1743
+237
+1927
+30877
+26355
+5188
+32266
+30877
+357
+892
+32267
+32268
+10
+32269
+32270
+32271
+3543
+32272
+8036
+32273
+17151
+349
+32274
+32275
+32276
+8668
+665
+14
+155
+3030
+4055
+32277
+29984
+19
+3484
+15245
+32278
+31225
+15718
+1720
+32279
+28549
+1012
+32280
+12479
+19995
+32281
+32282
+323
+32283
+24303
+27918
+30877
+27669
+24907
+14330
+26952
+11286
+32284
+32285
+10
+32286
+32287
+14369
+27260
+4550
+24050
+21371
+99
+30877
+1992
+26119
+1458
+32288
+32289
+89
+249
+6741
+32290
+1562
+32291
+155
+32292
+32293
+43
+4242
+25943
+32294
+14369
+32295
+32296
+39
+971
+590
+1090
+3995
+30051
+32297
+32298
+32299
+1208
+10791
+32300
+3635
+15356
+27669
+32301
+2562
+32302
+32303
+265
+32304
+357
+3546
+32305
+32306
+32307
+9
+720
+5601
+27260
+1437
+29007
+32308
+32309
+31293
+1090
+32310
+5627
+32311
+10869
+9139
+9573
+32312
+25943
+3406
+1817
+30877
+14369
+9210
+32313
+32314
+32315
+32316
+4820
+25659
+16102
+32317
+5577
+32318
+28549
+19927
+590
+11027
+32319
+1612
+32320
+32321
+32322
+5764
+21947
+22793
+20315
+1531
+9900
+13457
+32323
+32324
+27669
+1090
+14363
+4245
+1044
+32325
+279
+11995
+176
+32326
+16763
+5908
+32327
+13566
+9
+379
+43
+6217
+32
+32328
+970
+14648
+32329
+8188
+25140
+32330
+349
+13129
+32331
+13405
+6086
+25829
+1502
+32332
+9
+448
+19618
+1716
+18695
+23603
+32333
+32334
+20185
+24896
+30877
+1790
+8668
+32335
+19
+14343
+14477
+67
+6620
+573
+32336
+32337
+9
+32338
+32339
+24864
+32275
+32340
+32341
+32342
+1352
+9396
+25683
+1090
+2064
+2832
+19
+9
+24864
+24253
+11762
+249
+1011
+89
+20599
+32343
+28549
+25140
+28490
+31293
+286
+590
+3546
+43
+28317
+31293
+89
+323
+32344
+43
+15
+32345
+32346
+15914
+29483
+19618
+32347
+32348
+32349
+25237
+32350
+32351
+6116
+18982
+1208
+32352
+28549
+23103
+2806
+25683
+17082
+32353
+27669
+18914
+32354
+29483
+2243
+32355
+32356
+32357
+32358
+2
+4230
+28441
+5780
+272
+210
+2410
+32359
+32360
+32361
+27669
+4765
+30224
+31691
+43
+15
+32362
+32363
+32364
+590
+13848
+26047
+32365
+3546
+32366
+25237
+32367
+15481
+32368
+26060
+32369
+13150
+32370
+7208
+1047
+32371
+1356
+4055
+32372
+32373
+32374
+30551
+3546
+19
+16437
+32375
+6441
+1710
+2035
+720
+4436
+30388
+32376
+32377
+29956
+27669
+1503
+23103
+32378
+32379
+222
+25659
+32380
+24303
+15398
+648
+3604
+671
+29047
+32381
+30580
+6072
+3546
+14330
+32382
+33
+18695
+819
+4651
+19
+43
+32383
+32384
+43
+30877
+29483
+32385
+29483
+32386
+32387
+1090
+1245
+25624
+21090
+1817
+32388
+32389
+14604
+27719
+927
+32390
+15718
+30877
+32391
+32392
+32393
+32394
+19
+32395
+32396
+14
+1559
+27669
+32397
+29032
+8905
+9
+4055
+32398
+736
+32399
+32400
+2427
+31637
+19
+27669
+32401
+32402
+32403
+32404
+32405
+25683
+2029
+32406
+31293
+32407
+4055
+4055
+43
+416
+24725
+201
+32408
+344
+24303
+14001
+3376
+32409
+103
+32410
+9
+32411
+176
+7014
+43
+32412
+32413
+5773
+32414
+14647
+104
+10727
+43
+21689
+32415
+29483
+17402
+21947
+32416
+32417
+9
+5188
+43
+32418
+31098
+31637
+25683
+3480
+24403
+2093
+28549
+32419
+590
+9
+27669
+26496
+32420
+3546
+32421
+22963
+32422
+32423
+32424
+32425
+32426
+24864
+4028
+286
+18429
+3994
+14369
+14330
+32427
+43
+18045
+3546
+31668
+21576
+11056
+26744
+3857
+4682
+31434
+849
+32428
+2009
+27069
+4055
+26496
+21947
+15765
+31637
+25683
+533
+32429
+31637
+32430
+24154
+586
+32431
+5326
+29381
+15
+1198
+32432
+28000
+32433
+1812
+32434
+32435
+6122
+30877
+1688
+32436
+25140
+13430
+32437
+32438
+27669
+32439
+32440
+7137
+1090
+345
+32441
+32442
+2944
+32443
+138
+32444
+15
+32445
+228
+32446
+28901
+23103
+13721
+3546
+32447
+28317
+22236
+32448
+14424
+32449
+32450
+32451
+32452
+2
+11762
+15342
+3553
+32453
+24303
+12053
+32454
+3994
+2259
+92
+9
+32455
+29799
+27069
+9497
+21947
+27669
+32456
+5188
+32
+32457
+13317
+25237
+590
+31995
+4055
+4547
+4023
+7855
+14477
+14
+1310
+9
+32458
+32459
+323
+12987
+6341
+30877
+25316
+1425
+32460
+23103
+13829
+910
+32461
+32462
+32463
+10280
+21776
+32464
+15018
+7253
+25683
+43
+32465
+3239
+32466
+32467
+1961
+23103
+32468
+32469
+32470
+18695
+379
+32471
+32472
+32473
+6968
+25237
+6621
+32474
+272
+30877
+32475
+11930
+970
+12340
+1596
+1812
+26496
+32476
+13943
+29483
+8849
+32477
+23216
+32478
+32479
+7694
+671
+9
+4765
+14603
+1316
+1615
+31293
+25237
+32480
+32481
+533
+2944
+8465
+32482
+4387
+32483
+30224
+32484
+9
+12916
+32485
+32486
+2035
+590
+32487
+26361
+10
+32488
+32489
+4242
+32490
+201
+32491
+30877
+1524
+590
+32492
+24919
+32493
+178
+8188
+21947
+25683
+19
+18364
+32494
+16437
+32495
+32496
+590
+32497
+32498
+53
+26361
+3546
+29381
+32499
+14909
+9
+358
+28317
+32500
+32501
+3666
+30877
+29204
+32360
+30877
+24864
+32502
+43
+7900
+2764
+12304
+4055
+32503
+21947
+30309
+32504
+3553
+32505
+590
+32506
+3559
+32507
+28665
+32
+8721
+10601
+14369
+21947
+3416
+28301
+18568
+9
+32508
+1961
+32509
+9259
+32510
+2692
+32511
+32512
+519
+7855
+595
+32513
+17082
+9
+4441
+155
+14330
+3546
+32514
+9705
+10
+2101
+25237
+7835
+284
+21947
+2550
+19618
+32515
+32516
+43
+3067
+11482
+32517
+25140
+1559
+32518
+23688
+1316
+32519
+1011
+2577
+1517
+20
+32520
+32521
+3119
+20952
+32522
+8465
+32523
+32524
+29200
+370
+1562
+32525
+1382
+30877
+32526
+5393
+9
+14001
+397
+9
+32527
+3546
+32528
+31293
+32529
+25683
+2769
+24864
+491
+31293
+3242
+32530
+30516
+32531
+583
+9
+13721
+5022
+14330
+14369
+303
+286
+29503
+213
+25943
+25683
+12304
+32532
+32533
+284
+32534
+32535
+32536
+971
+32537
+6595
+11273
+284
+15758
+213
+32538
+1244
+32539
+5806
+32540
+671
+4055
+29483
+248
+43
+14369
+284
+27669
+554
+32541
+1090
+18763
+1090
+25683
+9
+29822
+14330
+13317
+284
+32542
+1539
+32
+349
+32543
+32544
+2457
+28644
+19347
+3544
+32545
+31293
+21957
+14477
+17151
+14330
+213
+32546
+32547
+32449
+3601
+32548
+11762
+96
+3381
+32549
+6496
+19655
+12916
+533
+2410
+5125
+19
+1090
+14855
+23103
+3553
+32550
+32551
+27378
+286
+337
+17767
+32552
+248
+32553
+32554
+32555
+57
+32556
+1529
+32557
+155
+32558
+26020
+14369
+43
+25140
+32559
+30877
+32560
+104
+32561
+188
+32562
+19618
+1112
+30877
+28317
+30051
+7053
+9
+14
+32563
+29434
+14887
+337
+27514
+25584
+21031
+26744
+32564
+1224
+32565
+14369
+32566
+32567
+1168
+5780
+43
+32568
+32569
+15718
+27669
+32570
+32571
+9
+1090
+19
+19646
+21536
+32572
+12907
+21089
+3994
+352
+29381
+15240
+25584
+21947
+32573
+29679
+19655
+32574
+536
+213
+8540
+23103
+1415
+32575
+32576
+4055
+1090
+19478
+14856
+4055
+32577
+6571
+27669
+32
+30051
+337
+32578
+32579
+32580
+25237
+89
+32581
+5085
+15824
+213
+2649
+32582
+32583
+14
+32584
+14369
+303
+3330
+32585
+19655
+17635
+32586
+4055
+12
+12907
+77
+10748
+590
+30877
+3908
+14
+21947
+365
+141
+286
+24303
+31293
+32587
+9863
+32588
+1637
+19335
+32589
+178
+32590
+32591
+32592
+32593
+36
+25683
+19
+6171
+6656
+30877
+30224
+32594
+32595
+22989
+20666
+32596
+99
+738
+9
+5299
+32
+19
+21947
+30877
+31293
+21947
+32597
+32598
+14369
+32599
+2733
+32600
+32601
+2577
+27427
+2787
+20339
+18684
+14947
+1517
+32602
+4055
+10
+32603
+4463
+176
+32604
+32605
+43
+9
+27069
+25683
+1301
+15235
+43
+24303
+30877
+32606
+639
+1051
+971
+9497
+1870
+25237
+3484
+9
+32607
+32608
+32609
+29628
+1013
+32610
+13528
+9445
+32611
+5650
+25868
+32612
+3959
+17151
+2035
+32613
+32614
+9
+2694
+32615
+24628
+27096
+32616
+21835
+14477
+32617
+12095
+29381
+1100
+22
+30854
+6095
+32618
+13956
+3128
+42
+15331
+32619
+14947
+13875
+31293
+3610
+32620
+10482
+32621
+222
+665
+32622
+28317
+3978
+22
+9
+31733
+32623
+24423
+32624
+484
+8188
+32625
+3976
+32626
+32627
+1364
+15897
+32628
+373
+32629
+32630
+21947
+4944
+1870
+26496
+32631
+32632
+31098
+30877
+14369
+29483
+17151
+13961
+17670
+849
+32
+8015
+11873
+28494
+3994
+1524
+24862
+829
+32633
+32634
+32635
+32636
+248
+15718
+694
+26787
+32637
+32638
+15845
+32639
+32640
+32641
+19618
+32642
+31637
+2694
+5662
+32643
+15718
+2314
+13721
+286
+11341
+22986
+24303
+415
+2733
+25683
+23037
+32644
+25
+554
+31637
+32645
+32646
+43
+32647
+1524
+14369
+32648
+32649
+248
+32650
+32651
+32652
+14066
+21947
+14869
+616
+32653
+25140
+8150
+29483
+15718
+32654
+32655
+24743
+32656
+32657
+20600
+32658
+29275
+32659
+1066
+22621
+32660
+704
+32661
+32662
+22455
+30170
+5614
+15510
+32663
+30224
+9894
+32664
+32665
+3743
+590
+32666
+284
+32667
+32668
+32669
+13012
+25683
+32670
+9254
+27069
+3553
+1090
+3743
+9784
+25683
+24303
+32671
+32672
+32673
+32674
+554
+3746
+1090
+9
+32675
+32676
+32677
+32261
+21947
+590
+32678
+19489
+32679
+250
+1090
+29200
+134
+1082
+971
+32680
+5212
+32681
+19
+25683
+19618
+32682
+32683
+29483
+32684
+9
+30458
+2132
+736
+26361
+32685
+4278
+19
+193
+32686
+43
+14363
+16656
+21689
+32687
+32688
+14330
+11762
+21031
+32689
+32690
+2764
+2035
+32691
+32692
+14485
+971
+53
+32693
+32694
+11907
+14330
+3546
+2136
+32695
+32696
+31234
+416
+32697
+14660
+10775
+7960
+32698
+17064
+32699
+6877
+17951
+32700
+822
+10880
+32701
+5801
+32702
+32703
+5188
+32704
+32705
+20952
+5204
+26328
+32706
+19478
+2668
+27669
+32707
+32708
+20551
+28845
+590
+32709
+24154
+1131
+10789
+284
+25960
+29204
+21947
+32710
+24952
+21947
+196
+1808
+4441
+15537
+46
+15718
+32711
+32712
+379
+32713
+32714
+15493
+21753
+32715
+43
+19
+1153
+104
+32716
+32717
+32718
+590
+32719
+22901
+373
+29032
+32720
+32721
+32722
+32723
+15718
+2865
+25364
+30877
+31293
+21947
+1513
+32724
+7855
+32725
+15718
+32726
+17058
+24303
+28441
+32727
+29986
+32728
+32729
+590
+32730
+6190
+303
+30877
+9
+32731
+32732
+15370
+16640
+21947
+32733
+32734
+23103
+32563
+9
+15
+14000
+303
+32735
+32736
+99
+29483
+16571
+32737
+28961
+12401
+29483
+32738
+25991
+24464
+17897
+20617
+32739
+2
+16102
+23103
+32740
+201
+32741
+20512
+29483
+21947
+21947
+32742
+32743
+22922
+32744
+3546
+29483
+19
+32745
+12236
+32746
+259
+26496
+29483
+32747
+31293
+32748
+5438
+32749
+590
+32750
+9573
+155
+15718
+32751
+29483
+1090
+14330
+30051
+22922
+5188
+6161
+15
+29200
+13721
+10642
+32752
+36
+32753
+213
+19797
+31293
+317
+989
+31042
+14369
+1710
+1765
+104
+32754
+21947
+9928
+17136
+44
+31098
+32755
+32756
+28036
+30650
+32757
+1109
+32758
+7291
+32759
+2318
+1316
+32760
+17151
+20
+32761
+14814
+32762
+32763
+398
+30224
+32764
+6086
+32765
+32766
+32767
+24435
+4195
+14369
+14771
+303
+1090
+27669
+29483
+32768
+9
+31098
+20942
+4055
+21947
+213
+1090
+2019
+19618
+43
+1051
+573
+5085
+32769
+5067
+541
+32770
+303
+411
+43
+30877
+32771
+32772
+28219
+1300
+32773
+26496
+32774
+31293
+32775
+43
+24615
+32776
+3546
+32777
+213
+1774
+971
+3
+213
+303
+19
+24864
+648
+30853
+971
+616
+30551
+32778
+29007
+32779
+32780
+20645
+1382
+26626
+19618
+178
+9
+24864
+15718
+28845
+8210
+32781
+20952
+1234
+32782
+2132
+484
+12871
+249
+3546
+5925
+32783
+32784
+2836
+32785
+24303
+31406
+32786
+13721
+377
+32787
+284
+14477
+32788
+32789
+32790
+7276
+5827
+32791
+533
+5694
+2239
+32792
+32793
+20276
+25140
+2260
+19
+14369
+872
+14477
+358
+22
+32794
+32795
+32796
+32797
+43
+32798
+43
+14
+209
+32799
+32800
+32801
+14001
+28317
+43
+66
+613
+21689
+21947
+8849
+15536
+31293
+32802
+42
+32803
+317
+32804
+32805
+32806
+3546
+13721
+32807
+23913
+20984
+32808
+32809
+4764
+21947
+32810
+14871
+32811
+32812
+1617
+1012
+30458
+10470
+32813
+32814
+14477
+23103
+30877
+5780
+32815
+32816
+25943
+29483
+8386
+29483
+32817
+2406
+32818
+31896
+32819
+32820
+3757
+15718
+11811
+32821
+270
+32822
+14477
+8188
+11762
+795
+29483
+17151
+25943
+32823
+1021
+1090
+13375
+1224
+19
+2832
+32523
+1217
+32824
+3601
+32825
+14369
+18969
+14
+29840
+21947
+14025
+19
+32826
+19
+24864
+32827
+32828
+14369
+32829
+32830
+19618
+24807
+32831
+29651
+9
+32832
+46
+590
+19618
+1090
+32833
+2117
+43
+18469
+32834
+32835
+3353
+32836
+32837
+32838
+5169
+349
+15
+155
+4747
+32839
+32840
+32841
+2560
+32842
+32843
+566
+32844
+57
+27767
+32845
+32846
+20719
+14369
+12987
+32847
+13652
+2243
+19
+590
+32848
+43
+12579
+32849
+10245
+32850
+196
+15810
+1382
+3546
+32851
+32852
+9
+155
+19
+32853
+32854
+32855
+32856
+573
+104
+2459
+358
+104
+32857
+29170
+32858
+284
+190
+566
+6994
+6499
+32859
+32860
+21947
+19
+32861
+3251
+2314
+25683
+25943
+9160
+27798
+32862
+57
+9
+872
+13897
+188
+24864
+8668
+17083
+1090
+491
+24864
+32863
+7119
+2427
+32864
+32636
+1018
+32865
+32866
+32867
+2721
+1853
+590
+32868
+14869
+25237
+32869
+32870
+14330
+209
+32871
+32872
+14477
+31293
+32873
+701
+19478
+32874
+32875
+2
+882
+4055
+24864
+29200
+4055
+30877
+32876
+18503
+21031
+32877
+590
+13963
+28893
+32878
+42
+720
+32879
+32880
+5601
+26992
+32881
+28317
+32882
+6877
+16437
+32883
+23603
+1655
+1437
+32884
+32885
+1091
+1520
+32886
+32887
+4775
+10111
+32888
+30224
+9
+32889
+23103
+32890
+29204
+25943
+27619
+279
+21947
+10450
+32891
+25140
+22963
+16584
+397
+12987
+32892
+32893
+20
+694
+2804
+32894
+32895
+43
+32896
+19
+1318
+31293
+17716
+14330
+32897
+32
+31293
+1559
+25140
+19618
+32898
+9
+3491
+25530
+32899
+32900
+31293
+3599
+32901
+2577
+43
+3546
+32902
+32903
+590
+14369
+448
+24725
+32904
+23785
+32905
+32906
+13721
+4055
+11321
+32907
+29381
+354
+12013
+24725
+43
+32908
+14369
+24961
+32909
+32910
+32911
+32912
+19618
+32913
+436
+6528
+3484
+20617
+2832
+27669
+14477
+32914
+536
+683
+13721
+178
+590
+720
+32915
+32916
+32917
+32918
+32919
+89
+32920
+15718
+14330
+21689
+7014
+1823
+30051
+29381
+26484
+89
+32921
+1604
+32922
+1262
+20096
+1817
+21947
+32923
+14
+1698
+32924
+32925
+1838
+14330
+9
+19582
+32926
+9713
+573
+1615
+595
+13129
+32927
+7137
+32
+13721
+936
+23103
+3546
+25316
+32928
+32929
+887
+32930
+29
+27748
+24725
+27599
+9
+19618
+43
+32931
+32642
+32932
+7835
+32933
+32934
+32935
+694
+2132
+16437
+6161
+32936
+3317
+32937
+1082
+32938
+15356
+19858
+25140
+32939
+32940
+22473
+10
+32941
+16527
+3546
+590
+32942
+188
+15975
+491
+32943
+26161
+27708
+1090
+24775
+32944
+14
+32945
+32946
+6110
+32386
+3231
+19318
+21689
+32449
+32947
+30224
+32948
+188
+32949
+32950
+9125
+32951
+345
+32952
+32953
+32954
+32955
+237
+31293
+19
+32956
+19618
+2971
+15718
+32957
+17151
+3599
+5659
+7835
+32958
+43
+32959
+1154
+14477
+4856
+32960
+7835
+30877
+28239
+11191
+14369
+32961
+31293
+11568
+32962
+872
+21835
+32963
+17830
+27096
+30215
+32964
+32965
+32966
+32967
+32
+22307
+4547
+20941
+24303
+32968
+9
+10320
+7292
+8787
+3553
+827
+9
+21947
+3026
+32969
+32970
+29979
+32971
+12462
+32972
+32973
+9
+4550
+6764
+28549
+32974
+57
+2260
+24303
+32975
+32976
+2832
+15536
+32977
+20462
+3
+29381
+2953
+25237
+564
+32978
+32979
+7835
+32980
+31293
+27069
+1046
+1517
+436
+4487
+7835
+32261
+22552
+323
+32981
+1011
+4055
+598
+411
+1234
+32982
+788
+32983
+32984
+14147
+12063
+3553
+745
+32985
+32986
+1244
+32987
+274
+32988
+21947
+19852
+4550
+4055
+1051
+25584
+14330
+32989
+15535
+32990
+32991
+19
+14343
+286
+11321
+10792
+24045
+6939
+590
+32992
+32993
+21045
+1688
+1749
+32994
+23103
+14
+9
+971
+32995
+32996
+31168
+32997
+32998
+349
+43
+665
+32999
+1765
+33000
+25237
+31293
+1765
+2694
+272
+33001
+33002
+33003
+30835
+6612
+33004
+21165
+790
+9
+4918
+33005
+33006
+12956
+27669
+671
+1300
+827
+33007
+970
+33008
+33009
+10
+1090
+23103
+590
+33010
+3546
+33011
+9
+33012
+33013
+33014
+57
+16121
+153
+32
+24725
+33015
+270
+33016
+7053
+15
+25710
+33017
+33018
+33019
+33020
+9
+17412
+43
+33021
+33022
+24303
+9
+21834
+33023
+16391
+11762
+31098
+7137
+33024
+33025
+14369
+3546
+24698
+57
+33026
+30877
+33027
+33028
+1961
+4606
+19655
+1470
+2324
+13721
+30224
+970
+1090
+16437
+33029
+4055
+33030
+26158
+5627
+14
+5041
+33031
+104
+21689
+33032
+3272
+19
+18982
+7345
+590
+14369
+2
+24045
+3959
+33033
+18684
+24
+33034
+270
+21947
+33035
+1710
+1688
+30224
+33036
+349
+26152
+33037
+19618
+20842
+31293
+33038
+24523
+3353
+155
+590
+25943
+24303
+1716
+209
+18107
+29434
+1310
+14369
+17911
+33039
+23103
+3122
+13517
+590
+33040
+33041
+33042
+33043
+7835
+21947
+33044
+33045
+33046
+33047
+13265
+1377
+33048
+29483
+9
+18695
+590
+6423
+15718
+33049
+33050
+33051
+27818
+29483
+25683
+33052
+349
+33053
+7835
+21947
+14079
+33054
+671
+17119
+33055
+8137
+11
+2004
+16102
+33056
+25382
+14477
+60
+33057
+33058
+33059
+33060
+317
+2132
+590
+13977
+14477
+24725
+33061
+970
+9
+720
+24862
+33062
+3546
+16640
+33063
+33064
+317
+21947
+33065
+694
+4441
+1364
+33066
+19
+21577
+9
+33067
+33068
+19618
+23103
+6275
+31293
+1090
+33069
+7855
+33070
+33071
+153
+9688
+357
+17151
+33072
+23454
+770
+1364
+1674
+19618
+33073
+24864
+33074
+33075
+33076
+3407
+27719
+19
+3
+33077
+12055
+21947
+33078
+5877
+22
+4884
+33079
+3601
+21947
+33080
+30051
+33081
+590
+21245
+33082
+33083
+590
+11341
+33084
+29381
+33085
+33086
+28036
+7053
+1051
+25943
+23103
+33087
+17151
+25316
+33088
+7479
+12005
+2040
+22420
+6095
+30139
+33089
+30224
+1234
+43
+1090
+15
+33090
+1920
+33091
+20886
+270
+33092
+24144
+720
+1100
+14000
+3844
+11341
+164
+25237
+2132
+15517
+27816
+27719
+33093
+33094
+19655
+29381
+33095
+19655
+1559
+4041
+33096
+9688
+686
+249
+14369
+33097
+249
+15
+14588
+20
+32636
+15718
+9
+33098
+19318
+43
+15
+9649
+21689
+33099
+4367
+6122
+21947
+21947
+33100
+29720
+30877
+66
+33101
+5904
+16466
+29483
+43
+12005
+33102
+1090
+33103
+5188
+14666
+18695
+11762
+286
+33104
+43
+30877
+33105
+25140
+14330
+33106
+590
+14553
+33107
+3353
+1154
+33108
+29381
+43
+30877
+33109
+861
+711
+20
+345
+14
+5188
+23103
+1013
+33110
+849
+21874
+14369
+33111
+21968
+33112
+8961
+25140
+13897
+25683
+28441
+19
+24725
+4055
+33113
+24725
+13777
+29628
+155
+19
+13150
+7369
+377
+20383
+14001
+33114
+33115
+590
+8038
+3546
+33116
+590
+33117
+33118
+14942
+20507
+32
+1090
+24303
+33119
+8465
+33120
+2919
+32575
+15718
+33121
+31728
+15541
+33122
+33123
+33124
+1208
+703
+33125
+25140
+33126
+32386
+33127
+15
+354
+33128
+17215
+27954
+1090
+33129
+15
+2006
+164
+19
+33130
+25237
+43
+10990
+6054
+33131
+514
+270
+12281
+33132
+9
+3337
+19655
+43
+33133
+9
+30877
+6627
+21835
+12430
+26158
+11469
+29483
+21
+33134
+342
+22065
+1001
+378
+14477
+31293
+33135
+19
+19
+31225
+28745
+33136
+5662
+27276
+2733
+33137
+17139
+970
+33138
+33139
+33140
+12185
+33141
+14216
+23103
+2733
+1524
+1208
+15718
+5085
+7053
+33142
+14330
+14369
+14477
+33143
+33144
+32642
+14
+1316
+19624
+15718
+28317
+10531
+14369
+3546
+33145
+123
+2035
+4055
+27719
+15
+76
+1937
+1013
+22573
+15318
+33146
+2410
+24449
+33147
+9
+33148
+13045
+33149
+16437
+33150
+32
+25316
+33151
+19091
+25
+13528
+1083
+33152
+33153
+2694
+33154
+21003
+33155
+33156
+33157
+33158
+33159
+33160
+60
+33161
+1251
+33162
+30224
+3546
+33163
+13566
+33164
+4055
+33165
+14330
+2243
+24045
+17151
+3353
+24303
+33166
+1045
+12684
+33167
+33168
+1870
+25237
+590
+155
+33169
+970
+99
+33170
+15
+32919
+1181
+22703
+5080
+33171
+57
+4055
+31098
+179
+32410
+6914
+11321
+14330
+25382
+989
+7381
+33172
+33173
+33174
+20
+3994
+12120
+27669
+32787
+33175
+33176
+10364
+32254
+30710
+19618
+33177
+43
+33178
+9
+18695
+32813
+2832
+519
+20
+14477
+33179
+9
+17790
+33180
+586
+33181
+33182
+25140
+9245
+29483
+33183
+33184
+31293
+33185
+25237
+33186
+33187
+33188
+14
+590
+15718
+590
+33189
+30877
+33190
+9
+29204
+1181
+3981
+379
+2356
+13307
+20510
+33191
+270
+491
+11283
+4701
+33192
+352
+27669
+20
+3601
+165
+597
+33193
+6328
+33194
+33195
+1612
+33196
+33197
+38
+16437
+33198
+33199
+519
+25683
+31293
+28317
+31978
+33200
+12120
+28441
+15718
+26127
+28482
+19918
+1224
+491
+165
+33201
+33202
+14330
+4979
+237
+43
+23394
+33203
+21947
+9
+30209
+1332
+33204
+33205
+18798
+27874
+286
+33206
+13807
+31719
+17631
+9
+14604
+43
+9845
+1517
+22669
+33207
+8256
+28036
+25281
+590
+4055
+60
+16272
+30794
+16152
+15419
+57
+24303
+33208
+1090
+14330
+33209
+33210
+19618
+33211
+9
+1683
+5316
+21947
+16437
+33212
+33213
+57
+548
+33214
+25904
+4855
+33215
+1157
+33216
+15758
+345
+1224
+33217
+33218
+6275
+33219
+19
+30877
+1236
+28317
+4274
+33220
+18372
+33221
+21689
+533
+2919
+17687
+24303
+33222
+33223
+99
+21947
+9
+14369
+28242
+33224
+33225
+32919
+9
+24864
+3359
+33226
+9
+28295
+13857
+33227
+33228
+33229
+417
+25140
+14477
+33230
+554
+9144
+4055
+12325
+99
+33231
+1047
+6877
+33232
+24864
+21947
+33233
+9
+2161
+568
+33234
+970
+647
+26040
+22918
+11683
+8668
+33235
+1961
+43
+43
+21031
+11762
+3330
+33236
+33237
+18695
+4544
+21947
+8668
+33238
+33239
+15
+23103
+31042
+25943
+33240
+33241
+971
+17151
+8407
+33242
+25237
+23226
+26496
+33243
+33244
+32
+33245
+14369
+20514
+1382
+21187
+29483
+33246
+201
+1356
+6039
+873
+228
+31098
+15511
+4185
+2561
+33247
+21507
+33248
+33249
+33250
+1066
+33251
+33252
+33253
+349
+3030
+16437
+33254
+33255
+648
+33256
+425
+19
+12
+27798
+827
+33257
+8171
+11571
+66
+8297
+33258
+8249
+33259
+1765
+21947
+590
+33260
+9
+14369
+25943
+9
+33261
+57
+12005
+665
+43
+19
+28549
+20258
+22752
+33262
+30877
+4550
+3491
+33263
+33264
+15718
+29163
+33265
+5085
+14947
+39
+2117
+17848
+29
+4006
+33266
+349
+28317
+399
+683
+970
+13754
+4055
+2804
+33267
+32
+286
+33268
+33269
+8864
+15718
+33270
+162
+33271
+590
+19478
+33272
+21627
+33273
+21947
+4414
+3546
+33274
+8967
+33275
+17730
+29381
+249
+5904
+14477
+1234
+29956
+25140
+33276
+33277
+683
+15961
+33278
+379
+33279
+6294
+33280
+17151
+33281
+33282
+33283
+18695
+19730
+43
+33284
+29381
+19618
+1612
+32
+1688
+1425
+31520
+3994
+4055
+33285
+9396
+33286
+33287
+13566
+33288
+43
+17670
+43
+1089
+19
+3055
+33289
+9
+1300
+3075
+5792
+4634
+3973
+19
+8297
+558
+36
+25237
+1529
+33290
+115
+14947
+33291
+25237
+17602
+28317
+1222
+19153
+33292
+7532
+1100
+24864
+6294
+7014
+23770
+1559
+23742
+19
+1561
+671
+1612
+43
+2733
+33293
+12203
+33294
+19618
+25316
+28036
+17749
+519
+19
+33295
+141
+14477
+33120
+24725
+14330
+33296
+33297
+33298
+30877
+31293
+33299
+17911
+33300
+1870
+33301
+33302
+33303
+354
+33304
+1090
+10356
+19655
+33305
+6161
+33306
+22023
+4805
+33307
+39
+1454
+3546
+21689
+33308
+19
+33309
+30589
+21689
+19318
+2764
+33310
+3842
+33311
+33312
+33313
+33314
+33315
+33316
+13448
+9
+2009
+33317
+809
+33318
+2804
+9
+7053
+33319
+1090
+33155
+3908
+33320
+33321
+112
+33322
+11111
+30224
+33323
+541
+30551
+1157
+22884
+33324
+3546
+6505
+1090
+6035
+33325
+286
+33326
+33327
+1520
+33328
+27669
+873
+16066
+19344
+1107
+17698
+33329
+33330
+28317
+1021
+33331
+6258
+14477
+19
+33332
+586
+16371
+478
+33333
+27669
+33334
+24969
+15683
+53
+14369
+24303
+9
+33335
+2459
+33336
+33337
+1154
+14597
+9
+53
+4411
+19491
+33338
+43
+1716
+33339
+33340
+286
+30224
+27669
+33341
+33342
+33343
+17821
+10350
+33344
+33345
+2649
+2061
+33346
+29513
+9
+683
+33347
+33348
+33349
+33350
+33351
+17151
+9
+590
+33352
+33353
+25316
+872
+25683
+286
+590
+43
+21947
+14330
+33354
+33355
+24303
+33356
+26066
+30877
+25736
+6072
+14131
+3353
+26361
+9
+23103
+1224
+3553
+14378
+33357
+2600
+33358
+1018
+31293
+33359
+1384
+15720
+564
+33360
+31098
+147
+28036
+29381
+9
+20616
+11762
+33361
+1300
+6285
+33362
+30466
+33363
+13863
+28755
+1090
+33364
+33365
+14369
+4055
+33366
+18989
+25904
+345
+33367
+29483
+30224
+33368
+32
+3546
+541
+4414
+4961
+683
+21186
+32953
+33369
+4028
+22986
+33370
+33371
+33372
+14574
+21126
+111
+966
+14604
+2449
+9
+1364
+33373
+33374
+20514
+14001
+1738
+33375
+26142
+30224
+349
+33376
+33377
+33378
+1571
+2733
+33379
+2836
+15985
+12260
+33380
+14369
+30051
+33381
+11808
+24725
+17406
+33382
+19618
+33383
+9
+25683
+590
+213
+33384
+33385
+9963
+19
+33386
+28474
+57
+15740
+33387
+33388
+9144
+3416
+33389
+33390
+30051
+21947
+590
+14017
+1090
+2550
+19095
+6364
+248
+33391
+484
+720
+15
+33392
+33393
+188
+941
+33394
+33395
+33396
+33397
+3239
+33398
+7600
+33399
+33400
+4432
+28746
+33401
+5022
+303
+4028
+1684
+1415
+14477
+25316
+19
+5582
+32421
+165
+33402
+1562
+372
+12315
+33403
+33404
+242
+19545
+17217
+19
+2356
+1961
+19
+15718
+248
+358
+33405
+33406
+317
+19
+701
+9064
+970
+337
+33407
+33408
+16579
+14102
+2517
+33409
+209
+1437
+3546
+22099
+33410
+25316
+17277
+33411
+25237
+13721
+17872
+1765
+3067
+33412
+33413
+15654
+33414
+27178
+21947
+303
+43
+33415
+1090
+30224
+33416
+12
+15718
+33417
+32
+33418
+33419
+1090
+1217
+20374
+33420
+22114
+248
+970
+33421
+31168
+665
+21689
+46
+197
+3546
+3546
+5119
+33422
+33423
+16149
+27669
+15541
+533
+28036
+33424
+27748
+30747
+22922
+21426
+29716
+33120
+4824
+22063
+1021
+9
+213
+21947
+19
+14603
+33425
+33426
+29483
+197
+9
+155
+33427
+30949
+33428
+29483
+5780
+33429
+25237
+5634
+33430
+19
+33431
+33432
+2132
+33433
+33434
+33435
+9
+538
+648
+33436
+323
+30877
+33437
+2415
+3546
+1090
+33438
+33439
+284
+2132
+2197
+33440
+30650
+33441
+33442
+3546
+33368
+969
+33443
+33444
+29597
+29172
+20952
+2325
+12228
+33445
+6086
+43
+30877
+33446
+21947
+10617
+369
+2029
+15384
+33447
+12479
+33448
+33449
+33450
+33451
+29483
+2561
+4055
+2604
+3655
+12603
+1112
+19
+24896
+303
+23351
+317
+7053
+16515
+7786
+272
+446
+43
+33452
+33453
+15718
+5088
+590
+2577
+2668
+27719
+27669
+33454
+248
+33455
+18869
+33456
+303
+4526
+13524
+9
+1090
+29859
+33457
+33458
+20
+213
+33459
+209
+3407
+1817
+33460
+4028
+971
+33461
+892
+29260
+43
+24896
+25683
+14604
+15989
+29066
+4055
+16139
+24873
+1090
+5625
+15286
+140
+665
+19
+14369
+33462
+33463
+3994
+29483
+33464
+33465
+25620
+6614
+33466
+12203
+13964
+33467
+33468
+29381
+33469
+1560
+33470
+33471
+33472
+6439
+1716
+33473
+26361
+265
+29209
+13710
+28036
+33474
+31225
+249
+33475
+1063
+33476
+33477
+33478
+5923
+33479
+33480
+209
+8668
+284
+33481
+33482
+33483
+33484
+2132
+15778
+23103
+31293
+33485
+9
+33486
+248
+33487
+554
+4055
+33488
+5188
+7014
+19
+2260
+33489
+15824
+2572
+4717
+9
+6950
+18683
+13360
+21365
+5780
+33490
+491
+6344
+4
+2410
+33491
+33492
+27669
+33493
+29981
+33494
+33495
+12013
+1444
+33496
+33497
+33498
+43
+21947
+1656
+590
+33499
+57
+33500
+33501
+12560
+25612
+1090
+33502
+14369
+1559
+33503
+29200
+33504
+1817
+33505
+323
+25316
+1817
+24982
+33506
+14
+3188
+342
+29381
+590
+21630
+33225
+1090
+2733
+519
+33507
+2459
+33508
+2
+14385
+4
+9
+165
+33509
+33510
+2457
+1332
+349
+33511
+4463
+16905
+590
+19618
+14947
+33512
+33513
+24988
+514
+720
+31098
+33514
+33515
+9
+9410
+31293
+33516
+33517
+2289
+33518
+2132
+1066
+43
+5464
+28402
+6505
+2577
+19
+1429
+21947
+15718
+3546
+9
+26104
+33519
+33520
+15718
+33521
+2121
+12987
+33522
+595
+5188
+33523
+18418
+33524
+32636
+17151
+21947
+33525
+17112
+13721
+9
+33526
+533
+7053
+33527
+31293
+590
+29483
+1513
+25351
+33528
+31098
+2577
+33529
+249
+33530
+5130
+248
+33531
+30224
+33532
+1812
+33533
+33534
+33535
+14947
+5340
+15540
+15
+33536
+33537
+33538
+13721
+9
+4055
+33539
+317
+33540
+24303
+33541
+33542
+33543
+887
+33544
+683
+28036
+345
+248
+10727
+13484
+31873
+33545
+33546
+33547
+27069
+3546
+33548
+1090
+15718
+14825
+33549
+19618
+14957
+31293
+9
+25683
+222
+33550
+1090
+33551
+491
+33552
+33553
+33554
+19
+647
+6595
+33555
+31293
+15
+9433
+265
+33556
+197
+33557
+33558
+33559
+3553
+2318
+1578
+2537
+590
+15718
+25316
+29483
+30589
+33560
+16981
+43
+2
+42
+33561
+28248
+303
+17911
+33562
+33563
+4471
+303
+33564
+21708
+7987
+33565
+33566
+13721
+32
+4990
+15718
+213
+33567
+33568
+14415
+213
+668
+33569
+9986
+30877
+9
+33570
+185
+22787
+33571
+13848
+590
+25683
+27069
+33572
+14330
+33573
+16925
+15054
+9
+1012
+33574
+9
+20
+15
+33575
+24045
+33576
+33577
+17151
+6571
+5627
+33578
+33579
+18989
+9
+2744
+33580
+30589
+222
+33581
+33582
+1013
+15
+33583
+14719
+1230
+33584
+213
+8332
+43
+6465
+25991
+33585
+768
+23464
+33586
+25683
+1090
+19304
+3369
+33587
+1123
+14282
+12
+33588
+265
+4055
+33589
+1710
+33590
+32
+33591
+33592
+11336
+14574
+43
+284
+4055
+33593
+165
+33594
+33595
+337
+2958
+33596
+2694
+33597
+33598
+29483
+11210
+284
+103
+21689
+248
+245
+33599
+28031
+3601
+33600
+8566
+736
+10230
+33601
+671
+29200
+1090
+9
+25237
+20442
+13279
+26496
+9
+33602
+25943
+2733
+33603
+8367
+33604
+2314
+21947
+18982
+27599
+11185
+1175
+33605
+33606
+21947
+29573
+398
+590
+9400
+33607
+590
+24725
+284
+8360
+33608
+33609
+25140
+24045
+33610
+2122
+30551
+33611
+823
+272
+5188
+5318
+24864
+5169
+33612
+33613
+33614
+33615
+31042
+8668
+21947
+27150
+30877
+33616
+5035
+33617
+10
+2769
+29641
+9
+9
+14527
+27669
+6058
+303
+3553
+33618
+33619
+10947
+33620
+33621
+33622
+2324
+28036
+284
+14369
+11098
+33623
+33624
+33625
+19
+1524
+179
+1542
+13905
+77
+14330
+33626
+43
+284
+33627
+9
+22407
+2568
+33628
+25584
+31293
+2310
+26544
+138
+342
+25683
+2132
+14369
+33629
+33630
+349
+7855
+28295
+7964
+18045
+20952
+33631
+16025
+2540
+446
+213
+286
+248
+14477
+1559
+590
+2694
+27669
+33632
+18312
+379
+28549
+3546
+24045
+33633
+337
+33634
+12896
+30835
+25316
+33635
+33636
+9410
+33637
+590
+33638
+284
+33639
+677
+33640
+1716
+43
+286
+24303
+33641
+15
+33642
+33643
+33644
+4550
+303
+33645
+28317
+16014
+248
+33646
+770
+10381
+33647
+345
+24460
+33648
+33649
+13129
+32609
+11754
+33650
+2719
+5188
+9
+1605
+33651
+25140
+33652
+141
+1559
+33653
+3546
+989
+33654
+33655
+33656
+25683
+3548
+33657
+27069
+33658
+33659
+373
+33660
+9
+14871
+33661
+33662
+33663
+31293
+2419
+28549
+33664
+23867
+13621
+1090
+15
+66
+26680
+8392
+536
+140
+7375
+33665
+20810
+53
+15645
+33666
+201
+33667
+1920
+33668
+303
+19618
+24303
+29483
+33669
+33670
+33671
+185
+9132
+30224
+33672
+33673
+27335
+19618
+9
+33674
+33675
+33676
+303
+936
+33677
+509
+428
+33678
+13307
+3546
+10
+33679
+33680
+33681
+33682
+33683
+185
+11754
+21947
+33684
+33685
+33686
+33687
+33688
+33689
+33690
+33691
+33692
+5798
+33693
+30877
+33694
+14369
+478
+28036
+5803
+19618
+33695
+213
+33226
+30877
+439
+2117
+33696
+33697
+38
+155
+33698
+9233
+33699
+20803
+33700
+1705
+671
+2459
+140
+20952
+14604
+33701
+770
+33702
+478
+677
+23231
+23103
+33703
+1090
+18553
+33704
+19218
+554
+33705
+33706
+33707
+33708
+1181
+286
+33709
+33710
+1169
+31293
+14947
+30877
+33711
+33712
+23226
+10
+10624
+27669
+33713
+5169
+18798
+33714
+3546
+33715
+590
+3369
+11675
+554
+2550
+33716
+412
+700
+24426
+9
+7049
+13503
+33627
+33717
+33718
+19
+26484
+33719
+33720
+248
+21947
+22
+14369
+26157
+15718
+29628
+29209
+25140
+194
+30877
+33721
+33722
+14330
+33723
+30458
+28317
+33724
+25683
+249
+22605
+33725
+2655
+14330
+33726
+33727
+411
+23675
+24045
+33728
+29997
+33729
+33730
+10678
+33731
+33732
+33733
+33734
+3546
+4055
+3546
+16145
+20435
+33735
+14330
+33736
+33737
+33738
+1090
+33739
+33740
+25659
+28151
+19050
+7945
+98
+751
+11207
+1230
+751
+14947
+590
+33120
+57
+23103
+33741
+33742
+270
+2694
+25140
+27669
+13956
+33743
+15718
+33744
+694
+17920
+19009
+222
+590
+33745
+1090
+33746
+9688
+33747
+33748
+15384
+12005
+33749
+22
+18815
+33750
+1870
+33751
+25140
+286
+24896
+18821
+2009
+13465
+33752
+6086
+33753
+23481
+33754
+33755
+970
+6161
+28441
+3546
+19
+209
+5561
+15907
+33756
+10
+16437
+4088
+33757
+13721
+345
+28549
+33758
+27669
+33759
+19
+33760
+16437
+33761
+33762
+33763
+3
+354
+18434
+7891
+33764
+18896
+33765
+33766
+541
+5326
+19618
+33767
+19
+18045
+9898
+6595
+33768
+33769
+4055
+284
+5780
+22
+22
+66
+33770
+33771
+19618
+33772
+33773
+2577
+33577
+16979
+33758
+33774
+4055
+1559
+33775
+33776
+4055
+33777
+33778
+892
+322
+29483
+33779
+2410
+14330
+720
+28441
+99
+213
+26320
+33780
+345
+398
+20822
+24339
+21947
+19
+337
+232
+27669
+13956
+33781
+29381
+28317
+13570
+33782
+33783
+33784
+1332
+11762
+349
+33061
+9
+33785
+33786
+14
+15971
+9573
+25683
+33787
+33788
+566
+14369
+43
+33789
+7291
+33790
+720
+14161
+33791
+33792
+14369
+33793
+33794
+30224
+14079
+12936
+1991
+33795
+4055
+14369
+52
+1157
+18434
+3994
+33796
+213
+33797
+1352
+33798
+22963
+29483
+7823
+66
+33799
+33800
+33801
+26943
+21947
+33802
+33803
+33804
+1384
+2129
+25584
+1013
+439
+33805
+15718
+33806
+33393
+33807
+33808
+33809
+5700
+24144
+354
+33388
+21947
+30877
+33810
+33811
+6095
+14369
+1090
+1077
+736
+4124
+11762
+286
+337
+31434
+16437
+33812
+29981
+19
+19655
+33813
+736
+3755
+25237
+8946
+33814
+33815
+590
+33816
+33817
+33818
+514
+14840
+21416
+33819
+33820
+33821
+284
+33822
+33823
+19618
+3019
+3546
+25683
+2668
+27748
+33824
+248
+3026
+21947
+115
+33825
+31293
+33826
+25237
+28036
+3601
+3546
+1812
+694
+21248
+303
+33827
+30224
+303
+33828
+345
+248
+21689
+32
+12552
+26361
+17093
+33829
+33830
+250
+345
+33831
+13985
+33832
+17029
+284
+33833
+33834
+31577
+33835
+178
+24725
+337
+1749
+27069
+32
+33836
+9
+30224
+5188
+822
+9
+337
+33837
+25683
+27113
+3546
+33838
+33839
+590
+33840
+24864
+5085
+33841
+590
+33842
+29
+286
+9024
+6095
+19
+33843
+248
+33198
+1051
+8454
+33844
+915
+33845
+33846
+33847
+1044
+33848
+4002
+1961
+33849
+33850
+33851
+1047
+33852
+13721
+30877
+337
+10757
+1920
+33853
+43
+33854
+3317
+33855
+18946
+46
+33177
+583
+14059
+33856
+22098
+24
+1090
+303
+21681
+2135
+33650
+33857
+248
+677
+15718
+2260
+5085
+28036
+33858
+24864
+5085
+25584
+33859
+33860
+5208
+6006
+590
+1870
+2015
+25
+337
+1605
+248
+31906
+5085
+33861
+13721
+284
+33862
+25683
+13848
+29880
+33863
+33864
+349
+2577
+33865
+16413
+4151
+179
+123
+33866
+1531
+22986
+250
+25237
+683
+33867
+123
+10
+24864
+33868
+33869
+1562
+3160
+33368
+5808
+25584
+33870
+30224
+29204
+9
+1605
+2338
+3684
+33871
+23103
+33872
+25140
+33650
+15
+27669
+30224
+292
+464
+23871
+33873
+33874
+272
+590
+33875
+33876
+33877
+33141
+3546
+137
+33878
+30084
+590
+17972
+2372
+33879
+30051
+19
+8367
+2764
+33880
+105
+1090
+33881
+33882
+15718
+3668
+31293
+2314
+2264
+33883
+26744
+1316
+16332
+33627
+1559
+6537
+33884
+19974
+33885
+33886
+22308
+4075
+33887
+14909
+590
+8239
+21947
+239
+18250
+33888
+33889
+14330
+33890
+20
+14001
+33891
+19048
+15
+248
+1562
+9
+286
+33892
+3904
+1716
+7601
+2485
+33893
+7801
+736
+2537
+17151
+861
+33894
+33895
+33896
+19618
+22922
+33897
+2577
+595
+33898
+9
+4055
+279
+33899
+7532
+33900
+33901
+26361
+4502
+33902
+14330
+24630
+33903
+33904
+1502
+33307
+11639
+12987
+6187
+89
+14604
+33650
+6122
+25140
+33905
+16798
+3546
+25683
+18283
+936
+7816
+3660
+33906
+9210
+345
+31346
+12919
+25140
+1765
+33907
+286
+14
+33908
+17749
+21947
+19618
+43
+872
+29483
+33627
+33909
+33910
+25237
+1870
+464
+345
+14604
+14369
+1090
+29
+12120
+33911
+22823
+33912
+736
+33913
+13721
+18897
+6441
+14523
+14814
+33914
+33915
+33916
+33917
+115
+13721
+707
+12916
+284
+13976
+31293
+33918
+53
+590
+33919
+9
+25996
+13905
+10946
+43
+32642
+33920
+30224
+33921
+89
+13943
+887
+19
+18869
+33922
+12431
+1051
+29483
+20063
+1090
+7522
+21947
+194
+33923
+33650
+33924
+14330
+33925
+33926
+10
+33927
+21947
+194
+30051
+43
+2677
+9
+30224
+33928
+27669
+873
+1513
+33929
+33930
+33931
+18815
+4028
+26081
+33932
+21947
+33933
+43
+20745
+33934
+33935
+25539
+22269
+1870
+25316
+9
+31293
+2865
+1169
+33936
+736
+28317
+14577
+23394
+29502
+13813
+11321
+26712
+33120
+99
+33937
+30877
+38
+33938
+43
+33939
+5085
+25237
+379
+32938
+33940
+38
+1605
+10230
+736
+590
+33941
+8849
+15718
+15
+20563
+2865
+751
+29381
+24144
+33942
+33943
+33944
+590
+14
+1090
+12407
+357
+14000
+538
+3491
+349
+30877
+43
+20426
+33945
+33946
+533
+9210
+1289
+1765
+2018
+14369
+1364
+32566
+19
+32
+33947
+33948
+19
+33949
+7128
+33950
+33951
+16437
+25316
+9
+9
+31098
+19618
+33952
+323
+33953
+25140
+25683
+33954
+33955
+33956
+23231
+33957
+29926
+1090
+33958
+721
+2601
+33959
+33643
+33960
+495
+33961
+17635
+228
+1234
+1300
+13375
+24303
+33962
+33963
+25584
+33964
+33965
+28609
+19
+33966
+33967
+25659
+33968
+21371
+10117
+33969
+38
+590
+12075
+2197
+31249
+33970
+22922
+665
+29172
+20776
+33971
+33972
+30224
+33973
+15
+2459
+1224
+29483
+33974
+66
+665
+33975
+33976
+28317
+33977
+14707
+5780
+29381
+1090
+33978
+31375
+33979
+57
+33980
+33981
+22986
+28317
+43
+590
+4624
+33982
+19996
+6618
+9
+33963
+1090
+21947
+33983
+33984
+66
+30224
+9074
+6054
+98
+17749
+28549
+861
+29
+29032
+33985
+12120
+33986
+5085
+43
+12203
+1011
+17670
+33987
+33988
+736
+274
+24303
+33989
+6701
+33990
+33211
+33991
+33992
+29483
+10239
+33120
+25316
+33993
+19
+3353
+1824
+3999
+12214
+33994
+33995
+21922
+4055
+33996
+25683
+670
+33997
+2577
+30051
+33627
+33650
+25140
+43
+33998
+8188
+33999
+1716
+18357
+34000
+34001
+30224
+34002
+15483
+4028
+379
+34003
+32640
+1090
+31098
+15718
+15511
+34004
+1384
+34005
+21947
+34006
+34007
+21947
+5629
+13375
+34008
+1446
+31098
+15356
+415
+4603
+34009
+34010
+7291
+34011
+27387
+15
+26361
+38
+18695
+34012
+1011
+34013
+14369
+77
+60
+34014
+14079
+66
+32
+34015
+3546
+34016
+7835
+137
+398
+1013
+34017
+2832
+34018
+1992
+34019
+34020
+9
+34021
+34022
+24907
+29716
+357
+34023
+34024
+43
+34025
+34026
+14330
+34027
+15541
+13897
+1720
+25237
+31293
+34028
+7610
+13150
+1090
+1961
+34029
+34030
+538
+27069
+26361
+2
+34031
+21947
+1543
+21486
+3601
+34032
+34033
+24948
+25140
+26582
+43
+3349
+34034
+34035
+34036
+8188
+25
+1817
+377
+34037
+27669
+2769
+12987
+32332
+34038
+21947
+34039
+590
+736
+34040
+8037
+34041
+14363
+1134
+34042
+25237
+590
+14604
+34043
+34044
+1157
+12555
+34045
+43
+4533
+5085
+1559
+26434
+3601
+736
+26744
+21947
+34046
+482
+34047
+34048
+32
+34049
+34050
+4123
+31293
+34051
+34052
+14909
+9
+34053
+28441
+34054
+13807
+33650
+34055
+193
+34056
+1090
+6439
+19007
+16102
+34057
+590
+17730
+34058
+7855
+613
+4124
+21947
+34059
+34060
+14330
+4677
+25859
+34061
+34062
+28638
+842
+34063
+12480
+34064
+32
+1224
+11762
+21947
+34065
+34066
+12987
+2694
+34067
+17872
+8186
+109
+34068
+25683
+34069
+1508
+12987
+26666
+34070
+32
+424
+34071
+33650
+16116
+34072
+26040
+34073
+3546
+1090
+9024
+34074
+34075
+34076
+34077
+33650
+24144
+30458
+34078
+34079
+30877
+1112
+33758
+2971
+29483
+34080
+5080
+31293
+16375
+33650
+8005
+34081
+34082
+34083
+5627
+30877
+34084
+1961
+34085
+209
+8668
+33650
+9
+34086
+1082
+3553
+201
+34087
+26496
+34088
+25584
+1470
+34089
+1612
+34090
+34091
+34092
+34093
+43
+1870
+17698
+34094
+34095
+34096
+2064
+34097
+34098
+30877
+15
+2
+694
+30877
+13030
+34099
+4055
+5780
+1157
+19655
+15718
+16875
+34100
+9
+34101
+21947
+590
+34102
+34103
+111
+9560
+31293
+232
+34104
+34105
+34106
+9
+3067
+43
+29381
+4055
+13566
+34107
+178
+27669
+576
+34108
+491
+1090
+15718
+9
+533
+34109
+14330
+34110
+6354
+34111
+34112
+1382
+1810
+34113
+20
+9
+4055
+5408
+590
+3946
+8994
+34114
+15018
+34115
+2581
+5683
+14369
+9
+10
+19
+1107
+34116
+24303
+19
+3546
+345
+25316
+7835
+35
+28441
+9
+4367
+15
+33650
+19
+34117
+34118
+20850
+14001
+34119
+34120
+20
+18798
+30877
+34121
+29483
+22587
+31293
+30877
+1668
+3546
+34122
+9
+2733
+373
+720
+30877
+24303
+3546
+34123
+34124
+34125
+43
+28116
+34126
+8668
+34127
+20443
+34128
+345
+1529
+34129
+33650
+34130
+1310
+1870
+10
+33650
+590
+8593
+34131
+19918
+201
+43
+34132
+34133
+9
+713
+849
+43
+27669
+57
+34134
+34135
+32
+34136
+43
+12987
+34137
+18874
+34138
+736
+34139
+21947
+595
+22592
+30877
+34140
+28549
+196
+31293
+33963
+16264
+8766
+14102
+4388
+9
+34141
+34142
+34143
+971
+2872
+24458
+25237
+18421
+533
+27249
+9904
+34144
+23368
+29204
+208
+3746
+34145
+19
+2
+26127
+34146
+14588
+9
+31503
+4055
+34147
+34148
+22236
+34149
+34150
+9
+1374
+8357
+43
+8249
+2988
+34151
+26946
+12987
+703
+4055
+10
+573
+1514
+2356
+34152
+282
+2
+1961
+11754
+648
+25050
+7835
+13474
+541
+34153
+34154
+2325
+1648
+34155
+24725
+34156
+34157
+25871
+98
+14330
+98
+21947
+28549
+33650
+34158
+34159
+34160
+19
+102
+9
+2064
+34161
+43
+43
+25140
+34162
+15
+34163
+20586
+34164
+14776
+43
+34165
+12302
+34166
+10199
+20666
+3999
+34167
+66
+14759
+29800
+27096
+30224
+19618
+590
+14343
+34168
+209
+34169
+34170
+590
+13721
+5629
+34171
+1524
+43
+34172
+30051
+34173
+34174
+9
+32537
+34175
+24939
+14
+5192
+34176
+3484
+34177
+278
+34178
+14947
+14477
+34179
+34
+34180
+31293
+16437
+34181
+32900
+34182
+34183
+17698
+9
+34184
+3546
+34185
+25237
+34186
+21947
+17272
+349
+15718
+34187
+34188
+34189
+5803
+17151
+34190
+34191
+34192
+34193
+4026
+10256
+34194
+43
+14369
+25237
+179
+377
+14216
+21494
+3546
+34195
+25160
+720
+21947
+19855
+9
+43
+21947
+98
+5085
+1529
+5817
+34196
+19
+34197
+34198
+34199
+33650
+34200
+1382
+8351
+57
+19
+647
+6499
+31603
+31293
+34201
+2550
+18045
+38
+9
+29381
+34202
+34203
+286
+2577
+10031
+1961
+34204
+34205
+590
+17675
+12005
+9402
+4055
+770
+2071
+34206
+936
+237
+7053
+1385
+25237
+3546
+21947
+11697
+201
+34207
+34208
+34209
+15463
+14
+3959
+34210
+34211
+828
+5188
+34212
+21947
+34213
+590
+34214
+34215
+43
+21689
+19655
+713
+34216
+790
+34217
+21835
+34218
+736
+34219
+9
+34220
+176
+28295
+21947
+34221
+34222
+34223
+11966
+32642
+34224
+34225
+590
+34226
+1090
+34227
+2260
+30551
+14369
+34228
+34229
+1529
+590
+34230
+416
+34231
+28317
+15671
+14
+34232
+34233
+19
+34234
+3871
+34235
+4791
+34236
+34237
+34238
+3959
+17281
+34239
+34240
+31500
+196
+15216
+34241
+736
+3143
+519
+34242
+19
+34243
+34244
+34245
+13721
+34246
+42
+34247
+34248
+554
+1524
+16447
+10003
+34249
+1765
+34250
+9
+34251
+24
+34252
+43
+18043
+6294
+33650
+27669
+14477
+34253
+34254
+30051
+14594
+2926
+104
+2314
+34255
+33445
+17784
+738
+1208
+15718
+34256
+250
+9
+34257
+34258
+34259
+14369
+568
+34260
+34261
+34262
+34263
+34264
+15718
+34265
+34266
+3584
+34267
+29204
+1066
+34268
+26744
+34269
+23990
+19523
+30877
+34270
+317
+34271
+29483
+29715
+34272
+18283
+21689
+34273
+31585
+34274
+34275
+28471
+34276
+26040
+358
+5085
+1716
+14369
+34277
+34278
+29658
+19618
+30224
+286
+23675
+34279
+34280
+2009
+27117
+34281
+34282
+34283
+19
+1090
+34284
+34285
+34286
+34287
+34288
+3546
+25584
+34289
+23313
+34290
+77
+4752
+1291
+1364
+12
+34291
+34292
+155
+14660
+10
+19
+34293
+31293
+1169
+29628
+34294
+15
+34295
+34296
+1992
+32636
+9
+34297
+155
+29381
+28549
+31293
+34298
+13638
+43
+34299
+34300
+286
+34301
+21947
+34302
+1684
+34303
+14330
+25140
+936
+34304
+342
+77
+19
+352
+140
+21758
+32863
+15514
+3994
+2042
+22963
+34305
+24303
+8418
+4055
+20443
+34306
+3978
+34307
+34308
+19
+34309
+27669
+25943
+21947
+2919
+39
+14079
+590
+9460
+34310
+4808
+21904
+34311
+6725
+34312
+34313
+34314
+21889
+33963
+34315
+34316
+10
+34317
+20952
+590
+34318
+21947
+3790
+34319
+34320
+9
+31293
+21947
+590
+9
+5839
+33818
+34321
+15718
+14369
+34322
+34323
+31467
+176
+34324
+34325
+30877
+22986
+590
+34326
+4055
+43
+43
+34327
+34328
+491
+34329
+554
+21947
+34330
+34331
+1090
+8746
+21187
+6335
+29483
+554
+4364
+1513
+342
+1508
+34332
+11423
+18283
+34333
+32805
+179
+671
+15
+18045
+11362
+6883
+34334
+34335
+25943
+286
+34336
+27669
+34337
+21499
+349
+14
+30224
+34338
+1157
+34339
+25237
+590
+19
+34340
+34341
+19
+25316
+34342
+34343
+34344
+10049
+34345
+8996
+34346
+286
+30551
+34347
+34348
+34349
+7836
+34350
+533
+25683
+43
+34351
+590
+22464
+34352
+1021
+34353
+17151
+24864
+7855
+34354
+16014
+6142
+1655
+349
+30224
+10717
+28317
+887
+43
+176
+30051
+29483
+34355
+14604
+34356
+2129
+20700
+7835
+484
+34357
+22922
+34358
+28036
+27669
+14477
+34359
+9
+2286
+30712
+7053
+34360
+27669
+1234
+3546
+15320
+34361
+1425
+33963
+31293
+4951
+34362
+16883
+34363
+34364
+5188
+352
+2253
+34365
+1018
+1688
+34366
+34367
+3601
+411
+34368
+379
+1716
+1529
+179
+1157
+34369
+19618
+24725
+26040
+5119
+33021
+31293
+25683
+558
+34370
+21947
+1364
+34371
+14369
+13068
+3369
+2570
+34372
+20
+34373
+478
+27669
+19
+11653
+770
+27074
+222
+13566
+17136
+30877
+27669
+34374
+34375
+345
+34376
+25237
+34377
+33368
+34378
+849
+34379
+34380
+9
+34381
+19
+32
+34382
+34383
+7154
+25943
+34384
+736
+34385
+34386
+694
+1090
+34387
+34388
+970
+34389
+713
+590
+34390
+933
+4
+14174
+15718
+19852
+34391
+34392
+9
+19
+14369
+34393
+349
+1765
+34394
+27886
+25140
+703
+34395
+14410
+34396
+33445
+34397
+34398
+43
+34399
+34400
+720
+3044
+5741
+28317
+34401
+4
+34402
+1442
+43
+24864
+2093
+34403
+31293
+15
+5990
+18995
+43
+397
+4055
+19618
+16780
+34404
+34405
+286
+34406
+34407
+1566
+17535
+34408
+19939
+31293
+34409
+27864
+33278
+26178
+6945
+34410
+25237
+32646
+34411
+34412
+29381
+29483
+373
+8476
+1090
+34413
+12346
+5085
+34414
+188
+363
+43
+28745
+29483
+331
+34415
+20
+22
+5489
+24864
+12987
+27719
+19618
+34416
+14330
+22666
+34417
+34418
+11341
+7835
+11966
+1578
+115
+590
+36
+34419
+10173
+2318
+32538
+648
+3546
+25683
+34420
+34421
+32782
+34422
+6054
+18695
+34423
+34424
+1779
+892
+34425
+22986
+34426
+683
+34427
+34428
+34429
+34430
+34431
+30877
+34432
+66
+10781
+379
+4055
+970
+30877
+590
+533
+14369
+31293
+3589
+19582
+2799
+34433
+11282
+249
+17121
+915
+34434
+5085
+43
+910
+25
+29200
+34435
+34017
+5169
+19
+2356
+34436
+730
+34437
+34438
+3
+2015
+30551
+19618
+34439
+188
+7108
+25683
+28219
+7379
+34440
+18045
+25683
+34441
+19
+349
+34442
+34443
+590
+9
+34444
+34445
+19838
+19335
+34446
+15039
+34447
+34448
+7835
+24864
+34449
+25140
+23239
+14
+13566
+21947
+17151
+12005
+24864
+14603
+34450
+970
+34451
+34452
+34453
+34454
+34455
+21947
+34456
+6287
+20
+14763
+34457
+34458
+29200
+22453
+1870
+12916
+27669
+34459
+5792
+4550
+31293
+34460
+34461
+34462
+34463
+1234
+8855
+34464
+29720
+34465
+21947
+1090
+34466
+736
+22922
+33758
+34467
+89
+27669
+34468
+66
+34469
+21835
+34079
+34470
+736
+14369
+24864
+34471
+34472
+48
+34473
+34474
+33963
+536
+27153
+34475
+5188
+3546
+34476
+20
+14604
+14369
+34477
+57
+9204
+34478
+34479
+13721
+9
+19655
+34480
+34481
+7522
+34482
+29483
+5908
+352
+823
+34483
+286
+3343
+34484
+22315
+1131
+21947
+179
+707
+598
+25584
+25943
+34485
+1425
+34486
+11672
+34487
+23406
+29981
+1710
+34488
+5085
+8210
+9
+29381
+249
+28036
+43
+34489
+34490
+31168
+692
+13794
+43
+1230
+22
+43
+25237
+9
+14369
+1107
+34491
+34492
+34493
+34494
+43
+34495
+478
+34496
+971
+34497
+11321
+349
+590
+34498
+21947
+33650
+14369
+22236
+34499
+34500
+34501
+28348
+34502
+34503
+5188
+278
+34504
+2260
+399
+34505
+34506
+36
+29204
+34507
+34508
+34509
+34510
+34511
+34512
+34513
+34514
+915
+5316
+590
+24896
+4028
+3100
+29483
+683
+34515
+1090
+29483
+197
+9
+18145
+2314
+34516
+34517
+14369
+34518
+5559
+34519
+31293
+34520
+34521
+14369
+34522
+28295
+31406
+34523
+34524
+34525
+349
+2619
+4055
+34526
+849
+13797
+7291
+34527
+9660
+34528
+14330
+15845
+34529
+34181
+7053
+21947
+20386
+25237
+34530
+345
+3546
+249
+254
+34531
+34532
+34533
+25140
+34534
+34535
+13510
+19
+4055
+23752
+9
+22198
+14604
+34536
+26361
+24725
+1817
+1090
+24864
+33697
+3330
+24951
+7835
+16437
+23603
+25683
+29884
+9
+43
+32359
+24303
+345
+379
+34537
+9
+34538
+3546
+34539
+1090
+18503
+14188
+34540
+15
+25237
+2762
+16121
+34541
+1157
+34542
+57
+34543
+188
+286
+1090
+34544
+1286
+2197
+415
+33963
+34545
+16437
+2694
+34546
+28317
+42
+416
+32
+7053
+29204
+34547
+15135
+34548
+34549
+34550
+14369
+165
+209
+345
+182
+34551
+43
+33141
+34552
+4441
+5188
+1090
+14216
+9
+25683
+34553
+34554
+2
+34555
+34556
+34557
+9
+25237
+33627
+248
+34558
+7835
+196
+26561
+21947
+25683
+286
+34559
+11762
+25140
+1320
+34560
+337
+43
+19
+2117
+34561
+586
+25683
+1122
+34562
+34563
+34564
+34565
+19688
+36
+31293
+89
+33627
+34566
+34567
+21947
+284
+1220
+19
+34568
+4979
+5188
+34569
+1742
+10
+31293
+29204
+250
+30224
+4055
+17267
+2347
+34570
+21947
+17972
+89
+4650
+34571
+8367
+284
+28317
+4116
+2410
+29032
+30917
+337
+16440
+19
+34572
+19
+4055
+1696
+34573
+19
+248
+1481
+590
+25659
+34574
+2289
+34575
+34576
+34577
+34
+34578
+700
+34579
+4278
+248
+6617
+34580
+248
+397
+2540
+707
+345
+1090
+34581
+34582
+21689
+915
+25237
+665
+337
+736
+3119
+6294
+34583
+34584
+43
+25584
+20
+14759
+34585
+17060
+213
+34586
+34587
+19
+2550
+34588
+3546
+43
+17151
+23506
+178
+34589
+21947
+5188
+34590
+248
+3077
+34591
+6962
+721
+21947
+34592
+402
+34593
+34594
+9
+9396
+25683
+25991
+34595
+13721
+34596
+1090
+18982
+34597
+9
+99
+28317
+34598
+4227
+519
+31293
+10642
+703
+34599
+3546
+34600
+30051
+10
+34601
+1863
+9
+931
+34602
+34603
+23103
+711
+34604
+248
+34605
+2289
+25943
+34606
+317
+34607
+10544
+34608
+1120
+10
+33627
+7137
+29483
+590
+11925
+828
+15718
+3484
+15
+34609
+11719
+29
+26355
+25298
+14330
+34610
+19
+337
+936
+1817
+51
+34611
+15
+14
+25683
+34612
+34613
+34614
+891
+2260
+15
+34531
+1559
+5188
+9939
+9
+1384
+12987
+34615
+12425
+872
+34616
+14369
+12153
+34617
+25140
+354
+3391
+34618
+34619
+34620
+9497
+33963
+15
+22922
+123
+23103
+34621
+9
+34622
+34623
+34624
+114
+1247
+34625
+13721
+29688
+28549
+14884
+34626
+34627
+12987
+24423
+34628
+19
+21429
+25943
+33963
+34629
+25584
+22269
+34630
+2577
+34631
+16239
+25683
+34632
+19
+373
+33977
+34633
+14
+34634
+14369
+34635
+33683
+8593
+17281
+21394
+34636
+3553
+213
+34637
+14477
+590
+34433
+4055
+201
+105
+34638
+24303
+34639
+34640
+27719
+18684
+34641
+14369
+869
+27238
+442
+8460
+24725
+590
+1219
+11970
+57
+25683
+19618
+13361
+9808
+34642
+411
+21689
+32
+21947
+21947
+1696
+15018
+4368
+2446
+24725
+34643
+25316
+30877
+30650
+178
+303
+34644
+34645
+34646
+30209
+1090
+57
+317
+34647
+34648
+597
+34649
+43
+19
+20
+31293
+33445
+34650
+25316
+2342
+1382
+823
+5904
+196
+34651
+46
+34652
+15881
+590
+533
+22868
+24896
+21947
+248
+27669
+28317
+24864
+7362
+34653
+12013
+21947
+4306
+12178
+179
+32161
+1090
+590
+34654
+34655
+30224
+34656
+15354
+1716
+34657
+4055
+349
+24129
+19
+185
+20
+286
+28294
+1013
+34658
+23547
+9
+19618
+14369
+1920
+16826
+179
+24864
+586
+358
+15881
+4631
+34659
+19
+22787
+27669
+22864
+23103
+34660
+15384
+34661
+34662
+4055
+3476
+670
+9
+736
+34663
+176
+30877
+31293
+31293
+34664
+34665
+34666
+43
+2197
+358
+34667
+5731
+4856
+32920
+8218
+209
+29172
+815
+213
+1112
+14504
+27669
+3061
+8668
+3
+9
+354
+20328
+25683
+12479
+2769
+8670
+19618
+34668
+155
+34669
+17698
+24058
+34670
+34671
+34672
+34673
+29381
+2
+31293
+10
+17238
+14769
+701
+27178
+20722
+34674
+34675
+713
+34676
+2009
+554
+21563
+7835
+984
+10
+34677
+34678
+21947
+34679
+3005
+34680
+15331
+33650
+34681
+34682
+6364
+2197
+34683
+13247
+34684
+19
+19655
+590
+358
+34685
+3546
+495
+34686
+34687
+34688
+33963
+34689
+30224
+5376
+34690
+11983
+34438
+16102
+99
+19618
+213
+12987
+34691
+1090
+34692
+34693
+284
+24725
+2577
+34694
+1109
+34695
+24045
+15
+34696
+34697
+2764
+34698
+155
+34699
+19655
+34700
+1508
+15718
+34701
+34702
+19042
+80
+34703
+32
+34704
+20
+33650
+34705
+2949
+213
+34706
+34707
+34708
+9682
+9
+2463
+15597
+9
+3055
+377
+31098
+34709
+33
+34710
+46
+345
+33963
+34711
+14774
+484
+3655
+303
+8849
+34712
+123
+23271
+15718
+14025
+34713
+13279
+34714
+1018
+671
+349
+25140
+3601
+27669
+9
+34715
+21510
+322
+34716
+34717
+34718
+11762
+1465
+34719
+1861
+213
+29204
+30877
+284
+29733
+16401
+2998
+22
+34720
+34721
+27669
+34722
+15718
+43
+5665
+286
+19
+34723
+284
+9
+283
+590
+34724
+34725
+3546
+34726
+34727
+22922
+34728
+19618
+1425
+4055
+1364
+12157
+2721
+21553
+299
+34729
+17404
+10961
+33650
+34730
+201
+30877
+23150
+14485
+379
+25237
+19
+34731
+34732
+7048
+540
+3247
+25316
+7259
+11483
+43
+19618
+284
+34733
+1141
+34734
+4055
+34735
+4055
+34736
+34737
+89
+19
+34738
+4961
+23103
+34739
+21689
+34740
+352
+34741
+31293
+34742
+17571
+3981
+590
+7717
+34743
+25625
+34744
+15718
+5780
+14369
+21689
+18953
+77
+2550
+34745
+34746
+33427
+30775
+16437
+9617
+34747
+21647
+228
+34748
+4
+9160
+16
+18811
+19874
+3546
+25382
+43
+19928
+19523
+34749
+34750
+89
+4055
+27669
+2
+14330
+12722
+30210
+34751
+12299
+3546
+33693
+1503
+20
+34752
+34753
+17698
+9
+5188
+7053
+27669
+42
+34754
+32642
+27669
+18571
+15718
+34755
+15
+33627
+1011
+34756
+464
+34757
+29483
+34758
+34759
+23103
+2560
+34760
+337
+22292
+31293
+25683
+34761
+3182
+19321
+25584
+34762
+1502
+4425
+13390
+2040
+9
+34763
+1559
+155
+34764
+14001
+34765
+34766
+3546
+13721
+57
+3908
+26815
+18479
+28441
+9
+66
+15
+1529
+34767
+34768
+7418
+29109
+34769
+66
+33650
+28961
+15718
+34770
+34771
+14520
+3546
+13566
+1224
+2260
+34772
+5908
+15
+18896
+26176
+43
+668
+3659
+15088
+44
+12988
+970
+34773
+12987
+1524
+645
+33650
+9
+3739
+7292
+2694
+27669
+34774
+4055
+25237
+13228
+6595
+34775
+1090
+32871
+1090
+1829
+14
+7053
+4055
+30051
+21089
+34776
+31293
+28845
+32269
+22963
+4463
+815
+23103
+15194
+2600
+25164
+10780
+34777
+10318
+30877
+1116
+34778
+34779
+3337
+30051
+3361
+34780
+60
+34781
+30051
+34782
+34783
+98
+337
+34784
+1089
+286
+1295
+10
+34785
+1021
+3
+19
+34786
+34787
+43
+34788
+6732
+27669
+12013
+29483
+34789
+34790
+34791
+5659
+736
+1149
+33627
+137
+28317
+34792
+25316
+34793
+25683
+1513
+2009
+1013
+33650
+25140
+8297
+861
+590
+24725
+43
+33650
+34794
+34795
+9
+849
+31437
+34796
+34797
+34798
+25237
+33650
+24144
+34799
+245
+34800
+345
+14369
+34801
+9
+19852
+22290
+12005
+6782
+3908
+34802
+3484
+34803
+34804
+23926
+358
+176
+4693
+3546
+2197
+32604
+33113
+5433
+8188
+34805
+34806
+14
+416
+34807
+34808
+34809
+29381
+98
+19618
+6617
+34810
+16334
+11754
+43
+34811
+1817
+34812
+30877
+43
+2372
+259
+34813
+34814
+379
+34815
+104
+464
+13721
+43
+25140
+34816
+3369
+809
+3876
+590
+1090
+34817
+25140
+72
+13754
+34818
+33113
+29200
+6741
+34819
+9410
+3476
+31315
+19
+43
+14947
+358
+34820
+34821
+15
+554
+34822
+24303
+43
+34823
+22144
+21776
+25237
+416
+34824
+34825
+436
+33963
+19618
+17320
+2764
+11057
+9
+1244
+179
+1090
+554
+34826
+590
+123
+28639
+19618
+34827
+3976
+33758
+34828
+378
+34829
+12093
+14369
+34830
+3559
+250
+19
+34831
+16264
+34832
+14330
+1090
+29483
+34833
+19
+34834
+6999
+34835
+34836
+17281
+34837
+14399
+29549
+3546
+31098
+677
+34838
+34839
+34840
+34841
+15504
+16371
+2260
+6463
+21947
+15768
+15718
+34394
+33120
+25683
+4055
+1765
+34842
+338
+34843
+3546
+25316
+28317
+34844
+34845
+2593
+415
+34846
+209
+27860
+1236
+34847
+15718
+43
+34848
+26724
+27069
+19618
+16413
+16146
+3553
+29381
+4487
+19289
+1508
+43
+34849
+34181
+34850
+7072
+43
+1090
+34
+33650
+201
+25683
+34851
+34852
+2975
+34853
+345
+34854
+59
+34855
+34856
+1559
+25280
+9
+12
+1765
+590
+845
+34857
+20600
+345
+15914
+34858
+19852
+1870
+27669
+11321
+34859
+3202
+34860
+20482
+622
+34861
+32137
+16109
+140
+34862
+323
+554
+806
+98
+720
+34863
+9
+4326
+21689
+34864
+34865
+34583
+34866
+1090
+2058
+5995
+1026
+34867
+34868
+1461
+34869
+3252
+1870
+34870
+19276
+34871
+19618
+34872
+13375
+19618
+2694
+22
+34873
+3484
+5217
+43
+34874
+14369
+34875
+1090
+2043
+34876
+1453
+34402
+30877
+1817
+3790
+34877
+34878
+25943
+15
+26496
+34879
+34880
+19
+34881
+20785
+25659
+34882
+12348
+9
+18045
+34883
+501
+34884
+7105
+6463
+5080
+1051
+21947
+3546
+22963
+24
+15583
+34885
+2406
+34886
+34887
+1612
+34888
+915
+15718
+30500
+15649
+34889
+34890
+34891
+34892
+6310
+2537
+9460
+31936
+22463
+31098
+34893
+25943
+34894
+331
+9
+34895
+2049
+2
+5188
+2410
+2812
+9
+34896
+34897
+25683
+533
+21947
+1090
+66
+19618
+20340
+29483
+3599
+34898
+1710
+3170
+8418
+1090
+34899
+14477
+34900
+13721
+4806
+34901
+25316
+43
+1013
+43
+34902
+19
+34903
+1992
+32886
+26419
+21553
+34904
+1912
+34905
+3655
+398
+738
+19618
+34906
+6883
+1090
+34907
+3546
+16
+590
+16437
+8188
+19618
+66
+345
+34908
+9
+490
+377
+14013
+33113
+14369
+34909
+15
+3239
+34910
+31735
+1090
+23226
+24864
+34
+15483
+34911
+43
+66
+25140
+29381
+30877
+33120
+19
+34912
+25904
+1655
+24144
+34913
+34914
+34915
+34916
+34917
+34918
+34919
+15718
+19344
+18479
+34920
+357
+34921
+34833
+5389
+21947
+137
+25237
+554
+415
+14458
+7834
+736
+33650
+43
+31293
+34922
+34923
+2260
+2537
+31293
+34924
+33758
+34925
+31293
+1090
+34926
+34927
+32
+16102
+1090
+34928
+34402
+7053
+32
+15572
+34929
+3923
+34930
+25237
+5188
+34931
+34932
+178
+19618
+358
+14
+34933
+19355
+34934
+34935
+32517
+5601
+12642
+2
+541
+958
+19852
+970
+112
+2027
+34936
+6214
+15718
+34937
+32680
+21947
+34938
+533
+34939
+19
+34940
+971
+34941
+9
+377
+349
+34942
+590
+34943
+28317
+10642
+34402
+5649
+34944
+25036
+28923
+34945
+34946
+14693
+34947
+34948
+34949
+14079
+34950
+34951
+1212
+34952
+34953
+9
+34954
+30224
+6214
+34955
+34956
+736
+34957
+34958
+34959
+5080
+590
+32922
+34960
+34961
+18503
+14330
+19655
+2260
+34962
+286
+15
+887
+43
+34963
+4441
+842
+694
+590
+34964
+34965
+14
+43
+6095
+29200
+15718
+34966
+34967
+19
+28845
+6116
+941
+9
+31293
+872
+9
+34968
+29746
+19
+34402
+34969
+7176
+861
+345
+1051
+34970
+1090
+10600
+34971
+1090
+34972
+28295
+1716
+13721
+3553
+34973
+14
+27355
+34974
+9
+57
+29628
+13656
+34975
+34976
+590
+16437
+887
+26358
+2724
+19787
+7376
+155
+34977
+10199
+24303
+34
+201
+34978
+34979
+7176
+34980
+209
+34981
+31873
+25237
+14330
+34982
+34983
+34984
+34985
+34986
+34987
+34988
+1157
+34989
+34990
+34991
+34992
+29815
+12987
+12987
+34993
+317
+57
+28317
+301
+1090
+10510
+33650
+21947
+1100
+27161
+9
+12701
+34994
+34995
+34996
+34997
+829
+228
+9
+34998
+25316
+2410
+34999
+354
+25943
+35000
+6095
+25943
+24144
+9
+15068
+17400
+286
+43
+317
+4764
+21822
+9
+14240
+26560
+29855
+35001
+35002
+1513
+35003
+24864
+6217
+35004
+13178
+43
+35005
+3994
+765
+26496
+57
+6950
+35006
+137
+34641
+1047
+5370
+21947
+35007
+35008
+11754
+590
+4055
+35009
+648
+35010
+14434
+104
+28317
+35011
+14330
+31293
+27669
+10031
+35012
+30451
+35013
+33627
+35014
+15718
+35015
+3546
+14369
+30458
+57
+35016
+915
+25140
+11471
+35017
+1090
+6766
+27669
+14693
+24864
+4055
+209
+35018
+1680
+35019
+35020
+28549
+30301
+9
+736
+484
+35021
+43
+5188
+694
+9
+35022
+345
+249
+35023
+27719
+5925
+18120
+35024
+29381
+4518
+20
+35025
+35026
+29628
+33508
+30877
+970
+31293
+35027
+4411
+35028
+590
+140
+15647
+25140
+21947
+35029
+317
+27669
+2314
+35030
+35031
+425
+20841
+19839
+2
+25382
+4528
+35032
+2769
+35033
+35034
+554
+34804
+35035
+31501
+35036
+21261
+15514
+14369
+33203
+35037
+822
+6525
+32153
+24632
+35038
+35039
+35040
+8668
+30224
+35041
+35042
+23103
+398
+1637
+3546
+35043
+14947
+23958
+2988
+35044
+15683
+35045
+249
+35046
+35047
+33650
+13566
+35048
+694
+26861
+35049
+590
+35050
+19
+35051
+5314
+30224
+35052
+25683
+35053
+43
+33693
+25172
+3095
+10
+2782
+28549
+1090
+18869
+29381
+2314
+1716
+4414
+140
+109
+2446
+35054
+17206
+2625
+43
+35055
+18956
+27669
+6142
+10990
+2349
+35056
+35057
+15730
+35058
+14369
+1559
+345
+1829
+1090
+1927
+1732
+7835
+5188
+12987
+3351
+35059
+4388
+35060
+34
+28745
+15699
+4502
+15718
+35061
+35062
+3977
+35063
+19026
+1710
+31293
+35064
+10535
+12005
+35065
+35066
+34402
+28474
+15
+177
+5085
+1394
+14330
+9
+35067
+5659
+16102
+16422
+16818
+35068
+29574
+34402
+34402
+2260
+35069
+1442
+43
+35070
+35071
+19
+1100
+35072
+35073
+12916
+11135
+35074
+28441
+6532
+1517
+35075
+26361
+1371
+35076
+791
+8160
+3842
+35077
+18394
+35078
+464
+35079
+301
+35080
+25683
+35081
+33650
+970
+35082
+35083
+4055
+35084
+386
+35085
+35086
+29483
+28036
+1291
+35087
+26361
+5780
+2082
+25140
+2
+3369
+1295
+15718
+590
+14363
+4
+35088
+1019
+25943
+8465
+29434
+19
+7776
+4055
+30177
+3546
+35089
+35090
+533
+35091
+34436
+29800
+32523
+2744
+35092
+9
+176
+5642
+35093
+35094
+323
+3777
+33650
+29200
+26559
+35095
+21947
+35096
+27843
+30224
+16
+3452
+2764
+34534
+1520
+1674
+13360
+42
+18284
+35097
+35098
+3575
+35099
+25237
+35100
+8668
+201
+35101
+103
+35102
+5188
+14369
+3385
+16
+9
+15
+35103
+19172
+35104
+35105
+665
+35106
+9020
+14369
+9
+34795
+9
+35107
+3460
+35108
+98
+35109
+29459
+25683
+35110
+24727
+35111
+14689
+4907
+35112
+1332
+11554
+25316
+1090
+3376
+35113
+31346
+35114
+7811
+4055
+1021
+15718
+15
+11727
+33606
+464
+25
+2694
+8297
+35115
+35116
+2550
+13578
+736
+35117
+35118
+6950
+31293
+33650
+32001
+25382
+15231
+9
+18250
+2406
+590
+35119
+35120
+5923
+14
+25683
+34
+2593
+3997
+4
+1743
+3287
+23764
+35121
+35122
+1382
+35123
+12987
+7835
+35124
+12851
+677
+30051
+35125
+19
+14369
+35126
+35127
+21947
+25316
+35128
+14330
+5085
+286
+35129
+12309
+33120
+613
+35130
+35131
+1051
+28295
+35132
+35133
+586
+15
+11341
+35134
+26704
+8668
+35135
+10544
+590
+21947
+4055
+35136
+9
+35137
+3958
+35138
+6915
+24258
+1160
+19655
+354
+32
+16437
+9
+43
+19
+286
+18045
+14369
+736
+1090
+43
+17151
+10298
+237
+1914
+17698
+4055
+28036
+22787
+3330
+35139
+14886
+736
+15718
+2316
+35140
+19
+2636
+35141
+6751
+35142
+35143
+35144
+35145
+35146
+29981
+36
+35147
+13484
+35148
+22697
+35149
+32
+2314
+12307
+22208
+35150
+19655
+33125
+24864
+35151
+35152
+694
+2117
+35153
+57
+35154
+35155
+2287
+29381
+4083
+18045
+29483
+228
+35156
+3601
+14
+33821
+23867
+345
+14001
+19
+35157
+6048
+14369
+8362
+1648
+282
+872
+35158
+11515
+1870
+2260
+29200
+6617
+1300
+35159
+14369
+5579
+137
+35160
+35161
+35162
+35163
+35164
+828
+590
+694
+9941
+17
+35165
+2733
+14947
+1091
+35166
+31293
+491
+1481
+284
+2
+28339
+4055
+35123
+8670
+3353
+35167
+2061
+28803
+533
+33445
+8895
+35168
+26361
+35099
+16206
+35169
+7276
+3546
+284
+19
+33120
+1141
+35170
+22213
+1520
+35171
+14604
+349
+1090
+35172
+35173
+1889
+35174
+1224
+337
+3546
+213
+1090
+29981
+35175
+8668
+33758
+2694
+861
+27669
+27069
+35176
+31293
+27069
+23958
+3553
+595
+35177
+14193
+4848
+29628
+1139
+17911
+35178
+35179
+35180
+9
+35181
+849
+590
+21689
+15511
+24303
+33120
+2310
+25943
+35182
+35183
+57
+284
+20187
+2117
+76
+35184
+35185
+104
+35186
+5503
+31293
+213
+8338
+31603
+736
+35187
+7053
+8021
+35188
+303
+19
+12684
+11321
+5080
+1090
+303
+14102
+303
+35189
+35190
+301
+35191
+33650
+27850
+354
+13391
+3787
+35192
+19
+1090
+43
+828
+3711
+35193
+34
+35194
+245
+2764
+35195
+35196
+25140
+35197
+1021
+15
+14576
+35198
+3
+35199
+16205
+35200
+1019
+35201
+18695
+35202
+2769
+337
+31293
+188
+303
+35203
+19
+25683
+35204
+248
+33758
+34
+25
+35205
+21227
+35206
+24303
+30051
+11552
+35207
+6658
+28908
+3764
+19852
+1090
+33627
+284
+35208
+17088
+2140
+18706
+597
+5326
+303
+1169
+2828
+27293
+284
+33494
+24303
+337
+35209
+19218
+18869
+9
+43
+35210
+1542
+399
+178
+35211
+30458
+15
+35212
+9
+8668
+4055
+35213
+35214
+3365
+2308
+5085
+34402
+35215
+10094
+2837
+16437
+35216
+373
+35217
+35218
+379
+337
+5188
+25129
+9
+284
+35219
+11851
+35220
+35221
+9
+14369
+31293
+98
+35222
+35223
+9
+20
+35224
+1090
+849
+31246
+694
+303
+228
+9
+345
+29381
+35225
+11647
+17834
+590
+4764
+2040
+35226
+57
+35227
+28036
+35228
+30877
+35229
+337
+26496
+35230
+35231
+43
+35232
+3994
+1027
+35233
+2157
+33650
+597
+53
+9384
+43
+286
+3546
+25237
+35234
+28441
+613
+30393
+4055
+35235
+597
+936
+1470
+24207
+35236
+35237
+3067
+586
+35238
+713
+35239
+43
+35240
+27669
+15718
+35241
+1290
+648
+16121
+19618
+35242
+89
+4055
+35243
+43
+35244
+24302
+3546
+8297
+35245
+16826
+35246
+1900
+17920
+35247
+5188
+9
+15261
+19486
+1295
+33627
+2804
+3553
+35248
+20291
+43
+35249
+20443
+35250
+35251
+21947
+29483
+31293
+35252
+35253
+303
+22552
+14947
+2038
+35254
+104
+9941
+28036
+43
+286
+533
+35255
+14369
+4055
+35256
+25865
+26724
+25307
+34402
+15
+6616
+24978
+28757
+337
+25793
+35257
+3814
+790
+20514
+17151
+9
+1090
+35258
+35259
+35260
+872
+35261
+8408
+35262
+27669
+9
+402
+43
+590
+35263
+32858
+31293
+25683
+24303
+35264
+10356
+19
+12178
+30877
+2430
+1047
+915
+35265
+35266
+35267
+4278
+1870
+24972
+430
+35268
+35269
+35270
+8512
+19
+18798
+35271
+35272
+8685
+11754
+31293
+32449
+18310
+13721
+1976
+25316
+586
+19618
+35273
+1203
+35274
+35275
+22666
+35276
+35277
+5908
+16102
+989
+35278
+21758
+248
+2694
+35279
+10264
+35280
+35281
+3546
+15
+22922
+11683
+19
+3546
+1612
+35282
+57
+35283
+21027
+3814
+4116
+3828
+142
+25584
+35284
+18659
+9
+1186
+5119
+35285
+29483
+590
+33120
+21527
+34402
+21947
+1401
+861
+35286
+29483
+35287
+2525
+23691
+14025
+35288
+1529
+27719
+35289
+1716
+35290
+35291
+2029
+1481
+35292
+35293
+32523
+57
+35294
+35295
+7053
+24864
+4547
+12120
+35296
+13905
+286
+22752
+1208
+35297
+35298
+30224
+2832
+1314
+26209
+155
+19
+25584
+9
+2501
+35299
+24864
+32
+35300
+21509
+165
+24021
+248
+19
+35301
+22666
+35302
+35303
+35304
+35305
+35306
+27669
+14562
+1021
+745
+1698
+20
+21947
+31168
+9560
+16437
+1011
+35307
+35308
+24864
+35309
+809
+35310
+89
+35311
+861
+9
+25683
+35312
+35313
+213
+35314
+303
+33120
+35315
+915
+29483
+590
+3546
+21689
+15951
+1870
+590
+2577
+153
+12202
+17422
+35316
+35317
+12432
+4055
+35318
+1090
+21426
+35319
+21947
+35320
+35321
+18654
+17020
+35322
+35323
+20130
+19618
+35324
+665
+1864
+21031
+286
+4055
+9
+35325
+25316
+33120
+2577
+1082
+35326
+4001
+34264
+25237
+19618
+33650
+2318
+35327
+35328
+3546
+35329
+25316
+345
+16437
+24144
+15533
+35330
+13721
+13390
+35331
+35332
+35333
+17497
+2
+14369
+35334
+35335
+35336
+27669
+736
+26861
+1584
+248
+9
+35337
+1924
+8460
+1154
+5925
+14935
+3010
+14
+1112
+35338
+19
+9
+21947
+3376
+35339
+53
+28036
+35340
+35341
+1612
+14888
+35342
+4055
+188
+5075
+3926
+35343
+35344
+1716
+19
+2289
+24144
+35320
+35345
+210
+188
+849
+35346
+1082
+35347
+35348
+17956
+970
+60
+28441
+35349
+35350
+16826
+35351
+14330
+590
+301
+66
+12936
+29483
+27669
+35352
+14477
+3546
+4
+19907
+5431
+345
+284
+35353
+17151
+17714
+19
+77
+213
+323
+32538
+1013
+35354
+3330
+35355
+1090
+26683
+27708
+1090
+35356
+35357
+16437
+6658
+32
+21689
+57
+35358
+337
+35359
+15
+23776
+35360
+7034
+16677
+35361
+4055
+35362
+35363
+209
+337
+140
+234
+34531
+303
+28317
+35364
+284
+4565
+35365
+495
+248
+15517
+3104
+33120
+35366
+35367
+35368
+35369
+35370
+35371
+17349
+7991
+284
+20700
+35372
+22922
+35373
+14369
+35374
+35375
+35376
+4055
+6294
+4765
+14477
+35377
+35378
+35379
+35380
+66
+613
+35381
+35382
+27669
+35383
+9
+43
+103
+35384
+971
+89
+19
+8670
+815
+57
+15
+33120
+35385
+35386
+16389
+34402
+19
+5780
+155
+35387
+35388
+19
+24864
+35389
+13829
+4698
+19
+27954
+3815
+19
+303
+35368
+35390
+25316
+1604
+35391
+25237
+5839
+590
+35392
+13279
+10028
+694
+18154
+713
+35393
+35394
+35395
+30877
+533
+35396
+17635
+35397
+5217
+35398
+7817
+35399
+1991
+31293
+14369
+303
+35400
+35401
+15669
+22989
+35402
+317
+32
+720
+25943
+35403
+15718
+3546
+35404
+35405
+35406
+533
+4634
+35407
+34
+5192
+35408
+14369
+35409
+35410
+4055
+24303
+30917
+25237
+3553
+21947
+35411
+35412
+29200
+35413
+35414
+35415
+21836
+35416
+3202
+15
+16258
+25239
+35417
+19
+19
+331
+2135
+21947
+35418
+8392
+357
+9
+12751
+14856
+6344
+2197
+35419
+21689
+554
+35420
+12987
+35421
+18310
+8372
+35422
+35423
+35424
+3316
+35425
+19
+30877
+35426
+373
+34402
+35427
+35428
+35429
+35430
+33113
+2770
+303
+35431
+21031
+484
+20218
+23442
+35432
+2724
+17571
+35433
+35434
+2310
+19
+142
+345
+35435
+21947
+33963
+30877
+30051
+4634
+19335
+7998
+35436
+31098
+35437
+35438
+25683
+337
+4055
+24666
+35439
+35440
+35441
+35442
+35443
+1300
+24864
+34402
+1867
+284
+35444
+9
+3137
+29
+24725
+28490
+24967
+598
+822
+14369
+43
+35445
+35446
+35447
+10028
+24864
+1021
+495
+35448
+5085
+33434
+284
+29381
+35449
+665
+27669
+349
+35450
+35451
+590
+35452
+35453
+35454
+15718
+19618
+35455
+1330
+464
+24864
+2577
+27669
+35456
+43
+14330
+286
+15989
+32
+2694
+8769
+29434
+35457
+17472
+15718
+2117
+35458
+35459
+35460
+20
+35461
+1091
+9410
+1090
+15367
+28317
+31293
+345
+19
+35462
+683
+9
+28028
+24303
+21573
+35320
+5806
+25237
+35463
+43
+24896
+35464
+35318
+35465
+35466
+35467
+15
+24303
+13721
+35468
+35469
+57
+4055
+35470
+14363
+2
+35471
+35472
+99
+2577
+35473
+1316
+35474
+35475
+35476
+4311
+19
+35477
+13638
+24263
+35478
+35479
+19205
+35480
+574
+1090
+14369
+35481
+16887
+2260
+4944
+35482
+35483
+694
+9
+20
+29381
+3743
+345
+57
+25237
+35484
+1107
+34656
+16443
+35485
+18896
+1376
+35486
+35487
+9
+35488
+2274
+25683
+35489
+14369
+342
+35490
+35491
+35492
+25281
+28753
+4055
+9
+25584
+35493
+30317
+590
+8525
+35494
+495
+29636
+35495
+35496
+35497
+26702
+20290
+35498
+35499
+1010
+736
+1234
+35500
+11471
+33128
+9738
+35501
+21947
+18951
+35502
+35503
+11822
+2733
+590
+12158
+2
+35504
+24303
+25683
+35505
+35506
+345
+66
+35507
+533
+35508
+11003
+35509
+2315
+28247
+35510
+15
+35511
+274
+35512
+736
+21947
+5318
+9
+573
+1208
+35513
+35514
+35515
+35516
+21947
+21947
+35517
+35518
+14330
+8670
+31293
+595
+19
+4055
+35519
+19618
+21031
+595
+509
+19
+7053
+35520
+35521
+35522
+35523
+15718
+35524
+33120
+35525
+3546
+35526
+19655
+249
+29483
+14102
+9
+31488
+5629
+35527
+35528
+35529
+3976
+6505
+19852
+24864
+2853
+25140
+33627
+1107
+25943
+32920
+35530
+363
+32359
+35531
+35532
+35533
+14369
+9
+21791
+1090
+2561
+19579
+14
+35534
+14369
+35535
+1090
+1208
+1090
+89
+4921
+35536
+22308
+971
+35537
+21947
+35538
+57
+35539
+12005
+1310
+35540
+6533
+35541
+25943
+9
+16437
+590
+35542
+35543
+35544
+35545
+35546
+35547
+35548
+29483
+4116
+35549
+18479
+32
+32
+35550
+4247
+809
+34619
+14947
+35551
+6071
+21678
+39
+1157
+33693
+35552
+13913
+201
+24426
+10247
+9
+35553
+35554
+251
+138
+20572
+14712
+5188
+35555
+35556
+35557
+14604
+35558
+12926
+179
+35559
+21947
+8316
+14369
+1604
+566
+197
+9
+373
+21947
+10212
+5773
+1524
+35560
+35561
+35562
+35563
+35564
+27669
+15718
+20471
+30877
+677
+35565
+24045
+590
+736
+43
+15718
+35566
+35567
+19
+35568
+35569
+35570
+25683
+35571
+9
+35572
+29483
+3200
+590
+34402
+35573
+14369
+16
+43
+424
+19091
+35574
+16102
+35575
+35576
+35577
+178
+30224
+887
+35578
+25683
+35579
+33
+176
+35580
+21947
+18503
+21947
+35581
+11469
+35582
+25237
+231
+24303
+17093
+1090
+25242
+14175
+35583
+33278
+770
+3119
+8249
+43
+5780
+1073
+21947
+43
+35584
+694
+209
+35585
+21947
+9
+33650
+35586
+35587
+35588
+35589
+98
+35590
+30877
+35591
+4055
+30877
+13424
+34402
+33627
+29007
+3601
+12
+29
+3119
+35592
+20952
+35593
+35594
+35595
+251
+2
+3442
+35596
+35597
+28494
+2260
+4634
+35598
+4055
+25316
+18695
+96
+5393
+5188
+29956
+35599
+23103
+34212
+5780
+694
+35600
+35601
+1612
+21947
+15
+16375
+33758
+13848
+35602
+35603
+931
+14871
+188
+5394
+14001
+1689
+34804
+21947
+35604
+32816
+28230
+35605
+8053
+9
+43
+31293
+28672
+4364
+19646
+30877
+590
+12552
+35606
+14
+100
+2919
+35607
+9
+20616
+1047
+35608
+1090
+15583
+28199
+1655
+20805
+8967
+1090
+35609
+35610
+4055
+3767
+179
+590
+2694
+16102
+2410
+242
+15718
+35611
+35612
+35613
+8053
+28441
+26945
+33650
+35614
+15206
+35615
+22738
+5004
+13963
+60
+30209
+35616
+35617
+35618
+35619
+3553
+11428
+936
+590
+43
+3984
+15524
+35620
+35621
+33693
+35622
+14340
+2314
+31424
+35623
+27514
+286
+286
+279
+590
+35624
+35625
+35626
+35627
+35628
+35629
+5601
+35630
+140
+21947
+12055
+35631
+35632
+35633
+590
+1563
+27669
+16437
+590
+22552
+31293
+19
+35634
+1529
+76
+19091
+14477
+35635
+736
+4
+671
+35636
+7817
+35637
+1517
+30877
+27669
+35638
+35639
+28036
+35640
+35641
+35642
+43
+1889
+28490
+77
+33674
+7015
+27069
+35643
+20218
+5629
+19
+35644
+10591
+35645
+1090
+35646
+5119
+21309
+35647
+29483
+1715
+14947
+3407
+31293
+35648
+1812
+21947
+1112
+66
+35649
+590
+35650
+35651
+35652
+2314
+397
+1605
+27178
+28441
+20260
+34433
+19655
+31168
+35653
+9953
+35654
+15718
+35655
+2769
+35656
+31293
+35657
+35658
+176
+25683
+6950
+19294
+1157
+27453
+1090
+21689
+35659
+35660
+35661
+35662
+21689
+35663
+3546
+2502
+21885
+730
+35664
+35665
+35666
+43
+35667
+43
+35668
+35669
+2514
+35670
+35671
+22898
+677
+4116
+188
+26638
+35672
+349
+9163
+89
+33650
+2811
+1918
+35673
+35320
+446
+1924
+35674
+5400
+35675
+4795
+43
+35676
+35677
+14186
+15
+35678
+14
+33650
+35679
+5420
+34204
+35680
+590
+25316
+29483
+28441
+35681
+35682
+25943
+35683
+35684
+30551
+43
+19
+9095
+35685
+590
+43
+33627
+35686
+35687
+30307
+35688
+35689
+13666
+5188
+2446
+25316
+27669
+590
+35690
+2561
+24303
+15054
+9
+17165
+35691
+35692
+26159
+35693
+17698
+21698
+35694
+25140
+14630
+9
+35695
+7912
+31873
+35696
+9
+24303
+16803
+5415
+590
+21689
+14482
+101
+35697
+35698
+2872
+2342
+35699
+35700
+4155
+35701
+20
+35702
+39
+20161
+3828
+29032
+9
+1465
+96
+590
+8910
+745
+15081
+3408
+35703
+1013
+10271
+35704
+1817
+2310
+31098
+153
+2694
+33137
+14482
+20825
+24192
+9
+14369
+35705
+3480
+14369
+416
+25943
+35706
+3908
+24896
+554
+25943
+178
+14825
+15471
+178
+57
+35707
+30877
+3104
+35708
+35709
+35710
+11483
+35711
+18553
+2019
+35712
+35713
+11762
+590
+35714
+25584
+17891
+1060
+595
+25237
+4502
+18951
+30580
+209
+25140
+5400
+11966
+249
+77
+16024
+35715
+17897
+345
+35716
+31873
+57
+12371
+35717
+24864
+35718
+27069
+590
+35719
+35720
+30877
+35721
+123
+34433
+14161
+9
+35722
+35723
+35320
+35724
+35725
+24803
+89
+31293
+5085
+10961
+43
+29065
+25683
+4820
+590
+14369
+35726
+7835
+35727
+43
+7891
+28036
+31293
+32438
+21947
+2537
+35728
+35729
+25140
+16437
+9
+32725
+19
+35730
+21698
+7480
+20
+35731
+35732
+43
+9
+4598
+1743
+19
+4028
+5780
+5409
+29527
+60
+35733
+3251
+32410
+18064
+35734
+35735
+5832
+35736
+21947
+286
+35737
+35738
+34402
+35739
+35740
+9
+586
+34964
+21947
+35741
+36
+970
+35742
+7328
+6294
+35743
+15
+12661
+11073
+35744
+2253
+4885
+16466
+35745
+29981
+25683
+736
+19
+33258
+7053
+9
+16975
+21947
+24247
+35746
+35747
+35748
+2023
+35749
+1423
+694
+14604
+35750
+222
+35751
+1090
+35752
+27069
+1738
+18130
+25316
+9
+910
+6029
+25069
+14369
+590
+8392
+35753
+1434
+8967
+35754
+19383
+28961
+15718
+33659
+17670
+35507
+27355
+43
+286
+21102
+7553
+35755
+35756
+14343
+27507
+35757
+25943
+707
+34402
+915
+35758
+21947
+34
+694
+26150
+43
+2625
+16102
+1716
+35759
+6595
+35760
+35761
+35762
+35763
+16085
+35764
+34402
+24303
+35765
+270
+33627
+35766
+590
+35767
+9
+795
+43
+286
+446
+35768
+827
+35769
+1090
+200
+30209
+35770
+35771
+18503
+12417
+24751
+35772
+35773
+18951
+35774
+29483
+13287
+31293
+4055
+1489
+35
+29200
+3908
+35775
+2655
+590
+35776
+35777
+35778
+9
+9941
+33627
+15535
+35779
+32
+35780
+35781
+25316
+25683
+15655
+15
+1920
+35782
+590
+317
+707
+3492
+958
+19
+14330
+646
+554
+22
+18350
+349
+31796
+35783
+35784
+35785
+25
+35786
+16102
+35787
+7855
+35320
+22963
+66
+35788
+15718
+2324
+31293
+8418
+28480
+14330
+19655
+4055
+4398
+35789
+35790
+35791
+21947
+7045
+21027
+342
+35792
+34402
+9561
+35793
+5409
+554
+35794
+8668
+23271
+3598
+27581
+25237
+201
+19
+35795
+10239
+14369
+35796
+112
+14330
+35797
+35798
+5755
+3481
+665
+35799
+250
+3287
+1224
+286
+2006
+185
+301
+5065
+176
+27719
+18331
+155
+43
+35800
+3829
+27669
+33278
+12013
+30877
+1478
+14992
+5188
+1437
+25316
+43
+43
+4055
+35801
+35802
+379
+35803
+5627
+35804
+35805
+33120
+286
+12987
+14604
+9
+178
+35806
+240
+35807
+34
+2
+23651
+31293
+2
+35808
+1415
+7537
+35809
+35810
+3484
+24864
+27669
+2919
+35811
+33368
+677
+35812
+14
+77
+590
+35813
+66
+17058
+590
+35814
+34908
+12987
+35320
+35815
+3842
+19
+35816
+35817
+323
+694
+357
+35481
+35818
+35819
+32782
+14240
+30051
+590
+35820
+24303
+179
+2
+29381
+28549
+8393
+35821
+970
+35822
+10111
+35823
+2253
+35824
+24864
+35825
+15718
+35826
+43
+137
+26724
+35827
+573
+9
+35828
+35829
+13721
+1515
+5780
+19
+15718
+970
+2537
+2619
+30877
+28194
+13721
+10230
+1502
+27140
+35830
+24045
+861
+19
+35831
+13721
+35832
+31293
+35833
+43
+9
+176
+35834
+35829
+30877
+34402
+5085
+1559
+21947
+14688
+14840
+24303
+21027
+18079
+8357
+43
+5075
+31293
+35835
+35836
+35837
+1157
+35838
+25129
+19983
+35839
+27705
+35840
+35841
+35842
+345
+514
+14001
+35843
+9
+590
+35844
+99
+35845
+35846
+15384
+35847
+13570
+28082
+35848
+35849
+34402
+35850
+11593
+24253
+35851
+17553
+35852
+683
+286
+35853
+33120
+2537
+35854
+29483
+35855
+115
+169
+46
+25237
+16511
+27954
+17151
+5085
+35856
+5197
+35857
+342
+35858
+14962
+33553
+27329
+1415
+9
+35859
+32518
+98
+30051
+590
+24864
+9460
+35860
+35861
+35862
+15428
+16102
+14827
+28441
+3553
+15
+35863
+352
+26496
+1139
+35864
+35865
+2476
+35866
+8798
+33758
+446
+590
+35867
+1056
+35868
+16437
+9
+327
+27669
+35869
+35870
+35871
+13538
+1100
+35872
+35873
+17864
+35874
+9
+1870
+57
+26323
+14
+12404
+35875
+14
+1524
+35876
+971
+35877
+35878
+29483
+43
+35879
+15
+35880
+35881
+286
+207
+15
+35882
+21947
+35883
+823
+671
+35884
+936
+27798
+4752
+27069
+1924
+25683
+1533
+352
+43
+155
+23103
+18982
+1300
+35885
+15989
+19
+35886
+8717
+35887
+10601
+35888
+25237
+35889
+2804
+26787
+30969
+6161
+9
+15
+7019
+8756
+13721
+35890
+35891
+35892
+14
+35893
+3
+35894
+209
+12916
+35895
+989
+2694
+35896
+35897
+815
+1189
+590
+6251
+35898
+2310
+27669
+576
+35899
+24864
+616
+17911
+4693
+35900
+1249
+35901
+24862
+15718
+19
+17911
+3546
+29200
+4055
+188
+15666
+35902
+970
+9871
+29483
+16618
+35903
+590
+35904
+1172
+35905
+35906
+12936
+21947
+35907
+35908
+26946
+2064
+25237
+12240
+35909
+28317
+286
+19091
+2410
+43
+19
+35910
+21031
+27669
+52
+20
+4803
+21947
+514
+35911
+201
+671
+25140
+7835
+35912
+5085
+29381
+35913
+1364
+35914
+35915
+2243
+4055
+35916
+35917
+21006
+26361
+22963
+33693
+10643
+25133
+35918
+29424
+31293
+5780
+10979
+23103
+35919
+9
+5021
+6766
+29721
+32805
+35920
+377
+8756
+35921
+35922
+35923
+1090
+25683
+22109
+35844
+1566
+3213
+341
+24303
+35924
+33650
+9
+35925
+14435
+399
+34402
+35926
+29483
+26666
+33113
+14909
+35927
+35928
+1442
+35929
+3055
+9
+29483
+4055
+14477
+35930
+25140
+16437
+35931
+35932
+17151
+10239
+35933
+35934
+31293
+31293
+35935
+703
+13365
+35936
+35937
+14369
+548
+32
+35938
+35939
+4908
+554
+35940
+35320
+18695
+3353
+677
+8961
+2694
+29629
+30877
+35941
+31293
+35942
+43
+2769
+823
+259
+28116
+35943
+35944
+35945
+26744
+35946
+35947
+35948
+35949
+14001
+35950
+9210
+35951
+270
+1090
+35952
+209
+5908
+35953
+11593
+35954
+416
+10601
+35955
+35956
+590
+35957
+35958
+5085
+970
+1710
+35959
+7813
+573
+29483
+1090
+35960
+9953
+1234
+19
+35961
+590
+24303
+32449
+35962
+35963
+34433
+22607
+14477
+35964
+43
+35965
+14669
+9
+209
+14942
+137
+27525
+24045
+21729
+6095
+14477
+35966
+35967
+30877
+35968
+35969
+1976
+2561
+495
+9
+32
+35970
+35773
+35971
+20442
+1316
+7912
+35972
+35973
+35974
+3
+15718
+26069
+25659
+35975
+29687
+35976
+27024
+35977
+25061
+12555
+35978
+19
+35979
+43
+1100
+19
+35980
+7480
+35981
+35982
+30877
+2314
+35983
+3407
+317
+35984
+272
+35985
+35986
+35987
+35988
+21947
+19
+8849
+869
+35989
+9
+1808
+35990
+14103
+20138
+1834
+28490
+35991
+4055
+35992
+35993
+35994
+1604
+27262
+25237
+29628
+2356
+3003
+35995
+35996
+1531
+25316
+613
+13304
+2136
+35997
+35998
+4658
+35999
+19618
+1575
+15298
+43
+15718
+36000
+36001
+36002
+21947
+36003
+19
+2619
+36004
+29204
+28186
+379
+36005
+11176
+36006
+36007
+36008
+1425
+36009
+15035
+36010
+9
+36011
+36012
+1013
+13721
+22963
+36013
+25300
+36014
+42
+36015
+36016
+20952
+16328
+30224
+36017
+10
+19372
+14299
+29483
+36018
+16437
+4775
+36019
+36020
+36021
+33627
+19618
+36022
+24678
+7191
+36023
+9258
+19009
+31293
+32564
+10853
+14369
+28307
+1790
+36024
+36025
+36026
+36027
+2537
+36028
+36029
+3755
+5780
+12827
+36030
+36031
+9
+2463
+36032
+26496
+29800
+576
+5188
+36033
+24303
+36034
+36035
+36036
+36037
+16
+25528
+33444
+36038
+29597
+36039
+317
+1090
+36040
+36041
+36042
+1082
+21947
+27669
+36043
+14369
+12185
+338
+686
+36044
+36045
+36046
+36047
+43
+22
+861
+5344
+4367
+36048
+36049
+36050
+25316
+21947
+36051
+31873
+24303
+943
+24303
+29145
+3976
+15
+1090
+36052
+14477
+17549
+13529
+4938
+12198
+13680
+36053
+9561
+1615
+1013
+29938
+32
+36054
+36055
+36056
+36057
+248
+32402
+970
+286
+36058
+36059
+36060
+36061
+36062
+25140
+34346
+36063
+201
+4624
+1021
+141
+17356
+36064
+36065
+248
+1745
+27669
+337
+43
+17956
+317
+43
+13317
+14477
+14477
+28036
+36066
+30877
+1812
+33368
+19
+34641
+36067
+36068
+1013
+2814
+19
+31346
+36069
+25237
+3994
+18350
+27669
+36070
+15989
+35427
+21027
+8297
+21689
+36071
+98
+36072
+36073
+36074
+115
+36075
+13905
+32402
+36076
+14342
+36077
+14369
+36078
+1090
+36079
+1116
+248
+14369
+36080
+495
+2019
+36081
+4502
+398
+36082
+18844
+36083
+2324
+1710
+36084
+36085
+36086
+6116
+3546
+337
+5085
+178
+9163
+21947
+16798
+36087
+36088
+36089
+36090
+36091
+4463
+1090
+36092
+349
+303
+77
+2410
+14553
+36093
+27387
+1637
+12371
+36094
+34957
+19
+20
+30877
+373
+736
+6627
+36095
+17151
+36096
+36097
+30224
+831
+7176
+36098
+36099
+2577
+36100
+77
+36101
+11483
+29
+1562
+36102
+14947
+213
+36103
+337
+31474
+345
+337
+36104
+21947
+24303
+590
+30040
+8282
+3964
+736
+36105
+338
+36106
+43
+5085
+164
+9
+30877
+33627
+15
+43
+554
+1090
+36107
+36108
+590
+14369
+284
+303
+36109
+36110
+36111
+20
+13207
+533
+24864
+1090
+36112
+9
+43
+1090
+3657
+36113
+11171
+36114
+6571
+28441
+29381
+1605
+14330
+57
+26577
+568
+89
+36115
+36116
+36117
+36118
+36119
+3186
+32642
+36120
+36121
+303
+34181
+1090
+31293
+36122
+31603
+36123
+2525
+36124
+36125
+19318
+27719
+36126
+25237
+36127
+4885
+14369
+1224
+25237
+3569
+213
+9
+270
+7615
+36128
+31098
+2694
+9396
+36129
+27599
+342
+1090
+27669
+36130
+14079
+36131
+34402
+36132
+25
+5229
+33120
+36133
+28441
+20
+31225
+14369
+36134
+36135
+17730
+22412
+2616
+915
+36136
+345
+3335
+17151
+1710
+29402
+114
+213
+36137
+9
+36138
+12597
+60
+554
+2195
+36139
+22986
+36140
+21088
+36141
+3994
+9
+6505
+19907
+887
+36142
+3978
+1361
+13721
+36143
+24303
+36144
+377
+36145
+15718
+36146
+2619
+30917
+36147
+36148
+36149
+1090
+36150
+36151
+36152
+590
+4
+36153
+24154
+29544
+7053
+11026
+2525
+23103
+36154
+19
+3546
+5780
+36155
+36156
+14013
+13539
+57
+3546
+36157
+3546
+14369
+36158
+24864
+6054
+1637
+36159
+2206
+36160
+35568
+36161
+3601
+36162
+16466
+9543
+16242
+36163
+19
+358
+28441
+36164
+201
+1090
+491
+1508
+36165
+8668
+13807
+2577
+17151
+36166
+24303
+1089
+36167
+36168
+1090
+36169
+15705
+1090
+872
+19
+31668
+1712
+36170
+1688
+36171
+15718
+3435
+36172
+36173
+43
+5904
+1867
+25316
+1157
+36174
+27719
+4002
+36175
+24864
+36176
+1157
+29561
+36177
+35320
+20768
+43
+17136
+36178
+15226
+201
+19618
+98
+2567
+57
+809
+36179
+30224
+36180
+36181
+27954
+9629
+28036
+27538
+13359
+590
+36182
+590
+17151
+36183
+31293
+36184
+9
+1364
+33627
+43
+7053
+36185
+5188
+9
+3546
+13908
+30877
+345
+23103
+36186
+66
+36187
+36188
+26613
+36189
+36190
+36191
+36192
+36193
+34402
+519
+5833
+36194
+317
+25
+9
+14369
+554
+15
+25455
+19618
+28923
+14330
+2882
+36195
+29381
+19
+30877
+15938
+36196
+3484
+197
+36197
+519
+323
+36198
+43
+2406
+17151
+566
+36199
+21746
+137
+36200
+11008
+14947
+36201
+36202
+1429
+36203
+36204
+77
+36205
+25382
+1229
+15
+1870
+36206
+36207
+8249
+36208
+19
+15
+36209
+21947
+21689
+386
+8042
+6595
+43
+19
+597
+58
+29981
+13996
+23190
+1524
+736
+43
+15718
+317
+36210
+36211
+36212
+20510
+33099
+18707
+36213
+17151
+9934
+36214
+36215
+36216
+36217
+3067
+36218
+16560
+14887
+9
+2694
+436
+26357
+795
+18107
+59
+656
+178
+16
+1090
+34402
+36219
+36220
+303
+36221
+9
+36222
+19
+43
+36223
+43
+242
+971
+36224
+990
+1562
+21261
+646
+15718
+36225
+21698
+36226
+464
+17151
+201
+123
+36227
+36228
+2865
+123
+10349
+36229
+36230
+36231
+36232
+20600
+13465
+36233
+20571
+33838
+25097
+36234
+598
+36235
+10156
+36236
+15597
+2865
+36237
+3867
+36238
+25683
+36239
+23103
+15
+34337
+3764
+24864
+3317
+60
+4166
+597
+36240
+36241
+1090
+915
+14369
+1384
+590
+446
+36242
+31293
+36243
+18940
+43
+6214
+36244
+36245
+1870
+27355
+1612
+36246
+34402
+14369
+677
+27069
+31346
+36247
+36248
+9
+34
+43
+33120
+33330
+36249
+36250
+15718
+14
+15718
+27669
+36251
+36252
+25659
+36253
+14102
+15718
+31168
+29204
+4521
+36254
+201
+841
+24303
+2314
+36255
+36256
+1018
+19
+26414
+36257
+36258
+36259
+36260
+89
+19209
+14369
+29483
+21863
+36261
+43
+36262
+36263
+36264
+36265
+36266
+21045
+845
+1112
+32
+43
+36267
+36268
+1842
+30650
+24896
+533
+36269
+115
+12180
+22963
+5780
+36270
+658
+16121
+36271
+14369
+3369
+34650
+1829
+736
+36272
+720
+2694
+25659
+179
+36273
+36274
+32
+36275
+36276
+26209
+18242
+3598
+36277
+536
+36278
+36279
+4502
+36280
+1605
+9
+36281
+22256
+9
+3553
+17382
+887
+3567
+36282
+36283
+24725
+36284
+36285
+36286
+19
+36287
+736
+9
+3081
+35320
+36288
+590
+265
+43
+1885
+36289
+19918
+3484
+339
+14330
+36290
+36291
+4
+13748
+36292
+36293
+17228
+1920
+21947
+34402
+36294
+30224
+25237
+36295
+36296
+36297
+36298
+827
+19
+36299
+30224
+36300
+36301
+24144
+36302
+14001
+18896
+14001
+849
+3978
+36303
+115
+24862
+36304
+9
+36305
+736
+2619
+736
+36306
+554
+36307
+3330
+19
+36308
+9
+36309
+15718
+1901
+36310
+24045
+36311
+32984
+76
+43
+36312
+16826
+57
+36313
+43
+1011
+36314
+15718
+36315
+32
+1454
+14204
+15
+768
+36316
+29716
+36317
+15
+58
+36318
+188
+24144
+43
+2
+35458
+14363
+736
+14
+14342
+17326
+31293
+36319
+7835
+36320
+36321
+14369
+36322
+24864
+15298
+13140
+28317
+36323
+36324
+25943
+36325
+24144
+36326
+5963
+172
+36327
+36328
+31293
+19618
+209
+36329
+36330
+1169
+2260
+9
+22
+140
+8896
+345
+4
+30877
+24725
+36331
+17911
+36332
+345
+25316
+36333
+5539
+14061
+1090
+5117
+36334
+35409
+2728
+34375
+19750
+21947
+21251
+36335
+10505
+1222
+590
+25
+22818
+36336
+2576
+27669
+43
+30051
+33627
+8986
+21689
+36337
+19858
+36338
+36339
+36340
+6519
+36341
+36342
+19
+7601
+36343
+32871
+5253
+30051
+35104
+6263
+29483
+5014
+1716
+36344
+21947
+36345
+36346
+36347
+20745
+19852
+25943
+11966
+32
+1107
+1870
+9
+14477
+14260
+5780
+36348
+18830
+5431
+369
+36349
+36350
+53
+36351
+10791
+4364
+30373
+36352
+4531
+36353
+34402
+18782
+141
+16429
+2733
+4055
+26361
+2314
+342
+3546
+21791
+36354
+36355
+6624
+19
+590
+2406
+57
+36356
+415
+36357
+36358
+179
+33627
+36359
+43
+4055
+201
+36360
+10789
+14330
+286
+915
+29
+27669
+36361
+13721
+36362
+25140
+36363
+14369
+36364
+36365
+15718
+19218
+14814
+36366
+3958
+31098
+36367
+8342
+342
+9
+36368
+36369
+36370
+36371
+36372
+36373
+26559
+28441
+20443
+23588
+1870
+265
+36374
+19
+176
+109
+24864
+25316
+9
+36375
+36376
+137
+3061
+1172
+9
+36377
+36378
+23103
+17698
+12989
+36379
+36380
+10
+36381
+36382
+8896
+1680
+1234
+1514
+34650
+36383
+36384
+671
+36385
+590
+29628
+36386
+15
+13843
+9
+67
+15
+23103
+20187
+178
+14001
+16798
+676
+36387
+14
+36388
+36389
+34850
+36390
+17151
+9
+43
+33627
+36391
+751
+36392
+1116
+2733
+27599
+36393
+5169
+28923
+14363
+25776
+36394
+3050
+1604
+36395
+12480
+9
+845
+36396
+36397
+36398
+32
+21947
+57
+354
+36399
+34402
+15
+36400
+21647
+1716
+36401
+415
+17151
+57
+36402
+36403
+7157
+36404
+43
+104
+12180
+2561
+12343
+15
+17941
+26484
+36405
+2164
+32253
+9481
+15718
+36406
+4528
+9
+6710
+9
+36407
+29381
+36408
+9941
+25140
+36409
+379
+36410
+11469
+936
+736
+36411
+36412
+13943
+36413
+1566
+8110
+14369
+33120
+1310
+3743
+228
+7835
+36414
+36415
+36416
+15437
+36417
+24303
+7053
+4055
+36418
+2936
+36419
+36420
+36421
+415
+9
+30650
+14369
+28502
+36422
+36423
+2694
+36424
+7
+36425
+25584
+36426
+11321
+345
+23103
+586
+29981
+11571
+33627
+36427
+815
+7471
+26125
+3553
+9
+13721
+1090
+36428
+36429
+36430
+7208
+4055
+43
+7107
+34
+26559
+349
+3104
+36431
+345
+36432
+36433
+345
+36434
+12518
+18588
+36435
+31293
+36436
+349
+29381
+104
+2902
+1508
+36437
+1021
+30224
+12987
+3546
+36438
+286
+36439
+5394
+57
+3317
+24864
+36440
+33501
+36441
+24303
+19
+36442
+36443
+16056
+14369
+19
+36444
+36445
+32410
+24207
+14363
+14343
+72
+15
+36446
+8351
+25683
+10910
+491
+27669
+36447
+541
+23176
+2356
+27508
+36448
+36449
+36450
+279
+2197
+43
+21947
+365
+701
+36451
+23921
+4055
+36452
+35352
+36453
+27669
+36454
+36455
+3842
+176
+36456
+36457
+31873
+36458
+2476
+36459
+36460
+399
+36461
+36462
+36463
+36464
+141
+25237
+17602
+43
+17149
+9
+705
+845
+36465
+18787
+27669
+36466
+345
+36467
+33
+31346
+36468
+27669
+36469
+23970
+36470
+20
+36471
+9
+36472
+17150
+6571
+25632
+36473
+19618
+3546
+3236
+16
+36474
+15718
+484
+3059
+6317
+43
+15718
+533
+36475
+14571
+36476
+25237
+1870
+36477
+36478
+31293
+590
+671
+25683
+491
+36479
+36480
+910
+36481
+36482
+30458
+33494
+36483
+21829
+36484
+28549
+36485
+36486
+11273
+15718
+36487
+43
+23322
+36488
+15
+98
+36489
+14604
+7107
+11774
+34264
+33627
+713
+194
+1810
+36490
+36491
+5780
+13566
+17151
+36492
+1384
+36493
+11822
+25943
+491
+4033
+36494
+33650
+14330
+36495
+286
+25316
+25
+3059
+590
+36496
+36497
+36498
+36499
+6829
+1107
+590
+349
+36500
+36501
+8774
+36502
+36503
+34181
+357
+27069
+36504
+36505
+29284
+14369
+317
+17670
+36506
+36507
+12166
+19618
+30224
+36508
+554
+36509
+21280
+590
+15718
+36510
+25053
+36511
+22
+3484
+15718
+19
+36512
+27669
+36513
+27798
+1116
+286
+12987
+15
+36514
+15
+36515
+12299
+89
+4441
+9
+7725
+36516
+33120
+33508
+36517
+7991
+28392
+872
+21947
+1508
+1090
+36518
+1100
+1696
+745
+36519
+36520
+5415
+31041
+21958
+36521
+21947
+566
+36522
+16325
+58
+28402
+34628
+30051
+57
+36424
+36523
+3148
+14679
+9
+3
+36524
+27669
+36525
+36526
+17670
+36527
+3546
+6595
+597
+699
+10123
+9
+36528
+8821
+36529
+34181
+20514
+3196
+484
+12646
+15718
+11321
+36530
+36531
+36532
+4982
+36533
+36534
+9410
+2061
+30877
+36535
+36536
+138
+32
+36537
+19
+3599
+36251
+34402
+33278
+5344
+36538
+27835
+19
+5409
+15718
+89
+27954
+36539
+7154
+36540
+9
+25237
+36541
+16866
+36542
+3994
+11593
+36543
+8096
+1090
+17151
+536
+5791
+915
+15718
+1688
+745
+970
+29483
+861
+1100
+36177
+1465
+32
+19579
+2367
+36544
+36545
+28219
+3553
+36546
+36547
+14369
+15
+14000
+36548
+1720
+4307
+3553
+1547
+36549
+33758
+1920
+12621
+36550
+17911
+13907
+30068
+586
+43
+36551
+6096
+745
+14
+32538
+57
+809
+16121
+36552
+36553
+3546
+31293
+11960
+936
+36554
+3491
+30224
+30224
+36555
+36556
+36557
+36558
+22752
+24
+22963
+14604
+26040
+30877
+36559
+66
+43
+9
+36560
+1524
+2206
+27277
+27684
+36561
+36562
+14616
+35546
+761
+60
+4897
+4468
+36563
+10147
+36564
+1615
+18311
+8146
+23442
+242
+36565
+228
+21188
+4279
+20
+18479
+2561
+6996
+20339
+358
+36566
+33890
+36567
+36568
+6505
+16589
+5316
+36569
+27141
+36570
+736
+36571
+970
+36572
+19655
+1605
+22082
+36573
+36574
+57
+32359
+36575
+16798
+36576
+19
+36577
+36578
+30877
+25140
+3296
+33120
+36579
+1013
+36580
+28961
+9
+36581
+36582
+23103
+590
+2476
+694
+1364
+36583
+4364
+573
+14001
+77
+31441
+36584
+222
+1502
+36585
+6950
+36586
+282
+36587
+36588
+21947
+20798
+27205
+197
+9
+24144
+36589
+2694
+33494
+1464
+36590
+31293
+590
+36591
+4055
+822
+249
+36592
+13452
+26484
+36593
+8668
+3553
+9
+36594
+21947
+20
+1444
+36595
+18077
+36596
+16678
+33278
+36597
+536
+4344
+5313
+36598
+533
+36599
+1384
+3886
+14369
+34402
+349
+1307
+36600
+30650
+14001
+4650
+19903
+541
+36601
+36602
+30177
+17151
+1291
+29844
+36603
+23103
+28317
+1056
+815
+36604
+590
+36605
+36606
+5145
+15647
+24864
+5627
+11966
+36607
+26604
+36608
+46
+36609
+2136
+36610
+36611
+15718
+21027
+474
+36612
+442
+3546
+36613
+33627
+815
+36614
+22922
+19
+26295
+25102
+19
+36615
+36616
+36617
+2926
+7964
+201
+30209
+39
+18045
+30877
+188
+7451
+36618
+27669
+16826
+19
+554
+30877
+36619
+5780
+1559
+36620
+31293
+33650
+36621
+36622
+33494
+13905
+36623
+345
+36624
+915
+36625
+179
+66
+36626
+36627
+9
+1090
+36628
+19
+66
+15718
+14363
+27669
+23603
+4055
+21947
+197
+36629
+36630
+36631
+36177
+25659
+8188
+29381
+21947
+484
+16096
+36632
+25316
+34532
+36633
+33061
+1107
+36634
+36635
+1262
+77
+36636
+15718
+9
+36637
+36638
+36639
+1682
+30458
+36640
+36641
+3546
+21947
+36642
+1082
+36643
+32
+36644
+11762
+19
+10
+36645
+8137
+4116
+19
+30051
+3999
+36646
+27669
+36647
+616
+2040
+36648
+36649
+6054
+613
+36650
+13566
+13721
+14363
+36651
+36652
+36653
+36654
+57
+411
+6116
+7053
+15536
+1920
+43
+1316
+36655
+15
+10356
+24864
+20745
+24303
+34402
+1559
+4055
+28961
+36656
+36657
+822
+27669
+286
+16437
+36658
+339
+185
+9
+5780
+31234
+36659
+827
+36660
+23103
+29381
+36661
+60
+36662
+36663
+33650
+19
+201
+24864
+18553
+140
+142
+36664
+36665
+155
+36666
+745
+21947
+20
+3059
+12
+36667
+36668
+7154
+15718
+5188
+36669
+36670
+201
+29200
+16
+4
+21947
+16290
+1745
+36671
+19
+24303
+4982
+11995
+971
+36672
+286
+24864
+9
+1228
+36673
+1720
+671
+19852
+31293
+36674
+19
+20514
+28961
+415
+250
+25584
+21689
+14330
+7600
+2
+2694
+23103
+36675
+665
+15
+36676
+20
+14751
+17670
+590
+36677
+286
+19
+9999
+2164
+17259
+36678
+11624
+323
+36679
+36680
+36681
+36682
+36683
+338
+20005
+5188
+32
+865
+14856
+36684
+590
+9
+43
+36685
+36686
+36687
+19907
+33061
+36688
+36689
+36690
+36691
+24864
+66
+18951
+1563
+4
+2500
+13323
+36692
+36693
+32449
+9
+21947
+474
+32
+1230
+53
+36694
+2561
+24864
+1090
+1870
+30877
+9
+36695
+77
+36696
+16437
+19
+3546
+3546
+3385
+30877
+17151
+23743
+554
+36697
+5188
+345
+613
+1112
+31293
+554
+415
+22963
+15
+30877
+736
+36698
+36699
+19794
+5966
+11966
+5623
+13323
+36700
+31433
+36701
+57
+23103
+36702
+25943
+36703
+25584
+29381
+36704
+1423
+301
+21226
+36705
+36706
+36707
+30877
+6518
+36708
+1961
+1244
+12124
+36709
+36710
+24725
+33650
+8967
+14947
+2865
+1384
+35427
+201
+12956
+5297
+694
+36711
+4452
+411
+36712
+36713
+197
+590
+21947
+36714
+2015
+35052
+1115
+4055
+18503
+21791
+8392
+36715
+32523
+25
+936
+5188
+14001
+9
+36716
+36717
+28317
+19
+5085
+9
+2694
+16466
+30877
+27117
+1524
+29527
+21947
+36718
+36719
+30877
+36720
+2476
+36721
+12987
+29483
+36722
+7379
+36723
+768
+6010
+8249
+9
+36724
+36725
+33494
+30877
+590
+19797
+590
+936
+586
+36726
+13279
+21266
+36727
+20
+1596
+36728
+1369
+278
+36729
+36730
+2254
+36731
+4441
+43
+7071
+15718
+36732
+43
+20
+27669
+36733
+31293
+16422
+31691
+36734
+16826
+36735
+76
+22
+15914
+21028
+35547
+1716
+1444
+942
+36736
+36737
+19852
+36738
+484
+286
+2655
+677
+36739
+13943
+14
+349
+36740
+586
+21947
+36741
+13260
+3546
+36742
+2330
+7154
+30877
+31139
+36743
+33627
+14369
+36744
+2764
+17151
+36745
+36746
+14477
+590
+25584
+66
+11624
+286
+1961
+36747
+1942
+36748
+36749
+36750
+36751
+1090
+36752
+43
+2460
+36753
+17144
+12987
+16329
+36754
+7399
+29981
+53
+36755
+2694
+33061
+36756
+36757
+15718
+286
+20933
+22
+8554
+861
+286
+114
+36758
+36759
+2314
+36760
+17151
+24303
+9246
+1961
+36761
+4820
+24303
+14
+3601
+36762
+15
+36763
+15
+5188
+1169
+12987
+36764
+36765
+2561
+25364
+16121
+25584
+23103
+590
+6950
+19655
+36766
+861
+4502
+36218
+36767
+2009
+33673
+14369
+5886
+21947
+36768
+14604
+2762
+36769
+5409
+4238
+36770
+36771
+36772
+76
+910
+303
+36773
+26361
+33627
+9
+26744
+3477
+99
+352
+7053
+36774
+36775
+1738
+331
+703
+13721
+1051
+36776
+9573
+5188
+35400
+213
+11341
+495
+2254
+30877
+495
+16466
+57
+3858
+15718
+28317
+178
+15824
+33650
+377
+4002
+31293
+20058
+1244
+9
+14369
+36777
+248
+12055
+36778
+1295
+415
+21947
+28317
+36779
+36780
+3976
+36781
+31225
+19618
+36782
+36783
+1606
+36784
+36785
+36786
+36787
+373
+36788
+36789
+21681
+36790
+15
+36791
+36792
+36793
+337
+19209
+29483
+30650
+4634
+36794
+36795
+1090
+36796
+827
+12
+36797
+27669
+11321
+36798
+36799
+3912
+36800
+36674
+5188
+36801
+28559
+19653
+30877
+36802
+5316
+2064
+36803
+43
+16437
+25316
+25237
+24864
+25140
+751
+36804
+36805
+36806
+15
+554
+20
+1021
+15718
+9
+19
+36807
+36808
+33890
+36809
+248
+23103
+12819
+4055
+14369
+36810
+32642
+248
+3491
+1425
+1300
+7364
+16820
+36811
+31225
+22963
+16443
+43
+4055
+36812
+8208
+7658
+36813
+43
+1531
+34402
+36814
+36815
+13535
+36816
+36817
+36818
+36819
+2356
+36820
+57
+36821
+3553
+19
+43
+36822
+1090
+646
+1502
+43
+36823
+36824
+35389
+491
+27669
+1907
+303
+13904
+36825
+9
+34233
+2581
+1090
+4155
+36826
+36827
+11754
+27669
+36828
+28272
+36829
+514
+3546
+713
+1195
+3353
+36830
+1882
+5773
+32880
+19
+3543
+36831
+36832
+4055
+36833
+15331
+19618
+30051
+36834
+30051
+57
+34264
+3546
+32
+30051
+36835
+36836
+1558
+23103
+1224
+36837
+36735
+24303
+36838
+36839
+31293
+27079
+36840
+283
+33890
+36841
+4055
+36842
+34402
+1090
+36843
+1011
+337
+9
+736
+12987
+24303
+36844
+30224
+23495
+1257
+337
+36845
+7053
+590
+36846
+36847
+19
+36848
+18439
+6051
+1310
+36849
+36850
+36851
+10262
+31160
+36852
+4502
+31691
+2561
+2694
+36424
+27669
+43
+36853
+736
+36854
+36855
+36856
+36857
+28317
+5650
+77
+30224
+33
+57
+36858
+36639
+30747
+27117
+36859
+29200
+1013
+19
+2957
+36860
+1051
+31576
+590
+19
+36861
+3
+25584
+36862
+5582
+1539
+24998
+1208
+26142
+861
+36863
+31168
+36864
+590
+2166
+1107
+13375
+36865
+15
+12194
+57
+27669
+27095
+2694
+533
+736
+5780
+115
+30983
+1091
+36866
+36867
+15718
+736
+4055
+354
+36868
+36869
+36870
+21947
+33280
+36871
+60
+29791
+6840
+36872
+36873
+36874
+53
+31109
+21947
+36875
+36876
+19
+25140
+736
+36877
+5045
+36878
+36879
+398
+1870
+66
+9976
+16466
+36328
+36880
+36881
+16066
+14340
+14369
+36882
+36883
+14947
+1090
+845
+11762
+6627
+26361
+14909
+33650
+12020
+28317
+554
+36884
+7855
+36885
+1349
+32
+36886
+36887
+36888
+25
+4055
+492
+248
+25237
+43
+495
+27669
+36889
+36890
+415
+43
+1090
+19
+36891
+29483
+28441
+665
+9497
+36892
+24725
+4787
+358
+25316
+20514
+43
+36893
+19
+36894
+14330
+1100
+36895
+1018
+27669
+43
+29200
+869
+354
+36896
+36897
+36898
+21947
+19
+36899
+36900
+439
+3546
+19
+36901
+14731
+536
+36902
+36903
+1920
+3842
+31098
+1349
+36904
+36905
+303
+3546
+20329
+15413
+2728
+8146
+36906
+887
+36907
+27117
+210
+17151
+36908
+12987
+15
+3546
+1090
+36909
+36910
+36911
+464
+36912
+36913
+36914
+590
+31225
+1090
+36915
+1100
+646
+3546
+705
+31098
+36916
+14001
+36917
+36918
+21089
+2782
+43
+16375
+36919
+36920
+1090
+36921
+248
+2865
+3484
+6306
+12096
+66
+29628
+1090
+590
+30051
+179
+36922
+3546
+36923
+46
+1011
+1508
+2561
+345
+25395
+16
+4
+958
+36924
+5409
+36925
+22556
+36926
+6785
+590
+2577
+104
+17151
+25281
+36927
+3994
+30051
+2769
+36928
+4236
+2913
+36929
+210
+4806
+648
+1524
+484
+15647
+36930
+495
+272
+20339
+21027
+1967
+36931
+36932
+19111
+32
+13829
+958
+31293
+36933
+29931
+19549
+36934
+34402
+24303
+1855
+10280
+5041
+4055
+720
+20853
+586
+36935
+19
+665
+286
+19618
+16466
+66
+13566
+43
+34602
+36936
+35888
+4028
+36937
+36938
+2
+44
+36939
+2593
+18517
+29483
+2324
+20443
+33650
+11715
+36940
+36941
+9460
+32496
+7666
+36942
+17151
+3353
+36943
+36944
+36945
+6595
+36946
+4055
+2349
+57
+4388
+25584
+16437
+17687
+36947
+4702
+98
+1154
+29204
+36735
+28317
+36948
+36949
+21947
+1245
+18982
+15498
+16
+36950
+36951
+36952
+36953
+514
+274
+7923
+36954
+9
+29483
+23302
+13517
+1716
+57
+9
+9
+36955
+8465
+36956
+36957
+179
+36958
+2274
+36959
+36960
+7053
+36735
+36961
+14001
+14
+43
+36962
+36963
+9
+5287
+36964
+43
+14369
+5849
+730
+36965
+36966
+16024
+36967
+11770
+303
+29381
+528
+19
+36968
+36969
+36970
+16437
+33650
+1082
+89
+14369
+286
+5409
+36971
+349
+1090
+8171
+36972
+36973
+30877
+29628
+36974
+3686
+36975
+2709
+19
+36976
+12005
+2728
+36977
+19
+14369
+36978
+9
+36979
+36980
+57
+2427
+1295
+36981
+21045
+3764
+36982
+19
+2260
+509
+24864
+1090
+36983
+43
+18695
+21781
+36424
+17092
+36984
+21689
+28549
+36985
+19
+30051
+29628
+23322
+26040
+48
+36986
+13113
+720
+35624
+32984
+6439
+36987
+27708
+36988
+36989
+1817
+36990
+36991
+1018
+345
+1090
+36992
+36993
+2197
+31293
+36994
+24765
+6067
+828
+14019
+36995
+16826
+17529
+36996
+19
+248
+29109
+14102
+24864
+36997
+33494
+31293
+18896
+15
+36998
+2314
+36999
+37000
+1765
+31382
+37001
+18345
+43
+590
+36424
+24045
+27669
+761
+33627
+2309
+37002
+37003
+31293
+3599
+43
+16292
+37004
+558
+5582
+491
+19
+4461
+1615
+37005
+37006
+37007
+736
+1870
+33445
+16239
+33615
+37008
+1224
+32
+21947
+15194
+37009
+5188
+2187
+337
+46
+37010
+37011
+12020
+26895
+26599
+14330
+37012
+7987
+9440
+19287
+37013
+22684
+37014
+30230
+29204
+815
+3858
+25829
+2865
+31098
+37015
+37016
+37017
+37018
+23352
+37019
+3546
+37020
+5085
+27069
+683
+337
+416
+37021
+37022
+19618
+28000
+1559
+27875
+37023
+2059
+37024
+34583
+337
+286
+342
+37025
+2325
+2410
+720
+19091
+37026
+31293
+37027
+7053
+37028
+7123
+37029
+671
+4055
+20700
+5780
+238
+37030
+37031
+37032
+11424
+354
+37033
+37034
+1716
+1090
+37035
+89
+1481
+21947
+21947
+34113
+491
+37036
+37037
+37038
+13150
+5313
+37039
+30877
+37040
+958
+2694
+2488
+14
+613
+33650
+29381
+37041
+37042
+284
+37043
+24864
+18448
+278
+30794
+2581
+37044
+33758
+37045
+15
+533
+29204
+3546
+4581
+37046
+37047
+342
+98
+37048
+37049
+1688
+538
+10174
+37050
+665
+36424
+25316
+13566
+37051
+37052
+4055
+37053
+37054
+8967
+2281
+37055
+37056
+28317
+37057
+34342
+20113
+37058
+1090
+37059
+37060
+536
+37061
+37062
+201
+37063
+3543
+936
+37064
+349
+37065
+1559
+3999
+30877
+29204
+37066
+185
+365
+37067
+37068
+37069
+29540
+37070
+37071
+34627
+31293
+17480
+17121
+37072
+2804
+1090
+37073
+37074
+14553
+57
+37075
+24864
+1765
+37076
+9
+37077
+349
+3597
+10356
+6364
+37078
+7619
+823
+625
+24144
+5827
+37079
+12684
+590
+13463
+19
+37080
+1824
+26361
+541
+32
+37081
+37082
+13145
+9
+43
+37083
+37084
+19618
+37085
+17880
+37086
+9210
+33494
+30224
+37087
+1090
+37088
+495
+1562
+37089
+31293
+21947
+30877
+590
+37090
+15718
+13205
+37091
+3406
+37092
+43
+1575
+2537
+7442
+37093
+37094
+24725
+37095
+15718
+22922
+8668
+17911
+36483
+89
+14330
+37096
+26815
+4808
+590
+736
+590
+37097
+37098
+89
+2802
+3875
+33185
+19
+15718
+1169
+28013
+34402
+19
+736
+37099
+5080
+2043
+29561
+16560
+36735
+37100
+1169
+24038
+37101
+37102
+590
+286
+31293
+26040
+37103
+37104
+1097
+37105
+30458
+19
+31293
+27117
+590
+478
+5780
+16879
+25237
+19618
+37106
+590
+37107
+37108
+22114
+12498
+597
+188
+37109
+43
+5371
+37110
+1047
+37111
+77
+1090
+37112
+23290
+1870
+345
+495
+37113
+2006
+1224
+13150
+37114
+4153
+37115
+25237
+377
+37116
+29628
+37117
+237
+14479
+37118
+30224
+1157
+1295
+13961
+14
+30051
+3409
+19
+37119
+37120
+37121
+37122
+892
+6104
+57
+19
+36819
+646
+3546
+1710
+22587
+4055
+10729
+37123
+37124
+9
+37125
+37126
+37127
+10
+464
+28317
+46
+1295
+694
+35427
+37128
+33650
+37129
+37130
+2770
+37131
+37132
+37133
+4766
+20710
+3994
+1090
+1862
+37134
+43
+25237
+842
+4055
+8668
+590
+37135
+37136
+23103
+4699
+19
+37137
+34
+3508
+17698
+36156
+6171
+37138
+15
+265
+37139
+3330
+37140
+28317
+31293
+15718
+11087
+33120
+22337
+19
+19
+37141
+30877
+176
+37142
+19
+26323
+36391
+1410
+37143
+19
+4808
+25943
+37144
+37088
+4245
+37145
+33113
+19
+37146
+5780
+37147
+37148
+43
+37149
+37150
+36424
+2
+33627
+14369
+29483
+142
+1082
+27069
+8668
+20572
+60
+37151
+345
+8338
+3546
+15572
+37152
+14330
+37153
+37154
+11312
+37155
+11822
+37156
+892
+3
+17151
+37025
+17151
+37157
+37158
+19
+3743
+29381
+7553
+37159
+37160
+2841
+37161
+14369
+16798
+37162
+22587
+29204
+37163
+37164
+286
+37165
+915
+28549
+27173
+23487
+1913
+3828
+37166
+37167
+20
+37168
+18951
+1503
+37169
+37170
+5188
+3790
+14553
+349
+2368
+37171
+33211
+8668
+31346
+416
+3484
+12751
+37172
+31293
+29483
+3660
+24864
+12005
+345
+28170
+37173
+18695
+12155
+7276
+37174
+37175
+28339
+37176
+30309
+37177
+37178
+37179
+286
+37180
+37181
+736
+13474
+25021
+37182
+22752
+9649
+4116
+35076
+1716
+30877
+2577
+19
+19
+37183
+1269
+15
+5080
+345
+37184
+37185
+4056
+27719
+16437
+185
+699
+495
+37186
+4463
+60
+37187
+828
+18780
+9
+37188
+37189
+1090
+37190
+20700
+8668
+2310
+37191
+37192
+9
+590
+30650
+2314
+43
+14369
+37193
+22788
+188
+14340
+30458
+736
+11620
+9
+37194
+590
+4055
+26496
+37195
+43
+3546
+104
+37196
+2175
+20
+14001
+1090
+15718
+2243
+25943
+37197
+720
+37198
+9649
+3559
+37199
+37200
+21947
+4302
+5780
+22420
+33916
+37201
+25260
+34402
+8668
+17911
+2919
+13566
+37202
+9560
+15718
+37203
+11754
+33120
+28666
+14369
+37204
+37205
+7015
+28549
+37206
+37207
+2694
+37208
+915
+37209
+37210
+37211
+37212
+37213
+25316
+3406
+37214
+43
+595
+36761
+37215
+26550
+24303
+9738
+37216
+23219
+37217
+37218
+14340
+24864
+37219
+29465
+24864
+34999
+30224
+37220
+43
+20700
+77
+37221
+27669
+37222
+21947
+37223
+43
+27669
+15172
+25316
+1384
+37224
+36527
+386
+37225
+554
+7987
+27669
+9
+37226
+25871
+1251
+37227
+4230
+2308
+399
+37228
+3950
+15446
+37229
+37230
+43
+2356
+37231
+14330
+19825
+18930
+1961
+18695
+37232
+3543
+37233
+16375
+37234
+910
+37235
+22963
+37236
+13493
+21669
+9
+9433
+19
+8100
+37237
+1481
+24864
+35068
+2577
+27669
+4747
+33494
+37238
+19
+9
+36424
+20329
+37239
+37240
+43
+11841
+9
+8668
+25237
+25316
+37241
+37242
+37243
+590
+30877
+8724
+37244
+37245
+415
+37246
+37247
+2410
+7341
+25683
+37248
+34703
+4278
+4461
+37249
+345
+4
+764
+33496
+37250
+37251
+22273
+9560
+33524
+37252
+34402
+37253
+12825
+24678
+22473
+15
+31098
+37254
+9
+29483
+18045
+37255
+27387
+3546
+37256
+43
+915
+3948
+7014
+21149
+11321
+14216
+6877
+37257
+37258
+19655
+15718
+37259
+37260
+57
+1115
+37261
+519
+37262
+37263
+6771
+9560
+37264
+37265
+37266
+28044
+6441
+823
+12590
+5188
+1090
+3978
+13361
+37267
+37268
+33650
+37269
+37270
+37271
+6950
+37272
+299
+16280
+19
+37273
+31098
+8967
+37274
+37275
+24303
+29483
+22922
+33650
+2593
+30224
+37276
+16798
+16102
+19582
+37277
+37278
+345
+37279
+37280
+33457
+37281
+37282
+37283
+37284
+43
+6364
+809
+37285
+37286
+4247
+37287
+37288
+1524
+37289
+16118
+2287
+37290
+29204
+37291
+37292
+3
+27669
+30224
+19
+2197
+27798
+3553
+19
+37293
+37294
+37295
+25902
+2406
+1082
+46
+31293
+36282
+37296
+554
+19655
+22922
+15
+37297
+37298
+43
+37299
+590
+6776
+37300
+349
+37301
+164
+484
+1566
+4463
+21947
+14
+415
+24303
+24919
+3976
+15705
+37302
+33113
+19852
+179
+12845
+13566
+37257
+35883
+2325
+19
+26755
+37303
+26006
+24725
+17911
+14330
+37304
+1870
+37305
+28317
+37306
+22
+37307
+19939
+57
+19
+66
+14369
+37308
+36486
+21947
+26496
+29483
+37309
+14330
+2514
+12987
+37310
+27669
+37311
+34402
+8545
+10244
+37312
+3005
+31293
+590
+35580
+37313
+13760
+1812
+10634
+37314
+8249
+19974
+37315
+37316
+77
+14001
+37317
+495
+176
+37318
+28961
+37319
+37320
+185
+7922
+4055
+3484
+21947
+14477
+14
+15
+36019
+35337
+37321
+590
+29687
+25316
+30073
+6095
+19618
+586
+349
+37322
+28494
+32
+37323
+720
+5088
+15
+37324
+7944
+5169
+37325
+37326
+37327
+37328
+27669
+3
+18045
+23841
+8301
+25316
+19
+37329
+30224
+37330
+37331
+1300
+89
+3553
+3601
+23303
+37332
+1743
+37333
+34779
+12987
+1051
+22963
+37334
+9497
+37335
+270
+671
+19
+740
+1310
+1090
+2260
+37336
+14369
+3829
+37337
+590
+33524
+60
+37338
+37339
+590
+30224
+197
+89
+17151
+43
+15718
+37340
+1961
+9273
+26804
+990
+23406
+46
+2318
+37341
+4530
+37342
+27669
+165
+27669
+37343
+35352
+3598
+5601
+37344
+4461
+9
+3372
+19618
+36157
+357
+37345
+43
+37346
+15718
+37347
+17151
+791
+6439
+8996
+2406
+677
+37348
+37349
+338
+1090
+1716
+37350
+37351
+1090
+37352
+37353
+34944
+37354
+32574
+7835
+37355
+18394
+19
+37356
+1937
+24457
+37357
+19852
+201
+9
+415
+24144
+21947
+9
+37358
+15486
+694
+29628
+1829
+17997
+37359
+98
+37360
+4055
+16422
+25584
+12934
+1428
+354
+19
+178
+28219
+6869
+736
+37361
+37362
+37363
+22963
+37364
+37365
+1109
+37366
+1749
+179
+5387
+28317
+33627
+1090
+37367
+872
+25140
+29
+590
+720
+37368
+663
+19
+37369
+4055
+37370
+37371
+5837
+37372
+179
+18100
+37373
+12005
+2342
+18369
+12
+15928
+3764
+5301
+37374
+37375
+33627
+37376
+37377
+317
+37378
+37379
+37380
+37381
+590
+37382
+37383
+37384
+8297
+2117
+24154
+24303
+37385
+37386
+37387
+196
+32944
+37388
+21947
+19
+5117
+37389
+29381
+677
+30877
+37390
+37391
+12152
+19618
+23103
+27118
+17911
+37392
+1790
+37393
+14369
+11213
+11717
+3546
+176
+1090
+33627
+33758
+16437
+37394
+22014
+37395
+4055
+13905
+37396
+37397
+23103
+736
+8668
+349
+1154
+37398
+436
+21027
+37399
+37400
+36333
+28441
+478
+29381
+4055
+5052
+1090
+2347
+13807
+27669
+37401
+37402
+43
+37403
+37404
+1992
+24324
+37405
+7053
+16437
+6122
+29483
+24864
+37406
+13311
+1090
+37407
+37408
+222
+23103
+9
+536
+37409
+14797
+303
+31293
+11188
+22827
+2015
+37410
+15203
+21686
+4364
+1870
+37411
+1120
+14477
+15718
+37412
+590
+37413
+37414
+1924
+19
+6171
+590
+6935
+5409
+37415
+37416
+26580
+37417
+36424
+24
+37418
+32
+19
+1768
+15718
+590
+17374
+34602
+3601
+1637
+6153
+37419
+37420
+37421
+24303
+29204
+25943
+1508
+21689
+37422
+37423
+764
+28518
+15
+37424
+33494
+15
+37425
+35409
+8668
+37426
+1356
+23103
+554
+14369
+37427
+37428
+11754
+20142
+9
+33650
+24864
+30580
+1090
+1900
+37429
+15718
+37430
+1912
+33758
+37431
+21947
+37432
+37433
+37434
+34
+22986
+3546
+31098
+37435
+1774
+411
+36727
+37436
+1559
+140
+14634
+32646
+17927
+37437
+21947
+5188
+37438
+37439
+37440
+37441
+37442
+15718
+21127
+164
+6004
+36251
+25
+27791
+21689
+15654
+37443
+15491
+37444
+33650
+541
+37223
+37445
+10
+37446
+37446
+1021
+37447
+33890
+89
+37448
+37449
+16466
+1749
+37450
+2577
+29032
+37451
+170
+13855
+36735
+2577
+37452
+24303
+25237
+19
+37453
+33627
+20677
+2009
+822
+2993
+37454
+590
+272
+29204
+250
+15718
+6054
+37455
+20337
+37456
+464
+9567
+29483
+23150
+21947
+37457
+24195
+665
+24972
+2043
+37458
+32275
+9
+28317
+554
+37459
+13150
+37460
+27069
+27669
+37461
+2
+98
+73
+37462
+1012
+5904
+37463
+37464
+4278
+24621
+13566
+43
+15
+37465
+37466
+15718
+30877
+37467
+5601
+37468
+33494
+15018
+30724
+29483
+16732
+37469
+37470
+23218
+1481
+37471
+25140
+12013
+37472
+1107
+29483
+178
+5085
+345
+37473
+1364
+37474
+11749
+19
+37475
+37476
+3204
+27669
+37477
+745
+566
+1230
+16375
+31336
+20700
+37478
+2314
+671
+16866
+15
+286
+15718
+3806
+37479
+37480
+20745
+37481
+37482
+5204
+28069
+21947
+42
+37483
+11341
+37484
+37485
+720
+29483
+37486
+345
+5770
+37487
+37488
+30877
+14
+1508
+2525
+966
+138
+12893
+1559
+37489
+25237
+24
+37490
+209
+1157
+1765
+25683
+32
+34
+5188
+8210
+5027
+1716
+43
+19285
+4124
+6571
+37491
+29204
+971
+27701
+5188
+5119
+37492
+5502
+28441
+32
+1203
+37493
+30877
+37494
+37495
+37496
+37497
+685
+7117
+16440
+29026
+37498
+15643
+30877
+10
+16375
+16327
+37499
+3353
+34402
+37500
+37501
+37502
+677
+27357
+21947
+18597
+31698
+3546
+36127
+37503
+37504
+37505
+30986
+26431
+30844
+37506
+37507
+9
+665
+37508
+248
+533
+26040
+37509
+37510
+21947
+43
+21689
+3546
+33278
+37511
+37512
+37513
+43
+37514
+37515
+5161
+36177
+18283
+37174
+25
+37516
+5912
+37517
+21689
+35265
+37518
+37519
+7835
+57
+8167
+21947
+37520
+21947
+337
+4364
+15
+24864
+37521
+16437
+14001
+11832
+21947
+3421
+14947
+303
+37522
+29483
+21947
+37523
+17911
+3137
+21776
+303
+9
+37524
+5223
+37525
+20315
+37526
+37527
+19618
+37528
+37529
+123
+827
+37530
+19318
+37531
+27669
+30877
+37532
+1226
+2058
+37533
+509
+37534
+25970
+8356
+10965
+21947
+19
+14477
+35296
+140
+9
+14477
+37535
+8685
+284
+37536
+9
+1157
+37537
+37538
+248
+37539
+37540
+28661
+37541
+1090
+10028
+25237
+37542
+37543
+15718
+37544
+6617
+1559
+34630
+13566
+37545
+36424
+170
+25316
+37546
+24725
+377
+11907
+15718
+26804
+15
+286
+36874
+37547
+37548
+9
+17320
+849
+24303
+37549
+1542
+30051
+29855
+9
+3391
+30877
+20
+33494
+37550
+1765
+1090
+15718
+37551
+30051
+29381
+10828
+34641
+1198
+37552
+12522
+37553
+37554
+17920
+33494
+7379
+4055
+28490
+16
+31575
+5218
+377
+30051
+1364
+590
+4055
+1090
+37555
+37556
+2476
+377
+37557
+37558
+37559
+37560
+37561
+14369
+24144
+37562
+11762
+21947
+13508
+36424
+37563
+9
+37564
+36735
+597
+20
+1578
+283
+36736
+155
+1090
+37565
+37566
+32
+37567
+137
+14982
+43
+37568
+9212
+10621
+37569
+4602
+5153
+1520
+8668
+1203
+6183
+37570
+37571
+37572
+15
+37573
+37574
+27415
+11966
+337
+27669
+37575
+27669
+303
+37576
+33650
+6962
+337
+25129
+15998
+2040
+27092
+37577
+303
+37578
+37579
+11537
+213
+3484
+37580
+1090
+18386
+9
+30029
+20700
+37581
+8297
+37582
+37583
+2260
+37584
+284
+37585
+37586
+22236
+7053
+37587
+20916
+13919
+37588
+36218
+1082
+1384
+7053
+176
+33494
+37589
+3546
+3546
+37590
+3944
+37591
+8392
+37592
+37593
+590
+989
+19
+37594
+7053
+338
+38
+33758
+19
+37595
+30650
+17945
+16235
+37596
+37597
+37598
+25683
+29483
+14864
+1533
+15
+37599
+37600
+16437
+37601
+21776
+37602
+29381
+707
+114
+22963
+14477
+2347
+105
+43
+2316
+377
+31293
+483
+4598
+213
+1710
+37603
+37604
+37605
+2769
+37606
+686
+28549
+12474
+1524
+37607
+37608
+14330
+19576
+25316
+16443
+8351
+37609
+37610
+646
+554
+32
+37611
+32449
+14
+32
+18139
+2694
+37612
+37556
+337
+24896
+37613
+2537
+34402
+27388
+197
+13801
+33690
+37614
+554
+32642
+37615
+14
+270
+15702
+18369
+37616
+37617
+18156
+37618
+9402
+1090
+19
+37619
+37620
+37621
+9262
+21698
+36492
+37622
+30224
+25316
+36735
+37623
+2372
+15104
+37624
+30877
+14279
+37625
+5318
+37626
+36735
+37627
+13943
+179
+446
+21947
+3844
+43
+37628
+5188
+5119
+13377
+222
+37629
+123
+15718
+37630
+15718
+1090
+11762
+769
+17151
+590
+303
+590
+37631
+337
+4450
+37632
+14603
+43
+37633
+37634
+32426
+37635
+1710
+536
+18695
+9
+1090
+936
+37636
+590
+2040
+31362
+9
+37637
+2577
+43
+25237
+33445
+31293
+2804
+34
+37638
+176
+21947
+14
+37639
+248
+1605
+28085
+12987
+590
+19
+37640
+23103
+37641
+37642
+20572
+337
+31293
+37643
+37644
+37645
+13714
+1139
+1090
+16437
+37646
+1090
+30877
+2550
+30877
+14369
+22075
+1745
+10853
+37647
+4026
+21003
+1824
+1100
+37648
+31293
+1749
+37649
+12987
+645
+1208
+31098
+18912
+8351
+14369
+37650
+36452
+33120
+25140
+37651
+430
+34957
+37652
+37653
+30224
+665
+568
+354
+140
+1228
+5188
+213
+37654
+14477
+176
+37655
+18079
+33650
+37656
+37657
+37658
+37659
+37660
+179
+669
+37661
+1090
+15498
+792
+33650
+37662
+19655
+18919
+560
+37663
+37664
+1680
+37665
+37666
+4055
+1384
+3546
+37667
+2746
+37668
+536
+37669
+37670
+4055
+9
+14
+17897
+37671
+37672
+37673
+3559
+37674
+11762
+37675
+37676
+12402
+37677
+15683
+37678
+14001
+37556
+37679
+28197
+31293
+37680
+2043
+43
+37681
+1710
+37682
+37683
+37684
+37685
+554
+197
+37686
+37687
+27669
+33120
+21947
+25307
+284
+323
+30877
+15683
+25237
+9
+686
+12546
+37688
+12013
+37689
+303
+37690
+1529
+137
+849
+37691
+37692
+37693
+18109
+115
+9
+37694
+6660
+37695
+19
+37696
+2260
+37697
+484
+25237
+37698
+21947
+37699
+37700
+37701
+37702
+17151
+37703
+23418
+31168
+19
+3976
+37704
+22505
+37705
+33758
+828
+37706
+37707
+213
+15
+22717
+37708
+213
+213
+2325
+37709
+590
+37710
+2832
+37711
+25021
+4285
+37712
+37713
+2308
+37714
+28494
+37715
+27669
+35805
+1090
+29720
+1529
+15718
+3546
+337
+13296
+1295
+19
+11966
+37716
+37717
+1131
+745
+37718
+372
+337
+37719
+60
+3546
+37720
+237
+37556
+284
+178
+1090
+37721
+12302
+12185
+3480
+25316
+37722
+22963
+37723
+25162
+25316
+495
+1574
+31293
+14660
+37724
+337
+37725
+29381
+284
+2314
+37726
+248
+37727
+2581
+19
+37728
+37729
+616
+28361
+11321
+37730
+3546
+37731
+9
+37732
+37733
+28317
+58
+37734
+2618
+15
+337
+1563
+9955
+5409
+37735
+15718
+37736
+37737
+37738
+37739
+37740
+399
+3
+37741
+37742
+590
+9460
+37650
+112
+20083
+37743
+9082
+4055
+37744
+37745
+22
+37746
+37747
+6950
+37748
+16437
+3546
+14363
+37749
+1011
+9
+15096
+740
+213
+37750
+9465
+37751
+19795
+27599
+140
+436
+29032
+25140
+446
+37752
+284
+37753
+37754
+37755
+8367
+1870
+5004
+37756
+9
+284
+37757
+284
+872
+37758
+24303
+1508
+37759
+21947
+37760
+37761
+303
+23867
+37762
+303
+14871
+37763
+35552
+37764
+8668
+4116
+17911
+2865
+37765
+7357
+404
+37766
+188
+33508
+4055
+2561
+57
+349
+25943
+21947
+37767
+25683
+2
+37768
+37769
+34402
+1181
+37770
+37771
+590
+10628
+37772
+24972
+36853
+822
+35695
+34433
+33494
+1247
+20770
+7363
+16437
+25237
+14107
+37773
+37774
+11840
+2325
+37775
+1513
+15718
+2762
+303
+37776
+8668
+15481
+2465
+37777
+14385
+16437
+10933
+37778
+37779
+19655
+37780
+9
+25237
+11211
+29
+37781
+10642
+37782
+28389
+37783
+30224
+31293
+1230
+37556
+21535
+286
+37784
+14770
+17911
+99
+37785
+37786
+1109
+37787
+815
+18695
+24725
+37788
+37789
+5085
+14152
+15718
+37790
+15
+1442
+30877
+37791
+18503
+33192
+15320
+37792
+29129
+34842
+37793
+37794
+15718
+19057
+464
+4032
+60
+37795
+37796
+37797
+30209
+31036
+37798
+37556
+21947
+3755
+26417
+2859
+33650
+37799
+34402
+5619
+2356
+286
+37800
+34902
+37801
+24864
+37802
+20
+1236
+13905
+354
+21689
+7658
+9
+915
+31168
+797
+6950
+1357
+5780
+6110
+18822
+27904
+1503
+25683
+37803
+4055
+37804
+37805
+37806
+30877
+37807
+11762
+25140
+11
+37808
+27283
+1961
+32
+15
+19837
+809
+57
+37809
+887
+14369
+37810
+1090
+37811
+37812
+7053
+37813
+43
+9649
+43
+25965
+37814
+29483
+1710
+37815
+8724
+7855
+6950
+19
+25683
+5110
+35167
+10
+32410
+286
+26585
+15718
+37816
+24045
+32960
+37817
+14330
+155
+21947
+17136
+1357
+37818
+37819
+683
+29621
+37820
+37556
+3546
+1226
+28389
+21947
+37821
+19618
+43
+33494
+16494
+11420
+9
+2356
+37822
+37823
+37824
+1208
+8367
+37825
+43
+37826
+1559
+24864
+30458
+3598
+590
+29483
+16158
+17698
+31168
+284
+590
+17911
+5188
+37827
+33627
+29483
+29381
+30051
+37828
+43
+31293
+37829
+37830
+491
+7330
+37831
+6883
+989
+66
+37832
+2197
+9600
+1812
+37833
+16773
+37834
+57
+7977
+34081
+33316
+586
+14193
+4907
+597
+27178
+37835
+464
+29025
+43
+37836
+37837
+17144
+37838
+440
+1049
+645
+37839
+34402
+1562
+1732
+286
+36884
+37840
+1991
+337
+37841
+37842
+15
+32
+43
+3353
+27669
+37843
+19057
+37844
+37845
+1090
+16443
+14369
+665
+27669
+26186
+21045
+24864
+21947
+14477
+33479
+37846
+31873
+20700
+1090
+37847
+36
+37848
+284
+590
+2289
+2733
+37849
+97
+5188
+37850
+16698
+1867
+37851
+36219
+37852
+1920
+37853
+43
+77
+29977
+377
+3559
+37854
+37855
+2117
+37856
+970
+2152
+5188
+21947
+37857
+17911
+736
+12431
+4055
+1503
+21947
+37858
+720
+37859
+24725
+8716
+5780
+37860
+14007
+1109
+26626
+31098
+197
+25
+9
+43
+16826
+14
+5085
+37861
+19714
+37862
+16413
+37863
+23226
+15
+12955
+14102
+21371
+16480
+27522
+37864
+37865
+21947
+31273
+32382
+323
+36
+28298
+19218
+1090
+21947
+14795
+37866
+20
+1212
+37867
+37868
+37869
+37870
+286
+14369
+4055
+27619
+10791
+29483
+37871
+43
+17151
+57
+37872
+37873
+185
+28199
+27669
+37874
+14369
+44
+37875
+34317
+6028
+37876
+9433
+21387
+37877
+37878
+37879
+37880
+30051
+11762
+20
+13566
+24725
+996
+137
+5780
+369
+24303
+43
+32
+4055
+8316
+1536
+99
+185
+27669
+590
+37881
+37882
+4598
+37883
+14477
+37884
+12573
+4468
+683
+5188
+8301
+2593
+37885
+30877
+1224
+30224
+37886
+36735
+37887
+5188
+3598
+37888
+33061
+33113
+37889
+37890
+37891
+37892
+5085
+37893
+9543
+2919
+37894
+37895
+2591
+37896
+882
+37897
+196
+13150
+4055
+970
+30551
+892
+1112
+34264
+37898
+37899
+37900
+32
+28251
+32
+2159
+36907
+4518
+34
+37901
+27669
+37556
+19
+5007
+37902
+27430
+736
+3
+19
+37903
+4463
+37904
+34402
+5188
+19
+37905
+398
+533
+27669
+37906
+7069
+24774
+8919
+30877
+11483
+37907
+37908
+20700
+7053
+4028
+12987
+5188
+3008
+15592
+317
+6776
+33650
+10598
+28441
+37909
+2121
+286
+37910
+32
+2694
+16437
+2476
+37911
+37912
+15718
+32751
+1082
+13721
+37913
+37556
+37914
+25
+412
+37915
+1090
+3239
+37916
+1503
+501
+37917
+1011
+357
+28317
+104
+11471
+37918
+19655
+22315
+37919
+1234
+37920
+2356
+29483
+37921
+597
+671
+415
+19
+58
+6261
+14369
+3395
+20
+24864
+9
+342
+1012
+2139
+37922
+2733
+1425
+31293
+17
+37923
+7817
+37924
+37925
+19
+37926
+286
+37927
+37928
+1716
+1189
+26361
+37929
+37930
+19974
+3
+21045
+37931
+37932
+37933
+7597
+33627
+13150
+37934
+352
+37935
+822
+37936
+16375
+9
+915
+37937
+37025
+19655
+4293
+31293
+37938
+528
+37556
+25943
+19489
+4730
+554
+29381
+37939
+37940
+21947
+14369
+7226
+33650
+1442
+9
+5197
+37941
+37942
+35214
+770
+1091
+2
+377
+19742
+89
+57
+1082
+37943
+31867
+377
+37944
+14527
+37945
+42
+21947
+20
+14
+9
+19
+6883
+27669
+37946
+19294
+37947
+790
+9118
+35823
+5403
+37948
+37949
+10111
+6251
+29381
+37950
+37951
+37952
+37953
+155
+9
+28490
+21947
+37954
+37955
+12647
+37956
+31225
+5627
+13867
+37957
+2117
+6881
+33758
+37958
+209
+20141
+15354
+29381
+57
+37959
+2308
+37960
+37961
+37962
+27669
+1021
+33650
+37556
+37963
+37964
+4518
+25237
+57
+37965
+29381
+17151
+14814
+17151
+13566
+19381
+19
+10706
+5299
+1578
+14369
+17911
+37966
+16422
+43
+2919
+2449
+31293
+37967
+37968
+37969
+19486
+33950
+14666
+37970
+37971
+377
+7053
+15
+37972
+37973
+37974
+37975
+590
+12296
+16787
+37976
+15718
+514
+25140
+37977
+30917
+202
+37978
+37556
+37979
+25140
+4292
+19849
+590
+3546
+21947
+37980
+37981
+3994
+4461
+19
+37982
+15220
+15
+21947
+1021
+32
+184
+37983
+23544
+19713
+34601
+6248
+28277
+37556
+37984
+15718
+37985
+27669
+4502
+37986
+37987
+342
+28317
+37988
+32449
+14477
+4855
+9
+349
+37989
+11330
+37990
+1745
+20677
+25215
+37991
+613
+16437
+15718
+249
+262
+37992
+19
+37993
+37556
+37994
+1749
+14330
+2410
+37556
+37768
+24864
+15
+3546
+15511
+37995
+33650
+4364
+37996
+15
+1090
+15
+8668
+37997
+37998
+764
+1295
+683
+613
+15395
+16
+37999
+11585
+23150
+38000
+1021
+1100
+37830
+4461
+38001
+12
+38002
+209
+736
+9
+6363
+38003
+104
+19792
+38004
+29381
+1604
+38005
+10840
+1090
+6505
+38006
+1090
+590
+38007
+9183
+38008
+37556
+36218
+16437
+4414
+38009
+29152
+29483
+26060
+23103
+22552
+33061
+21689
+27669
+4055
+28206
+66
+17670
+38010
+34433
+21947
+4472
+14
+533
+38011
+6625
+34650
+38012
+11013
+3599
+38013
+1013
+34985
+2998
+38014
+38015
+3546
+736
+38016
+38017
+491
+38018
+14363
+671
+20573
+12711
+35224
+18045
+38019
+736
+38020
+31293
+34402
+21175
+1967
+38021
+38022
+38023
+17151
+2694
+15705
+38024
+590
+20189
+38025
+38026
+38027
+25140
+15718
+30051
+2
+19
+416
+38028
+6439
+8362
+554
+19
+37556
+6001
+15
+46
+38029
+15
+38030
+1021
+38031
+804
+9
+15
+379
+5908
+38032
+25316
+38033
+38034
+3544
+37530
+659
+201
+38035
+6658
+37556
+8322
+137
+21115
+98
+16375
+38036
+19
+28036
+1244
+4028
+9257
+20
+29381
+7829
+38037
+38038
+179
+38039
+1920
+24864
+19655
+9
+38040
+1870
+29192
+9784
+38041
+1090
+16437
+22922
+10828
+7431
+20113
+6439
+31234
+590
+38042
+38043
+696
+31168
+38044
+2419
+1090
+38045
+38046
+24864
+38047
+37556
+38048
+38049
+15
+38050
+14369
+43
+936
+38051
+1224
+24303
+38052
+21947
+9
+6122
+16466
+736
+37949
+12009
+2064
+1442
+1090
+38053
+29204
+3601
+38054
+9
+37556
+115
+35300
+38055
+38056
+28549
+19
+38057
+20339
+286
+23103
+38058
+21947
+38059
+14279
+1316
+12684
+19852
+38003
+6095
+27669
+37741
+665
+21776
+36888
+38060
+1082
+17911
+197
+27291
+38061
+38062
+354
+19
+43
+33494
+317
+38063
+12907
+2577
+1710
+6877
+5666
+317
+13396
+2865
+21729
+22564
+27669
+38064
+2489
+38065
+33120
+38066
+597
+30877
+286
+339
+3030
+12907
+6187
+38067
+25237
+38068
+38069
+30877
+1612
+38070
+9577
+20113
+2561
+3317
+677
+19
+22922
+38071
+28474
+2136
+6736
+36957
+323
+30166
+43
+20785
+38072
+20005
+38073
+2164
+38074
+43
+7964
+2338
+38075
+1870
+1107
+33650
+38076
+6617
+228
+38077
+43
+671
+31293
+38078
+7419
+12397
+3546
+38079
+38080
+31293
+38081
+38082
+16437
+8668
+19
+38083
+33650
+15718
+21031
+7912
+519
+38084
+3553
+345
+9
+613
+38085
+38086
+971
+2762
+19
+19
+1817
+38087
+38088
+398
+9939
+153
+43
+38089
+14693
+38090
+38091
+38092
+3481
+38093
+38094
+286
+3343
+176
+12696
+38095
+14369
+3546
+554
+9
+1082
+3959
+77
+10574
+38096
+38097
+38098
+17911
+12474
+2668
+38099
+286
+29200
+31098
+38100
+38101
+30794
+38102
+19655
+194
+478
+16323
+33693
+14369
+38103
+1633
+38104
+37185
+38105
+140
+845
+16818
+4055
+11432
+25584
+24045
+21689
+1566
+33352
+38003
+7053
+25
+576
+683
+317
+19618
+24144
+586
+560
+16466
+30742
+38106
+21947
+14420
+21947
+38107
+26040
+3790
+5990
+33758
+1116
+317
+25871
+20
+38108
+28148
+38109
+38110
+1531
+26048
+24864
+37556
+16447
+14363
+1927
+15
+9948
+32805
+38111
+7053
+936
+33496
+9
+38112
+25
+33188
+23150
+77
+20
+38113
+38114
+33627
+17596
+36735
+57
+38115
+38116
+38117
+27669
+38118
+3729
+4055
+38119
+38120
+38121
+3430
+10299
+27178
+8668
+38122
+242
+861
+38123
+33910
+31758
+2733
+38124
+4055
+9497
+15
+15718
+533
+15718
+38125
+590
+38126
+1481
+402
+43
+38127
+4055
+4056
+34306
+1542
+38128
+2
+815
+38129
+38130
+13150
+1524
+15
+38131
+16437
+3055
+11762
+1920
+9
+12120
+33693
+38132
+2308
+3644
+3015
+7406
+21045
+38133
+34
+770
+34999
+38134
+38135
+38136
+15718
+46
+270
+38137
+28206
+15718
+28317
+34433
+398
+43
+38138
+38139
+31381
+17267
+2924
+38140
+20
+38141
+18956
+14369
+20531
+38142
+15824
+38143
+38144
+38145
+38146
+38147
+38148
+21947
+14603
+3343
+38149
+28317
+21689
+1090
+15
+1090
+446
+399
+1765
+3034
+33650
+38150
+38151
+4242
+38152
+25
+19
+8668
+14369
+38085
+36853
+134
+887
+38153
+8367
+38154
+8279
+15
+4907
+36157
+25237
+21947
+25683
+14216
+38155
+43
+38156
+38157
+38158
+20
+38159
+14369
+10028
+38160
+2414
+25
+19
+1112
+33627
+3251
+155
+25914
+2308
+38161
+26496
+38162
+38163
+24864
+20750
+38164
+38165
+33494
+11822
+38166
+38167
+16772
+38168
+38169
+2049
+1011
+38170
+3546
+38171
+34480
+38172
+23102
+38173
+22
+38174
+430
+6263
+140
+38175
+369
+38176
+694
+19941
+46
+89
+25316
+35624
+30401
+38177
+338
+6736
+38178
+412
+38179
+38180
+38181
+29200
+14330
+2274
+5976
+1364
+13317
+4055
+38182
+887
+38183
+28961
+2577
+38184
+2121
+38185
+533
+38186
+38187
+21947
+15718
+201
+38188
+32426
+38189
+38190
+38191
+398
+38192
+38193
+38194
+14477
+140
+38195
+809
+38196
+201
+38197
+38198
+590
+8110
+12661
+9
+938
+13959
+1314
+29597
+19220
+9658
+15718
+2064
+38199
+23640
+15718
+5689
+37556
+30877
+2006
+38200
+9
+38201
+23103
+415
+38202
+38203
+30877
+38204
+34650
+21947
+3252
+33634
+349
+18895
+7815
+38205
+38206
+18120
+3546
+30224
+19
+31293
+33421
+14369
+8188
+9
+11948
+38207
+2356
+27669
+38208
+4634
+30877
+38209
+1364
+32640
+18798
+27719
+23103
+15718
+33278
+38210
+38211
+16184
+38212
+5313
+77
+1051
+38213
+15718
+38214
+210
+33120
+20280
+38215
+2706
+38216
+32
+30917
+23100
+2561
+38217
+16466
+971
+4714
+38218
+38219
+38220
+4055
+38221
+37556
+9
+5561
+22504
+38222
+36219
+38223
+5340
+27766
+38224
+38225
+647
+1743
+1371
+9129
+38226
+38227
+37556
+38228
+38229
+31293
+33650
+38230
+17911
+18695
+22
+415
+736
+3361
+33627
+27150
+38231
+38232
+2960
+1924
+38233
+201
+38234
+415
+9
+43
+38235
+31873
+14
+38236
+19
+31293
+1710
+817
+43
+25683
+30235
+21627
+209
+910
+279
+349
+554
+43
+33650
+57
+910
+38237
+379
+16981
+29204
+14679
+38238
+8110
+21947
+37128
+38239
+6287
+57
+38240
+38241
+6632
+3994
+2197
+9
+892
+38242
+23103
+21669
+9097
+20
+29056
+13814
+28044
+8115
+16826
+8787
+24303
+38243
+38244
+38245
+38246
+38247
+11754
+17151
+24303
+10935
+30080
+34402
+27178
+24864
+9
+38248
+14846
+15718
+38249
+22
+38250
+21419
+34402
+25
+9543
+1090
+1038
+32
+38251
+38
+28500
+31041
+2694
+38252
+3546
+70
+33
+38253
+590
+18045
+38254
+6232
+349
+7658
+415
+28728
+38255
+27260
+38256
+5317
+1245
+22352
+24303
+25237
+38257
+30877
+24725
+38258
+38259
+24864
+865
+1021
+1493
+38260
+38261
+38262
+9
+720
+38263
+4729
+1425
+15
+30857
+5438
+873
+38264
+16443
+815
+10470
+38265
+286
+38266
+37556
+34180
+38267
+1094
+1578
+38268
+38269
+38270
+38271
+57
+19
+38272
+30877
+1116
+38273
+14369
+11966
+1559
+38274
+15718
+389
+38275
+576
+21031
+38276
+21620
+38277
+1090
+38278
+15718
+7610
+20942
+21947
+931
+17972
+19618
+590
+38279
+16698
+1300
+17058
+31674
+17698
+43
+38280
+43
+32915
+15572
+4116
+38281
+10028
+22
+28317
+23853
+15809
+17151
+188
+10274
+36751
+19618
+38282
+8668
+1168
+17151
+20339
+590
+38283
+1615
+1018
+21947
+2231
+28441
+38284
+13476
+15
+931
+38285
+38286
+3601
+10168
+33650
+38287
+1244
+25140
+35318
+38288
+9497
+21031
+36424
+10
+46
+34066
+29483
+38289
+8549
+1559
+38290
+196
+30877
+30877
+647
+33627
+43
+33120
+16437
+38291
+3978
+1529
+286
+15592
+31873
+25316
+14330
+13361
+15
+38292
+3484
+38293
+19618
+24506
+38294
+27719
+5080
+21947
+25140
+31293
+155
+38295
+37556
+38296
+7553
+38297
+24864
+19573
+38298
+38299
+29204
+2061
+19
+9
+5837
+38300
+38301
+541
+1859
+38302
+38303
+272
+20853
+25943
+30877
+38304
+43
+9
+10936
+38305
+9
+38306
+38307
+37391
+1066
+36735
+38308
+46
+604
+38309
+2064
+24864
+38310
+10553
+9
+38311
+14330
+7260
+3655
+37556
+1090
+827
+15
+25140
+38312
+14852
+1056
+11537
+33120
+15
+38313
+140
+38314
+13623
+31293
+3105
+21947
+38315
+301
+38316
+24725
+1415
+19
+15541
+21947
+38317
+38318
+484
+345
+38319
+1090
+1817
+43
+38320
+720
+27084
+5217
+28480
+28923
+36192
+1090
+33650
+862
+37556
+2694
+38321
+89
+24303
+38322
+915
+1617
+14369
+38323
+38324
+8693
+33627
+38325
+38326
+590
+2859
+31293
+25624
+3976
+1090
+30552
+424
+12308
+38327
+104
+12302
+43
+19
+19
+46
+19
+38328
+1082
+21947
+1217
+38329
+5188
+2640
+27719
+19655
+29204
+17670
+38330
+38331
+38332
+910
+15718
+19918
+19
+3232
+38333
+33177
+21261
+14477
+38334
+38335
+331
+34402
+703
+38336
+38337
+38338
+13150
+14369
+9396
+13721
+14
+38339
+2174
+8297
+3408
+36456
+33730
+38340
+3620
+683
+38341
+738
+7053
+38342
+590
+35224
+34402
+14369
+1870
+38343
+38344
+1090
+38345
+34402
+38346
+1578
+38347
+278
+38348
+15597
+38349
+34
+4055
+14
+38350
+14292
+19
+38351
+38352
+1047
+37588
+12497
+38353
+38354
+342
+19655
+446
+43
+37556
+38
+38355
+179
+7053
+9445
+30877
+38356
+38357
+38358
+671
+38359
+2446
+38360
+14
+38361
+38362
+19231
+43
+34402
+3743
+349
+8249
+10774
+21947
+37556
+2117
+38363
+2325
+19
+38364
+17232
+9
+736
+38365
+38366
+43
+4055
+3508
+38367
+12
+16
+43
+104
+1415
+17911
+35633
+24864
+828
+38368
+38369
+35427
+1082
+9
+33650
+21947
+26854
+38370
+38371
+32410
+202
+38372
+13807
+38373
+1920
+554
+35042
+30794
+21031
+38374
+38375
+26361
+7113
+38376
+2
+38377
+38378
+21947
+5085
+29381
+32
+17340
+34641
+6075
+17144
+20941
+33693
+2260
+38379
+57
+57
+25316
+15718
+38380
+22049
+4055
+377
+2463
+20164
+26361
+38381
+845
+43
+38382
+26355
+1720
+27669
+33120
+38383
+38384
+10356
+12005
+38385
+38386
+22815
+13721
+34402
+9
+96
+32332
+38387
+12552
+9
+971
+484
+38388
+37556
+379
+33650
+242
+15491
+18409
+89
+1090
+38389
+38390
+10482
+67
+38391
+317
+16
+323
+38392
+38393
+25237
+38394
+28317
+9
+38395
+38396
+415
+25683
+38397
+1605
+38398
+2728
+16437
+38399
+38400
+1018
+5415
+23103
+745
+2015
+38401
+19
+46
+38402
+25943
+2492
+38403
+478
+14
+1090
+1251
+4028
+11759
+18013
+38404
+29483
+1300
+25140
+38405
+18548
+12987
+17635
+286
+9897
+33552
+38406
+38407
+16763
+46
+38408
+13179
+286
+25659
+349
+19
+14
+590
+18951
+38409
+2764
+2809
+37556
+19618
+38410
+14
+28502
+31293
+38411
+736
+24045
+31293
+3504
+495
+18440
+19
+33120
+38412
+38413
+27669
+1912
+38414
+5803
+38415
+6341
+38416
+16986
+38417
+5956
+38418
+34433
+5601
+14
+38419
+590
+38420
+19838
+1021
+416
+10028
+28441
+38421
+38422
+12
+23103
+33514
+38423
+38424
+38425
+1291
+2
+38426
+33650
+213
+58
+16183
+43
+24862
+38427
+379
+38428
+38429
+1300
+337
+13721
+1513
+185
+38430
+19
+33693
+38431
+14
+9
+38432
+38433
+5082
+38434
+20555
+13721
+38435
+8766
+337
+28176
+179
+38436
+16
+38437
+19
+33693
+284
+533
+284
+38438
+5188
+2643
+38439
+29483
+18139
+4055
+38440
+32
+15251
+213
+586
+196
+348
+15476
+4055
+18242
+3546
+38441
+3764
+1090
+284
+446
+104
+248
+38442
+703
+38443
+43
+576
+25316
+1090
+1295
+77
+19655
+38444
+13746
+38445
+38446
+38447
+284
+38448
+38449
+36735
+37556
+303
+38450
+7117
+31293
+3105
+38451
+6874
+9
+176
+377
+38452
+77
+13835
+248
+38453
+9
+21947
+16437
+213
+1749
+284
+2694
+9
+21947
+38454
+38455
+8849
+26651
+38456
+248
+22788
+19
+38457
+38458
+37920
+38459
+22922
+38460
+213
+38461
+38462
+2942
+5351
+38463
+14216
+25140
+33650
+33494
+2577
+16830
+38464
+337
+278
+1716
+10973
+19143
+37556
+9
+38465
+20600
+19
+272
+872
+201
+1716
+2029
+38466
+30224
+38467
+35832
+15718
+22963
+352
+176
+21947
+9
+2306
+17537
+25316
+38468
+3
+38469
+33120
+38470
+286
+38471
+38472
+13957
+38473
+16064
+31691
+19
+7084
+38474
+31293
+31098
+27669
+38475
+14363
+15
+248
+37556
+43
+38476
+2410
+4908
+38477
+38478
+30877
+38479
+6052
+38480
+8351
+3981
+31514
+7835
+179
+1531
+38481
+3
+5582
+38482
+9
+14604
+337
+38483
+24864
+43
+22398
+38484
+3353
+38485
+5085
+38486
+533
+38487
+379
+284
+14603
+24896
+38488
+4793
+11754
+38489
+2733
+38490
+2029
+28755
+21947
+14369
+248
+1316
+25316
+3999
+6595
+9
+1234
+38491
+1716
+25316
+270
+38492
+38493
+3559
+38494
+38495
+29381
+5865
+12625
+38496
+38497
+16466
+23477
+38498
+3546
+12013
+38499
+2260
+38500
+38501
+98
+38502
+33627
+38503
+38504
+38505
+590
+10946
+28961
+31575
+33445
+31226
+38506
+2243
+38507
+21947
+38508
+32911
+12254
+43
+464
+38509
+9402
+43
+5188
+37556
+38510
+24896
+2287
+38511
+17911
+2
+29200
+3
+38512
+3541
+5336
+37556
+3317
+28603
+24303
+33061
+4055
+38513
+38514
+38515
+43
+38516
+38517
+2195
+25237
+32
+37556
+38518
+38519
+345
+38520
+1222
+2388
+33627
+720
+38521
+358
+284
+358
+27719
+122
+26361
+9
+248
+10369
+66
+39
+16437
+38522
+14523
+57
+38523
+36735
+38524
+1066
+38525
+17207
+38526
+36019
+478
+14
+38527
+38528
+34402
+3964
+25316
+38529
+38530
+38531
+38532
+554
+25140
+38533
+19
+15718
+2197
+379
+143
+30051
+38534
+38535
+3395
+823
+25237
+29628
+33693
+19
+19144
+7053
+38536
+3546
+19
+248
+38537
+38538
+38539
+177
+77
+26161
+2694
+21698
+536
+16846
+2733
+12987
+38540
+5315
+13801
+15718
+1090
+28494
+2764
+283
+906
+170
+29134
+590
+9
+1082
+38541
+2770
+17872
+19618
+32
+38542
+77
+18045
+38543
+519
+14369
+38544
+440
+38545
+20556
+5117
+22302
+38546
+17
+38547
+1090
+17029
+22797
+11073
+9
+19995
+43
+38548
+411
+38549
+66
+1716
+4055
+4411
+19565
+89
+34433
+265
+14604
+38550
+38551
+590
+38552
+38553
+27719
+38554
+8668
+43
+38555
+38556
+38557
+99
+38558
+12013
+4033
+38559
+38560
+910
+25420
+590
+7053
+1090
+38561
+519
+10946
+38562
+30877
+38563
+1605
+10068
+13786
+10946
+38564
+22552
+19
+37556
+38565
+15718
+17467
+38566
+38567
+178
+10946
+3546
+25943
+38568
+22
+7208
+2635
+38569
+38570
+27669
+38571
+345
+5627
+21947
+9
+37556
+37556
+38572
+38573
+38574
+21947
+38575
+1425
+18503
+22986
+9144
+3330
+38576
+694
+14048
+38577
+38578
+10946
+16981
+38579
+25316
+27669
+17151
+38580
+36037
+9
+19
+23103
+38581
+38582
+38583
+1100
+38584
+14477
+66
+38585
+24207
+33061
+9
+20941
+38586
+38587
+24972
+1181
+1042
+179
+38588
+34402
+12684
+2117
+568
+19
+26519
+31041
+398
+38589
+38590
+28317
+15344
+38591
+29381
+38592
+38593
+31634
+13569
+1401
+31168
+38594
+38595
+4367
+4547
+22420
+38596
+35090
+38597
+5119
+8668
+38598
+9
+213
+36639
+38599
+3030
+10946
+38600
+38601
+1090
+671
+7836
+14369
+24375
+213
+1818
+590
+5784
+36735
+57
+11754
+38602
+14404
+25584
+38603
+213
+57
+6121
+349
+15511
+43
+38604
+38605
+15718
+1502
+7516
+38606
+1426
+4461
+23103
+18616
+38607
+25
+19220
+1082
+38608
+38609
+33650
+815
+36070
+38610
+38611
+671
+5578
+21208
+415
+29540
+5316
+38612
+16574
+12466
+38613
+34181
+37556
+736
+25904
+16
+4452
+38614
+37556
+9
+25316
+19
+31541
+4055
+19702
+37556
+3075
+25316
+38615
+22903
+19
+861
+989
+38616
+38617
+19
+38618
+38619
+22464
+19618
+1090
+38620
+36638
+4124
+25316
+10818
+337
+15718
+31293
+43
+15718
+38621
+16096
+720
+14001
+3543
+38622
+38623
+1090
+38624
+10511
+317
+27669
+590
+38625
+38626
+17
+38627
+38628
+60
+16177
+8716
+5816
+1870
+17911
+971
+809
+7511
+38629
+38630
+736
+284
+6943
+28199
+284
+1224
+651
+248
+38631
+3553
+28666
+12044
+26040
+38632
+38633
+2410
+38634
+5085
+209
+2410
+7053
+15718
+38635
+730
+1090
+31168
+14693
+1606
+736
+590
+21947
+13754
+13848
+31098
+4055
+38636
+21947
+38637
+20700
+8392
+19587
+16511
+38638
+3119
+3546
+213
+4061
+23799
+284
+1817
+38639
+38640
+26142
+5318
+303
+213
+19792
+38641
+14477
+2430
+13721
+16466
+7053
+18061
+28441
+415
+37770
+3943
+38642
+38643
+38644
+13361
+8392
+38645
+286
+14330
+4055
+27575
+1847
+38646
+14795
+38478
+27669
+66
+284
+12911
+284
+38647
+19618
+26475
+38648
+971
+33974
+38649
+201
+38650
+38651
+38652
+20
+38653
+33552
+31293
+12063
+4684
+38654
+284
+38655
+671
+10946
+25129
+21947
+57
+33447
+34641
+38656
+887
+38465
+770
+24860
+38657
+4055
+38658
+809
+21947
+30532
+33494
+13721
+18815
+22556
+5188
+31293
+37556
+38659
+38660
+4647
+7154
+57
+38661
+31787
+17448
+20326
+19
+1779
+1356
+15718
+3391
+9
+38662
+1529
+38663
+38664
+38665
+6364
+38666
+38667
+21947
+31293
+337
+16466
+38668
+30877
+38669
+38670
+10
+18159
+2769
+38671
+2043
+26030
+415
+30877
+38672
+38673
+1090
+30464
+38674
+38675
+1689
+38676
+25140
+38677
+77
+12402
+5614
+14
+284
+201
+38678
+32650
+38679
+38680
+3743
+43
+19
+3147
+30097
+38681
+31293
+32349
+38682
+25943
+9
+28549
+38003
+14001
+17229
+205
+1090
+38683
+20514
+19655
+10718
+19
+23103
+43
+26060
+38684
+19
+342
+32402
+38685
+28302
+31150
+19
+38686
+12741
+284
+8668
+38687
+9
+28199
+3353
+38688
+38689
+37556
+38690
+301
+38691
+38692
+38693
+38694
+24862
+38695
+22809
+15083
+89
+38696
+38697
+2465
+18345
+554
+736
+38698
+11762
+27669
+18019
+38699
+38700
+1710
+345
+5582
+11957
+11158
+37289
+30877
+38701
+38702
+38703
+38704
+57
+4055
+590
+38705
+38706
+23404
+38707
+38708
+38709
+1889
+24862
+31168
+38710
+10624
+3369
+809
+38711
+337
+104
+38712
+21947
+399
+21947
+15718
+33650
+38713
+5089
+3978
+9
+736
+7053
+14935
+22
+38714
+38715
+28423
+19
+38716
+38717
+38718
+1066
+38719
+3994
+27669
+38366
+30917
+43
+365
+38720
+38721
+248
+16466
+9
+28036
+365
+38722
+1109
+38723
+23103
+38724
+38725
+18369
+57
+38726
+12095
+38727
+345
+38728
+554
+17136
+38729
+6514
+38730
+37556
+4055
+27669
+14477
+38731
+38732
+1566
+38733
+9
+32
+27566
+1018
+24864
+29483
+16944
+29381
+38734
+38735
+38736
+38737
+1047
+38738
+38739
+37556
+38740
+38741
+19
+38742
+1655
+32856
+32410
+37556
+28036
+38743
+38744
+590
+38745
+16024
+14597
+21947
+11762
+30933
+38746
+24303
+89
+29629
+30224
+492
+38747
+31047
+15683
+492
+22236
+3546
+38748
+38749
+9
+15
+7629
+23150
+38750
+89
+38751
+19
+745
+1082
+38752
+15
+1082
+21947
+2622
+38499
+38753
+38754
+38755
+4488
+1090
+38756
+270
+38757
+38758
+38759
+19
+38760
+38761
+38762
+4414
+38763
+12722
+1100
+2158
+38764
+155
+4116
+37770
+19
+38765
+286
+14616
+32379
+38766
+21947
+37556
+37556
+29381
+17228
+57
+286
+43
+1847
+3599
+15718
+416
+38767
+28317
+38768
+2567
+5340
+10946
+15
+21947
+9
+272
+1090
+21947
+38769
+38770
+201
+11647
+38771
+38772
+21947
+38773
+573
+14477
+18283
+4701
+323
+37976
+18896
+38774
+9
+38775
+136
+38776
+38777
+38778
+20005
+317
+2694
+1090
+6732
+29628
+38779
+38780
+38781
+25584
+1559
+21045
+1091
+5188
+28649
+18695
+38782
+98
+25
+2762
+38783
+6953
+30117
+17602
+536
+38784
+28893
+10172
+1300
+720
+17144
+2260
+22677
+9870
+33650
+38785
+2770
+38786
+8392
+1514
+15
+38787
+19
+15
+38067
+19694
+677
+4166
+18503
+24458
+16
+7123
+828
+30551
+736
+172
+38788
+43
+14185
+21698
+38789
+38790
+38791
+25
+9
+15718
+558
+349
+43
+38792
+38793
+21336
+24896
+38794
+38795
+17911
+1011
+4441
+38796
+16935
+38797
+33222
+38798
+15824
+9628
+2260
+7053
+38799
+18589
+37204
+35969
+18695
+30051
+29204
+57
+16437
+590
+31293
+38800
+38801
+21947
+37881
+38802
+1710
+38803
+38804
+38805
+484
+16886
+1764
+887
+38806
+25668
+32
+17338
+15649
+4441
+27669
+24864
+21681
+43
+25
+2561
+7835
+43
+373
+38807
+31041
+12417
+99
+19355
+38808
+5803
+22607
+38809
+9
+14604
+3546
+17158
+9
+38810
+38811
+38812
+26389
+38813
+14369
+37959
+70
+8318
+19
+38814
+66
+28219
+38815
+8244
+89
+38816
+38817
+32
+1090
+16447
+43
+38818
+38819
+2061
+38820
+31293
+10946
+38821
+15146
+38822
+38823
+20943
+5627
+38824
+38825
+38826
+15718
+4230
+10946
+11966
+38827
+416
+10583
+38828
+13307
+3546
+99
+34999
+38829
+28474
+5700
+8639
+19
+17338
+38033
+10946
+38830
+3999
+2926
+38831
+736
+57
+21694
+20280
+38832
+17151
+25237
+349
+1716
+38833
+9178
+38834
+16121
+8160
+17151
+38835
+25316
+2982
+188
+38836
+38837
+645
+30051
+38838
+38839
+153
+29483
+19
+38840
+15718
+1716
+397
+38841
+38842
+415
+38843
+2038
+18982
+38844
+31293
+4125
+3492
+38845
+25316
+38846
+31401
+38847
+533
+38848
+18695
+1090
+38849
+35318
+57
+14330
+9
+26320
+38850
+590
+38851
+70
+38852
+38853
+38854
+22
+12200
+38855
+399
+38856
+43
+38857
+38858
+2766
+38859
+38860
+38861
+373
+15718
+2259
+38862
+37556
+25237
+38863
+11461
+14660
+38760
+38864
+38760
+164
+38865
+17033
+22
+18895
+38866
+17054
+1310
+38867
+590
+43
+38868
+38869
+38870
+38871
+38872
+4055
+7745
+27669
+30224
+38873
+1090
+38874
+2197
+27369
+1961
+8727
+1384
+38875
+46
+1513
+38876
+25316
+1531
+21947
+1425
+38877
+1316
+7320
+36492
+17449
+38878
+11539
+4024
+201
+21045
+1797
+9
+38879
+16
+32
+38880
+349
+21874
+1090
+38881
+1716
+1434
+15
+16443
+13721
+38882
+1749
+16648
+38883
+38884
+14363
+38885
+2770
+1169
+11754
+38886
+354
+1415
+384
+140
+20515
+18283
+30877
+18951
+12344
+38887
+38888
+31293
+15951
+2733
+38889
+38890
+38891
+1792
+19618
+38892
+38893
+1562
+38894
+38895
+590
+3767
+32245
+6620
+33494
+19
+38896
+38897
+2197
+25237
+1637
+2318
+22099
+33316
+28625
+38898
+38899
+38900
+24457
+76
+745
+23603
+38901
+3989
+28116
+349
+38902
+2827
+1517
+16
+15699
+7835
+25584
+2561
+20952
+38903
+38774
+38904
+19
+15718
+16327
+197
+707
+38905
+3553
+38906
+3994
+38907
+20898
+720
+38908
+38909
+283
+14520
+29992
+38910
+9
+38911
+30877
+228
+38912
+9
+38913
+13570
+38914
+23418
+2769
+38915
+379
+1382
+13696
+38916
+21947
+3964
+44
+114
+38917
+2988
+16436
+38918
+7939
+379
+6264
+15
+1605
+36735
+26048
+9
+38919
+30877
+1011
+38920
+3509
+10946
+38921
+936
+38922
+554
+15871
+11822
+29278
+1300
+38923
+17872
+38924
+1066
+38925
+38926
+24774
+38927
+38928
+38929
+9
+8367
+3546
+1514
+573
+33494
+38930
+19
+736
+8961
+201
+38931
+34402
+8110
+38932
+66
+5244
+16413
+6321
+1779
+43
+15572
+24144
+38933
+38934
+38935
+6067
+586
+590
+38936
+317
+38937
+38938
+24864
+538
+7516
+2314
+736
+11926
+9
+14477
+16466
+1502
+3376
+21947
+11
+38939
+38940
+19
+37556
+38941
+1048
+970
+519
+23103
+14079
+25237
+1415
+25316
+16060
+38942
+38943
+770
+3976
+30224
+43
+19160
+38944
+38945
+155
+27178
+188
+4055
+646
+5188
+33650
+38946
+38947
+4677
+38948
+25316
+176
+38949
+38950
+377
+24303
+30209
+38951
+14909
+31576
+764
+33650
+38952
+8685
+19542
+209
+4055
+915
+25316
+18283
+38953
+21268
+38954
+38955
+14363
+38956
+4547
+20340
+11639
+38957
+27669
+19
+38958
+34438
+1090
+38959
+24896
+38960
+31346
+38961
+38962
+1471
+30056
+590
+38963
+590
+4012
+38964
+7516
+568
+38965
+38966
+9
+38967
+38968
+38969
+2410
+38970
+15718
+568
+30877
+30877
+38971
+1681
+12987
+38972
+14
+38973
+21947
+38974
+38975
+22
+9210
+155
+286
+31234
+19
+34402
+43
+38976
+21947
+16327
+4682
+38977
+37556
+495
+46
+145
+38978
+22091
+21947
+3376
+23874
+15718
+9
+38979
+38980
+1617
+24972
+25
+1437
+38981
+411
+34889
+38982
+38117
+38983
+36328
+19
+25526
+1575
+3251
+33650
+5085
+196
+286
+38984
+24303
+6877
+14369
+1617
+4055
+8297
+38985
+155
+16234
+38986
+30927
+4461
+7721
+19918
+38987
+7743
+1047
+22798
+38988
+37556
+38989
+2577
+38990
+38991
+1051
+7706
+20
+38992
+1090
+38993
+30051
+20
+12584
+7419
+16437
+38994
+2035
+38995
+155
+38996
+765
+43
+590
+3964
+38997
+38998
+2260
+38999
+39000
+39001
+24303
+39002
+24864
+38465
+15722
+39003
+24303
+27260
+39004
+590
+514
+39005
+39006
+32518
+39007
+39008
+33909
+30224
+35357
+1578
+31293
+7516
+39009
+39010
+43
+39011
+38465
+39012
+32856
+39013
+34402
+39014
+2367
+1617
+19
+39015
+536
+9
+39016
+29204
+448
+17144
+3421
+282
+1768
+39017
+8249
+39018
+1224
+730
+15718
+24725
+31225
+30877
+37556
+8982
+21947
+39019
+57
+35496
+13620
+39020
+32
+39021
+1920
+36735
+17151
+7379
+2764
+21268
+33693
+39022
+39023
+39024
+29483
+37920
+39025
+369
+21947
+18951
+2635
+18045
+6997
+39026
+39027
+24302
+1157
+34171
+28441
+30877
+39028
+9
+39029
+39030
+26496
+21947
+140
+665
+20489
+10946
+21689
+39031
+39032
+19
+33650
+35948
+1961
+39033
+38667
+39034
+36268
+39035
+9
+15718
+958
+590
+38465
+39036
+39037
+39038
+349
+39039
+194
+39040
+8668
+39041
+1989
+39042
+3599
+39043
+39044
+31576
+14327
+2593
+37556
+21947
+7053
+39045
+30224
+17217
+10791
+590
+60
+17040
+39046
+39047
+3542
+228
+22464
+39048
+1364
+6439
+14770
+5582
+30877
+6364
+10946
+30051
+36721
+892
+30417
+39049
+36735
+39050
+2457
+2561
+1732
+1246
+39051
+2040
+21031
+10946
+53
+39052
+286
+1364
+554
+201
+15718
+17151
+2919
+16853
+1090
+14650
+34890
+39053
+39054
+283
+39055
+4028
+39056
+39057
+39058
+39059
+15096
+915
+10147
+39060
+39061
+21732
+10946
+33650
+9
+8334
+39062
+15295
+39063
+43
+33650
+27669
+37556
+27669
+17602
+13375
+39064
+39065
+8639
+9
+27669
+5891
+39066
+1563
+39067
+14477
+39068
+39069
+14477
+6001
+43
+7835
+35318
+286
+39070
+12579
+24896
+7835
+19
+21337
+5344
+28036
+153
+590
+29483
+39071
+39072
+16327
+140
+39073
+18627
+15718
+16466
+39074
+317
+39075
+365
+16437
+46
+590
+8668
+2260
+43
+39076
+142
+1508
+7835
+39077
+16437
+39078
+31293
+16437
+1107
+39079
+39080
+590
+39081
+179
+2550
+30224
+39082
+39083
+27669
+25943
+29483
+39084
+21776
+9
+39085
+39086
+9
+25140
+39087
+16919
+9939
+37588
+39088
+8297
+11096
+19618
+57
+15718
+568
+14271
+16466
+345
+1090
+39089
+13323
+39090
+39091
+3546
+164
+39092
+32763
+1688
+2040
+39093
+39094
+430
+10946
+30877
+7053
+9
+500
+39095
+34204
+39096
+9
+1090
+39097
+39098
+39099
+39100
+39101
+39102
+4055
+736
+14369
+39103
+17151
+37764
+39104
+19
+707
+10946
+16160
+39105
+39106
+39107
+14001
+25983
+39108
+238
+33921
+17151
+736
+39109
+5963
+3959
+9118
+37556
+39110
+39111
+14
+39112
+39113
+39114
+11762
+11013
+29082
+39115
+39116
+1540
+39117
+30794
+9
+32
+21947
+24113
+22
+22197
+39118
+4899
+39119
+5188
+5344
+19
+15
+33438
+4055
+554
+590
+16
+17911
+14604
+379
+27521
+21627
+33650
+17232
+39120
+89
+19797
+36638
+39121
+39122
+39123
+10028
+43
+703
+34944
+39124
+554
+19
+590
+29687
+1920
+30224
+39125
+4055
+533
+39126
+39127
+39128
+99
+39129
+19
+7544
+10
+39130
+15539
+2532
+5188
+39131
+39132
+39133
+19
+178
+39134
+43
+39135
+1013
+30224
+14660
+22799
+1563
+39136
+554
+39137
+57
+39138
+19
+4055
+284
+29381
+1082
+7855
+122
+33447
+67
+9595
+39139
+590
+39140
+104
+39141
+39142
+457
+52
+46
+39143
+39144
+32782
+39145
+39146
+25589
+37556
+39147
+14648
+29204
+5209
+31168
+34
+19178
+1688
+284
+14369
+29483
+39148
+39149
+39150
+39151
+349
+140
+5188
+20677
+3546
+8501
+39152
+39153
+39154
+12202
+10946
+1425
+25316
+39155
+209
+12348
+9
+1090
+39156
+39157
+39158
+7583
+39159
+39160
+39161
+39162
+39163
+57
+28316
+9
+4328
+39164
+39165
+15647
+16447
+39166
+39167
+20442
+303
+590
+15
+10501
+35
+2694
+4765
+19
+35284
+590
+39168
+39169
+12
+19
+15311
+971
+39170
+10147
+12987
+34706
+12969
+39171
+590
+4518
+284
+284
+39172
+9
+21947
+37556
+39173
+39174
+5085
+39175
+30568
+48
+6261
+13905
+7276
+39176
+242
+19
+39177
+28441
+18503
+519
+30224
+2314
+2414
+14
+39178
+17151
+39179
+39180
+3546
+39181
+39182
+30877
+39183
+1090
+6701
+915
+16562
+34402
+39184
+703
+677
+27362
+39185
+1912
+20355
+365
+29172
+24180
+5780
+286
+5784
+11762
+248
+39186
+39187
+46
+22963
+39188
+1710
+9
+14
+43
+39189
+2147
+140
+46
+2281
+14001
+39190
+5499
+9
+21947
+39191
+30051
+39192
+39193
+39194
+39195
+415
+29483
+21947
+1107
+887
+89
+15
+25237
+4116
+39196
+39197
+39198
+39199
+38465
+21947
+286
+10946
+39200
+39201
+358
+43
+43
+14947
+20005
+14914
+30051
+39202
+586
+99
+37556
+38465
+6011
+872
+33650
+248
+39203
+14
+39204
+39205
+39206
+39207
+33650
+39208
+19
+12121
+595
+209
+19
+29130
+39209
+39210
+39211
+39212
+12777
+2419
+33293
+19
+736
+590
+349
+17635
+39213
+24988
+2446
+34402
+155
+1011
+27669
+3759
+2
+1604
+4124
+17911
+24864
+29859
+33627
+24303
+15
+14477
+323
+248
+25237
+379
+39214
+18257
+38760
+5188
+721
+8249
+39215
+39216
+14909
+15710
+3242
+2944
+19
+17911
+15718
+1090
+21268
+39217
+43
+5188
+18954
+4055
+5007
+39218
+5650
+39219
+703
+12005
+1559
+30877
+2804
+39220
+39221
+1244
+1503
+303
+39222
+30877
+8208
+2865
+1090
+3546
+77
+37556
+39223
+33494
+18798
+9
+39224
+21689
+19355
+213
+43
+30223
+39225
+23226
+37556
+30877
+495
+31293
+4055
+4195
+887
+399
+248
+39226
+39227
+4055
+12299
+39228
+37556
+39229
+39230
+39231
+30232
+3655
+24862
+35220
+43
+303
+9
+39232
+39233
+1710
+31852
+39234
+37556
+18951
+39235
+39236
+568
+176
+30877
+39237
+19
+39238
+43
+39239
+140
+9
+39240
+33494
+3858
+4055
+11763
+39241
+21947
+12867
+1716
+5649
+337
+14604
+5904
+20700
+28317
+39242
+10946
+39243
+17
+39244
+31234
+43
+39245
+39246
+39247
+1300
+39248
+12267
+286
+3248
+14079
+39249
+2832
+6344
+27069
+1090
+39250
+1571
+37556
+21947
+39251
+25683
+1090
+33627
+39252
+43
+34719
+17215
+14909
+354
+29483
+39253
+4667
+1291
+703
+19
+9
+19
+89
+15718
+1524
+39254
+39255
+39256
+33120
+1018
+30224
+33758
+27719
+39257
+19
+9
+9
+39258
+10094
+222
+8602
+2197
+38893
+284
+2537
+38381
+31293
+590
+36735
+39259
+29483
+39260
+39261
+75
+43
+357
+39262
+39263
+39264
+39265
+2476
+25316
+39266
+39267
+39268
+768
+815
+32
+201
+38933
+1230
+34433
+31098
+39269
+19
+4463
+35792
+39270
+13848
+39271
+30051
+3440
+179
+21200
+39272
+57
+1961
+3858
+24725
+647
+39273
+337
+99
+39274
+39275
+284
+33650
+39276
+39277
+30230
+39278
+39279
+39280
+46
+1961
+242
+39281
+613
+74
+30005
+845
+28441
+439
+39282
+15216
+8171
+39283
+39284
+643
+817
+39285
+2349
+39286
+39287
+7226
+25237
+6161
+39288
+57
+15324
+21089
+345
+9185
+29381
+39289
+11224
+165
+10946
+39290
+138
+39291
+39292
+337
+39293
+19797
+39294
+39295
+31293
+1090
+39296
+9526
+39297
+8367
+39298
+30877
+39299
+1961
+32
+4907
+11822
+15935
+1139
+1291
+12987
+39300
+33693
+39301
+19965
+554
+2
+25140
+39302
+19318
+936
+39303
+27719
+21947
+38003
+2764
+8668
+15819
+39304
+1223
+464
+31453
+39305
+442
+39306
+39307
+39308
+24896
+39309
+720
+39310
+2733
+39311
+39312
+39313
+11073
+14843
+20
+38760
+1107
+33650
+39314
+677
+39315
+8668
+43
+39316
+39317
+19
+17670
+39318
+19009
+15718
+2804
+26320
+14816
+39319
+11321
+27798
+39320
+39321
+713
+35214
+20102
+39322
+39323
+21947
+27433
+30877
+4055
+2187
+39324
+39325
+39326
+39327
+26789
+25
+39328
+12005
+23935
+25140
+39329
+35427
+39330
+24864
+39331
+39332
+14
+5908
+39333
+25943
+927
+14330
+8787
+16773
+39334
+39335
+39336
+39337
+323
+39338
+379
+16466
+39339
+39340
+34641
+24318
+39341
+39342
+4227
+10246
+1385
+286
+6418
+379
+15718
+2406
+39343
+39344
+213
+39345
+36735
+14369
+5188
+3182
+43
+27719
+39346
+20941
+228
+33650
+39347
+9016
+25
+39348
+9410
+4907
+39349
+1300
+590
+155
+770
+39350
+21947
+39351
+77
+3679
+39352
+19618
+19
+39353
+284
+4518
+39354
+1688
+19048
+39355
+4032
+9096
+20555
+39356
+39357
+19
+39358
+248
+39359
+20
+38893
+14888
+39360
+19030
+39361
+34402
+22
+5923
+39362
+37556
+137
+25237
+6533
+286
+34444
+39363
+24864
+284
+11762
+39364
+39365
+1533
+43
+39366
+39367
+20845
+566
+39368
+1536
+15797
+1066
+39369
+30224
+209
+35155
+39370
+2832
+39371
+39372
+43
+1012
+39373
+30551
+379
+39374
+39375
+2577
+31873
+977
+18064
+39376
+31168
+39377
+286
+15370
+39378
+671
+13375
+39379
+5007
+188
+3480
+39380
+736
+25
+514
+39381
+39382
+19
+1817
+32
+865
+33061
+303
+29483
+39383
+586
+27669
+39384
+15541
+15050
+38760
+4452
+1307
+39385
+1637
+27669
+38465
+39386
+39387
+39388
+26040
+39389
+39390
+39391
+5446
+39392
+21947
+8297
+23103
+39393
+590
+39394
+39395
+39396
+12936
+39397
+39398
+19
+34402
+39399
+98
+39400
+31293
+39401
+13168
+39402
+213
+720
+19
+24051
+373
+1230
+29483
+14693
+16539
+30877
+936
+39403
+22
+39404
+770
+39405
+37556
+39406
+39407
+15341
+31370
+39408
+39409
+19
+101
+39410
+39411
+213
+29483
+39412
+30877
+8210
+248
+9
+31098
+39413
+514
+13648
+39414
+337
+29434
+14477
+495
+337
+415
+7923
+303
+39415
+1157
+39416
+33627
+3317
+39417
+284
+29007
+39418
+30224
+39419
+590
+33627
+345
+1169
+43
+22
+19852
+39420
+13361
+2694
+21947
+8380
+22598
+37556
+29711
+39421
+4055
+5188
+39422
+4055
+14369
+6598
+9948
+1172
+323
+39423
+30224
+35922
+2694
+1082
+31293
+9
+13813
+17348
+33650
+39424
+24307
+19
+4230
+14001
+25140
+14369
+4634
+11321
+39425
+26724
+826
+38465
+39426
+39427
+39428
+5351
+4153
+30224
+39429
+36734
+39430
+3759
+13113
+37556
+865
+36146
+38465
+22842
+590
+39431
+39432
+39433
+14330
+33494
+11312
+21947
+4042
+16466
+31234
+39434
+15718
+15
+39435
+440
+155
+19618
+27669
+6238
+39436
+39437
+30494
+25501
+1442
+28490
+248
+14992
+1384
+43
+36515
+3381
+11484
+39438
+4055
+2804
+37556
+22922
+3546
+39439
+11321
+17385
+39440
+586
+694
+21089
+39441
+14330
+1056
+33951
+5085
+39442
+39443
+39444
+39445
+27669
+21947
+39446
+20700
+39447
+39448
+34752
+19
+39449
+13777
+39450
+12454
+15718
+39451
+36208
+720
+39452
+39453
+13905
+24423
+57
+39454
+19
+14369
+2709
+39455
+671
+39456
+39457
+613
+39458
+25943
+915
+39459
+36218
+39460
+34
+19
+303
+115
+19029
+30224
+25943
+37127
+39461
+39462
+24405
+15
+21947
+39463
+32915
+19
+345
+24862
+39464
+39465
+39466
+19489
+1426
+39467
+39468
+2197
+317
+39469
+29483
+8727
+39470
+19
+14604
+12987
+35214
+27043
+30877
+7471
+103
+32
+23727
+1090
+21776
+39471
+1384
+39472
+39473
+39474
+29406
+39475
+25316
+736
+31041
+17412
+39476
+21947
+9
+31168
+39477
+915
+4330
+15906
+1112
+4808
+39059
+595
+39478
+30877
+39479
+590
+10
+33650
+17670
+33120
+29381
+39480
+22815
+39481
+286
+39482
+201
+39483
+39484
+38523
+24332
+24303
+31575
+17691
+16826
+19655
+1090
+822
+39485
+21947
+38008
+2009
+5071
+39486
+30224
+13424
+1090
+39487
+39488
+39489
+25624
+1513
+554
+25140
+33494
+301
+39490
+323
+39491
+4518
+15
+1083
+39492
+39493
+7810
+21187
+8053
+39494
+1164
+30224
+39495
+57
+39496
+31098
+39497
+11593
+39498
+24725
+736
+1710
+39499
+1212
+39500
+39501
+26361
+39502
+39503
+33758
+31346
+33278
+373
+39504
+39505
+38003
+25683
+14477
+39506
+39507
+415
+272
+39508
+1749
+1765
+39509
+39510
+39511
+2314
+1680
+13988
+39512
+8378
+29204
+35591
+17615
+18695
+31873
+39513
+17385
+22986
+484
+1112
+39514
+16826
+16511
+39515
+30309
+57
+39516
+14369
+43
+590
+39517
+39518
+21269
+28036
+39519
+29483
+18904
+39520
+39521
+7027
+57
+176
+10177
+9
+39522
+39523
+29483
+286
+14586
+10500
+1011
+27719
+21947
+8392
+26928
+39524
+568
+22314
+43
+284
+14330
+9
+10946
+440
+19
+39525
+39526
+39527
+39528
+573
+39529
+25140
+19
+53
+2577
+3260
+665
+31881
+36638
+23112
+39530
+36481
+39531
+3637
+39532
+1428
+201
+39533
+8670
+53
+39534
+25904
+14
+7053
+228
+1082
+1153
+35633
+4124
+15249
+39535
+43
+9
+17295
+14001
+39536
+491
+39537
+39538
+14066
+39539
+39323
+39540
+34
+39541
+590
+39542
+25316
+8890
+13721
+1051
+33116
+39543
+39544
+14369
+27069
+24303
+19209
+39545
+39546
+2764
+24144
+6471
+2
+19
+31225
+554
+9
+24725
+39547
+19618
+1090
+39548
+352
+37388
+14369
+39549
+25237
+21947
+31042
+7053
+39550
+34402
+89
+646
+39551
+39552
+286
+15
+39553
+104
+613
+29204
+21627
+17911
+209
+19
+39554
+57
+7053
+39555
+39556
+16782
+15537
+39557
+22800
+14152
+2739
+15
+21742
+10
+30877
+1141
+34317
+19918
+278
+39558
+39559
+39560
+30449
+33627
+39561
+2733
+2975
+14369
+38523
+28549
+19
+39562
+15718
+39563
+1352
+286
+39564
+39565
+16398
+1172
+18695
+317
+4339
+2009
+21947
+28317
+24303
+24862
+15
+193
+1011
+14840
+39566
+25316
+31293
+39567
+39568
+815
+590
+30051
+209
+1870
+24864
+4650
+4055
+39569
+39570
+15718
+21947
+39571
+5327
+39572
+14001
+39573
+98
+39574
+31098
+349
+1181
+411
+7774
+39575
+39576
+39577
+25683
+17077
+34402
+15671
+39578
+11600
+6883
+576
+910
+24864
+2694
+5188
+1090
+39579
+39580
+39581
+8357
+39582
+39583
+19618
+21947
+19724
+36268
+20677
+1090
+11797
+8356
+39584
+37556
+39585
+39586
+30224
+39587
+38595
+28317
+5231
+10846
+43
+31293
+36783
+39588
+39589
+33627
+31293
+37920
+16
+30224
+12067
+15
+39590
+30221
+39591
+19
+1563
+39592
+39593
+590
+37556
+39594
+4352
+39595
+39596
+18345
+2243
+1562
+17396
+70
+32566
+36268
+29153
+44
+39597
+22
+19
+15547
+2919
+29434
+39598
+39599
+358
+39600
+15370
+1157
+349
+11249
+30458
+39601
+34
+39602
+30877
+39603
+1517
+39604
+16437
+1920
+10677
+3598
+39605
+6122
+19
+16
+317
+1571
+33385
+18283
+11429
+14
+39606
+33709
+24036
+39607
+19
+1212
+39608
+39609
+32
+1090
+20496
+39590
+39610
+39611
+39612
+26922
+13721
+39613
+39614
+32
+354
+590
+39615
+1157
+5627
+30877
+265
+33494
+707
+38760
+15718
+2310
+14856
+286
+23741
+2372
+39616
+39617
+12251
+39618
+57
+39619
+6531
+19655
+39620
+26361
+4055
+7661
+39621
+39622
+30877
+25140
+1011
+39623
+39590
+70
+1011
+53
+39624
+1224
+39625
+39626
+4684
+590
+2031
+39627
+39628
+24864
+1090
+39629
+23103
+19
+25048
+11072
+18045
+33627
+9
+39630
+27669
+13179
+21729
+8297
+9
+411
+39631
+27147
+39632
+861
+30877
+345
+1442
+31172
+39633
+34264
+39634
+2865
+14330
+1013
+33650
+3904
+3601
+33650
+30481
+39635
+43
+39636
+28317
+5065
+39637
+39638
+19
+27224
+39639
+39640
+39641
+39642
+25
+865
+31168
+20158
+4056
+39643
+39644
+8668
+11670
+22844
+3546
+39645
+39646
+39647
+990
+29875
+566
+39648
+37525
+37819
+39649
+37556
+30449
+2755
+39650
+39651
+39652
+3182
+14127
+39653
+66
+4002
+27043
+29483
+39654
+34402
+1107
+39655
+46
+39656
+1870
+19
+39657
+39658
+9440
+5085
+39659
+39660
+33627
+39661
+38527
+32581
+20288
+66
+30580
+17151
+11421
+6571
+13721
+39662
+2187
+39663
+1115
+37556
+39664
+140
+39665
+1384
+5409
+39666
+39667
+39668
+9771
+15718
+3743
+39669
+590
+1410
+39670
+16542
+4808
+32022
+1961
+37556
+9
+43
+39671
+15
+39672
+39673
+30650
+63
+28316
+5293
+39674
+22757
+39675
+1531
+38478
+972
+17267
+19
+36218
+39676
+43
+16
+39677
+6531
+14660
+39678
+39679
+19
+668
+39680
+19
+2804
+39681
+37920
+15698
+33553
+39682
+39683
+39684
+38033
+795
+23103
+39685
+8685
+379
+21521
+7835
+13143
+12589
+1051
+21947
+39686
+209
+39687
+645
+10
+25481
+39688
+19283
+39689
+32520
+39690
+33278
+36268
+39609
+11312
+24303
+39691
+554
+39692
+24889
+1470
+225
+39693
+39694
+39695
+16609
+39696
+39697
+31293
+590
+9
+39698
+533
+13399
+14679
+37290
+39699
+39700
+43
+39701
+8437
+39702
+39703
+39704
+23497
+35948
+16121
+15718
+39705
+2195
+3553
+2604
+4055
+39706
+15718
+849
+892
+558
+14340
+21689
+1454
+39707
+19
+39708
+39709
+39710
+590
+19
+4525
+140
+4274
+39711
+39712
+15
+32190
+39713
+137
+39714
+349
+39715
+5204
+38760
+33650
+554
+24896
+1011
+2694
+39716
+12661
+115
+9573
+25237
+14369
+29381
+36755
+99
+23264
+39717
+30877
+39718
+10
+349
+16826
+43
+29381
+39719
+39720
+23103
+3104
+39721
+39722
+29483
+66
+6294
+39723
+2471
+1765
+2300
+845
+39724
+26496
+6766
+31873
+15718
+16331
+14330
+21338
+10
+12555
+415
+39725
+16437
+30877
+31906
+34402
+31293
+22
+1870
+5877
+39726
+39727
+39728
+13943
+137
+21947
+176
+15718
+24332
+3546
+2795
+39729
+323
+1107
+39730
+13721
+39731
+34402
+29483
+1562
+36268
+36638
+6499
+29483
+37556
+39732
+39733
+31098
+6110
+15
+39734
+19178
+39735
+30224
+317
+5679
+39736
+1577
+32332
+4306
+2577
+39737
+39738
+39739
+39740
+21947
+1090
+39741
+1471
+7960
+31139
+349
+19
+39742
+2325
+39743
+586
+39744
+39745
+39746
+36268
+39747
+39748
+32410
+39749
+39709
+39750
+10946
+365
+554
+43
+39751
+2135
+39752
+39753
+29483
+13905
+701
+345
+22949
+39754
+519
+26657
+33295
+39755
+39756
+33627
+590
+43
+3172
+39757
+39758
+21947
+39759
+28186
+703
+1047
+28965
+19655
+648
+3915
+9
+8727
+17151
+39760
+39761
+39762
+736
+15718
+6072
+31293
+4518
+1018
+19
+1442
+38523
+14025
+17
+37556
+1120
+19995
+39763
+39764
+14909
+43
+357
+39765
+955
+188
+18310
+39766
+39767
+39768
+19994
+39769
+4779
+225
+21672
+36268
+19
+13396
+21947
+39770
+37770
+39771
+39772
+7855
+28317
+7053
+25
+1090
+15
+39773
+19
+39211
+39774
+21947
+34433
+590
+19852
+14477
+39775
+37556
+2764
+57
+39776
+39777
+39778
+39779
+39780
+26496
+38465
+4808
+3553
+39781
+39782
+39783
+39784
+39785
+39786
+20058
+2264
+590
+2804
+39787
+23231
+39788
+32275
+15823
+39789
+970
+3491
+1090
+39790
+21947
+39791
+9
+89
+6499
+39792
+14369
+36268
+5314
+349
+39793
+39794
+1090
+179
+39795
+39796
+3100
+1066
+13474
+109
+27669
+13803
+19058
+39797
+39798
+2097
+399
+4124
+14
+39799
+2532
+24725
+39800
+1090
+36394
+39801
+15461
+736
+31293
+26049
+9
+18310
+24864
+21947
+1090
+317
+31293
+39802
+37504
+39803
+1021
+39804
+39805
+19
+4472
+14689
+39806
+3546
+32410
+43
+4055
+17149
+36218
+39807
+17151
+39808
+25140
+31293
+39809
+736
+39810
+28036
+37556
+286
+37556
+736
+19
+21947
+1051
+12185
+2324
+4441
+37556
+39811
+5642
+1531
+39812
+12005
+30877
+541
+34337
+13349
+19
+9
+39813
+720
+533
+24458
+39814
+18418
+1822
+36218
+1090
+32
+6468
+590
+3764
+13448
+37556
+14330
+11762
+39815
+39816
+39817
+36268
+31098
+39818
+19
+29945
+24303
+533
+20514
+20718
+15718
+43
+39819
+30650
+39820
+39821
+39822
+24896
+14477
+3127
+39823
+15
+23103
+1090
+39824
+33627
+14369
+15718
+39825
+14363
+4461
+39826
+38523
+3296
+21947
+9922
+23103
+5780
+12590
+39827
+16466
+2197
+39828
+1090
+18136
+39829
+10791
+15718
+5153
+39830
+39831
+24725
+39832
+6364
+1559
+39833
+1647
+43
+39834
+713
+31293
+590
+286
+25140
+373
+18310
+39835
+9
+17170
+18896
+2567
+25237
+1481
+9
+17571
+35832
+15718
+26210
+30551
+16239
+1425
+9
+14369
+39836
+39837
+10769
+32332
+30580
+39838
+30224
+39839
+1100
+39840
+7835
+24840
+179
+39841
+22912
+26320
+176
+590
+39842
+34537
+3407
+21949
+2581
+39843
+39844
+38595
+7835
+15068
+39845
+39846
+39847
+39848
+39849
+1116
+14369
+39850
+345
+21776
+16612
+5912
+31041
+1018
+7053
+528
+32
+9
+17602
+39851
+39852
+21947
+39853
+827
+39854
+35076
+39855
+39856
+39857
+26496
+31293
+4439
+39858
+31293
+43
+411
+27669
+379
+39859
+26611
+39860
+29204
+21947
+286
+39861
+39862
+19655
+39863
+21738
+9
+484
+16450
+7732
+29798
+39864
+22176
+39865
+39866
+39867
+5314
+12919
+484
+39868
+140
+29381
+43
+138
+39869
+89
+1280
+8214
+24766
+14477
+4056
+14477
+39870
+1224
+15654
+39871
+39872
+39873
+39874
+39875
+4820
+19284
+19
+29204
+39876
+39877
+19
+43
+29200
+1108
+39878
+39879
+39880
+9
+39881
+39882
+590
+17635
+30877
+36483
+11754
+24322
+28961
+14825
+39883
+14330
+39884
+24324
+1169
+4502
+3994
+29204
+31293
+3904
+6718
+39885
+17151
+39536
+39886
+39887
+1606
+2187
+28317
+745
+19
+9
+39888
+39889
+43
+514
+39890
+1011
+533
+7237
+861
+17897
+16437
+8160
+30224
+39891
+2
+31293
+36268
+39892
+20825
+104
+7835
+590
+19
+1090
+39893
+39894
+39895
+12231
+39896
+39897
+17033
+39898
+30877
+39899
+5737
+554
+586
+142
+528
+18695
+39900
+7855
+13409
+2919
+37556
+39901
+39902
+36218
+9
+457
+39903
+39904
+16443
+566
+39905
+39906
+27122
+34204
+43
+39907
+39908
+24864
+1749
+3030
+39909
+39910
+14
+39911
+373
+26361
+238
+19
+39912
+19618
+32
+39913
+39914
+39915
+616
+19
+4916
+39916
+39917
+39918
+14369
+39919
+2953
+39920
+38465
+39921
+39922
+7027
+25683
+39923
+2865
+21947
+14343
+323
+39924
+6833
+286
+14001
+8282
+31512
+39925
+536
+39926
+15320
+39927
+25943
+9
+832
+39928
+39929
+39930
+19
+39931
+31346
+39932
+21947
+30650
+11430
+16925
+14369
+4521
+14161
+39933
+39934
+18774
+37556
+43
+38303
+39935
+14363
+590
+36457
+39936
+39937
+39938
+39939
+30877
+9
+39940
+58
+39941
+31293
+19
+39942
+3406
+39943
+30650
+222
+1992
+11202
+1852
+2694
+39944
+26724
+39945
+29209
+2314
+39946
+8528
+14102
+28339
+39947
+1082
+24864
+14369
+39948
+21198
+509
+5780
+1720
+43
+14079
+57
+15
+7478
+39949
+3406
+39950
+39951
+39952
+478
+4760
+4055
+185
+39953
+13539
+39954
+3790
+1531
+39955
+514
+24303
+15164
+1716
+21947
+1234
+1310
+31936
+27069
+399
+31293
+5409
+17997
+39956
+31381
+32523
+98
+29483
+31098
+15
+31225
+38729
+34402
+16466
+37556
+2872
+25943
+24864
+1696
+39957
+22823
+31293
+39958
+39959
+7159
+39960
+31002
+43
+1456
+29483
+39961
+39962
+39963
+39964
+39965
+25584
+1090
+12934
+115
+39966
+39967
+39968
+39969
+2356
+15497
+17412
+37556
+31293
+39970
+7053
+31293
+39971
+21947
+9
+28036
+6115
+39972
+7904
+39973
+15
+4463
+3839
+35423
+7302
+39974
+29483
+586
+39975
+7471
+286
+39976
+1013
+880
+39977
+39978
+39979
+29483
+10946
+39980
+16826
+21947
+39981
+30535
+9
+13304
+37556
+39982
+9
+19655
+21973
+2591
+39983
+39984
+5431
+2314
+39985
+18120
+4
+528
+736
+595
+39986
+19
+446
+39987
+39988
+39989
+20851
+4441
+10
+15718
+43
+415
+39990
+11321
+39991
+39992
+39993
+39994
+39995
+357
+39996
+39997
+39998
+30877
+35086
+38003
+43
+881
+39999
+2064
+10
+40000
+1090
+1021
+2315
+30877
+40001
+15718
+40002
+40003
+40004
+19
+36268
+30877
+17911
+14363
+40005
+1508
+40006
+40007
+43
+40008
+40009
+40010
+40011
+7835
+17151
+30877
+40012
+14363
+40013
+12307
+33494
+40014
+30224
+9
+19618
+40015
+40016
+40017
+28384
+30877
+40018
+40019
+33508
+2779
+40020
+1115
+533
+40021
+40022
+5949
+31225
+862
+14
+28317
+30877
+15718
+5780
+40023
+38760
+11607
+7658
+40024
+40025
+19
+27669
+27069
+1956
+40026
+40027
+19618
+40028
+40029
+40030
+40031
+4100
+26020
+558
+40032
+10616
+20423
+29047
+40033
+19
+40034
+40035
+14947
+40036
+40037
+40038
+40039
+34957
+40040
+29172
+40041
+20442
+36735
+34602
+34402
+40042
+19632
+1710
+583
+13405
+4
+7260
+18939
+37631
+416
+40043
+40044
+15398
+37511
+1912
+4425
+25
+15
+564
+140
+43
+66
+33120
+37556
+40045
+4055
+915
+19406
+39983
+40046
+9
+15718
+29628
+1415
+736
+7123
+40047
+40048
+29483
+3148
+30650
+1013
+155
+104
+21269
+32410
+40049
+40050
+27794
+40051
+2117
+40052
+40053
+40054
+2
+34402
+40055
+137
+18695
+40056
+2349
+40057
+40058
+25316
+19
+14369
+40059
+40060
+8362
+29109
+4116
+40061
+14363
+40062
+40063
+882
+2865
+43
+286
+274
+40064
+40065
+31293
+720
+14515
+936
+29914
+14477
+28295
+38987
+40066
+31293
+40067
+40068
+5725
+736
+3050
+5659
+788
+40069
+10
+40070
+2260
+40071
+201
+21947
+40072
+40073
+3119
+590
+1090
+40074
+40075
+1513
+40076
+40077
+40078
+40079
+37556
+1021
+28961
+415
+38523
+8076
+4313
+4735
+25316
+3345
+40080
+3546
+28295
+40081
+37684
+80
+22
+40082
+39709
+19
+40083
+15
+14898
+25943
+40084
+349
+40085
+7624
+18695
+33306
+6950
+11106
+40086
+16437
+597
+15178
+31293
+17273
+14947
+40087
+40088
+40089
+11
+15718
+915
+40090
+1529
+2314
+1503
+21947
+250
+2764
+40091
+14909
+40092
+40093
+13026
+713
+24045
+40094
+36735
+9633
+119
+40095
+40096
+40097
+15
+30224
+31873
+40098
+23855
+40099
+15497
+43
+27719
+155
+31882
+9
+3484
+31293
+33494
+665
+31293
+40100
+1090
+1464
+40101
+27776
+40102
+25140
+40103
+4055
+40104
+37576
+11263
+40105
+15
+40106
+10946
+19
+40107
+40108
+5188
+40109
+1961
+40110
+38705
+17848
+491
+40111
+25245
+34
+21689
+40112
+1710
+590
+40113
+28317
+18684
+32317
+4820
+40114
+597
+40115
+9
+25140
+18684
+29483
+33010
+40116
+46
+40117
+32
+25316
+40118
+32642
+28441
+4055
+3546
+21947
+40119
+14007
+345
+14981
+3842
+10946
+40120
+484
+31098
+19
+29483
+40121
+590
+2410
+915
+365
+40122
+40123
+8186
+40124
+21947
+33627
+5188
+2577
+26027
+19918
+57
+22864
+2257
+25140
+24403
+32920
+1716
+40125
+16
+18045
+19
+411
+40126
+590
+27669
+1612
+736
+40127
+14330
+40128
+625
+40129
+40130
+14398
+2769
+1011
+1021
+989
+9
+31293
+36268
+25237
+1444
+7987
+40131
+3546
+40132
+30051
+331
+30224
+590
+14369
+10946
+38523
+25316
+40133
+19
+37556
+40134
+43
+40135
+31293
+37556
+9
+40136
+14604
+32
+25395
+868
+30144
+32532
+286
+40137
+13108
+15718
+1716
+40138
+31225
+40139
+2342
+28034
+40140
+40141
+33758
+36268
+18862
+2476
+9452
+3553
+40142
+484
+20
+40143
+40144
+36735
+4820
+30051
+39158
+40145
+2410
+31293
+11508
+1090
+18045
+40146
+19963
+33957
+533
+533
+40147
+40148
+40149
+14909
+40150
+36268
+23504
+989
+40151
+14562
+495
+9
+8367
+40152
+40153
+40154
+12936
+4055
+89
+24260
+38180
+1112
+29007
+213
+5014
+43
+20161
+40155
+415
+40156
+23103
+40157
+284
+19264
+18364
+16879
+40158
+40159
+11158
+1352
+25683
+40160
+40161
+1502
+14369
+26987
+40162
+40163
+40164
+2318
+40165
+19
+28317
+377
+284
+13663
+40166
+22963
+32
+40167
+40168
+40169
+40170
+8220
+21261
+10946
+40171
+37556
+845
+40172
+40173
+586
+40174
+1615
+1316
+40175
+43
+1208
+1961
+31293
+40176
+40177
+9
+28491
+40178
+33508
+590
+40179
+25316
+5071
+40180
+40181
+613
+14363
+4547
+1870
+248
+40182
+17799
+16327
+1531
+3601
+15598
+583
+21947
+284
+357
+40183
+40184
+30877
+40185
+720
+35551
+2264
+5780
+8029
+40186
+26361
+40187
+40188
+26496
+14369
+337
+40189
+6439
+40190
+40191
+31293
+337
+18354
+6225
+40192
+40193
+16731
+1799
+7516
+40194
+40195
+3546
+19
+14603
+14022
+26040
+31293
+4055
+40196
+19
+4026
+31168
+1951
+38465
+18684
+40197
+40198
+40199
+31293
+37556
+40200
+40201
+248
+379
+40202
+40203
+40204
+2281
+40205
+40206
+30877
+736
+2314
+40207
+43
+19
+40208
+40209
+1961
+40210
+201
+1082
+15718
+26361
+24862
+25140
+31293
+25965
+40211
+40212
+40213
+17698
+492
+33325
+40214
+554
+3421
+40215
+248
+40216
+845
+29209
+284
+28549
+10946
+286
+40217
+16063
+25943
+9
+17872
+282
+40218
+31293
+337
+20442
+822
+40219
+303
+1966
+29381
+40220
+13752
+27669
+5833
+114
+40221
+213
+40222
+40223
+554
+1300
+158
+20386
+40224
+17635
+40225
+40226
+17911
+155
+40227
+7835
+15
+2260
+34402
+34
+40228
+2804
+32
+40229
+40230
+4606
+2065
+12987
+40231
+40232
+36268
+303
+40233
+248
+40234
+40235
+43
+40236
+338
+7835
+19
+40237
+178
+40238
+40239
+40240
+13390
+40241
+40242
+12304
+40243
+3
+24864
+1364
+1889
+40244
+17603
+34584
+30224
+40245
+9573
+213
+9
+23103
+23925
+140
+31293
+40246
+4414
+40247
+40248
+590
+40249
+18300
+29945
+18807
+40250
+35992
+23166
+40251
+242
+15718
+34342
+3950
+40252
+40253
+21689
+4720
+29317
+19
+25943
+18744
+17
+38241
+568
+6364
+9573
+40254
+40255
+39983
+40256
+10318
+32714
+686
+40257
+5217
+1743
+248
+21417
+21947
+345
+36638
+5067
+40258
+40259
+40260
+1018
+165
+14369
+248
+40261
+29483
+1364
+37556
+40262
+484
+40263
+28494
+3553
+7658
+1502
+11762
+43
+40264
+40265
+40266
+9
+1696
+23103
+25683
+14477
+770
+40267
+31168
+40268
+1090
+40269
+19
+33061
+317
+1765
+590
+40270
+20442
+11522
+4
+14001
+13361
+284
+37556
+19
+16181
+31293
+40271
+21947
+40272
+26496
+14102
+8249
+33650
+677
+19
+40273
+25056
+548
+29483
+1542
+37808
+40274
+4827
+40275
+10880
+590
+40276
+25904
+40277
+37556
+15951
+40278
+37556
+1090
+671
+14369
+40279
+19618
+40280
+349
+40281
+1090
+40282
+40283
+40284
+40285
+9
+40286
+40287
+9
+40288
+4702
+40289
+10930
+40290
+16466
+3251
+40291
+6086
+40292
+14369
+14477
+712
+5409
+213
+213
+40293
+40294
+736
+19
+17151
+40295
+15914
+416
+140
+36639
+213
+40296
+38523
+40297
+377
+32332
+34641
+38042
+40298
+19354
+37556
+40086
+40299
+40300
+38523
+5344
+11664
+9
+24324
+705
+40301
+40302
+40303
+34319
+40304
+40305
+17269
+6060
+22922
+378
+21947
+6341
+17911
+40306
+15511
+40307
+176
+33627
+40308
+349
+1889
+13224
+40309
+40310
+40311
+2140
+446
+1090
+40277
+28745
+15880
+40312
+40313
+1090
+40314
+27069
+1382
+40315
+40316
+8501
+3239
+18369
+24207
+573
+40317
+1382
+1157
+21947
+10600
+40318
+21045
+19618
+37556
+40319
+31293
+643
+15718
+40320
+40321
+2314
+40322
+40323
+40324
+4055
+40325
+25140
+27719
+40326
+14369
+25904
+7053
+646
+28317
+28036
+40327
+40328
+40329
+40330
+7703
+24144
+40331
+37556
+209
+10946
+40332
+5409
+25996
+10791
+12287
+40333
+40334
+40335
+13390
+40336
+1870
+31293
+8392
+9
+29483
+3470
+12674
+2775
+16063
+137
+12989
+40337
+21269
+194
+15027
+40338
+19
+9
+15
+40339
+24303
+228
+1824
+40340
+39926
+40341
+37556
+1765
+13721
+31234
+10960
+38760
+3844
+40342
+15
+40343
+40344
+43
+1234
+40345
+40346
+176
+32
+11762
+1090
+16798
+19095
+576
+40347
+36736
+491
+15683
+7458
+12590
+40348
+18750
+39709
+1010
+34
+705
+29427
+27669
+40349
+11762
+9
+8780
+31293
+40350
+40351
+15718
+24421
+303
+29483
+40352
+586
+1563
+12987
+40353
+40354
+590
+15
+2383
+15
+4055
+40355
+40356
+8670
+19
+1444
+26708
+1090
+40357
+115
+40358
+35224
+21947
+40359
+20340
+40360
+12080
+1710
+1364
+19042
+29483
+1870
+40361
+590
+19797
+40362
+140
+40363
+30230
+25996
+40364
+40365
+14369
+9629
+40366
+40367
+40368
+38465
+15718
+40369
+317
+16472
+40370
+40371
+20984
+40372
+4278
+35244
+40373
+736
+3994
+36268
+176
+37556
+345
+3243
+40374
+373
+27669
+815
+11273
+590
+40375
+197
+31293
+37385
+30877
+40376
+39709
+9
+40377
+40378
+4055
+40379
+40380
+5188
+40381
+3
+6075
+40382
+2476
+14369
+14363
+30224
+416
+40383
+222
+40384
+910
+27669
+23103
+36736
+19
+19
+4055
+31168
+14025
+40385
+40386
+10
+40387
+1291
+18717
+21832
+28549
+40388
+20700
+40389
+19500
+14604
+39838
+8386
+40390
+2064
+36268
+28317
+4242
+14369
+5650
+40391
+40392
+7964
+40393
+20223
+40394
+43
+14947
+40395
+14079
+40396
+3055
+30051
+11762
+7516
+31679
+40397
+40398
+349
+15
+40399
+1332
+43
+40400
+37556
+40401
+26744
+28206
+40402
+40403
+21947
+566
+677
+40404
+5188
+38944
+2314
+34402
+19
+22
+40405
+37556
+21947
+2243
+20258
+29483
+9389
+13315
+11483
+40406
+40407
+40408
+40409
+66
+40410
+915
+40411
+16323
+14369
+21689
+5313
+39709
+1502
+30051
+2259
+1090
+21133
+40412
+790
+15
+40413
+4713
+5662
+40414
+2039
+1090
+1700
+40415
+12013
+39709
+12402
+40416
+8297
+5803
+2694
+3353
+1054
+2260
+43
+40417
+24303
+1680
+4
+40418
+1169
+30224
+1808
+40419
+40420
+352
+40421
+31346
+40422
+38523
+26157
+40423
+40424
+40425
+3
+164
+25316
+40426
+40427
+40428
+21947
+10
+40429
+1710
+40430
+77
+6095
+1677
+8249
+40431
+829
+1109
+20600
+40432
+17632
+40433
+30458
+29483
+4752
+40434
+40435
+590
+40436
+373
+30051
+3543
+40437
+40438
+349
+40439
+5188
+40440
+31293
+21947
+40441
+37556
+30224
+286
+590
+3546
+3976
+43
+20
+14369
+21947
+40442
+1090
+40443
+33758
+713
+1021
+30917
+3020
+7817
+9607
+25611
+11551
+40444
+40445
+40446
+46
+40447
+6123
+40448
+1090
+5119
+40449
+34402
+9
+40450
+40451
+34712
+19618
+2
+259
+14
+8867
+40452
+40453
+10004
+40454
+40455
+827
+1100
+40456
+19618
+15
+15718
+40457
+249
+40458
+40459
+40460
+21947
+40461
+89
+37556
+8513
+40462
+2038
+40463
+36735
+40464
+2315
+18045
+40465
+590
+40466
+3417
+3950
+28333
+40467
+1774
+40468
+40469
+40470
+34454
+40471
+40472
+21947
+40473
+40474
+823
+5582
+5085
+2
+4230
+40475
+7053
+30877
+98
+12821
+36761
+31293
+40298
+5773
+7053
+31293
+19
+34433
+40476
+24412
+40477
+40478
+40479
+31293
+1684
+13131
+40480
+1870
+270
+33120
+31718
+33650
+14604
+2043
+26779
+40481
+19
+7908
+40482
+22412
+40483
+822
+36279
+43
+28441
+33490
+21947
+40484
+345
+40485
+16978
+865
+40486
+1991
+40487
+1442
+40488
+40489
+18045
+286
+317
+30877
+40490
+27669
+5075
+11541
+39709
+21796
+40491
+40492
+40493
+24482
+590
+40494
+33138
+2619
+14369
+2593
+29179
+40495
+46
+15
+13874
+7521
+14914
+40496
+40497
+10946
+30081
+354
+40498
+7154
+32
+19
+17093
+27669
+40499
+30209
+5188
+40500
+19
+40501
+40502
+40503
+40504
+1716
+24864
+345
+19
+590
+40505
+40506
+540
+15718
+40507
+1907
+29956
+40508
+1566
+40509
+7095
+40510
+153
+38732
+40511
+29639
+140
+40512
+22990
+40513
+590
+40514
+40515
+40516
+29172
+25316
+32275
+43
+736
+14869
+40517
+14369
+40518
+40519
+40520
+7658
+13390
+40521
+40522
+40523
+36218
+6883
+40524
+28219
+40525
+15
+40526
+40527
+36268
+24896
+14020
+40528
+29483
+40529
+31541
+31168
+43
+21947
+29381
+40530
+5092
+2836
+1508
+24864
+23493
+15595
+26040
+2578
+9
+40531
+46
+40532
+40533
+40534
+12827
+37556
+915
+18982
+36683
+40535
+6123
+40536
+39983
+12479
+16437
+9
+31293
+40537
+40538
+3546
+4634
+89
+21947
+25140
+31041
+20
+40539
+40540
+37920
+40541
+2537
+40542
+40543
+30877
+29483
+33627
+1090
+1870
+1090
+40544
+40545
+31293
+14369
+40546
+4055
+345
+1090
+29483
+18310
+36268
+1385
+40547
+14369
+4634
+2
+4684
+25316
+60
+40548
+19
+20600
+40549
+1090
+40550
+40551
+40552
+4411
+40553
+40554
+40555
+115
+31098
+18394
+9
+40556
+4765
+43
+15476
+4028
+40557
+15451
+40558
+40559
+40560
+34402
+104
+4086
+40561
+5649
+30877
+24864
+1454
+342
+30051
+40562
+11822
+8110
+24144
+14369
+40563
+416
+15718
+29483
+36307
+8171
+9
+40564
+16466
+18695
+155
+155
+40565
+31293
+1013
+40566
+77
+28036
+2243
+20161
+5314
+40567
+40568
+2694
+37556
+15718
+3546
+19
+40569
+1384
+21947
+40570
+89
+30139
+40570
+30877
+15718
+3559
+31293
+533
+6275
+21947
+33061
+43
+40571
+736
+155
+14546
+30224
+536
+11822
+590
+491
+4634
+40572
+40573
+40574
+40575
+2779
+31906
+40576
+40577
+2514
+20
+31293
+4123
+16
+14369
+16375
+15718
+10727
+40578
+15474
+18310
+8249
+40579
+40580
+40581
+40582
+36218
+40583
+40584
+25943
+155
+40585
+40586
+269
+1021
+28549
+39980
+40587
+40588
+40589
+40590
+1517
+40591
+40592
+1090
+179
+17151
+317
+2882
+40593
+37556
+564
+40594
+57
+40595
+40596
+286
+40597
+14604
+40598
+21947
+15718
+22
+40599
+24953
+40600
+40601
+590
+40602
+1612
+40603
+33758
+12987
+14477
+11034
+40604
+4055
+40605
+11964
+1961
+9
+1745
+39927
+40606
+5007
+40607
+11402
+40608
+2577
+402
+14532
+5665
+21947
+14909
+27069
+40609
+9
+8280
+18176
+11315
+40610
+39036
+21947
+40611
+43
+33693
+27669
+37556
+40612
+3061
+36736
+40613
+28549
+40614
+40615
+40616
+40617
+10699
+11906
+40618
+13390
+17749
+40570
+40619
+40620
+31139
+40621
+40622
+1415
+40623
+40624
+14369
+14330
+12800
+40625
+40626
+14666
+19
+40627
+40628
+40629
+17340
+40630
+28036
+4745
+40631
+379
+14330
+2
+2593
+40632
+23401
+286
+115
+35665
+40633
+40634
+40635
+713
+40636
+37556
+19
+40570
+40637
+2158
+26387
+3287
+2260
+40638
+6304
+317
+30224
+15592
+40639
+37411
+566
+40640
+31293
+37556
+6616
+23591
+7830
+6335
+40641
+140
+14330
+11907
+13390
+3343
+7053
+16
+9
+33120
+32449
+21947
+155
+38465
+40642
+32603
+114
+29
+40643
+39998
+32
+8994
+35672
+24303
+40570
+590
+17031
+40644
+770
+317
+5188
+155
+533
+30877
+40645
+872
+40646
+40570
+40647
+40648
+40649
+24129
+40650
+590
+1383
+1072
+40651
+13390
+31225
+40652
+40653
+22537
+345
+7658
+19
+40654
+40655
+14369
+5704
+791
+40570
+2043
+40656
+237
+19
+40657
+17810
+40658
+40659
+40660
+38465
+40570
+40661
+40570
+40662
+25140
+19095
+31293
+1637
+20442
+40663
+14330
+33627
+40664
+40665
+27669
+32041
+13807
+40666
+21947
+28339
+4227
+1090
+1228
+31041
+39709
+21947
+40667
+484
+5791
+1300
+29639
+20442
+4055
+22496
+32253
+40668
+40570
+15096
+1867
+40669
+29204
+19
+40570
+40670
+9
+102
+915
+342
+40671
+14369
+40570
+40672
+31293
+35551
+40673
+232
+3546
+40674
+40675
+9
+12281
+40676
+25683
+13829
+27719
+286
+40677
+377
+354
+15718
+40678
+1513
+4441
+2988
+40679
+9
+491
+1674
+40680
+36683
+8297
+40681
+40570
+590
+40682
+29204
+9210
+40683
+827
+21031
+449
+40684
+21947
+1425
+2721
+28345
+2029
+40685
+5627
+36485
+40686
+10574
+179
+14887
+536
+4544
+2446
+21947
+40570
+2537
+5071
+9
+40687
+40688
+7418
+40689
+155
+915
+416
+40690
+40691
+26496
+40692
+60
+27669
+4634
+4230
+15718
+7553
+31516
+15718
+31364
+3546
+40693
+7904
+6048
+40694
+536
+21031
+39552
+22
+40695
+178
+30877
+21045
+40696
+590
+24421
+38667
+9
+5559
+14225
+33650
+25316
+9
+23103
+40697
+140
+40570
+15718
+4
+18394
+34107
+33120
+170
+40698
+40699
+1090
+60
+43
+22963
+37556
+31293
+19
+40700
+40701
+40702
+29628
+155
+40703
+19
+1090
+25316
+33120
+8668
+30051
+3553
+40704
+15
+15718
+155
+40705
+25316
+4963
+768
+37556
+22898
+29483
+40706
+4055
+40707
+16258
+5188
+9402
+40708
+40570
+40709
+34410
+40710
+586
+15
+19
+43
+43
+14330
+19
+35425
+9
+24303
+1011
+4518
+3406
+40711
+40712
+9
+40570
+40713
+40570
+828
+8244
+35318
+201
+31293
+10946
+12095
+40714
+15
+21031
+3296
+15718
+40715
+40716
+590
+176
+1012
+13390
+24303
+3546
+28316
+32438
+915
+40717
+15
+27069
+19
+19
+40718
+40719
+25237
+1508
+2315
+30224
+40570
+13390
+33650
+1710
+6070
+40720
+590
+13207
+25683
+24200
+40721
+30877
+39746
+31293
+18448
+39709
+20700
+40722
+40723
+43
+40724
+349
+9
+40725
+21947
+1716
+28441
+9
+40726
+155
+1385
+40727
+12397
+40728
+40729
+40730
+40731
+30877
+40732
+40733
+32616
+141
+43
+31098
+1011
+18553
+7208
+7516
+861
+519
+16375
+77
+15718
+2882
+89
+17151
+19
+416
+19
+40734
+15718
+16772
+18951
+40735
+19653
+2680
+15951
+40736
+188
+4055
+39983
+379
+155
+40737
+40738
+25316
+31293
+736
+37556
+3
+6364
+3546
+1047
+40739
+155
+155
+533
+1091
+25
+38117
+2537
+4055
+28317
+9573
+20914
+40740
+40741
+286
+33494
+590
+40570
+872
+40742
+25237
+40743
+37556
+40744
+1604
+21947
+8483
+40745
+16586
+1879
+40746
+15
+25140
+19
+29200
+40747
+725
+25316
+46
+19
+19
+24309
+815
+4055
+189
+36268
+40748
+25315
+40749
+40750
+40751
+28317
+9449
+40752
+40753
+26744
+26779
+1013
+1503
+2318
+1382
+38
+43
+40754
+20162
+39709
+40755
+29483
+40756
+40757
+40758
+12152
+2347
+36442
+29733
+358
+40759
+19
+3546
+21947
+7860
+10583
+15504
+40760
+34433
+40761
+40762
+209
+12832
+809
+14369
+34864
+10946
+155
+40763
+14363
+40764
+43
+1529
+1901
+6468
+14
+10946
+40765
+40766
+15
+24864
+33120
+40143
+9460
+9012
+16
+31293
+40570
+40767
+7379
+671
+14330
+193
+936
+15718
+17911
+40768
+822
+155
+31293
+40769
+32438
+24811
+40770
+40771
+40772
+17385
+40773
+40774
+40775
+5808
+40776
+27669
+31293
+40777
+613
+286
+40778
+20340
+40779
+22141
+40780
+40781
+40570
+40782
+40570
+8813
+10
+33113
+15970
+36268
+1107
+26199
+40783
+15718
+27669
+40784
+43
+15220
+31375
+43
+12434
+155
+28036
+24192
+40785
+1571
+40570
+705
+6732
+14369
+457
+4055
+712
+40570
+155
+40786
+3839
+36638
+3119
+1529
+32
+37476
+8569
+76
+40787
+590
+9
+25943
+958
+7786
+5773
+1604
+7123
+30877
+31293
+37556
+40788
+40789
+21947
+29200
+20757
+736
+40790
+19852
+28441
+40791
+40792
+9
+37556
+34602
+138
+13390
+40793
+40794
+40795
+30877
+40796
+19
+21947
+40797
+40798
+40799
+40800
+40801
+31293
+32
+7564
+40802
+1090
+1382
+29200
+40803
+33445
+14330
+1656
+9894
+40804
+30307
+1508
+40570
+357
+40805
+31852
+7276
+31168
+30877
+40806
+9941
+40807
+14369
+1251
+4055
+14240
+40808
+40570
+16437
+21947
+40809
+21947
+40810
+40811
+7260
+12534
+15384
+2006
+15411
+40812
+3978
+16535
+14369
+40813
+40814
+40815
+19
+18577
+8392
+40816
+19318
+29381
+40817
+970
+30877
+40818
+16437
+16
+40819
+40820
+9
+24303
+31293
+37556
+40570
+43
+40821
+590
+40822
+12800
+9
+40823
+9
+2577
+286
+21796
+31293
+345
+24339
+40824
+40825
+301
+861
+32299
+40570
+40826
+2372
+15718
+5188
+40827
+5629
+155
+40828
+40829
+3976
+40830
+4
+721
+25281
+29
+40417
+1961
+30846
+8967
+1961
+19618
+40591
+40831
+590
+40832
+17
+40833
+40834
+19618
+40835
+40836
+40837
+40838
+40839
+323
+24864
+8846
+17911
+40840
+43
+10662
+40841
+40842
+40843
+21947
+590
+40844
+3351
+40845
+40846
+18811
+35224
+286
+36268
+37920
+317
+5119
+40847
+40848
+19095
+40849
+9934
+4115
+31293
+30877
+14102
+40850
+38944
+40851
+40852
+40853
+40854
+37556
+40855
+18744
+26496
+40856
+43
+40857
+17872
+40858
+7860
+40859
+827
+538
+286
+19
+104
+40860
+595
+155
+89
+155
+40861
+5344
+2540
+25164
+249
+19
+40862
+40863
+35692
+40864
+36483
+352
+2694
+16571
+19
+1272
+40865
+21629
+40866
+40867
+16017
+40868
+9
+40869
+1385
+31293
+155
+1090
+17911
+30877
+25316
+5448
+155
+29639
+17635
+40870
+13390
+40871
+554
+915
+2694
+1710
+40872
+15
+694
+40873
+17385
+31293
+7835
+40874
+3061
+30917
+30877
+14369
+40875
+36858
+40570
+40876
+1090
+33627
+4263
+2561
+1847
+155
+40877
+40878
+15
+40570
+15
+6627
+3601
+19
+40879
+40880
+25871
+40570
+15572
+32896
+165
+40881
+19618
+40882
+2635
+5662
+155
+40883
+40884
+30650
+40885
+2865
+540
+855
+178
+40570
+27669
+40886
+27069
+40887
+1790
+40888
+89
+40889
+40890
+31293
+26744
+19
+1681
+40891
+33061
+30877
+33116
+46
+40892
+872
+9
+40893
+155
+31293
+40894
+40895
+17810
+40896
+14369
+33120
+446
+38465
+892
+8668
+40897
+40898
+197
+27447
+40899
+40900
+28036
+10946
+19
+448
+104
+21657
+40901
+40902
+39563
+40903
+155
+40904
+29483
+25943
+4550
+40339
+40905
+40906
+4075
+2694
+40907
+36928
+40908
+40570
+155
+9
+20514
+1224
+590
+39344
+40909
+40910
+40911
+19618
+40912
+30542
+33469
+28295
+28549
+21027
+35656
+11697
+40913
+40914
+2022
+19
+40915
+53
+40916
+286
+40570
+40917
+15718
+16437
+18473
+5601
+43
+13905
+399
+31995
+13807
+40918
+491
+18300
+2694
+40919
+40920
+9
+40921
+40922
+40923
+12987
+536
+21259
+33627
+20443
+40924
+30051
+17730
+301
+40925
+31225
+13307
+19
+40926
+1536
+27861
+40570
+317
+19
+14369
+820
+2254
+40927
+40928
+40929
+6595
+155
+40930
+40931
+40932
+20560
+736
+1115
+155
+40933
+284
+40934
+40935
+31293
+1907
+2195
+40936
+40937
+337
+40938
+1157
+140
+14001
+8483
+40570
+40939
+40940
+18516
+15718
+22673
+24303
+40941
+31293
+7585
+31293
+40942
+303
+1013
+270
+354
+155
+40943
+27669
+40944
+40945
+40946
+40947
+10841
+40948
+2877
+6505
+2015
+40949
+40950
+284
+40951
+12696
+43
+155
+40952
+40953
+3
+40954
+40955
+40956
+3976
+40957
+8560
+303
+14477
+5700
+14330
+40958
+40959
+15364
+40960
+10847
+40961
+28441
+597
+342
+213
+40962
+1710
+823
+37556
+40963
+6294
+1765
+40964
+201
+40965
+40966
+3601
+9
+40967
+19
+34488
+17
+40968
+14369
+40969
+40970
+40971
+590
+29381
+6095
+40972
+2314
+4414
+37556
+40973
+40974
+1787
+6728
+40975
+822
+10946
+303
+40976
+40977
+40570
+25237
+31293
+19655
+39709
+5399
+40978
+22
+40979
+40980
+33758
+40981
+8297
+5188
+40570
+40982
+40983
+3601
+613
+248
+3171
+25140
+40984
+736
+303
+213
+40985
+103
+6341
+3826
+40986
+736
+19
+23103
+40570
+40987
+40988
+40989
+1082
+40990
+40570
+26452
+12005
+14369
+40991
+9
+40992
+1469
+40993
+40994
+40995
+209
+40996
+40997
+40998
+19
+40570
+6468
+11321
+415
+228
+281
+66
+155
+40999
+17385
+41000
+13474
+39709
+41001
+1090
+6054
+30877
+9988
+33758
+41002
+1090
+41003
+9
+40570
+31873
+21947
+41004
+41005
+41006
+209
+66
+22
+751
+31293
+337
+41007
+2234
+31293
+29483
+41008
+39709
+2372
+30224
+21947
+701
+22963
+57
+345
+25871
+6316
+41009
+33650
+30224
+41010
+41011
+41012
+4317
+345
+21729
+28317
+40570
+34402
+28549
+41013
+21089
+41014
+533
+286
+4055
+41015
+28317
+41016
+41017
+41018
+15
+41019
+41020
+13390
+41021
+2998
+323
+590
+1222
+17151
+3546
+15718
+41022
+554
+41023
+185
+19
+37556
+14477
+137
+41024
+7855
+41025
+1291
+41026
+6054
+958
+21947
+155
+31293
+41027
+31293
+809
+41028
+27669
+225
+140
+8297
+3546
+209
+40570
+41029
+337
+155
+41030
+41031
+3182
+399
+736
+25868
+2471
+9
+41032
+41033
+5188
+249
+41034
+41035
+41036
+41037
+4425
+41038
+24725
+39536
+491
+28629
+8367
+1090
+15718
+14369
+1710
+1013
+10230
+41039
+1867
+5791
+4518
+41040
+41041
+19
+14369
+41042
+26127
+19
+28490
+20442
+24864
+248
+41043
+41044
+41045
+14477
+41046
+36735
+41047
+3546
+16798
+8668
+41048
+2728
+14477
+41049
+40570
+5085
+41050
+41051
+57
+15718
+76
+590
+40570
+904
+40394
+19
+41052
+41053
+38536
+29483
+41054
+41055
+19
+1208
+41056
+41057
+21776
+41058
+40570
+19
+19
+41059
+2686
+41060
+21947
+41061
+590
+19109
+41062
+33627
+1090
+29251
+41063
+41064
+13675
+9
+40570
+155
+41065
+15718
+10946
+8282
+26355
+31168
+24896
+2550
+36483
+1112
+14216
+38003
+12800
+248
+41066
+41067
+41068
+41069
+40570
+41070
+13390
+41071
+43
+3317
+41072
+33650
+15914
+41073
+11522
+40570
+14001
+41074
+15102
+2038
+1090
+30458
+99
+18418
+303
+31293
+41075
+29483
+41076
+5297
+41077
+21947
+590
+41078
+41079
+41080
+694
+6306
+9440
+842
+41081
+33496
+4518
+2830
+31293
+41082
+1047
+2728
+13528
+41083
+41084
+337
+11192
+265
+18569
+284
+31661
+31293
+40570
+32897
+41085
+19
+1090
+33693
+2577
+6006
+4637
+34402
+28317
+39250
+41086
+25382
+41087
+36946
+9
+43
+36268
+213
+15718
+590
+21947
+41088
+669
+1716
+21269
+1090
+648
+248
+112
+15718
+1456
+25316
+17691
+1969
+41089
+104
+18283
+37556
+301
+9
+2064
+1386
+2254
+4502
+40570
+38760
+41090
+10
+41091
+164
+35870
+21131
+41092
+3553
+41093
+30209
+41094
+43
+11
+3417
+39709
+24896
+352
+32856
+40570
+736
+6893
+18631
+19
+31293
+37556
+41095
+7276
+30814
+19
+60
+590
+41096
+41097
+345
+41098
+155
+9
+9
+9
+15
+7658
+41099
+20223
+41100
+8763
+1234
+41101
+29483
+41102
+20413
+213
+12067
+41103
+13143
+2833
+28237
+41104
+41105
+6341
+9713
+6287
+1961
+265
+13390
+41106
+40570
+9
+41107
+32087
+89
+41108
+770
+590
+41109
+41110
+41111
+8772
+77
+41112
+31293
+4463
+41113
+16772
+23103
+31293
+28490
+41114
+38760
+28035
+43
+21669
+8961
+33650
+213
+41115
+213
+41116
+19
+36076
+5410
+13390
+41117
+14369
+15718
+155
+20280
+590
+37556
+41118
+8668
+41119
+14330
+39709
+37556
+41120
+41121
+25584
+40570
+41122
+4055
+495
+41123
+32
+28490
+24864
+41124
+11824
+412
+41125
+33141
+89
+41126
+38687
+33650
+25859
+13721
+41127
+137
+41128
+37556
+33650
+1870
+16826
+2410
+41129
+2314
+24725
+41130
+9
+590
+2917
+43
+17687
+41131
+41132
+9
+41133
+1615
+31293
+1208
+21027
+21947
+137
+7516
+40570
+284
+213
+337
+41134
+41135
+41136
+337
+1716
+41137
+20445
+31293
+19
+33627
+40570
+1514
+21947
+30877
+17602
+301
+491
+41138
+13045
+32871
+17382
+201
+3601
+41139
+31575
+41140
+41141
+30877
+40570
+13721
+303
+20774
+41142
+29483
+21262
+26416
+39709
+32871
+248
+31249
+284
+41143
+41144
+9
+9
+41145
+3546
+19405
+16437
+41146
+43
+41147
+4055
+286
+590
+4116
+15718
+140
+16437
+41148
+1823
+337
+41149
+41150
+34752
+41151
+41152
+337
+213
+1228
+41153
+41154
+9
+40029
+41155
+21729
+41156
+29153
+613
+40472
+41157
+1090
+213
+248
+15655
+5025
+915
+41158
+7516
+36268
+123
+41159
+9
+40570
+15498
+41160
+14330
+31293
+284
+41161
+9
+41162
+41163
+20555
+10946
+41164
+10946
+41165
+38595
+9
+38760
+9
+31703
+15718
+12987
+20
+41166
+17042
+14534
+15718
+22337
+18258
+3790
+590
+31098
+40483
+31383
+38465
+31189
+41167
+40570
+568
+9
+41168
+19
+37556
+6518
+1090
+11801
+41169
+41170
+671
+41171
+41172
+41173
+41174
+112
+41175
+14330
+37556
+10601
+8210
+18145
+36452
+20
+19
+19
+41176
+1531
+37211
+40570
+33278
+1330
+29483
+1224
+41177
+1529
+155
+248
+40570
+27669
+41178
+15718
+38421
+41179
+3030
+14330
+41180
+5415
+37556
+228
+155
+15718
+1766
+41181
+15718
+27619
+29381
+37920
+41182
+30580
+1010
+46
+19
+176
+213
+37556
+40712
+155
+17144
+30877
+8717
+2
+23322
+5204
+40570
+27178
+4055
+31293
+11087
+1186
+8297
+25316
+41183
+25237
+9410
+19095
+1047
+19
+43
+40570
+411
+33863
+41184
+41185
+24864
+17151
+33624
+317
+41186
+41187
+19
+41188
+30877
+9
+27954
+29483
+41189
+77
+5071
+16466
+40570
+41190
+33627
+5409
+29381
+533
+16798
+41191
+41192
+41193
+286
+43
+40570
+43
+30291
+41194
+41195
+39709
+14369
+20
+416
+2410
+31293
+3597
+8210
+317
+57
+30650
+1502
+36268
+155
+40570
+26022
+27669
+24725
+24864
+40570
+37556
+41196
+11010
+1716
+28745
+33650
+24303
+36268
+15718
+17144
+13390
+41197
+155
+6950
+24045
+303
+41198
+41199
+141
+2410
+1870
+1090
+41200
+665
+164
+15718
+2121
+41201
+5080
+16539
+33650
+40570
+41202
+10659
+4026
+1090
+31293
+12800
+36735
+34402
+33061
+41203
+41204
+24300
+41205
+2476
+3978
+345
+41206
+30224
+8668
+7516
+21689
+11620
+14477
+41207
+533
+41208
+2764
+41209
+155
+41210
+41211
+27669
+4627
+14477
+41212
+41213
+35883
+8670
+10356
+39709
+3100
+41214
+31603
+24864
+5169
+31293
+14693
+21947
+30877
+9
+14477
+41215
+21947
+41216
+41217
+736
+554
+32
+41218
+41219
+41220
+41221
+209
+15718
+41222
+40591
+32022
+41223
+1090
+9
+6468
+40570
+26043
+19
+19
+18310
+41224
+33627
+21791
+36268
+19
+19
+284
+23150
+590
+2061
+37556
+40570
+25
+1157
+43
+12788
+1244
+41225
+21791
+36492
+345
+26040
+1559
+41226
+41227
+41228
+142
+440
+41229
+41230
+33445
+21791
+41231
+3732
+31293
+41232
+27669
+398
+33120
+3546
+21968
+41233
+17872
+893
+176
+38760
+590
+6038
+41234
+7324
+41235
+37556
+31293
+14017
+13721
+29172
+41236
+10946
+30224
+41237
+21089
+89
+2493
+19792
+40591
+5577
+349
+41238
+41239
+41240
+41241
+34
+9410
+1295
+31995
+6496
+41242
+41243
+41244
+31293
+1795
+31293
+33758
+37556
+31293
+21698
+12404
+15645
+43
+19
+41245
+25164
+36268
+41246
+5085
+2591
+5188
+41247
+9
+41248
+155
+41249
+38760
+155
+17937
+22
+41250
+32
+38893
+41251
+2
+41252
+15
+42
+17872
+57
+3958
+36268
+9
+41253
+989
+41254
+1090
+41255
+303
+791
+41256
+18045
+4722
+22468
+12582
+2577
+41257
+17911
+25316
+41258
+15718
+41259
+40570
+41260
+12959
+8668
+34242
+3553
+185
+887
+24324
+41261
+155
+41262
+37556
+822
+40570
+41263
+40591
+41264
+5065
+5130
+40861
+43
+41265
+13390
+3375
+41266
+19
+41267
+41268
+24303
+413
+9558
+41269
+25237
+1107
+11026
+3814
+40570
+29483
+1090
+40570
+2264
+20247
+1051
+19109
+201
+21947
+41270
+23103
+41271
+21947
+29381
+41272
+9
+40570
+7053
+39
+28317
+15718
+41273
+7852
+28490
+43
+671
+41274
+29200
+41275
+41276
+41277
+19
+41278
+115
+41279
+33330
+34402
+30650
+40570
+41280
+14510
+155
+478
+2410
+41281
+41282
+41283
+478
+1169
+24864
+345
+18233
+31995
+1224
+46
+41284
+41285
+40570
+1224
+31293
+32410
+41286
+43
+41287
+41288
+43
+41289
+41290
+5071
+25140
+19
+46
+41291
+41292
+17151
+30551
+2136
+13390
+1374
+39
+29620
+6038
+41293
+16258
+13390
+37556
+41294
+41295
+26027
+41296
+19
+41297
+9
+41298
+31691
+41299
+16640
+17174
+15148
+1513
+41300
+21947
+43
+43
+3008
+41301
+179
+41302
+41303
+41304
+209
+19
+323
+40591
+201
+14330
+4053
+19852
+37556
+33818
+21947
+3546
+41305
+41306
+41307
+41308
+5188
+7419
+33038
+32
+14330
+41309
+21947
+41310
+41311
+15
+41312
+41313
+10846
+27522
+27117
+41314
+6115
+25316
+1090
+14330
+41315
+40570
+15797
+6499
+41316
+6935
+6571
+19
+1870
+41317
+41318
+6011
+19
+37202
+36218
+41319
+27669
+1688
+14102
+1863
+41320
+41321
+1251
+38760
+15718
+41322
+30877
+21947
+17508
+57
+165
+155
+16790
+736
+1912
+31873
+614
+41323
+9
+29628
+4028
+14001
+205
+29434
+41324
+1763
+38315
+1013
+40570
+18956
+4441
+41325
+4151
+21947
+20161
+155
+41326
+26361
+1116
+41327
+989
+15810
+10
+30877
+41328
+8424
+19
+9
+345
+15
+41329
+18208
+14369
+39709
+17151
+33650
+541
+2356
+2446
+36683
+22552
+41330
+14001
+2060
+411
+41331
+23150
+32449
+33061
+20785
+1244
+41332
+41333
+41334
+41335
+41336
+41337
+1208
+41338
+41339
+862
+41340
+201
+41341
+915
+19
+18045
+12987
+29381
+31293
+41342
+37556
+7014
+26470
+33120
+41343
+155
+41344
+41345
+3546
+958
+1018
+2121
+10418
+155
+41346
+43
+1529
+41347
+66
+155
+33650
+41348
+41349
+29483
+30794
+8304
+18045
+8845
+514
+25316
+25996
+345
+25528
+40570
+41350
+17911
+31293
+41351
+41352
+33123
+41353
+14962
+19
+10265
+21269
+41354
+10482
+41355
+43
+41356
+3601
+41357
+40570
+41358
+1154
+41359
+5204
+24303
+36054
+18683
+29981
+6441
+41360
+1870
+13721
+13290
+33693
+648
+41361
+33786
+11158
+41362
+9
+24862
+15
+41363
+14477
+37556
+41364
+31293
+583
+23727
+41365
+13390
+16375
+1956
+1090
+41366
+10
+7835
+41367
+31293
+823
+30877
+34283
+41368
+33141
+2287
+2828
+41369
+3067
+13390
+41370
+155
+31293
+41371
+41372
+872
+790
+41373
+4055
+15541
+41374
+41375
+5438
+40570
+41376
+4808
+29815
+1716
+377
+28961
+416
+41377
+41378
+33627
+155
+1520
+21689
+30051
+35339
+349
+10727
+19618
+4053
+29483
+1307
+41379
+2764
+36736
+1502
+155
+495
+41380
+23226
+41381
+41382
+5075
+41383
+22355
+37556
+41384
+41385
+41386
+41387
+41388
+1444
+7835
+15718
+27669
+41389
+3981
+41390
+41391
+41392
+155
+24725
+41393
+21947
+4028
+41394
+155
+7183
+25316
+41395
+41396
+590
+43
+6341
+41397
+5627
+32275
+1090
+41398
+25
+21947
+41399
+40570
+15718
+17911
+30224
+2260
+41400
+5326
+6284
+15718
+15
+31293
+41401
+341
+14369
+30877
+41402
+41403
+41404
+37556
+123
+29483
+17356
+9
+41405
+31422
+41406
+1812
+41407
+595
+2015
+25316
+178
+37556
+554
+4055
+14369
+415
+349
+17982
+861
+41408
+15718
+9
+14604
+41409
+20941
+33650
+30877
+41410
+1224
+37573
+41411
+41412
+40570
+40570
+37556
+30877
+14
+41413
+29200
+720
+33120
+13390
+20329
+19
+41414
+5659
+590
+14330
+41415
+40570
+1536
+19
+2101
+1172
+12800
+345
+270
+41416
+21947
+4028
+41417
+2043
+8188
+14330
+936
+9
+18683
+13390
+17277
+15914
+41418
+590
+41419
+28194
+33436
+7521
+33627
+2197
+1364
+41420
+6728
+41421
+40877
+43
+1160
+15768
+823
+31293
+1668
+41422
+41423
+40570
+707
+24811
+31293
+352
+286
+6341
+7413
+29483
+849
+41424
+554
+41425
+36735
+41426
+20
+19
+9410
+41427
+32386
+41428
+41429
+3598
+25237
+19
+15342
+36268
+41430
+1992
+41431
+5629
+19
+17911
+14000
+41432
+41433
+41434
+41435
+5790
+34517
+345
+41436
+40570
+41437
+43
+915
+3546
+33438
+19
+41438
+19618
+41439
+41440
+2121
+176
+17911
+13390
+40570
+9
+250
+41441
+37990
+41442
+40570
+590
+40570
+2859
+345
+39783
+6627
+41443
+41444
+41445
+643
+201
+27669
+29716
+2694
+43
+41446
+495
+21947
+12479
+43
+18045
+1765
+1228
+41447
+21027
+176
+1870
+1578
+41448
+286
+41449
+29483
+37556
+21947
+137
+514
+13740
+19406
+1905
+43
+842
+41450
+41451
+464
+169
+19
+29483
+397
+41452
+40570
+8772
+10115
+1082
+31293
+5908
+7835
+41117
+37556
+8545
+35788
+3950
+41453
+41454
+41455
+41456
+33693
+28036
+41457
+34165
+41458
+41459
+20700
+41460
+40591
+41461
+41462
+272
+41463
+14660
+21776
+14477
+41464
+41465
+15718
+14330
+41466
+41467
+41468
+41469
+2410
+671
+1051
+41470
+41471
+38275
+416
+41472
+41473
+41474
+41475
+32410
+412
+41476
+11763
+4821
+41477
+25140
+34710
+30051
+31293
+665
+554
+41478
+284
+4293
+43
+29483
+240
+37556
+1765
+41479
+1710
+25316
+41480
+41481
+16437
+41482
+57
+10642
+19634
+41483
+33508
+41484
+37556
+34752
+40570
+1920
+1513
+370
+21947
+115
+41485
+30877
+41486
+41487
+41488
+41489
+89
+4055
+24303
+41490
+40570
+14330
+24864
+37139
+1987
+4461
+41491
+40570
+15
+31019
+41492
+46
+317
+249
+14369
+41493
+41494
+26361
+41495
+10028
+41496
+38374
+14369
+377
+8297
+13905
+5252
+19168
+22507
+14363
+286
+21947
+41497
+11176
+23150
+37556
+41498
+10984
+4824
+24303
+41499
+41500
+41501
+19
+10946
+41502
+41503
+41504
+41505
+12976
+41506
+41507
+11459
+9
+278
+41508
+19
+41509
+40570
+115
+41510
+24725
+1559
+13390
+39593
+41511
+40570
+1090
+19618
+41512
+41513
+155
+317
+1045
+41514
+6571
+9
+590
+41515
+8946
+4631
+41516
+28208
+28755
+77
+27719
+31639
+21947
+36282
+32
+41517
+6294
+40570
+41518
+15718
+40570
+6086
+28317
+3546
+14369
+6214
+590
+5629
+4518
+41519
+14477
+1090
+14477
+25943
+41520
+15439
+26361
+1131
+31293
+41521
+8392
+11754
+41522
+8053
+37556
+6038
+10946
+35107
+1765
+41523
+9
+96
+2859
+286
+26496
+5085
+41524
+827
+7053
+27669
+14
+41525
+19655
+41526
+178
+1369
+11362
+13528
+1300
+41527
+9
+28935
+7697
+30224
+3964
+6015
+34402
+41528
+24144
+21947
+6010
+1090
+41529
+12995
+286
+41530
+41531
+5071
+2649
+8188
+41532
+41533
+12479
+41534
+38760
+1978
+6499
+30051
+2038
+41535
+29483
+38760
+43
+41536
+22901
+41537
+41538
+14369
+31293
+41539
+33128
+36735
+11321
+33650
+16466
+41540
+41541
+13207
+39709
+41542
+2561
+613
+40570
+189
+41543
+41544
+34804
+41545
+2308
+67
+40570
+32332
+23303
+40570
+41546
+29483
+31293
+188
+37556
+4364
+25402
+41547
+32563
+36054
+21947
+4502
+17901
+19618
+36253
+21947
+5923
+4461
+24864
+29275
+41548
+491
+1090
+6869
+9
+35784
+910
+572
+665
+41549
+5085
+1090
+41550
+41551
+41552
+33627
+155
+1425
+32
+41553
+41554
+590
+2577
+41555
+26277
+19
+1604
+40570
+29200
+41556
+201
+28845
+11428
+41557
+41558
+25237
+40570
+36
+36268
+38760
+19318
+9
+2537
+29032
+9
+41559
+1374
+598
+770
+41560
+41561
+41562
+43
+28845
+41563
+2577
+7835
+33650
+41564
+16102
+155
+30051
+971
+41565
+35120
+41566
+415
+14369
+9
+16124
+40570
+13765
+14477
+25683
+38760
+41567
+165
+41568
+13390
+14527
+119
+41569
+5650
+24154
+4364
+41570
+4677
+9
+115
+41571
+19
+832
+4461
+677
+40472
+790
+31293
+22
+2841
+1606
+19
+29204
+209
+41572
+25237
+28845
+41573
+155
+23343
+29244
+30650
+2064
+19
+1875
+12722
+32
+41574
+41575
+27669
+28845
+415
+849
+14330
+958
+1991
+34650
+3330
+5803
+155
+12987
+25237
+41576
+41577
+41578
+41579
+24864
+8351
+15718
+30051
+41580
+39536
+411
+2610
+3553
+18896
+28672
+41581
+24144
+41582
+40570
+27669
+41583
+41584
+1090
+30056
+209
+36268
+21713
+41585
+41586
+18077
+28295
+4760
+7835
+34160
+27615
+20700
+41587
+18815
+41588
+41589
+1364
+4124
+41590
+10
+13721
+41591
+5204
+9
+99
+786
+41592
+5085
+41593
+41594
+31293
+41595
+25140
+41596
+9
+4055
+41597
+41598
+4388
+29967
+17151
+33758
+14420
+40570
+34351
+10
+15
+40570
+41599
+40570
+41600
+2811
+40570
+17345
+41601
+104
+28317
+5791
+317
+40570
+41602
+15718
+41603
+39211
+31257
+713
+28317
+41604
+41605
+196
+33650
+2308
+38653
+21669
+4075
+38465
+15471
+41606
+28036
+26158
+32538
+41607
+41608
+32885
+9543
+495
+29951
+41609
+41610
+8367
+41611
+1018
+41612
+21947
+2314
+41613
+155
+41614
+32
+41615
+155
+41616
+41617
+37411
+36736
+3480
+41618
+37556
+19
+41619
+19
+29483
+7253
+25943
+34047
+41620
+13959
+79
+41621
+16178
+22735
+3842
+2700
+20339
+19618
+41622
+41623
+31824
+41624
+41625
+30551
+24460
+40570
+26142
+19
+377
+9913
+4821
+37556
+41626
+1224
+14369
+41627
+28845
+3509
+15718
+13390
+15989
+41628
+19618
+736
+41629
+41630
+17281
+2832
+30051
+41631
+7516
+13943
+2764
+41632
+1517
+28845
+3842
+31293
+41633
+41634
+41635
+41636
+41637
+41638
+17385
+1562
+41639
+41640
+41641
+19
+20518
+41642
+31603
+28845
+16371
+43
+13578
+41643
+41644
+41645
+24666
+14369
+41646
+13390
+41647
+14369
+5737
+19
+2560
+30191
+10470
+41648
+41649
+26724
+43
+41650
+32019
+40570
+20974
+9
+41651
+41652
+28251
+39111
+38465
+41653
+6595
+30051
+77
+41654
+28317
+1502
+37588
+30589
+40176
+41655
+41656
+41657
+3964
+21947
+41658
+155
+590
+1860
+40570
+43
+41659
+41660
+155
+41661
+43
+17698
+25316
+41662
+586
+2694
+41663
+29483
+40570
+3417
+41664
+1090
+41665
+41666
+32455
+27669
+41667
+24864
+19
+41668
+1688
+16443
+179
+41669
+41670
+12987
+21947
+379
+179
+7977
+2
+41671
+40570
+11702
+484
+2314
+1090
+16102
+5085
+34408
+41672
+41673
+25943
+12907
+33627
+41674
+5803
+41675
+40911
+9
+590
+30051
+4055
+16443
+28845
+286
+21030
+2577
+1863
+41676
+41677
+9400
+41678
+41679
+41680
+8338
+41681
+1172
+19
+41682
+590
+25943
+41683
+15718
+31293
+21947
+31293
+30877
+7835
+590
+2314
+736
+27954
+38419
+16826
+2040
+155
+6928
+415
+155
+37476
+5085
+745
+37808
+25316
+6261
+34402
+1536
+9
+32
+41684
+40570
+13801
+29483
+13283
+4028
+41685
+22815
+3528
+41686
+5075
+30224
+41687
+13390
+9
+40841
+5908
+41688
+155
+27669
+32275
+41689
+43
+40570
+41690
+41691
+41692
+41693
+31293
+828
+31293
+15718
+284
+40570
+317
+41694
+36594
+35497
+37556
+3546
+21947
+38667
+18045
+7658
+26641
+41695
+41696
+7835
+41681
+41697
+41698
+41699
+41700
+7835
+209
+19494
+2254
+19
+31293
+40570
+303
+41701
+16437
+41702
+2971
+6305
+303
+1870
+19
+17670
+41703
+28845
+4803
+40570
+9548
+41704
+43
+29483
+41705
+31293
+43
+491
+37808
+13848
+41706
+9
+248
+38033
+41707
+484
+41708
+41709
+41710
+20700
+41711
+33120
+15718
+40570
+41712
+41713
+337
+41714
+2061
+6952
+16437
+29597
+345
+57
+30974
+41715
+40570
+4
+41716
+9
+1100
+41717
+41718
+41719
+41720
+790
+736
+41721
+41722
+41723
+23487
+9
+4001
+40226
+590
+33709
+41724
+41725
+4055
+1262
+40570
+14604
+23277
+41726
+7379
+41727
+25
+41728
+41729
+915
+32953
+25237
+3546
+41687
+41730
+1765
+41731
+41732
+35613
+2040
+41733
+41734
+250
+4028
+915
+41735
+41736
+1090
+352
+99
+33758
+40067
+22587
+33627
+41737
+41738
+41739
+41740
+8994
+31225
+37556
+41741
+7835
+14477
+15514
+21947
+19
+590
+41742
+2117
+19618
+15906
+19
+41743
+41744
+41745
+4761
+349
+41746
+484
+41747
+17386
+873
+2733
+41748
+14947
+29956
+533
+165
+16102
+41749
+415
+41750
+20
+41751
+41752
+41753
+29628
+15718
+41754
+43
+16798
+6612
+20
+41755
+36686
+6935
+1223
+28929
+11601
+3994
+41756
+5601
+37556
+495
+41757
+12869
+41758
+1112
+1444
+645
+12013
+41759
+41760
+41761
+20442
+41762
+13721
+40570
+41763
+21276
+25129
+303
+41764
+41765
+38760
+41766
+8367
+613
+817
+33726
+43
+24332
+40570
+41767
+1011
+21398
+41695
+40570
+33627
+33758
+19792
+41768
+7123
+41769
+41770
+41771
+5409
+21941
+41772
+41773
+28194
+30051
+41774
+22
+41775
+43
+40570
+765
+1018
+590
+284
+349
+41776
+21669
+41777
+213
+19
+41778
+2029
+4364
+41779
+41780
+14448
+41781
+41782
+41783
+41784
+41785
+24896
+179
+286
+313
+41786
+30650
+6744
+1870
+41787
+41788
+1536
+29591
+12055
+13570
+31041
+24045
+41789
+40570
+41790
+337
+16413
+41791
+38944
+41792
+24864
+41793
+38760
+8110
+34936
+41794
+41795
+19
+437
+37556
+43
+1262
+14330
+155
+15718
+19057
+41796
+616
+31293
+1481
+41797
+11966
+41798
+41799
+412
+18919
+713
+11940
+17412
+16140
+4502
+19237
+323
+4441
+41800
+225
+41801
+3330
+3353
+31073
+41802
+155
+827
+14477
+25237
+8668
+41803
+41804
+533
+41805
+33650
+19618
+8668
+29007
+41806
+282
+41807
+19618
+41808
+18242
+39346
+24864
+40570
+707
+377
+41809
+533
+21947
+1961
+872
+284
+1090
+201
+41810
+41811
+41812
+590
+41813
+15942
+41814
+41815
+41816
+19
+41817
+21947
+41818
+32909
+41819
+41820
+5409
+5916
+31293
+713
+4055
+28845
+34402
+9
+41821
+41822
+1812
+36735
+21947
+41823
+37556
+31293
+32150
+30917
+28845
+29204
+41824
+1090
+13131
+41825
+33141
+155
+23103
+77
+41826
+40570
+37920
+35316
+37556
+41827
+41828
+41829
+24896
+27669
+269
+41830
+736
+155
+40570
+14369
+6275
+34402
+927
+41831
+41832
+41833
+5650
+41834
+28317
+41835
+29483
+40570
+41836
+15320
+4855
+910
+41837
+286
+41838
+2187
+41839
+41840
+28234
+989
+41841
+10736
+41842
+6171
+179
+14330
+13693
+590
+590
+15183
+24045
+41843
+155
+590
+9
+41844
+40570
+27900
+41845
+41846
+18695
+20616
+9925
+8611
+19
+9
+31873
+12987
+1157
+41847
+29483
+41687
+41848
+41849
+41850
+29628
+20
+597
+25
+41851
+15718
+41852
+259
+1090
+21373
+25129
+25
+1749
+41853
+2043
+16413
+24207
+176
+13943
+1310
+16687
+3790
+41854
+2694
+31293
+41855
+24862
+590
+41856
+14369
+1090
+41857
+41858
+41859
+31896
+25241
+15
+41860
+14330
+1208
+590
+19618
+936
+41861
+2944
+26209
+2314
+41862
+41863
+2770
+41864
+2
+1542
+2253
+41865
+31225
+6384
+155
+2694
+13390
+12987
+31225
+284
+37154
+43
+201
+31773
+284
+5780
+3838
+31168
+590
+41866
+41867
+101
+16102
+41868
+40570
+28317
+41869
+41870
+37808
+28923
+41871
+41872
+41873
+41874
+57
+155
+41875
+41876
+248
+41877
+31691
+43
+41878
+12005
+17385
+21669
+41879
+60
+14369
+41880
+31293
+41881
+41882
+18024
+41883
+1764
+15
+41884
+12532
+590
+28317
+41885
+2561
+114
+41886
+19
+9210
+40570
+40570
+27669
+40570
+28490
+28036
+43
+301
+34650
+248
+345
+41887
+32
+16618
+41888
+13039
+41622
+337
+32
+41889
+41890
+284
+694
+22098
+3100
+590
+416
+41891
+13848
+337
+6210
+4820
+284
+41892
+34681
+41893
+29381
+590
+4028
+41894
+249
+286
+33278
+41895
+17083
+31168
+8508
+284
+41896
+41897
+39709
+40570
+13390
+1965
+8864
+41898
+15763
+17228
+4028
+686
+41899
+25140
+41900
+13721
+41901
+17338
+14203
+41902
+15
+3841
+15
+43
+2
+354
+46
+41903
+248
+41904
+590
+514
+33120
+41905
+14
+32
+337
+272
+22
+19
+41906
+41907
+1817
+249
+41908
+41909
+213
+1745
+3330
+41910
+10720
+41911
+41912
+15718
+12916
+1524
+41913
+3
+303
+6341
+41914
+53
+41915
+27719
+8297
+248
+41916
+1513
+41917
+17228
+30224
+248
+590
+1112
+41918
+13905
+16
+41919
+40570
+1090
+28845
+25140
+41695
+41920
+705
+1134
+2593
+21689
+209
+41921
+30224
+16524
+41922
+41923
+872
+14369
+14369
+41924
+15993
+26892
+14604
+19
+41925
+41926
+41927
+3480
+21669
+41928
+41929
+21669
+16437
+25237
+17635
+270
+140
+41930
+41931
+41932
+37881
+41933
+8156
+21947
+34681
+40570
+36932
+13377
+8668
+17911
+201
+5204
+3553
+41595
+41934
+6354
+10355
+13582
+41935
+77
+41936
+41937
+21669
+970
+41938
+31225
+377
+1681
+2410
+40570
+41939
+41940
+41941
+31293
+38465
+41942
+41943
+228
+5438
+41944
+5188
+5409
+663
+41945
+9
+41946
+9
+21200
+41947
+12555
+9
+5780
+25943
+15718
+38760
+41948
+31293
+2834
+77
+41949
+15718
+41950
+29483
+26229
+41951
+5343
+21031
+41952
+41953
+21576
+34944
+41954
+41955
+31293
+16258
+12807
+16375
+30224
+41956
+41957
+19
+7137
+339
+41958
+9
+4179
+36735
+10677
+1369
+178
+21947
+41959
+41960
+41961
+41962
+322
+1090
+248
+40570
+415
+28317
+484
+41963
+41964
+17920
+20
+155
+36483
+41965
+377
+41966
+213
+31168
+41967
+4055
+270
+29639
+4055
+41968
+2388
+24225
+540
+424
+10946
+8036
+14369
+41969
+41970
+33650
+590
+41971
+41972
+19304
+41973
+41974
+140
+17972
+2064
+18128
+33061
+16466
+155
+28845
+41975
+21947
+41976
+31293
+34
+41977
+41978
+40570
+213
+29628
+37556
+41979
+41980
+31293
+1987
+23495
+41981
+41982
+17151
+41983
+2694
+3743
+155
+15
+41984
+21947
+13390
+21947
+41985
+40658
+155
+41986
+5318
+41987
+29483
+41988
+20514
+21947
+40570
+12828
+41989
+3978
+40589
+1765
+38760
+123
+155
+31356
+21947
+19
+43
+41990
+41991
+19
+24683
+1051
+41181
+31873
+2476
+41992
+31293
+30051
+41993
+28845
+36268
+6430
+41994
+41995
+590
+15018
+41996
+40570
+5780
+36212
+41997
+41998
+7743
+19
+9
+29483
+2787
+41999
+42000
+18780
+15476
+42001
+30051
+28845
+40570
+46
+10505
+37556
+892
+19655
+18503
+19
+42002
+26666
+42003
+40893
+1090
+942
+42004
+42005
+24144
+42006
+42007
+337
+15
+42008
+28845
+40570
+19
+155
+42009
+284
+42010
+10274
+42011
+31139
+28845
+42012
+12299
+2274
+2356
+42013
+77
+42014
+19655
+42015
+32402
+9
+42016
+31293
+2015
+2260
+286
+9
+2537
+2427
+26835
+42017
+42018
+590
+42019
+12050
+25316
+370
+70
+14369
+42020
+42021
+176
+42022
+20
+25
+37411
+14666
+15511
+9
+21947
+29850
+651
+40570
+42023
+22
+42024
+141
+57
+1090
+43
+42025
+20700
+42026
+8668
+42027
+34602
+42028
+590
+11321
+827
+155
+24021
+40570
+31293
+42029
+42030
+42031
+42032
+19
+19956
+286
+42033
+42034
+42035
+28490
+42036
+590
+42037
+42038
+24144
+28036
+736
+2029
+40570
+4502
+42039
+42040
+725
+42041
+42042
+27069
+15718
+42043
+15718
+13566
+30051
+40570
+42044
+29483
+42045
+269
+42046
+42047
+42048
+692
+16527
+14502
+42049
+42050
+11925
+1470
+42051
+1870
+27719
+28845
+345
+42
+42052
+16798
+6171
+10960
+42053
+37556
+22
+33729
+27884
+42054
+24864
+6121
+40067
+42055
+42056
+29483
+140
+590
+18707
+38760
+15384
+21947
+42057
+3867
+3866
+41919
+3353
+42058
+9954
+155
+19
+4502
+21947
+42059
+42060
+41695
+42061
+40570
+42062
+42063
+42064
+519
+21947
+42065
+42066
+42067
+42068
+2341
+42069
+29483
+21689
+42070
+872
+42071
+201
+37168
+33914
+42072
+4155
+35967
+41664
+398
+42073
+19
+2005
+4855
+42074
+42075
+8297
+3406
+42076
+42077
+42078
+98
+554
+9389
+18314
+18999
+301
+1991
+15353
+30877
+42079
+33560
+24727
+30877
+42080
+42081
+40570
+42082
+9934
+14909
+831
+33141
+349
+37556
+7053
+39536
+42083
+42084
+42085
+36735
+17911
+28845
+42086
+42087
+28845
+42088
+554
+20161
+5990
+42089
+155
+39489
+27669
+333
+31234
+42090
+42091
+8053
+1310
+2593
+42092
+11312
+1082
+42093
+31293
+36478
+11482
+29483
+42094
+4116
+42095
+42096
+9
+4422
+736
+20340
+24896
+960
+39865
+31270
+33627
+2577
+42097
+1870
+29926
+42098
+3976
+7717
+2728
+42099
+377
+19160
+42100
+42101
+42102
+481
+1090
+471
+165
+5316
+42103
+34181
+42104
+25237
+4055
+21947
+7923
+6877
+42105
+25030
+822
+4
+6660
+27669
+4982
+42106
+42107
+17828
+42108
+42109
+14625
+15683
+18364
+40570
+590
+9
+21669
+42110
+42111
+349
+31293
+12987
+24140
+42112
+28845
+41234
+2040
+42113
+4055
+15
+40143
+20384
+39709
+4155
+21669
+36452
+27069
+13049
+42114
+25237
+37556
+42115
+42116
+15
+31293
+42117
+165
+3038
+42118
+18045
+37556
+42119
+33627
+5409
+12013
+19684
+1090
+4055
+8297
+27669
+41919
+42120
+16019
+42121
+38893
+39709
+15
+29483
+4463
+42122
+42123
+15539
+29483
+20
+2649
+42124
+42125
+1621
+2064
+42126
+27117
+10
+398
+42127
+42128
+42129
+42130
+29483
+155
+42131
+1688
+590
+17
+41919
+42132
+42133
+286
+42134
+2410
+1385
+8297
+5188
+42135
+5188
+4020
+19618
+5627
+7516
+31293
+2465
+42136
+19618
+1912
+9
+9
+31041
+42137
+694
+27843
+42138
+41695
+42139
+40696
+42140
+42141
+42142
+1870
+42143
+42144
+8668
+5627
+590
+42145
+42146
+57
+33650
+966
+42147
+286
+7790
+2
+15
+42148
+26096
+21669
+23103
+28480
+19
+10367
+28845
+24144
+29730
+7835
+42149
+42150
+33226
+42151
+42152
+29483
+14369
+42153
+42154
+42155
+24864
+41396
+42156
+2181
+42157
+7835
+30224
+42158
+42159
+42160
+5409
+11374
+16466
+11660
+19
+24725
+15398
+345
+1273
+35104
+41919
+42161
+42162
+1251
+42163
+42164
+8701
+42165
+42166
+77
+916
+42167
+9144
+42168
+42169
+42170
+42171
+27669
+9
+23931
+2202
+40570
+32401
+42172
+42173
+349
+14520
+42174
+2349
+42175
+4055
+155
+31293
+42176
+5071
+42177
+42178
+9
+89
+1927
+41695
+42179
+26559
+8593
+2410
+12871
+42180
+32
+317
+4531
+14590
+17772
+42181
+43
+42182
+2988
+41881
+662
+42183
+4461
+41567
+41043
+9095
+22270
+42184
+21669
+1808
+301
+42185
+5806
+42186
+872
+42187
+3743
+590
+42188
+15
+42189
+42190
+3072
+42191
+42192
+7253
+8668
+19
+1817
+42193
+42194
+8994
+42195
+3601
+1082
+6260
+9095
+32871
+40570
+19
+42196
+15824
+22
+42197
+42198
+42199
+41919
+21669
+6928
+42200
+7838
+40208
+41904
+42201
+42202
+3104
+19
+98
+28036
+16437
+990
+7987
+1011
+42203
+16865
+155
+713
+42204
+42205
+28696
+15
+24321
+36735
+5119
+41684
+42206
+42207
+31995
+155
+42208
+19
+42209
+849
+5318
+42210
+19
+42211
+43
+42212
+40570
+32965
+37556
+57
+6463
+42064
+590
+40570
+140
+23322
+34602
+32
+29483
+43
+277
+590
+8198
+3999
+36
+42213
+25387
+31293
+23103
+41919
+40570
+36268
+42214
+31326
+42215
+42216
+15
+155
+29483
+338
+42217
+42218
+3030
+21669
+18314
+590
+42219
+590
+1090
+28845
+22898
+178
+536
+42220
+42221
+40570
+42222
+21669
+2043
+42223
+14363
+42224
+42225
+1090
+43
+573
+38893
+42226
+42227
+1716
+286
+1688
+19
+42228
+42229
+34944
+30551
+42230
+28845
+8849
+26081
+8483
+179
+491
+41687
+1896
+42231
+28845
+9
+42232
+35153
+155
+1157
+42233
+31293
+25309
+28317
+41273
+42234
+713
+809
+26161
+25683
+89
+9232
+2049
+41581
+6068
+3601
+26657
+19
+4684
+8867
+42235
+42236
+28845
+411
+2944
+27669
+43
+12063
+5188
+13721
+19111
+14477
+38760
+3406
+2006
+40570
+18045
+41858
+42237
+42238
+38499
+10846
+21947
+42239
+44
+42240
+713
+17698
+13721
+155
+16315
+20679
+42241
+42242
+31873
+736
+37510
+42243
+42244
+42245
+15718
+2039
+915
+15718
+1559
+16375
+19
+595
+42246
+286
+25316
+1047
+38900
+13116
+42247
+31293
+42248
+31423
+42249
+155
+17042
+42250
+20315
+3055
+42251
+42252
+42253
+25
+19655
+33650
+42254
+736
+21689
+42255
+19
+46
+7053
+9
+16
+18683
+42256
+31293
+5085
+42257
+42258
+42259
+31293
+7379
+8367
+590
+42260
+37404
+790
+42261
+31293
+3981
+42262
+42263
+155
+21310
+43
+42264
+29200
+6341
+301
+42265
+21947
+21669
+28845
+14909
+140
+31293
+42266
+1047
+12
+2318
+18045
+42267
+4055
+42268
+42269
+21947
+28845
+16375
+40591
+19
+17353
+40570
+36735
+24725
+34804
+42270
+34402
+209
+42271
+3030
+31293
+155
+23103
+6726
+17670
+42272
+40570
+1234
+42273
+16085
+40570
+33627
+42274
+40570
+27011
+12987
+7065
+155
+89
+42275
+42276
+21669
+42277
+29381
+29483
+42278
+42279
+42280
+22065
+13579
+20487
+36268
+42281
+42282
+19
+30650
+42283
+42284
+40570
+153
+40570
+17151
+42285
+16437
+13390
+19618
+13826
+24725
+21669
+39434
+5297
+1051
+42286
+398
+46
+6508
+42287
+40570
+42288
+15506
+26498
+19
+18589
+42289
+3546
+19797
+29628
+21947
+155
+23121
+19655
+165
+42290
+42291
+29200
+42292
+30458
+13760
+42293
+42294
+42295
+1823
+40570
+736
+9
+13390
+42296
+42297
+24074
+57
+42298
+19
+1090
+42299
+42300
+42301
+33650
+590
+2561
+40570
+42302
+155
+5409
+42303
+28339
+42304
+42305
+12093
+5080
+42306
+869
+29204
+42307
+42308
+21689
+21947
+1169
+23103
+5088
+20
+27669
+38465
+27147
+9
+671
+1090
+2000
+5409
+42309
+42310
+4047
+32332
+42311
+16316
+43
+13615
+345
+10699
+42312
+18045
+42313
+42314
+40570
+20839
+21947
+554
+40570
+43
+40570
+19
+29483
+42205
+42315
+16121
+1244
+42316
+24161
+6582
+19
+12628
+42317
+1169
+42318
+42319
+42320
+28845
+9
+5041
+155
+699
+19223
+42321
+42322
+19
+42323
+2944
+155
+590
+42324
+42325
+30051
+9095
+32
+20442
+42326
+28317
+42327
+42328
+42329
+40570
+12366
+29483
+14856
+1481
+2197
+989
+42330
+28755
+13895
+42331
+42332
+416
+155
+77
+25237
+29483
+31168
+28219
+40707
+42333
+41944
+42334
+42335
+19
+14369
+14330
+20442
+4055
+27669
+1559
+736
+42336
+27798
+586
+15718
+155
+42337
+42338
+25683
+42339
+42340
+18334
+6935
+42341
+42342
+42343
+140
+42344
+671
+34518
+21947
+3601
+42345
+5773
+42346
+209
+6054
+37556
+590
+6627
+42347
+1559
+29434
+915
+25
+29483
+19618
+22476
+18780
+13323
+6441
+42348
+18310
+42349
+28643
+8483
+42350
+42351
+42352
+4245
+42353
+43
+42354
+21947
+57
+42355
+40570
+10117
+42356
+41919
+42357
+43
+29381
+9
+38033
+29483
+42358
+10320
+42359
+24303
+15718
+42360
+286
+30814
+42361
+40570
+37556
+40570
+21689
+15820
+14477
+37154
+28490
+19618
+424
+42362
+8849
+19
+40570
+42363
+931
+46
+10782
+872
+16413
+155
+14604
+42364
+1364
+42365
+43
+42366
+42367
+19795
+9
+27669
+342
+42368
+590
+42369
+42370
+13390
+42371
+42372
+430
+42373
+5925
+29483
+42374
+586
+41695
+19
+41919
+9
+1384
+249
+38760
+38760
+42375
+42376
+590
+42377
+42275
+31293
+205
+4230
+31293
+42378
+554
+41919
+29483
+20507
+11328
+1134
+29628
+42379
+42380
+21947
+7379
+15
+12005
+25237
+15718
+590
+22717
+7276
+42381
+42382
+5022
+28845
+573
+7276
+42383
+42384
+42385
+30224
+3743
+42386
+42387
+34402
+40570
+37790
+31293
+9
+1090
+31293
+4963
+31098
+3546
+27794
+1054
+42388
+1465
+42389
+533
+9
+40570
+24144
+21947
+42390
+2841
+1571
+33650
+23103
+36
+40570
+42391
+42392
+42393
+23103
+24864
+12684
+24303
+1615
+42394
+42395
+42396
+30917
+590
+42397
+10946
+40570
+25260
+42398
+4363
+242
+30877
+16437
+42399
+42400
+29483
+42401
+42402
+42403
+42404
+42405
+1384
+10464
+3944
+27905
+42406
+12500
+3978
+21947
+31293
+1090
+736
+42407
+42408
+32
+958
+31293
+301
+42409
+19852
+1154
+42410
+28317
+590
+34402
+4055
+590
+42411
+42412
+42413
+6839
+19523
+42414
+42415
+42416
+42417
+42418
+42419
+31293
+14369
+42420
+42421
+4028
+42422
+24864
+155
+1384
+42423
+34227
+1524
+2310
+42424
+872
+42425
+33469
+36735
+42228
+1082
+9148
+19030
+42426
+42427
+28845
+22
+39520
+19
+42428
+155
+9384
+42429
+41919
+42430
+18045
+323
+42431
+42432
+42433
+21089
+188
+32410
+42434
+31293
+1090
+42435
+1045
+2604
+22986
+25683
+4502
+42436
+590
+13365
+43
+25943
+14330
+42437
+3528
+1157
+14369
+42438
+42439
+29981
+43
+42440
+42441
+989
+225
+27117
+48
+17653
+42442
+42443
+42444
+27025
+15354
+5231
+590
+14369
+9254
+7617
+1026
+43
+15498
+42445
+16443
+27310
+67
+42446
+40570
+11702
+40570
+42246
+30224
+19287
+42447
+27669
+42448
+42449
+25106
+40570
+1531
+42450
+42451
+42452
+19618
+37556
+1021
+42453
+21947
+42454
+41919
+33650
+15533
+42455
+1404
+21045
+25683
+1169
+10262
+15
+10052
+42456
+42457
+19655
+42458
+42459
+14369
+349
+442
+40570
+27843
+1847
+38465
+4116
+349
+28490
+1870
+17472
+14369
+42460
+19
+164
+42461
+874
+28845
+42462
+155
+4055
+42463
+7855
+590
+21730
+21947
+30705
+42464
+4055
+42465
+18991
+15718
+33061
+46
+9
+28845
+42466
+23150
+42467
+43
+9
+27857
+42468
+33758
+42469
+27069
+42470
+41695
+25140
+5858
+3
+19
+42471
+42472
+13390
+8249
+42473
+176
+42474
+514
+23518
+42475
+42476
+26361
+42477
+25047
+720
+43
+66
+19
+2762
+42478
+42479
+89
+42480
+1203
+29483
+1870
+30051
+1021
+677
+42481
+259
+4528
+5188
+42482
+11273
+18684
+42483
+42484
+21089
+42485
+349
+42486
+32410
+66
+349
+16
+30224
+24864
+42487
+22787
+7362
+28845
+21947
+2009
+31293
+5344
+823
+323
+42488
+42489
+42490
+1090
+31293
+8668
+590
+42491
+25237
+15718
+7698
+7799
+42492
+39434
+15
+42493
+29204
+42494
+1222
+42495
+21689
+7419
+42496
+2727
+41919
+40570
+3452
+16466
+42497
+13390
+19167
+20673
+60
+17151
+42498
+286
+936
+42499
+893
+15718
+42500
+736
+42501
+533
+2260
+42502
+42503
+20514
+8668
+28036
+13390
+42504
+40570
+42505
+92
+42506
+583
+155
+19618
+25316
+720
+114
+736
+8849
+5188
+40570
+42507
+185
+42508
+15718
+42509
+14330
+42510
+31293
+24303
+20175
+42511
+12307
+42512
+35489
+24896
+9
+28317
+415
+14
+42513
+595
+8668
+38465
+31522
+155
+30794
+38760
+42514
+42515
+8787
+14369
+42516
+40570
+42517
+10846
+33650
+42518
+42519
+42520
+9
+27669
+15054
+42521
+40570
+35316
+29483
+5085
+140
+25
+33627
+32
+209
+42522
+2854
+43
+34402
+42523
+42524
+19655
+209
+155
+34944
+13721
+42525
+42526
+196
+42527
+10
+27669
+14363
+23111
+41919
+42528
+24410
+19
+815
+31293
+42529
+27669
+1543
+13390
+7658
+42530
+865
+5085
+42531
+519
+19655
+42532
+8668
+42533
+42534
+14108
+30224
+4598
+9
+28845
+2164
+15914
+14369
+42535
+42536
+38033
+590
+2015
+228
+42537
+29157
+1120
+89
+42538
+31293
+24709
+42539
+31293
+9
+42540
+5188
+590
+39363
+15
+42541
+12987
+42542
+15845
+15720
+1157
+42543
+2476
+11369
+1924
+33627
+29483
+36736
+42544
+42545
+2372
+17385
+4055
+42546
+42547
+41603
+18695
+16466
+46
+40570
+33627
+42548
+9396
+19
+42549
+155
+27669
+34402
+77
+43
+3764
+15398
+42550
+42551
+24303
+915
+8367
+32790
+42552
+42553
+23005
+37556
+42554
+9
+10935
+42555
+1710
+42556
+1378
+22963
+514
+42557
+28036
+22808
+42558
+40570
+42559
+38893
+22986
+42560
+14381
+40097
+7253
+42561
+24144
+40570
+42562
+42563
+37556
+590
+42564
+42565
+41117
+42566
+42567
+25316
+9097
+16440
+42568
+42569
+22898
+42570
+8668
+887
+42571
+38465
+1517
+3875
+42572
+19167
+42573
+11389
+42574
+40570
+1991
+34
+35224
+23547
+36268
+42575
+495
+42576
+5085
+37958
+39713
+25584
+42577
+42578
+27829
+43
+42579
+43
+13824
+30051
+21947
+42483
+42580
+41117
+42581
+38760
+12158
+6004
+42582
+42583
+6335
+42584
+37556
+42585
+32
+42586
+32
+13390
+33650
+28845
+34454
+42587
+42588
+57
+42589
+21669
+1224
+27669
+42590
+21689
+42316
+42591
+42592
+29483
+2064
+15718
+8427
+23103
+23103
+958
+40570
+42593
+597
+323
+42594
+42595
+42596
+41117
+2289
+27104
+15718
+42597
+41687
+4403
+19
+42598
+1562
+18045
+15718
+42599
+13390
+33650
+345
+42600
+15718
+1444
+1234
+19
+5874
+28936
+1090
+17951
+265
+15
+41273
+533
+9
+572
+41941
+42601
+9452
+34402
+14887
+3369
+43
+155
+42602
+817
+42603
+514
+222
+13390
+42604
+26815
+17911
+42605
+32467
+26496
+42606
+554
+42607
+42608
+42609
+11328
+1425
+17911
+42610
+37411
+19167
+24303
+42611
+21521
+745
+155
+27669
+46
+42612
+4116
+35624
+6669
+29483
+42613
+42614
+42615
+38527
+40570
+41919
+42616
+42617
+36436
+155
+694
+42618
+32
+8103
+42619
+19
+42620
+42621
+42622
+21791
+42623
+179
+13721
+671
+21947
+42624
+42625
+3
+13129
+29483
+736
+7276
+42626
+28845
+42627
+17698
+21947
+42628
+42629
+1559
+40570
+751
+32
+40570
+6122
+4124
+42630
+42631
+28845
+19655
+42632
+42633
+9
+21947
+2427
+42634
+1961
+40570
+7944
+36674
+24324
+155
+19618
+42635
+1090
+10946
+42636
+16798
+26496
+11733
+42637
+12013
+42638
+33061
+42639
+41567
+736
+25921
+42640
+28168
+42641
+32642
+560
+17151
+4808
+42642
+14079
+42643
+42644
+849
+42645
+5391
+42646
+10642
+42647
+1566
+155
+7835
+36735
+30209
+1889
+42648
+33627
+31293
+13528
+1531
+42649
+18846
+14668
+42650
+694
+42651
+28845
+28036
+42652
+42653
+42654
+40570
+42655
+32477
+42656
+42657
+42658
+155
+42659
+1082
+42660
+19
+37556
+42661
+42662
+42663
+42664
+5041
+42665
+42666
+13390
+590
+42667
+23103
+9441
+4806
+33330
+42668
+42669
+42670
+24864
+21126
+32190
+10
+2015
+43
+42671
+155
+1961
+42672
+21947
+9688
+34758
+19
+42673
+590
+42674
+43
+2325
+21947
+42675
+42676
+42677
+19
+201
+42678
+38760
+42679
+1090
+1090
+42680
+1224
+26959
+40570
+42681
+40570
+42682
+18695
+28845
+9024
+40570
+36727
+19
+42683
+1335
+342
+155
+2694
+208
+37556
+42684
+17911
+2476
+26157
+42685
+42686
+66
+1502
+42687
+33627
+1444
+42688
+21602
+560
+42689
+317
+42690
+28845
+7053
+40570
+42691
+42692
+26496
+42693
+28845
+33650
+6744
+32449
+2314
+12120
+42694
+1090
+2896
+9
+13905
+286
+736
+11822
+7835
+5601
+24864
+41919
+178
+15802
+11683
+25237
+29424
+16437
+18561
+53
+41919
+28219
+18176
+26389
+19
+791
+40570
+42695
+18553
+42696
+21669
+2314
+10859
+14369
+9
+42697
+491
+42542
+36735
+815
+1090
+448
+415
+29200
+42698
+42699
+2243
+19
+1920
+42700
+15
+14330
+29770
+284
+1112
+9234
+31293
+26705
+42701
+25
+15824
+42702
+17911
+5080
+29483
+42703
+21947
+213
+42704
+590
+10527
+23103
+21175
+35594
+42705
+42706
+42707
+40570
+42708
+2372
+29
+42709
+12203
+8727
+378
+42710
+284
+23821
+1511
+5499
+31098
+6985
+42711
+42712
+713
+29381
+43
+29675
+40570
+284
+42713
+42714
+5409
+17749
+42715
+349
+28317
+1090
+42716
+156
+31293
+21669
+40570
+823
+42717
+29483
+42718
+5780
+248
+19
+36943
+42719
+42720
+42721
+590
+18951
+42722
+40570
+42723
+13390
+155
+28845
+31293
+42724
+42725
+284
+24207
+140
+1090
+42726
+34650
+42727
+21947
+590
+390
+2653
+42728
+42729
+17385
+30224
+284
+38358
+8668
+19167
+42730
+38064
+39053
+213
+42731
+15
+29483
+284
+40591
+42732
+31293
+42733
+32332
+21947
+248
+42734
+27669
+42735
+7053
+791
+31293
+42736
+28845
+5285
+15718
+36639
+34641
+21947
+42737
+42738
+42739
+1168
+24045
+18488
+43
+33302
+40591
+114
+14
+21269
+42740
+42741
+40570
+1090
+3698
+39709
+21689
+42742
+303
+42743
+155
+248
+42744
+5952
+6008
+25140
+36851
+40570
+39926
+43
+1200
+25943
+42745
+41266
+38465
+303
+21669
+6877
+42746
+19
+213
+17894
+31293
+1688
+1091
+3544
+4226
+42012
+14369
+37556
+42747
+9396
+42748
+19655
+7907
+14477
+213
+42749
+484
+14604
+671
+42750
+16693
+19
+42751
+303
+41342
+31293
+12302
+21669
+27669
+248
+41919
+42752
+42753
+21669
+21947
+42754
+42755
+573
+155
+210
+15712
+33650
+822
+590
+37556
+10973
+42756
+41622
+31293
+42757
+248
+13576
+196
+42758
+30816
+42759
+2476
+495
+303
+42760
+1652
+20785
+28845
+42761
+29483
+1224
+349
+42762
+24458
+8668
+42763
+37556
+16121
+42764
+18037
+42765
+28845
+25316
+42766
+21669
+3908
+27669
+42767
+42768
+284
+38465
+554
+29381
+9
+16966
+28845
+28845
+13905
+18503
+41695
+40570
+590
+14947
+213
+31225
+506
+1090
+36322
+1112
+42769
+40570
+42770
+42771
+849
+41880
+42772
+213
+4855
+37556
+42773
+36546
+38234
+155
+21669
+31885
+33650
+590
+42774
+42775
+41919
+25683
+19
+38607
+42776
+42777
+9422
+12118
+179
+42778
+42779
+10475
+42780
+3238
+42781
+57
+42782
+15718
+29483
+28490
+683
+42012
+40570
+42783
+21947
+19
+303
+22962
+648
+46
+24864
+22
+21279
+42784
+19
+42785
+42786
+590
+21398
+99
+541
+41919
+40570
+42787
+99
+42788
+14
+533
+42789
+27895
+46
+20514
+42790
+42791
+28459
+713
+364
+30551
+9
+42792
+42793
+42794
+40570
+30246
+19142
+6439
+19
+32
+25237
+42795
+21598
+1847
+1907
+4765
+42796
+19
+9898
+46
+42797
+42798
+25237
+40570
+201
+915
+42799
+43
+42800
+42801
+42802
+21669
+33714
+31293
+8338
+21669
+31098
+14369
+57
+9112
+13390
+3155
+17754
+41622
+3790
+3950
+377
+28845
+42803
+42804
+42805
+25683
+42806
+31293
+42807
+209
+42808
+42809
+13721
+4226
+1107
+5579
+35272
+28845
+337
+12987
+40570
+12936
+1384
+2649
+17911
+19
+1543
+5499
+39709
+284
+42810
+155
+9
+24081
+42811
+40939
+42812
+42813
+42814
+1559
+4985
+9
+3055
+713
+42815
+104
+4847
+3196
+28845
+23103
+42816
+248
+41397
+3863
+26549
+30209
+495
+20600
+13390
+42817
+40570
+42818
+14192
+436
+42819
+155
+415
+19
+32896
+21947
+14603
+15275
+42820
+15
+42821
+38760
+16
+42822
+42823
+1021
+42824
+16941
+42825
+936
+177
+42826
+21669
+354
+22
+42827
+42828
+42829
+16609
+40570
+554
+31293
+28317
+38003
+42830
+21947
+25943
+28845
+42831
+43
+14330
+3546
+40570
+42832
+42833
+12152
+42834
+155
+12479
+2694
+34327
+35592
+42835
+42836
+39709
+21947
+42837
+398
+345
+31293
+10
+42838
+42839
+36403
+42840
+21947
+42841
+16
+42842
+155
+12020
+42843
+42844
+42845
+34506
+28577
+37770
+250
+42846
+29687
+28799
+21947
+21669
+446
+10298
+42847
+18045
+27719
+30580
+42848
+42849
+2769
+24896
+42850
+37556
+2310
+35085
+12987
+42851
+303
+1169
+42852
+42853
+40570
+16413
+52
+5065
+29483
+42854
+41919
+337
+33937
+42855
+1090
+34103
+42856
+43
+42857
+27455
+42858
+42859
+43
+19218
+2164
+18477
+165
+18683
+7488
+42860
+11808
+21947
+5188
+140
+26496
+9
+35224
+28845
+31603
+42861
+35158
+42862
+16443
+41919
+112
+42863
+42864
+822
+42865
+37556
+38465
+42866
+39593
+31346
+38465
+213
+155
+21791
+19
+2581
+6364
+16826
+936
+42867
+30224
+21947
+18317
+42868
+42869
+17698
+29716
+40570
+42870
+30224
+42871
+42872
+8070
+42873
+40570
+42874
+42875
+43
+19618
+21947
+4699
+554
+42876
+576
+213
+155
+155
+5188
+39709
+19167
+42877
+155
+42878
+5409
+3241
+25140
+24144
+10946
+1090
+656
+42879
+2694
+42880
+42881
+42882
+554
+42883
+590
+40570
+42884
+10946
+42885
+42886
+42887
+22380
+25584
+42888
+249
+42889
+492
+28845
+42890
+9
+554
+42891
+28212
+43
+317
+955
+8867
+41919
+2052
+2514
+2415
+42892
+98
+27819
+736
+19582
+26943
+31293
+8919
+19
+30580
+42893
+14369
+32931
+16828
+12281
+42894
+42895
+15477
+32
+21027
+42896
+16089
+40570
+7385
+2919
+42897
+21947
+42898
+33445
+42899
+1090
+26496
+40570
+3644
+13390
+2488
+43
+19
+42900
+42901
+42902
+616
+37556
+590
+41890
+31293
+42903
+21947
+42904
+23103
+42905
+42906
+416
+248
+19
+2457
+37556
+28317
+18045
+15718
+213
+42907
+42908
+37770
+42909
+42910
+11966
+40570
+24862
+30224
+20700
+6096
+42911
+15718
+33650
+42912
+42913
+42914
+509
+736
+29483
+19
+42915
+21179
+26361
+25683
+42916
+42917
+713
+155
+31873
+1013
+8541
+42918
+42919
+250
+573
+40570
+590
+2692
+178
+213
+155
+34264
+42920
+41687
+14330
+42921
+720
+4908
+345
+42922
+24303
+14871
+40022
+15810
+42923
+42924
+1442
+42925
+9
+590
+31437
+248
+42926
+17911
+43
+6785
+5791
+16375
+788
+42927
+15718
+19618
+42928
+42929
+179
+32920
+42930
+42931
+3252
+9005
+41890
+42932
+337
+40928
+597
+699
+17670
+2260
+25683
+7486
+32920
+42933
+21698
+1051
+2260
+155
+42934
+11321
+1291
+19852
+303
+33650
+14824
+7117
+1774
+303
+337
+4028
+11754
+24458
+21049
+590
+155
+42935
+286
+35624
+40570
+42936
+42937
+4538
+1559
+17228
+284
+34402
+303
+19
+33650
+42938
+42939
+17635
+1012
+25316
+29381
+42940
+26361
+303
+42941
+40570
+4471
+501
+178
+42942
+25316
+317
+46
+26669
+34402
+42943
+590
+42192
+38284
+30580
+24496
+4441
+37556
+33349
+29483
+103
+533
+42944
+5065
+40570
+42945
+2672
+42946
+21947
+12020
+41695
+2672
+40928
+4155
+42947
+37556
+248
+42948
+41919
+9902
+41890
+41890
+15
+31293
+955
+13036
+42949
+590
+18988
+13390
+41687
+6121
+15718
+284
+42950
+294
+42951
+4463
+342
+42952
+57
+42953
+1291
+28845
+5188
+2672
+9
+42954
+12351
+554
+971
+23103
+42955
+15718
+42956
+41919
+34613
+21947
+7451
+1716
+42957
+42958
+42959
+26361
+21947
+42960
+30221
+29381
+42421
+345
+12722
+1465
+41890
+42961
+42962
+42963
+42964
+42965
+41890
+42966
+42967
+33627
+29874
+155
+42968
+30224
+42969
+20443
+42970
+27669
+815
+28845
+42971
+34448
+18740
+9
+42972
+31246
+42973
+4055
+42974
+42975
+77
+24864
+46
+736
+10946
+42976
+46
+8367
+12642
+3599
+248
+25
+24045
+21689
+10932
+16891
+28845
+42977
+14477
+40570
+554
+42978
+42979
+43
+42980
+41890
+3034
+41890
+37556
+41890
+155
+41890
+42981
+29
+42982
+31454
+31964
+42983
+42984
+42985
+42986
+42987
+29483
+4123
+4313
+16
+16443
+4463
+41919
+2287
+19
+345
+16205
+14001
+25142
+14079
+42988
+17911
+33002
+478
+42989
+4055
+41890
+41890
+29484
+317
+1961
+42990
+3318
+155
+41890
+1716
+9194
+303
+34402
+2779
+42991
+42992
+42993
+42994
+42995
+15683
+43
+21089
+41890
+42996
+26040
+1109
+25624
+40570
+42997
+8668
+72
+19091
+42998
+42999
+43000
+43001
+43002
+4264
+43003
+155
+11869
+13390
+3034
+19918
+41890
+43004
+43005
+43006
+36268
+25316
+34613
+40570
+41890
+41890
+29483
+43
+43007
+36483
+24038
+3601
+9
+21947
+43008
+791
+43009
+43010
+29687
+18276
+41890
+43011
+41890
+30051
+43012
+41890
+41890
+41890
+14133
+43013
+43014
+378
+7231
+411
+8807
+8248
+33627
+41890
+15
+43015
+22922
+9
+37077
+917
+43
+19
+41890
+28845
+43016
+861
+77
+19
+3598
+14369
+41890
+41890
+43017
+19
+43018
+30224
+31293
+24144
+5963
+34496
+41890
+39080
+42962
+20514
+25237
+35926
+4288
+2043
+29483
+43019
+43020
+43021
+29381
+554
+43022
+41890
+41890
+2315
+19
+40570
+40570
+21947
+41890
+1157
+43023
+1961
+1774
+43024
+39371
+5065
+7014
+15
+41890
+18746
+3551
+41919
+41890
+19
+24303
+590
+43025
+24303
+28845
+41890
+597
+2121
+104
+41890
+4263
+27669
+26040
+41890
+28597
+43026
+43027
+41890
+43028
+43029
+28845
+155
+1605
+29483
+13390
+40570
+43030
+25683
+40570
+43031
+41890
+41890
+43032
+46
+41890
+20514
+43033
+40570
+7987
+6245
+43034
+43035
+43036
+41890
+25
+1444
+23103
+4518
+43037
+2029
+1543
+43038
+193
+41890
+43039
+28845
+43040
+43
+4808
+37556
+33693
+43041
+43042
+30209
+42421
+43043
+43044
+43045
+57
+590
+33627
+40570
+41890
+40570
+43046
+41890
+23752
+41890
+14869
+27669
+31293
+37556
+15718
+26158
+21947
+20340
+21105
+15
+43047
+43048
+43049
+15718
+21031
+37556
+7912
+41890
+31098
+15193
+558
+43050
+32456
+23271
+43051
+43052
+2577
+15718
+13405
+43053
+22
+21947
+331
+36639
+27669
+2029
+41890
+28845
+155
+29381
+40570
+43054
+1817
+43055
+590
+222
+43056
+4028
+16437
+43
+35769
+43
+155
+25683
+845
+3546
+349
+29707
+41890
+41890
+41890
+155
+43057
+1051
+342
+4603
+43058
+6571
+41890
+43059
+43060
+43061
+16466
+43062
+40570
+2463
+3669
+14962
+7978
+21947
+41890
+40570
+43063
+41890
+41890
+9918
+40570
+41890
+43064
+40570
+1442
+1090
+43065
+30224
+15718
+41890
+339
+43066
+41919
+155
+5409
+43067
+22552
+554
+1870
+43068
+43069
+13721
+28441
+43070
+43071
+43072
+43073
+19918
+33758
+1066
+43074
+24454
+41890
+495
+41890
+43075
+43076
+41890
+41890
+1824
+1090
+41890
+31503
+33444
+3252
+19
+43077
+43078
+40570
+41890
+33650
+41890
+41890
+19655
+43079
+17911
+43080
+29483
+43081
+40570
+2064
+19655
+43082
+9
+41890
+43083
+41890
+2465
+6571
+40062
+33141
+19
+31139
+41890
+25316
+41890
+41890
+415
+41890
+43084
+155
+165
+41890
+155
+155
+43085
+16375
+41890
+720
+41687
+1038
+41890
+43086
+43087
+43088
+13361
+41890
+41890
+43089
+41890
+41890
+43090
+40570
+43091
+736
+9228
+5188
+2733
+12828
+43092
+41890
+43093
+41919
+10482
+60
+34402
+590
+26946
+43094
+41890
+43095
+11315
+1364
+317
+30877
+43096
+43097
+2314
+15718
+646
+19
+43098
+43099
+41919
+41890
+41890
+43100
+21669
+37556
+40570
+43101
+43102
+41890
+28845
+41890
+43103
+32
+41890
+20356
+41890
+41890
+14369
+21261
+43104
+9772
+6086
+43105
+365
+25140
+41890
+41890
+478
+15483
+43106
+43107
+43108
+41890
+43109
+41890
+43110
+41890
+14909
+10745
+43111
+43112
+41890
+43113
+43114
+41890
+33650
+43115
+34264
+179
+41890
+43116
+31293
+41890
+34
+2791
+43117
+33627
+41890
+77
+41890
+209
+19618
+1018
+43118
+41890
+533
+41890
+41890
+43119
+43120
+41890
+41890
+1090
+38465
+4055
+700
+43121
+43122
+3239
+43123
+713
+40264
+41890
+514
+43124
+41890
+41890
+40570
+2197
+43125
+38003
+43126
+43127
+43128
+354
+21669
+15018
+43129
+43130
+43131
+41890
+19655
+41890
+41919
+41890
+19355
+41890
+21669
+27069
+33494
+43132
+323
+41890
+46
+26744
+12479
+43133
+9
+43134
+4441
+3553
+41890
+5188
+42000
+43135
+41890
+41890
+24303
+41890
+17911
+28845
+28845
+41890
+43136
+43
+2872
+19
+19
+41890
+43137
+28845
+43138
+43139
+41890
+41890
+43140
+176
+43141
+25316
+43142
+43143
+43144
+41890
+9
+8833
+26900
+41890
+41890
+155
+46
+43145
+41890
+36823
+4
+43146
+43147
+43148
+41890
+20700
+568
+8668
+40570
+19
+41890
+5780
+41890
+41890
+43149
+43150
+43151
+39709
+112
+43152
+41890
+43153
+19
+43154
+1090
+43155
+1090
+21669
+41890
+19655
+41155
+39536
+887
+40570
+155
+43156
+155
+36735
+1234
+1471
+40570
+3311
+42711
+43157
+43158
+43159
+21669
+41890
+41890
+349
+41890
+41890
+46
+43160
+980
+43161
+11907
+416
+43162
+41890
+910
+31293
+36268
+41890
+41890
+41890
+43163
+3484
+1870
+39709
+26361
+736
+1907
+590
+21947
+43164
+43165
+1384
+1961
+41890
+41890
+41890
+29639
+586
+41890
+9
+43166
+41890
+41890
+41890
+491
+17
+43167
+43168
+43169
+10909
+43170
+43171
+43172
+21089
+41890
+43173
+590
+43174
+36736
+17472
+25
+43175
+155
+41890
+41890
+43176
+41890
+41890
+13390
+1829
+43177
+15216
+41890
+41890
+38789
+2254
+43
+2260
+11757
+36268
+41890
+43178
+43179
+43180
+41890
+15552
+41890
+41890
+9
+41890
+41890
+41890
+15
+14369
+43181
+43182
+19792
+31293
+41890
+29483
+14176
+14077
+41890
+43183
+41890
+41890
+872
+6077
+41890
+41890
+43184
+43185
+2727
+41890
+43186
+590
+43187
+41890
+43188
+29733
+43189
+43190
+43191
+43192
+41890
+43193
+155
+8864
+33765
+43194
+43195
+43196
+41080
+43197
+34488
+3369
+34579
+15718
+43198
+43199
+42259
+5188
+21669
+13528
+2804
+18061
+40570
+41890
+27178
+43200
+457
+6617
+41890
+412
+43201
+41890
+43202
+43203
+43204
+41890
+41890
+809
+5627
+1112
+30877
+31168
+20167
+43205
+357
+13390
+43206
+43207
+43208
+22901
+41890
+25237
+43209
+33916
+43210
+43211
+43212
+40570
+40143
+3994
+1090
+1307
+25237
+41499
+29254
+21669
+9
+78
+7191
+43213
+43214
+41890
+41890
+43215
+21669
+43216
+41890
+43217
+13360
+43218
+861
+43219
+34641
+66
+27291
+43220
+43221
+43222
+41890
+791
+43223
+41890
+112
+40570
+43224
+41890
+20340
+36268
+43225
+165
+8297
+43226
+3559
+1310
+35536
+43227
+24864
+43228
+21947
+1765
+5791
+43
+43229
+43230
+43231
+43232
+43233
+22986
+9
+43234
+9
+671
+41890
+41890
+43235
+14369
+33024
+21669
+22963
+43212
+713
+554
+41890
+20593
+33120
+41890
+41890
+31293
+57
+43236
+25683
+14810
+43237
+1153
+43238
+31293
+43239
+43240
+14467
+1011
+41890
+43241
+590
+41890
+41175
+43242
+19
+33524
+43243
+43244
+30650
+43245
+43246
+29483
+38758
+15718
+30551
+21947
+43247
+43248
+43249
+28295
+18283
+41890
+15718
+155
+41890
+32915
+21669
+41890
+41890
+9573
+12013
+41567
+41890
+43250
+41890
+7631
+15
+43251
+32
+155
+5780
+33650
+1112
+564
+598
+41890
+12231
+43252
+43253
+41890
+41890
+43254
+41890
+41890
+43255
+40591
+6543
+8128
+41890
+8668
+41890
+43256
+21669
+2356
+43257
+41890
+43258
+41890
+41890
+37556
+3553
+5293
+38529
+5188
+4637
+4055
+21732
+42290
+5409
+5860
+43168
+28846
+41890
+13270
+43259
+20078
+28740
+41890
+2314
+41890
+43260
+43261
+43262
+41890
+41890
+7658
+43263
+2859
+43264
+43265
+43266
+24603
+43267
+31293
+43249
+43268
+25848
+43269
+41890
+30109
+21669
+1013
+5764
+15
+43099
+43270
+43271
+36483
+1090
+30650
+540
+32
+43272
+30224
+41890
+43273
+41890
+43274
+41890
+41890
+5582
+7762
+6996
+43275
+5601
+43276
+41890
+39709
+43277
+43278
+41890
+12518
+57
+43279
+25237
+3844
+43280
+19
+43281
+14330
+43282
+41890
+1797
+103
+43283
+43284
+40861
+38465
+4278
+41890
+33627
+1920
+12020
+41890
+21689
+43
+60
+43285
+8668
+41890
+21947
+6086
+2865
+43286
+41890
+13390
+201
+8501
+41890
+24762
+10987
+43
+43287
+1090
+40570
+43288
+41890
+155
+41890
+8160
+43289
+43290
+40570
+36735
+26953
+43291
+12178
+43292
+43293
+23528
+43249
+41890
+43294
+43295
+41890
+43296
+41890
+1172
+43297
+18695
+40570
+10946
+41890
+41890
+43298
+43299
+41890
+16437
+41707
+40067
+21089
+98
+43300
+41890
+41890
+31293
+8896
+43301
+41890
+41890
+41890
+24045
+43302
+283
+41890
+8668
+16798
+43303
+590
+43
+43304
+43305
+43306
+43307
+41890
+33120
+41890
+41890
+43308
+43309
+31139
+29204
+14017
+29836
+43310
+33627
+16466
+19655
+43311
+43312
+41890
+43313
+1186
+12
+29483
+43314
+19655
+21669
+24324
+39709
+41890
+14399
+43315
+31098
+43316
+543
+14604
+43317
+41890
+23479
+43318
+41890
+43319
+43320
+37556
+41890
+4441
+41890
+21947
+31293
+21627
+19618
+43321
+46
+41890
+43322
+317
+40570
+40570
+43323
+13390
+43324
+14947
+14719
+29483
+6505
+41890
+43325
+2427
+590
+265
+43326
+21312
+4196
+19655
+2015
+43327
+43328
+43329
+41890
+43330
+590
+5489
+34402
+26738
+5916
+791
+41890
+43331
+43332
+28000
+43333
+41890
+43334
+18045
+9
+43335
+20876
+43336
+89
+43337
+27798
+43338
+43339
+745
+37768
+31293
+43340
+745
+43341
+41890
+15
+41890
+20700
+416
+43342
+43
+43343
+16437
+2410
+7930
+41890
+40570
+43344
+19
+2236
+41890
+3598
+1533
+43345
+24864
+41890
+43346
+43347
+43348
+41890
+43349
+43350
+41890
+41890
+21669
+41890
+16437
+41890
+46
+41890
+41890
+3994
+15914
+3949
+40591
+13998
+2161
+43351
+34435
+43352
+12254
+1524
+39709
+43353
+43354
+43355
+25144
+43356
+41890
+21669
+41890
+43357
+36143
+43358
+36027
+16966
+43359
+24303
+43360
+43361
+707
+736
+41890
+155
+17151
+4258
+41890
+15718
+23833
+21947
+30224
+41890
+249
+41890
+40570
+40570
+43362
+15718
+43363
+13566
+249
+43364
+15718
+43365
+4245
+41890
+9
+14330
+41890
+11966
+1992
+41890
+41890
+249
+46
+29483
+43366
+299
+41890
+5344
+1559
+140
+41890
+9356
+43367
+43368
+6225
+29434
+7658
+210
+41890
+574
+41890
+43369
+20984
+43347
+40570
+2243
+19
+41890
+155
+554
+41890
+201
+43370
+597
+1688
+286
+43371
+15971
+323
+41890
+31293
+41890
+41890
+518
+41890
+14087
+41890
+2318
+6217
+8668
+33185
+31225
+2410
+16618
+41890
+24864
+43372
+40570
+34435
+41890
+12450
+43373
+15718
+24303
+43374
+5085
+5773
+41890
+41890
+43375
+37556
+17947
+37291
+43376
+43347
+12987
+43377
+41890
+14
+41890
+41890
+41890
+18869
+590
+43378
+41890
+41890
+6364
+41890
+41890
+38381
+16443
+2744
+41890
+41919
+42349
+17698
+34
+37556
+3
+43379
+23103
+43380
+2330
+16375
+41687
+19792
+19
+11855
+1425
+41567
+8357
+1090
+411
+41890
+6441
+43381
+43382
+43383
+564
+19713
+43384
+43385
+32
+1961
+43386
+590
+41890
+43387
+43388
+43389
+5647
+4411
+333
+41890
+41890
+5612
+43390
+43391
+43392
+286
+43393
+18561
+43394
+43395
+6058
+19
+31098
+21131
+44
+5071
+1559
+43396
+43397
+41890
+15718
+21669
+43398
+43399
+46
+43400
+43401
+671
+1013
+590
+43402
+41890
+17911
+43403
+142
+5780
+36665
+43404
+1961
+1524
+41890
+43405
+41890
+43406
+41890
+41890
+17385
+12081
+41890
+43
+40570
+32920
+43407
+43408
+43409
+43410
+43411
+15824
+41890
+19
+21947
+30224
+415
+1615
+14369
+41890
+2577
+42483
+43412
+17894
+19655
+28845
+8668
+41890
+41890
+17523
+43413
+43414
+43415
+9
+349
+41890
+43416
+31293
+31293
+33524
+1021
+43417
+43418
+41890
+30551
+20
+2476
+41890
+41890
+15026
+17119
+21669
+21947
+43419
+20
+573
+155
+40570
+446
+43420
+13361
+43421
+38219
+9
+37881
+4518
+43422
+1090
+464
+41890
+736
+590
+41890
+9245
+9217
+43423
+43424
+16905
+43425
+41890
+43426
+31293
+41919
+37576
+8407
+43427
+43428
+43429
+41890
+22327
+43430
+30481
+43431
+41890
+40570
+43432
+40570
+41890
+29962
+736
+43433
+41890
+43434
+4455
+41890
+43435
+590
+20700
+43436
+43437
+43438
+41890
+41890
+41890
+683
+43439
+23103
+40570
+2694
+32
+41890
+6284
+41890
+29200
+13307
+887
+41890
+41890
+41890
+11449
+1716
+41890
+19
+345
+1495
+43440
+1502
+41890
+9
+3
+43441
+43442
+43443
+2228
+43444
+43445
+43446
+25584
+3415
+155
+42483
+30179
+41890
+41890
+43447
+43448
+41890
+13390
+21669
+26342
+43449
+41890
+43450
+43451
+19
+19852
+358
+9497
+20677
+41890
+41890
+15718
+41890
+19
+41890
+590
+32229
+41567
+43452
+40570
+43453
+19
+43454
+41919
+43455
+43456
+41890
+43457
+41796
+21522
+43458
+3908
+43
+41890
+41890
+155
+43459
+20
+5188
+43
+41419
+43460
+41890
+17571
+43
+27669
+26040
+31293
+43461
+41890
+14369
+41890
+43462
+683
+1112
+2566
+43463
+19
+41890
+31603
+41890
+590
+28923
+1051
+30576
+8160
+41890
+12445
+41890
+43464
+89
+1085
+41639
+25281
+13907
+43465
+43466
+7107
+1090
+36268
+43467
+43468
+27185
+41890
+5188
+590
+23103
+4242
+43469
+41890
+43470
+6874
+989
+43471
+28317
+5409
+43472
+25584
+43473
+736
+43474
+43475
+43476
+590
+27669
+651
+28845
+41890
+41890
+16466
+43477
+1090
+18045
+43478
+27719
+41890
+41890
+19
+41890
+573
+3317
+2434
+34706
+41890
+1021
+20700
+41890
+7553
+9
+43479
+16375
+41890
+942
+43480
+41890
+43481
+24303
+26040
+1090
+41890
+30762
+43482
+29483
+43483
+40570
+16640
+20941
+41890
+58
+41890
+43484
+397
+14330
+43485
+9
+41890
+19
+41890
+43486
+28845
+41890
+43487
+491
+19545
+41890
+43488
+41890
+30805
+41890
+15718
+43489
+1742
+41890
+25943
+40893
+41890
+36366
+1529
+43490
+23975
+43491
+3601
+41890
+39709
+19091
+21947
+41890
+43492
+41890
+43493
+43494
+3
+8670
+41890
+137
+705
+43495
+43496
+43497
+41890
+43498
+10
+34402
+20677
+137
+43499
+43500
+5243
+613
+41890
+43501
+41890
+43502
+43503
+32188
+30051
+41890
+9160
+41890
+43504
+20677
+15718
+41890
+39746
+590
+1049
+41890
+43505
+43506
+140
+41890
+40570
+43507
+43
+43508
+25943
+41890
+14369
+43509
+41890
+43510
+41890
+33442
+41890
+15718
+43511
+20442
+43512
+4
+30580
+16974
+41890
+43513
+43514
+43515
+29483
+43516
+519
+19095
+590
+11572
+41890
+43517
+15700
+13390
+5045
+43518
+40570
+43519
+43520
+464
+29483
+28897
+41890
+1107
+2289
+43521
+7048
+41890
+43522
+5679
+41890
+10360
+33541
+40605
+33510
+1224
+3
+40939
+43249
+28845
+827
+554
+590
+31293
+8919
+1316
+590
+43523
+19618
+43524
+43525
+4055
+43526
+3484
+41890
+43527
+16375
+43528
+38465
+377
+213
+1384
+21947
+29483
+41890
+213
+29381
+590
+43
+213
+13279
+8338
+14369
+43
+34433
+41890
+16
+155
+26229
+41919
+21669
+1566
+29200
+6595
+26496
+2694
+43529
+23805
+18863
+7854
+34641
+43530
+284
+28036
+43531
+41890
+41890
+43532
+43533
+43534
+43
+284
+25237
+43535
+38758
+43536
+155
+590
+23469
+41890
+8668
+5071
+41890
+303
+21947
+43537
+21053
+41890
+15718
+40570
+43538
+41890
+19
+43539
+41890
+1011
+41890
+1870
+2561
+8668
+1112
+41890
+6732
+707
+41890
+41890
+8392
+43540
+19
+248
+43541
+43542
+43543
+41904
+826
+14330
+3323
+43544
+10030
+416
+2040
+303
+43545
+41890
+76
+43546
+99
+5075
+19
+30224
+5650
+736
+4116
+41890
+40570
+43547
+213
+43548
+10869
+43549
+4196
+19
+99
+43550
+13390
+337
+1224
+41890
+213
+9446
+2406
+164
+590
+284
+89
+16707
+303
+140
+43551
+41890
+38
+43552
+43347
+13959
+10176
+16798
+1870
+41890
+10306
+21803
+15718
+9
+317
+19
+41890
+43553
+3
+41890
+24303
+43554
+21947
+464
+43555
+28441
+41890
+41890
+41890
+284
+43556
+250
+19
+213
+41890
+43557
+43486
+43558
+21947
+41890
+43559
+41890
+31293
+29483
+43560
+1812
+31168
+2655
+43561
+43562
+43
+2550
+22
+41890
+9
+27798
+43563
+43
+41890
+30877
+43564
+43565
+41890
+41117
+337
+303
+284
+1648
+284
+40570
+40570
+29483
+1592
+41890
+41890
+43566
+736
+43567
+41890
+15720
+43568
+248
+248
+491
+43108
+38310
+43569
+43570
+46
+15
+41890
+20
+14957
+1517
+337
+43571
+43572
+213
+28845
+25140
+41890
+9
+43573
+41890
+14420
+43574
+43575
+43576
+43577
+15720
+41890
+40570
+41890
+41890
+15831
+7053
+26496
+736
+284
+41890
+213
+27669
+38465
+41890
+43578
+41890
+41890
+225
+41890
+41890
+43256
+27656
+43579
+41890
+37790
+43580
+36218
+41890
+43581
+37961
+14369
+43582
+43583
+17869
+43584
+209
+39709
+213
+213
+29483
+40570
+43585
+43586
+7868
+43587
+36452
+29483
+16466
+41890
+259
+43588
+303
+284
+21947
+41890
+15718
+15718
+43
+1364
+41890
+11273
+9696
+21947
+33650
+10946
+31168
+43589
+43590
+3033
+57
+29204
+43591
+284
+41890
+4414
+140
+41622
+14330
+576
+43580
+7855
+19
+402
+1514
+5409
+43592
+43593
+43594
+213
+13807
+14603
+41890
+43595
+5085
+43596
+43597
+43598
+43599
+188
+43600
+43601
+35351
+40825
+43602
+28845
+29483
+713
+41890
+41890
+25605
+1524
+31293
+14102
+849
+43347
+41890
+43603
+13307
+41890
+3172
+827
+2919
+66
+41890
+43604
+38072
+40570
+42511
+9
+349
+317
+39709
+41890
+19695
+43605
+41890
+24303
+43606
+533
+41890
+1338
+41919
+43607
+5119
+43608
+43609
+41890
+40570
+16437
+18045
+1224
+41890
+40570
+25316
+41890
+6499
+57
+43610
+29483
+43611
+21947
+41890
+15718
+31293
+41919
+827
+43612
+4441
+36639
+13703
+43613
+155
+10389
+43614
+138
+140
+33650
+43615
+37338
+20340
+43
+43616
+4055
+1090
+178
+14693
+42290
+43617
+14603
+3
+3994
+140
+21669
+1991
+2728
+43618
+58
+43619
+30877
+9305
+2988
+43620
+1522
+2471
+43621
+43622
+43623
+1082
+41890
+7716
+29381
+15
+25316
+13150
+43624
+43625
+1018
+2008
+590
+38141
+41890
+21947
+18816
+43626
+8210
+4055
+40570
+34264
+323
+43627
+28549
+14330
+248
+43628
+41890
+43629
+41890
+41890
+41890
+34402
+40570
+1139
+28845
+41890
+43630
+41890
+43574
+2733
+18856
+41890
+41919
+155
+43631
+43632
+24725
+33569
+6441
+28845
+43633
+15
+861
+41890
+25237
+41890
+30209
+24662
+248
+349
+17385
+40570
+43634
+720
+15
+41890
+354
+43
+872
+13390
+41890
+43635
+1107
+6335
+10946
+213
+20087
+43636
+10946
+43637
+2804
+248
+43638
+43639
+22900
+43640
+43641
+13390
+43642
+43643
+2314
+41890
+13721
+10946
+43644
+28845
+2310
+8208
+43645
+11321
+43646
+43647
+5614
+8868
+21947
+1606
+12987
+43648
+43649
+41890
+15
+28845
+40570
+43650
+33650
+9
+43651
+7486
+14477
+43652
+14342
+24045
+43653
+6874
+43654
+4631
+43655
+248
+24864
+41890
+16367
+1584
+650
+14604
+41890
+5409
+27447
+43656
+43657
+3055
+43658
+19
+43
+15572
+27836
+41890
+41890
+8460
+41890
+43659
+14330
+21947
+284
+21669
+25237
+40570
+179
+1042
+33627
+34339
+21089
+41890
+41890
+33024
+43660
+354
+43661
+1870
+40591
+22
+41890
+43662
+43663
+38789
+738
+41919
+1905
+37556
+41890
+14369
+337
+590
+43664
+43665
+43666
+43667
+915
+43668
+9
+18956
+28845
+19046
+4344
+43669
+25
+39709
+43670
+9
+1157
+5780
+41890
+228
+14369
+43671
+25
+2310
+43672
+24908
+41890
+43673
+41890
+590
+5188
+915
+43674
+337
+43675
+41890
+41890
+1090
+43676
+31293
+590
+43
+4055
+33627
+36072
+337
+43677
+43678
+3078
+43679
+15
+43680
+41890
+43681
+337
+41890
+43
+41890
+7912
+40570
+40570
+36218
+29172
+43
+40570
+736
+24144
+4055
+41890
+19740
+590
+7360
+337
+554
+213
+865
+33109
+13390
+43682
+27719
+19
+4658
+9
+43683
+694
+23395
+43684
+14102
+7501
+31293
+43685
+41890
+43686
+10946
+41890
+43687
+4518
+43688
+43689
+41890
+41471
+7881
+43690
+15718
+1090
+43691
+41890
+11822
+14921
+43692
+14369
+11471
+43693
+43694
+43695
+41890
+43696
+337
+43697
+41890
+43698
+43699
+13215
+19
+41890
+41890
+41890
+41890
+41890
+43700
+13390
+43701
+19
+43702
+41890
+278
+1010
+6341
+5392
+213
+16437
+176
+26503
+34402
+24338
+43703
+677
+43704
+43705
+40570
+1765
+19918
+43706
+41890
+43707
+32332
+2415
+43708
+43709
+43108
+43710
+16437
+40570
+416
+43711
+9741
+41890
+43712
+28441
+43713
+43714
+43715
+7914
+41890
+43716
+43717
+4764
+15
+24303
+43718
+43719
+43720
+40570
+19
+12
+9233
+3
+1774
+43721
+41890
+41890
+19
+19
+43722
+5601
+19
+43723
+43724
+40591
+14086
+5119
+43725
+43726
+43727
+41890
+1090
+43728
+1716
+598
+19
+23103
+43729
+29381
+41890
+484
+4055
+41890
+43730
+41890
+2135
+30835
+43731
+533
+14330
+41890
+41890
+41890
+31293
+43732
+43733
+24144
+41890
+29381
+40570
+43734
+25683
+43
+6341
+4684
+14369
+32429
+30479
+194
+7516
+1090
+41890
+41890
+43735
+41890
+43736
+43737
+43738
+3709
+31168
+671
+25316
+958
+31603
+303
+38595
+41890
+43739
+40881
+3601
+20941
+21947
+491
+1524
+43740
+43741
+43742
+8668
+4364
+14266
+43743
+9
+43744
+155
+3858
+14620
+872
+25426
+41890
+590
+21669
+14477
+416
+19167
+15718
+12118
+14330
+30209
+4808
+43745
+24144
+1720
+33469
+22294
+37556
+43746
+43747
+398
+43
+41890
+43748
+19
+3772
+398
+29483
+5877
+8367
+43749
+36177
+43750
+43751
+28549
+15
+21903
+41890
+43752
+28036
+41305
+10946
+30224
+9
+42421
+2764
+41890
+41687
+21947
+41890
+41890
+28199
+20514
+41890
+25140
+43753
+33650
+5188
+1330
+3978
+37556
+29483
+790
+21026
+34402
+29483
+43754
+2085
+36333
+1090
+41890
+21669
+32642
+34402
+32925
+40570
+43755
+21669
+40570
+12
+43756
+43757
+2697
+43758
+286
+155
+35838
+19
+5085
+43759
+43760
+39709
+41890
+9688
+33496
+40570
+3
+4075
+41890
+43761
+43762
+19
+201
+21947
+15
+41890
+1090
+9696
+16443
+25140
+43763
+36328
+21947
+9
+41890
+43120
+21669
+1090
+43764
+103
+29483
+17943
+41890
+41890
+31041
+4764
+41890
+43765
+98
+41890
+8994
+41890
+33650
+1451
+713
+26744
+41890
+5582
+43766
+23518
+43767
+43768
+43769
+43770
+35224
+1172
+28845
+41890
+43771
+43772
+8512
+590
+19618
+43773
+43774
+24678
+352
+155
+26496
+35246
+19
+43775
+41890
+140
+6877
+1090
+5438
+43776
+46
+1615
+14330
+42000
+41890
+43777
+66
+155
+43
+43778
+43779
+43780
+37556
+354
+19472
+39709
+43781
+28845
+20497
+43782
+41890
+16443
+155
+15
+43783
+9460
+43
+43784
+41890
+21947
+43785
+43786
+25627
+10946
+590
+43787
+43788
+43
+43789
+14369
+43790
+24303
+249
+32410
+28845
+43791
+25
+43792
+28441
+43793
+713
+19
+26320
+43794
+30877
+37556
+43795
+28599
+43796
+20600
+43797
+20442
+92
+1905
+43798
+17338
+41890
+3553
+36921
+43799
+1481
+35224
+28441
+8392
+41890
+14604
+43800
+1768
+15718
+43801
+4245
+112
+41890
+11420
+32402
+41890
+43802
+43803
+43804
+30902
+2882
+14102
+43805
+43806
+43807
+32410
+19579
+43808
+155
+43809
+1907
+19
+25683
+14025
+43810
+9
+43811
+40570
+41890
+43812
+43338
+323
+41890
+41890
+43
+28845
+14562
+41890
+9364
+43813
+40570
+12629
+43814
+21251
+43815
+41567
+989
+43816
+19
+4050
+37364
+15718
+43817
+42741
+43818
+25407
+43819
+43820
+43821
+40570
+41890
+40570
+3546
+736
+590
+41890
+43822
+36735
+17911
+43823
+40570
+155
+40591
+34402
+31098
+14330
+33650
+41890
+1961
+826
+2
+259
+18334
+41890
+33278
+43486
+41890
+41890
+43824
+17675
+21669
+345
+43825
+1109
+41890
+43826
+43827
+14961
+43828
+43829
+43830
+31293
+35624
+31833
+43
+17898
+10946
+41890
+21947
+43831
+16618
+43832
+910
+43833
+43834
+9011
+13528
+43835
+345
+43836
+40439
+43837
+303
+34402
+4897
+303
+43838
+43839
+1051
+1853
+36268
+10946
+18045
+43840
+21947
+32
+29126
+41919
+43841
+9696
+43
+43842
+41890
+41890
+36218
+43843
+30224
+43844
+43845
+15
+43846
+27669
+43847
+43
+41890
+43848
+41890
+2971
+43849
+41890
+349
+42000
+41890
+36054
+41890
+41890
+41890
+43850
+1356
+342
+13482
+29483
+43851
+9
+823
+26361
+554
+5188
+43852
+41890
+41919
+41890
+590
+37888
+41890
+40570
+11683
+43853
+43854
+17670
+21947
+41890
+25624
+35025
+34181
+15766
+41890
+43855
+34
+19
+41890
+43856
+41890
+43857
+21027
+5409
+3994
+155
+4144
+43858
+16
+28845
+11754
+43859
+43860
+41890
+40570
+6165
+29483
+6766
+4108
+43861
+349
+43862
+576
+43863
+37556
+41890
+41890
+41890
+41890
+43
+41890
+15718
+43864
+5904
+342
+15158
+43865
+43866
+9
+43867
+33650
+27157
+41890
+155
+14369
+16437
+29381
+1011
+41890
+41890
+22620
+43868
+41890
+29483
+40570
+4055
+43869
+6400
+34402
+373
+41890
+41890
+43870
+27848
+43871
+40570
+43872
+41890
+41890
+155
+1100
+43873
+43874
+41890
+16466
+21669
+43875
+323
+43876
+43
+4683
+41890
+41890
+2164
+41890
+249
+910
+43877
+37790
+40570
+19
+349
+155
+43878
+43879
+26404
+19
+1385
+155
+15718
+43880
+29483
+41890
+5085
+31041
+590
+41890
+43881
+22065
+46
+41890
+43882
+23603
+41890
+43883
+19655
+43884
+4439
+43885
+43886
+43887
+40570
+43888
+41890
+43889
+36131
+43890
+41890
+14240
+1245
+41890
+1051
+43891
+43892
+43893
+417
+20308
+41890
+24896
+41890
+188
+29483
+43894
+43895
+43896
+1870
+3944
+43108
+155
+6439
+29628
+41890
+41890
+38
+21027
+33445
+19618
+155
+43897
+43347
+43898
+554
+23815
+41890
+19
+43899
+41890
+17151
+707
+43900
+43901
+43902
+1502
+18846
+43903
+43904
+28549
+43905
+115
+43906
+98
+3317
+1406
+37556
+40570
+1168
+16205
+43907
+42252
+43908
+41890
+533
+2919
+43909
+590
+13390
+43910
+41890
+41890
+43911
+26361
+41890
+19847
+89
+43912
+17911
+1364
+19
+43913
+43914
+3601
+13390
+46
+43915
+39709
+43916
+41890
+31168
+43917
+43918
+28317
+809
+57
+25943
+43919
+1453
+29381
+1011
+9
+43920
+1847
+354
+41890
+41890
+43921
+41890
+40570
+19206
+140
+2197
+43922
+5045
+16277
+43923
+19
+14962
+43924
+41919
+32646
+43362
+43925
+16413
+822
+4124
+19
+43926
+41890
+19
+1562
+2129
+25088
+41890
+10031
+43927
+2919
+43928
+43929
+41890
+10946
+33650
+41890
+176
+43550
+29204
+41890
+43930
+43931
+43932
+43933
+43934
+19
+41890
+155
+39588
+41890
+43935
+9
+41890
+9
+19582
+15824
+43936
+43937
+43938
+14477
+41890
+43939
+41890
+1502
+13228
+1172
+37556
+43940
+41919
+19
+43941
+43942
+730
+43
+43943
+1382
+20215
+28317
+25237
+6496
+43944
+40570
+43
+43945
+43946
+13721
+43947
+4288
+43948
+43949
+43950
+595
+6096
+41890
+41890
+42624
+43951
+41890
+554
+43952
+28845
+3432
+5188
+43338
+40570
+43953
+34402
+43954
+1090
+590
+958
+43955
+43956
+34903
+43957
+43958
+7658
+41890
+43959
+43960
+43961
+8685
+21973
+14477
+43962
+2787
+43963
+1615
+43964
+8668
+39709
+3601
+40570
+887
+24725
+41890
+3908
+43965
+31293
+4
+43
+315
+28845
+42483
+29381
+528
+15
+9497
+43966
+43967
+14660
+43968
+41890
+46
+43969
+43970
+1082
+4550
+24864
+41890
+554
+24864
+34402
+613
+16991
+41890
+40570
+20
+17151
+43971
+398
+25237
+1112
+40570
+1870
+31293
+590
+43972
+43973
+3491
+25973
+20677
+22804
+34402
+41890
+7522
+11751
+597
+43974
+40903
+2287
+31873
+19
+19655
+7379
+43975
+41890
+19
+14947
+19995
+43976
+5949
+15718
+37556
+40570
+185
+89
+43977
+24303
+43978
+2998
+43
+12553
+736
+23103
+12013
+43979
+42067
+4941
+41890
+20677
+30224
+43980
+1310
+1716
+14330
+43981
+43982
+29977
+31293
+34444
+18804
+29200
+43983
+2136
+41890
+2944
+41890
+736
+40591
+41890
+15718
+30224
+41890
+155
+41890
+41890
+43984
+41890
+21947
+43108
+43985
+736
+41890
+33627
+178
+41890
+5970
+43986
+43987
+15629
+41890
+43988
+540
+29483
+19
+43989
+43
+43990
+16437
+24324
+41890
+41890
+43991
+7053
+30972
+28845
+4301
+14887
+6272
+66
+43550
+43992
+28845
+29483
+43993
+358
+34
+4055
+7407
+41890
+179
+13405
+43994
+41919
+43995
+43996
+25
+43997
+43998
+43999
+31293
+28845
+44000
+377
+40570
+15
+44001
+44002
+2181
+37556
+2591
+4055
+44003
+41890
+24324
+41890
+44004
+13959
+22290
+41890
+41890
+17257
+677
+1680
+44005
+19
+5409
+40498
+1364
+22
+44006
+590
+4413
+44007
+28845
+44008
+29483
+2694
+44009
+20700
+41890
+43
+19
+44010
+28845
+41890
+44011
+44012
+46
+44013
+44014
+2770
+41890
+41687
+14527
+1820
+29387
+155
+41890
+554
+13390
+14504
+15461
+41890
+14869
+44015
+44016
+19579
+41890
+41890
+2728
+1605
+44017
+590
+4055
+40570
+1090
+43
+44018
+2577
+44019
+41919
+823
+44020
+44021
+1090
+2314
+41890
+6121
+21972
+40027
+155
+4174
+4055
+33141
+44022
+44023
+153
+43
+44024
+30224
+32696
+44025
+28772
+44026
+12875
+7379
+6480
+44027
+43550
+398
+44028
+28845
+12560
+14330
+10727
+12588
+44029
+33061
+28845
+44030
+11762
+590
+10614
+44031
+41890
+10946
+44032
+2029
+554
+44033
+24195
+20700
+41890
+44034
+44035
+44036
+44037
+9
+155
+9
+495
+44038
+34264
+30224
+40591
+20105
+3655
+46
+44039
+44040
+21947
+41919
+20304
+44041
+44042
+43442
+44043
+58
+12067
+1745
+104
+44044
+41890
+2804
+21947
+30224
+44045
+41890
+44046
+16
+155
+8357
+19020
+21669
+40570
+41890
+14369
+31150
+827
+44047
+44048
+41890
+44049
+44050
+495
+44051
+1021
+44052
+28845
+6612
+42000
+44053
+41890
+155
+40591
+6058
+44054
+8226
+25
+439
+12987
+41890
+44055
+41890
+228
+25624
+41890
+44056
+4055
+44057
+67
+41890
+7208
+44058
+10961
+43
+44059
+41890
+41890
+13897
+31168
+44060
+44061
+41890
+44062
+41890
+44063
+44064
+43990
+44065
+38033
+25237
+4364
+3844
+38235
+43
+10642
+1384
+44066
+21669
+2762
+44067
+44068
+19
+4426
+28295
+1688
+44069
+279
+751
+44070
+44071
+354
+25237
+5601
+44072
+33650
+38113
+42421
+37556
+140
+41890
+586
+41890
+44073
+24303
+44074
+13570
+5085
+44075
+1870
+44076
+41890
+44077
+1716
+4124
+1961
+44078
+30051
+19
+44079
+44080
+6726
+2577
+197
+41890
+44081
+9
+44082
+44083
+41890
+41890
+18327
+44084
+43
+721
+10147
+44085
+44086
+32
+44087
+13154
+2724
+44088
+10407
+955
+41890
+17143
+19
+41890
+1684
+35498
+44089
+286
+43
+44090
+41890
+590
+18742
+40570
+32
+274
+44091
+19
+44092
+9
+44093
+44094
+44095
+41890
+274
+22
+345
+44096
+590
+41890
+31293
+6728
+44097
+21947
+1011
+286
+40570
+41890
+34402
+44098
+44099
+40570
+42483
+1172
+44100
+44101
+44102
+155
+19
+44103
+35260
+44104
+44105
+9674
+41890
+14404
+30724
+42406
+13721
+40570
+29204
+25237
+2043
+20374
+13539
+41890
+44106
+17
+29381
+21947
+41890
+44107
+9
+28845
+1779
+44108
+44109
+44110
+41687
+41890
+44111
+590
+613
+43
+31293
+41890
+25237
+30580
+44112
+44113
+13390
+20941
+43347
+41890
+13721
+41890
+66
+44114
+20339
+34025
+44115
+37556
+41890
+35832
+39911
+44116
+24864
+41890
+9
+3050
+41890
+25316
+2009
+44117
+44118
+40658
+22512
+104
+15
+41890
+40570
+446
+44119
+34402
+44120
+14369
+44121
+6251
+44122
+3553
+1189
+44123
+34402
+2314
+44124
+915
+39536
+44125
+10946
+4
+44126
+41890
+19398
+43651
+10313
+46
+41890
+15104
+19618
+1817
+44127
+44128
+57
+40570
+21669
+13390
+703
+20
+24324
+44129
+57
+590
+42416
+41890
+15914
+30224
+44130
+44131
+2999
+31852
+44132
+23814
+44133
+590
+349
+9163
+209
+887
+44134
+795
+44135
+3546
+155
+1224
+44136
+44137
+1364
+4547
+317
+399
+14477
+40570
+1090
+5085
+41890
+44138
+44139
+149
+24410
+44140
+2764
+13390
+30224
+44141
+44142
+44143
+14013
+21947
+16
+16413
+14342
+31293
+44144
+9
+44145
+44146
+44147
+15718
+20443
+57
+44148
+43
+2029
+44149
+21947
+9
+44150
+20600
+44151
+44152
+34402
+1508
+29483
+21947
+29381
+44153
+17320
+1011
+590
+23150
+377
+155
+1090
+33650
+44154
+1562
+595
+40570
+44155
+24324
+44156
+590
+24454
+24664
+176
+44157
+665
+44158
+11647
+872
+8721
+1743
+590
+41890
+41890
+736
+44159
+44160
+989
+2253
+19618
+41890
+44161
+44162
+2488
+671
+10
+44163
+16437
+17911
+12214
+590
+4387
+43550
+31293
+60
+44164
+3323
+21947
+155
+41919
+590
+44165
+1508
+44166
+25237
+155
+44167
+44168
+1956
+13390
+44169
+41890
+823
+20
+41890
+44170
+43
+44171
+14
+19576
+770
+44172
+21947
+1716
+44173
+44174
+44175
+32
+44176
+3417
+44177
+6095
+4403
+185
+14369
+590
+41890
+9922
+1648
+44178
+5925
+358
+16024
+552
+41890
+44179
+44180
+352
+28845
+43550
+5990
+2410
+44181
+18982
+349
+44182
+845
+1013
+25140
+41890
+44183
+44184
+4
+21227
+2410
+44185
+15718
+1716
+44186
+44187
+44188
+11263
+44189
+41890
+10482
+44190
+44191
+155
+40591
+27719
+41890
+1710
+44192
+44193
+43
+44194
+41890
+13721
+10946
+14947
+541
+6218
+41728
+20
+44195
+44196
+44197
+416
+44198
+41890
+44199
+25316
+43365
+31873
+4293
+46
+24102
+16437
+44200
+41890
+29628
+142
+44201
+40570
+24058
+44202
+29483
+44203
+14869
+44204
+41890
+44205
+44206
+40996
+590
+44207
+40570
+44208
+41890
+2649
+5662
+155
+46
+140
+44209
+43005
+19451
+43
+44210
+910
+44211
+44212
+2804
+15
+42421
+28845
+9435
+1606
+9
+25316
+44213
+18176
+44214
+28480
+44215
+821
+5865
+9
+44216
+5627
+138
+14477
+21947
+35318
+20823
+363
+37556
+44217
+40570
+9
+707
+3422
+9
+39295
+44218
+66
+44219
+28845
+44220
+22124
+21947
+6847
+19
+44221
+44222
+44223
+1090
+18711
+44224
+155
+40570
+179
+44225
+44226
+12
+15993
+44227
+44228
+590
+22
+4965
+44229
+44230
+44231
+44232
+44233
+590
+5169
+21947
+12000
+44234
+23103
+665
+44235
+44236
+41890
+44237
+29007
+1559
+1051
+6207
+2476
+44238
+1090
+2260
+7553
+12321
+44239
+44240
+41890
+16437
+44241
+18798
+44242
+43550
+3844
+40570
+41075
+283
+7896
+1991
+44243
+9682
+115
+19
+44244
+44245
+2728
+887
+1889
+3484
+44246
+44247
+44248
+44249
+44250
+44251
+15
+44252
+31293
+44253
+11192
+19
+576
+44254
+25943
+44255
+44256
+14477
+44257
+40570
+590
+46
+317
+13150
+44258
+1786
+17635
+30224
+25555
+19794
+44259
+44260
+44261
+44262
+44263
+77
+44264
+9
+2672
+44265
+44266
+38461
+44267
+15997
+44268
+2591
+28549
+44269
+14660
+40012
+3626
+44270
+31098
+40570
+15989
+1090
+40570
+41434
+31293
+915
+44271
+44272
+554
+44273
+155
+19
+3291
+44274
+44275
+43
+44276
+44277
+36736
+44278
+42746
+44279
+8826
+9967
+41660
+44280
+861
+5803
+5601
+44281
+1090
+40570
+357
+30224
+17932
+19
+44282
+41890
+27293
+44283
+7048
+44284
+25237
+11963
+44285
+21669
+590
+44286
+44211
+484
+25237
+44287
+99
+40570
+155
+24725
+1364
+30551
+28031
+17048
+44288
+44289
+44290
+44291
+21669
+44292
+18045
+22850
+31293
+38021
+44293
+40591
+40570
+44294
+38308
+38033
+19
+28845
+155
+25
+590
+44295
+44296
+9
+44297
+27855
+44298
+43290
+44299
+25943
+40570
+27669
+44300
+228
+40570
+1090
+590
+286
+4055
+44301
+4033
+44302
+495
+14477
+44303
+12377
+16437
+42483
+28845
+8548
+345
+36735
+16281
+10960
+40570
+1090
+590
+345
+44304
+32105
+28845
+44305
+12255
+43550
+18627
+25237
+57
+827
+29483
+44306
+44307
+1295
+40570
+1090
+5780
+40570
+44308
+32
+44309
+15718
+44249
+155
+22317
+24144
+13803
+29204
+44310
+25683
+19
+823
+44311
+34602
+14369
+30051
+41890
+19167
+41890
+44312
+44313
+44314
+44315
+1991
+9
+44316
+44317
+44318
+44319
+155
+29424
+19
+3252
+44320
+259
+44321
+41890
+24303
+44322
+41890
+4432
+40570
+25584
+44323
+14852
+155
+44324
+44325
+43848
+29483
+21947
+30877
+4299
+1812
+32
+1316
+155
+22234
+8616
+89
+31400
+34337
+25683
+36218
+15
+38758
+44326
+155
+44327
+44328
+44329
+44330
+4856
+41890
+40893
+770
+155
+36268
+44331
+519
+26744
+590
+27669
+44332
+37556
+15
+44333
+41890
+44334
+1385
+40570
+41890
+44335
+286
+23585
+41890
+46
+32
+44336
+44337
+36735
+2136
+1310
+44338
+873
+2514
+29628
+21669
+44339
+44340
+89
+22065
+44341
+1559
+44342
+44343
+1247
+3343
+15498
+11472
+720
+19
+44344
+44345
+38465
+5780
+2043
+41890
+9
+14330
+8670
+44346
+25683
+22463
+44347
+15
+44348
+44349
+10117
+1514
+2410
+4693
+44350
+20514
+44351
+3484
+11762
+15
+5071
+24207
+44352
+7835
+29956
+1224
+29629
+23853
+44353
+44354
+21947
+5409
+11321
+514
+40570
+28961
+44355
+4684
+1100
+590
+18054
+12722
+44356
+18310
+446
+20781
+44357
+2694
+37556
+3328
+42483
+18310
+44358
+25943
+31293
+40570
+18453
+29628
+44359
+15718
+2865
+33295
+44360
+19
+66
+33380
+44361
+9
+415
+1559
+43
+99
+43550
+40570
+37556
+44362
+44363
+1385
+12987
+41890
+40990
+44364
+44342
+44365
+43
+42746
+46
+44366
+44367
+34402
+21689
+44368
+15
+279
+590
+23593
+18120
+14001
+9
+40570
+12151
+44369
+44370
+28845
+155
+155
+28295
+44371
+41890
+19
+15
+19837
+597
+13361
+58
+705
+44372
+44373
+41890
+34402
+31168
+415
+15718
+590
+936
+44374
+29483
+20280
+17911
+1520
+44375
+8668
+379
+40251
+44376
+34951
+33627
+44377
+9337
+23368
+3638
+33693
+34944
+9900
+16437
+590
+30224
+44378
+29483
+9
+5627
+44379
+41890
+44380
+44381
+2622
+34364
+44382
+2260
+44383
+24864
+44384
+17782
+44385
+3858
+764
+20052
+40073
+24207
+7353
+41890
+14660
+44386
+22570
+2804
+2724
+41919
+44387
+44388
+9095
+32275
+19
+77
+574
+15471
+44389
+7743
+185
+8668
+44390
+44391
+15718
+2865
+44392
+155
+44393
+13390
+31293
+20
+44394
+533
+14276
+44395
+44396
+44397
+12047
+44398
+44399
+44400
+44401
+42390
+15018
+2449
+44402
+1536
+36461
+44403
+15718
+44404
+40570
+44405
+1011
+33141
+44406
+24864
+44407
+30650
+44408
+23103
+44409
+44249
+44410
+22154
+13139
+12191
+44411
+40143
+41890
+44412
+44413
+43939
+41890
+31293
+1330
+44414
+155
+155
+33693
+44415
+44249
+38179
+41890
+2015
+44416
+19
+44417
+2832
+1720
+44418
+5769
+44419
+5409
+9662
+5780
+3317
+44420
+29400
+44421
+41890
+25584
+44422
+44423
+155
+178
+19
+339
+44424
+44425
+155
+6766
+39709
+44426
+44427
+44428
+39
+590
+6364
+37355
+44429
+44430
+40570
+30224
+1961
+44431
+736
+44432
+27798
+89
+1961
+514
+412
+3330
+31293
+5601
+44433
+8005
+44434
+21947
+590
+44435
+17507
+32410
+736
+33627
+44436
+44437
+28845
+44438
+2832
+19
+44439
+44440
+13570
+21947
+14477
+43
+155
+44441
+14017
+16074
+9
+44442
+44443
+25
+44444
+44445
+40570
+44446
+9567
+15384
+44447
+26585
+8668
+19
+44448
+44449
+21045
+42483
+42421
+155
+2601
+17
+44450
+9440
+19
+44451
+831
+40570
+17790
+40570
+16437
+12987
+28845
+44452
+44453
+44454
+495
+39783
+20113
+42962
+37556
+9
+44455
+480
+14369
+44456
+19
+19655
+677
+29483
+2314
+15824
+44457
+736
+44458
+19
+44459
+30224
+44460
+35656
+16466
+4518
+21276
+25829
+4502
+44461
+44462
+6620
+44463
+44464
+44465
+14770
+165
+44466
+19
+736
+142
+23670
+590
+554
+41567
+28845
+41919
+892
+44467
+44468
+34319
+44469
+44470
+9
+2287
+12987
+28212
+140
+40570
+24864
+44471
+44472
+701
+694
+1021
+43998
+35224
+1208
+14369
+23477
+44473
+41265
+44474
+44475
+44476
+38937
+12987
+2287
+41567
+3509
+19618
+41890
+17247
+31293
+19
+31098
+44477
+44478
+9
+4055
+286
+4055
+44479
+4463
+713
+44480
+16839
+44481
+44482
+20
+17
+6217
+10946
+11995
+24303
+44483
+44484
+21947
+1716
+44485
+21947
+1364
+4055
+14102
+790
+736
+44486
+44487
+317
+44488
+9
+17911
+155
+44489
+44490
+1901
+44491
+44492
+44493
+7313
+31293
+25983
+44494
+44495
+21089
+38465
+5085
+1561
+2410
+11621
+31293
+44496
+44497
+3759
+44358
+31168
+44498
+44328
+402
+20
+31293
+44499
+44500
+40472
+23103
+28845
+36737
+44501
+597
+42237
+44502
+44503
+44504
+43280
+4055
+44505
+7522
+40570
+28961
+25237
+349
+317
+7964
+34181
+44506
+44507
+373
+2537
+9543
+17691
+31293
+21947
+39593
+415
+5912
+197
+44508
+554
+40570
+352
+22990
+29200
+25683
+9020
+28317
+14330
+590
+44509
+377
+2009
+3874
+36735
+541
+5963
+18751
+13390
+650
+19655
+38033
+345
+44510
+37232
+1710
+37588
+19
+44511
+3598
+44512
+155
+44513
+44514
+41890
+17911
+28845
+44515
+44516
+44517
+44518
+9060
+24324
+21689
+43
+44519
+18169
+44520
+44521
+2537
+99
+44522
+44523
+703
+44524
+140
+25
+2347
+1442
+14477
+4055
+44525
+22684
+39520
+13390
+44526
+44527
+31293
+1047
+15718
+25620
+19618
+36735
+40570
+37808
+40289
+18919
+2460
+44528
+26081
+40311
+44529
+1157
+29047
+44530
+44531
+1900
+44532
+41919
+66
+14477
+44533
+44534
+15718
+44535
+39410
+345
+19
+14660
+44536
+44537
+38550
+44538
+44539
+19655
+568
+13255
+209
+44540
+1090
+44541
+43
+89
+41919
+17911
+272
+10982
+9
+24896
+44542
+16707
+2314
+9
+44543
+30209
+15718
+43
+43
+23103
+44544
+13848
+14369
+44545
+28845
+44546
+354
+40570
+14477
+31293
+262
+58
+1684
+41919
+14369
+19
+44547
+6130
+3105
+21563
+26544
+7835
+10639
+44548
+44549
+44550
+3514
+40605
+3119
+44551
+18310
+44552
+12548
+25237
+155
+41117
+19
+44553
+44554
+44555
+43
+44556
+43108
+43550
+44557
+44558
+44559
+44560
+3995
+2356
+155
+44249
+18553
+590
+21045
+3732
+43651
+44561
+24896
+24303
+29381
+44562
+44563
+44564
+2476
+26680
+44565
+44566
+43
+9
+574
+12671
+36218
+30224
+44567
+44568
+14660
+34
+14079
+44569
+284
+303
+34032
+44570
+7516
+736
+37556
+1090
+20533
+751
+44571
+44572
+40570
+44573
+38596
+40570
+44574
+9460
+19618
+284
+25316
+44575
+40570
+3353
+5660
+44576
+24303
+44176
+28036
+7455
+40570
+213
+43
+46
+44577
+44578
+44579
+284
+3759
+5188
+28845
+34703
+44580
+44581
+44582
+30041
+44583
+44584
+28845
+89
+27669
+44585
+32644
+7053
+303
+44586
+44587
+20110
+43
+32
+28845
+25237
+595
+225
+5601
+337
+41919
+286
+27754
+1011
+7516
+823
+20458
+616
+6877
+28036
+213
+19
+213
+44588
+1912
+11286
+23528
+41868
+33650
+58
+43347
+2591
+44589
+12402
+44590
+213
+284
+248
+349
+44591
+201
+213
+44592
+19
+248
+31293
+303
+337
+286
+893
+18310
+14174
+15718
+694
+29483
+379
+303
+44593
+40570
+44594
+28845
+44595
+337
+284
+44596
+44597
+29757
+44598
+411
+44599
+19947
+44600
+18045
+44601
+4002
+44602
+44603
+8683
+44604
+337
+18951
+25237
+89
+284
+30230
+33650
+44605
+44606
+44607
+44608
+248
+44609
+44610
+18934
+16798
+14216
+955
+44611
+44612
+13576
+43550
+17872
+44613
+40570
+303
+44614
+11754
+2
+29483
+337
+44249
+713
+14660
+44615
+31650
+13543
+44616
+2356
+415
+44617
+25316
+19
+213
+12397
+44618
+9367
+31293
+44619
+6595
+23103
+9
+21947
+44620
+44621
+8362
+2762
+5085
+37556
+155
+44622
+20401
+21947
+27719
+43
+142
+44623
+28845
+44624
+1443
+1090
+16166
+36019
+19
+26452
+669
+44625
+44626
+736
+44627
+1021
+17810
+25316
+44537
+44628
+1247
+9217
+25935
+44629
+317
+77
+43
+22922
+259
+44630
+248
+15718
+7835
+44631
+30224
+44632
+44633
+43
+44634
+19
+16826
+44635
+44636
+44637
+31293
+2117
+736
+43
+37556
+40570
+40570
+44638
+303
+44639
+44640
+44641
+2577
+14363
+8849
+44642
+44643
+44644
+44645
+44646
+24864
+1481
+317
+14342
+736
+8732
+44647
+44648
+44649
+44650
+105
+44651
+41890
+397
+28845
+40570
+44652
+9
+155
+154