Index: gen.py
===================================================================
--- gen.py	(revision 0)
+++ gen.py	(revision 0)
@@ -0,0 +1,433 @@
+import math
+import os
+import sys
+try:
+  from possibleStates import genTransitions
+except ImportError:
+  from finenight.possibleStates import genTransitions
+
+MODE = 'array'
+PACKED = True
+WORD = 64
+LOG2_WORD = int(math.log(WORD)/math.log(2))
+#MODE = 'switch'
+
+class LineOutput:
+
+  def __init__(self, indent=''):
+    self.l = []
+    self._indent = self.startIndent = indent
+
+  def __call__(self, s, indent=0):
+    if s.find('}') != -1:
+      assert self._indent != self.startIndent
+      self._indent = self._indent[:-2]
+
+    if indent != 0:
+      indent0 = '  ' * (len(self._indent)/2+indent)
+    else:
+      indent0 = self._indent
+      
+    self.l.append(indent0 + s.lstrip())
+    if s.find('{') != -1:
+      self._indent += '  '
+
+  def __str__(self):
+    if True:
+      assert self._indent == self.startIndent, 'indent %d vs start indent %d' % \
+             (len(self._indent), len(self.startIndent))
+    return '\n'.join(self.l)
+
+  def indent(self):
+    self._indent += '  '
+
+  def outdent(self):
+    assert self._indent != self.startIndent
+    self._indent = self._indent[:-2]
+    
+def charVarNumber(charVar):
+  """
+  Maps binary number (eg [1, 0, 1]) to its decimal value (5).
+  """
+
+  p = 1
+  sum = 0
+  downTo = len(charVar)-1
+  while downTo >= 0:
+    sum += p * int(charVar[downTo])
+    p *= 2
+    downTo -= 1
+  return sum
+
+def main():
+
+  n = int(sys.argv[1])
+
+  tables = genTransitions(n)
+
+  stateMap = {}
+
+  # init null state
+  stateMap['[]'] = -1
+
+  # init start state
+  stateMap['[(0, 0)]'] = 0
+
+  w = LineOutput()
+
+  w('package org.apache.lucene.util.automaton;')
+  w('')
+  w('// The following code was generated with the moman/finenight pkg')
+  w('// This package is available under the MIT License, see NOTICE')
+  w('// for more details.')
+  w('')
+  w('import org.apache.lucene.util.automaton.LevenshteinAutomata.ParametricDescription;')
+  w('')
+
+  className = 'Lev%dParametricDescription' % n
+
+  w('class %s extends ParametricDescription {' % className)
+
+  w('')
+  w('@Override')
+  w('int transition(int absState, int position, int vector) {')
+
+  w('  // null absState should never be passed in')
+  w('  assert absState != -1;')
+
+  w('')
+  w('  // decode absState -> state, offset')
+  w('  int state = absState/(w+1);')
+  w('  int offset = absState%(w+1);')
+  w('  assert offset >= 0;')
+  w('')  
+
+  machines = []
+  
+  for i, map in enumerate(tables):
+    if i == 0:
+      w('if (position == w) {')
+    elif i == len(tables)-1:
+      w('} else {')
+    else:
+      w('} else if (position == w-%d) {' % i)
+
+    if i != 0 and MODE == 'switch':
+      w('switch(vector) {')
+
+    l = map.items()
+    l.sort()
+
+    numCasesPerVector = None
+    numVectors = len(l)
+
+    if MODE == 'array':
+      toStateArray = []
+      toOffsetIncrArray = []
+
+    for charVar, states in l:
+
+      # somehow it's a string:
+      charVar = eval(charVar)
+
+      if i != 0 and MODE == 'switch':
+        w('case %s: // <%s>' % (charVarNumber(charVar), ','.join([str(x) for x in charVar])))
+        w.indent()
+        
+      l = states.items()
+
+      byFromState = {}
+
+      # first pass to assign states
+      byAction = {}
+      for s, (toS, offset) in l:
+        state = str(s)
+        if state == '[]':
+          # don't waste code on the null state
+          continue
+        
+        toState = str(toS)
+        if state not in stateMap:
+          stateMap[state] = len(stateMap)-1
+        if toState not in stateMap:
+          stateMap[toState] = len(stateMap)-1
+
+        byFromState[stateMap[state]] = (1+stateMap[toState], offset)
+
+        fromStateDesc = ', '.join([str(x) for x in eval(s)])
+        toStateDesc = ', '.join([str(x) for x in toS])   
+
+        tup = (stateMap[toState], toStateDesc, offset)
+        if tup not in byAction:
+          byAction[tup] = []
+        byAction[tup].append((fromStateDesc, stateMap[state]))
+
+      if numCasesPerVector is None:
+        numCasesPerVector = len(l)-1
+      else:
+        # we require this to be uniform... empirically it seems to be!
+        assert numCasesPerVector == len(l)-1
+
+      if MODE == 'array':
+
+        for s in range(numCasesPerVector):
+          toState, offsetIncr = byFromState[s]
+          toStateArray.append(toState)
+          toOffsetIncrArray.append(offsetIncr)
+
+      else:
+
+        # render switches
+        w('switch(state) {   // %s cases' % len(l))
+
+        for (toState, toStateDesc, offset), lx in byAction.items():
+          for fromStateDesc, fromState in lx:
+            w('case %s: // %s' % (fromState, fromStateDesc))
+          w.indent()
+          w('  state = %s; // %s' % (toState, toStateDesc))
+          if offset > 0:
+            w('  offset += %s;' % offset)
+          w('break;')
+          w.outdent()
+
+        w('}')
+        if i != 0:
+          w('break;')
+          w.outdent()
+
+    if MODE == 'array':
+      # strangely state can come in wildly out of bounds....
+      w('  if (state < %d) {' % numCasesPerVector)
+      w('    final int loc = vector * %d + state;' % numCasesPerVector)
+      if PACKED:
+        w('    offset += unpack(offsetIncrs%d, loc, NBITSOFFSET%d);' % (i, i))
+        w('    state = unpack(toStates%d, loc, NBITSSTATES%d)-1;' % (i, i))
+      else:
+        w('    offset += offsetIncrs%d[loc];' % i)
+        w('    state = toStates%d[loc]-1;' % i)
+      w('  }')
+    elif i != 0:
+      w('}')
+
+    machines.append((toStateArray, toOffsetIncrArray, numCasesPerVector, numVectors))
+
+  # ends switch statement for machine
+  w('}')
+
+  w('')
+
+  w('  if (state == -1) {')
+  w('    // null state')
+  w('    return -1;')
+  w('  } else {')
+  w('    // translate back to abs')
+  w('    return state*(w+1)+offset;')
+  w('  }')
+
+  # ends transition method
+  w('}')
+
+  subs = []
+  if MODE == 'array':
+    w.indent()
+    for i, (toStateArray, toOffsetIncrsArray, numCasesPerVector, numVectors) in enumerate(machines):
+      w('')
+      w.outdent()
+      w('// %d vectors; %d states per vector; array length = %d' % \
+        (numVectors, numCasesPerVector, numVectors*numCasesPerVector))
+      w.indent()
+      if PACKED:
+        # pack in python
+        l, nbits = pack(toStateArray)
+        subs.append(('NBITSSTATES%d' % i, str(nbits)))
+        w('  private final static long[] toStates%d = new long[] /*%d bits per value */ %s;' % \
+          (i, nbits, renderList([hex(x) for x in l])))
+
+        l, nbits = pack(toOffsetIncrsArray)
+        subs.append(('NBITSOFFSET%d' % i, str(nbits)))
+        w('  private final static long[] offsetIncrs%d = new long[] /*%d bits per value */ %s;' % \
+          (i, nbits, renderList([hex(x) for x in l])))
+      else:
+        w('  private final static int[] toStates%d = new int[] %s;' % \
+          (i, renderList([str(x) for x in toStateArray])))
+        w('  private final static int[] offsetIncrs%d = new int[] %s;' % \
+          (i, renderList([str(x) for x in toStateArray])))
+    w.outdent()
+  
+  stateMap2 = dict([[v,k] for k,v in stateMap.items()])
+  w('')
+  w('// state map')
+  sum = 0
+  minErrors = []
+  for i in xrange(len(stateMap2)-1):
+    w('//   %s -> %s' % (i, stateMap2[i]))
+    v = eval(stateMap2[i])
+    minError = min([-i+e for i, e in v])
+    c = len(v)
+    sum += c
+    minErrors.append(minError)
+  w('')
+
+  w.indent()
+  #w('private final static int[] minErrors = new int[] {%s};' % ','.join([str(x) for x in minErrors]))
+
+  w.outdent()
+
+  w('')
+  w('  public %s(int w) {' % className)
+  w('    super(w, %d, new int[] {%s});' % (n, ','.join([str(x) for x in minErrors])), indent=1)
+  w('  }')
+
+  if 0:
+    w('')
+    w('@Override')
+    w('public int size() { // this can now move up?')
+    w('  return %d*(w+1);' % (len(stateMap2)-1))
+    w('}')
+
+    w('')
+    w('@Override')
+    w('public int getPosition(int absState) { // this can now move up?')
+    w('  return absState % (w+1);')
+    w('}')
+
+    w('')
+    w('@Override')
+    w('public boolean isAccept(int absState) { // this can now move up?')
+    w('  // decode absState -> state, offset')
+    w('  int state = absState/(w+1);')
+    w('  if (true || state < minErrors.length) {')
+    w('    int offset = absState%(w+1);')
+    w('    assert offset >= 0;')
+    w('    return w - offset + minErrors[state] <= %d;' % n)
+    w('  } else {')
+    w('    return false;')
+    w('  }')
+    w('}')
+
+  if MODE == 'array' and PACKED:
+
+    # we moved into super class
+    if False:
+      w('')
+
+      v = 2
+      l = []
+      for i in range(63):
+        l.append(hex(v-1))
+        v *= 2
+
+      w('private final static long[] MASKS = new long[] {%s};' % ','.join(l), indent=1)
+      w('')
+
+      # unpack in java
+      w('private int unpack(long[] data, int index, int bitsPerValue) {')
+      w('  final long bitLoc = bitsPerValue * index;')
+      w('  final int dataLoc = (int) (bitLoc >> %d);' % LOG2_WORD)
+      w('  final int bitStart = (int) (bitLoc & %d);' % (WORD-1))
+      w('  //System.out.println("index=" + index + " dataLoc=" + dataLoc + " bitStart=" + bitStart + " bitsPerV=" + bitsPerValue);')
+      w('  if (bitStart + bitsPerValue <= %d) {' % WORD)
+      w('    // not split')
+      w('    return (int) ((data[dataLoc] >> bitStart) & MASKS[bitsPerValue-1]);')
+      w('  } else {')
+      w('    // split')
+      w('    final int part = %d-bitStart;' % WORD)
+      w('    return (int) (((data[dataLoc] >> bitStart) & MASKS[part-1]) +')
+      w('      ((data[1+dataLoc] & MASKS[bitsPerValue-part-1]) << part));', indent=1)
+      w('  }')
+      w('}')
+  
+  # class
+  w('}')
+  w('')
+
+  fileOut = 'src/java/org/apache/lucene/util/automaton/%s.java' % className
+
+  s = str(w)
+  for sub, repl in subs:
+    s = s.replace(sub, repl)
+
+  open(fileOut, 'wb').write(s)
+
+  print 'Wrote %s [%d lines; %.1f KB]' % \
+        (fileOut, len(w.l), os.path.getsize(fileOut)/1024.)
+
+def renderList(l):
+  lx = ['    ']
+  for i in xrange(len(l)):
+    if i > 0:
+      lx.append(',')
+      if i % 4 == 0:
+        lx.append('\n    ')
+    lx.append(l[i])
+  return '{\n%s\n  }' % ''.join(lx)
+
+MASKS = []
+v = 2
+for i in xrange(63):
+  MASKS.append(v-1)
+  v *= 2
+
+# packs into longs; returns long[], numBits
+def pack(l):
+  maxV = max(l)
+  bitsPerValue = max(1, int(math.ceil(math.log(maxV+1)/math.log(2.0))))
+
+  bitsLeft = WORD
+  pendingValue = 0
+
+  packed = []
+  for i in xrange(len(l)):
+    v = l[i]
+    if pendingValue > 0:
+      bitsUsed = math.ceil(math.log(pendingValue)/math.log(2.0))
+      assert bitsUsed <= (WORD-bitsLeft), 'bitsLeft=%s (%s-%s=%s) bitsUsed=%s' % (bitsLeft, WORD, bitsLeft, WORD-bitsLeft, bitsUsed)
+      
+    if bitsLeft >= bitsPerValue:
+      pendingValue += v << (WORD-bitsLeft)
+      bitsLeft -= bitsPerValue
+      if bitsLeft == 0:
+        packed.append(pendingValue)
+        bitsLeft = WORD
+        pendingValue = 0
+    else:
+      # split
+
+      # bottom bitsLeft go in current word:
+      pendingValue += (v & MASKS[bitsLeft-1]) << (WORD-bitsLeft)
+      packed.append(pendingValue)
+
+      pendingValue = v >> bitsLeft
+      bitsLeft = WORD - (bitsPerValue-bitsLeft)
+
+  if bitsLeft < WORD:
+    packed.append(pendingValue)
+
+  # verify(l, packed, bitsPerValue)
+  
+  return packed, bitsPerValue
+
+def verify(data, packedData, bitsPerValue):
+  for i in range(len(data)):
+    assert data[i] == unpack(packedData, i, bitsPerValue)
+
+def unpack(data, index, bitsPerValue):
+  bitLoc = bitsPerValue * index
+  dataLoc = int(bitLoc >> LOG2_WORD)
+  bitStart = int(bitLoc & (WORD-1))
+  if bitStart + bitsPerValue <= WORD:
+    # not split
+    return int(((data[dataLoc] >> bitStart) & MASKS[bitsPerValue-1]))
+  else:
+    # split
+    part = WORD-bitStart;
+    return int((((data[dataLoc] >> bitStart) & MASKS[part-1]) +
+                ((data[1+dataLoc] & MASKS[bitsPerValue-part-1]) << part)))
+  
+if __name__ == '__main__':
+  if not __debug__:
+    print
+    print 'ERROR: please run without -O'
+    print
+    sys.exit(1)
+  main()

Property changes on: gen.py
___________________________________________________________________
Added: svn:eol-style
   + native

Index: src/java/org/apache/lucene/search/FuzzyTermsEnum.java
===================================================================
--- src/java/org/apache/lucene/search/FuzzyTermsEnum.java	(revision 917582)
+++ src/java/org/apache/lucene/search/FuzzyTermsEnum.java	(working copy)
@@ -17,22 +17,262 @@
  * limitations under the License.
  */
 
+import org.apache.lucene.index.DocsAndPositionsEnum;
+import org.apache.lucene.index.DocsEnum;
 import org.apache.lucene.index.IndexReader;
 import org.apache.lucene.index.Term;
+import org.apache.lucene.index.TermsEnum;
+import org.apache.lucene.util.Bits;
 import org.apache.lucene.util.BytesRef;
 import org.apache.lucene.util.UnicodeUtil;
+import org.apache.lucene.util.BytesRef.Comparator;
+import org.apache.lucene.util.automaton.Automaton;
+import org.apache.lucene.util.automaton.BasicAutomata;
+import org.apache.lucene.util.automaton.BasicOperations;
+import org.apache.lucene.util.automaton.LevenshteinAutomata;
+import org.apache.lucene.util.automaton.RunAutomaton;
 
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
 
-/** Subclass of FilteredTermEnum for enumerating all terms that are similar
+/** Subclass of TermsEnum for enumerating all terms that are similar
  * to the specified filter term.
  *
  * <p>Term enumerations are always ordered by
  * {@link #getTermComparator}.  Each term in the enumeration is
  * greater than all that precede it.</p>
  */
-public final class FuzzyTermsEnum extends FilteredTermsEnum {
+public final class FuzzyTermsEnum extends TermsEnum {
+  private TermsEnum actualEnum;
+  private MultiTermQuery.BoostAttribute actualBoostAtt;
+  
+  private final MultiTermQuery.BoostAttribute boostAtt =
+    attributes().addAttribute(MultiTermQuery.BoostAttribute.class);
+  // nocommit bad variable naming, its the max nonLowerBound... 
+  private float lowerBound = boostAtt.getMaxNonCompetitiveBoost();
+  
+  private final float minSimilarity;
+  private final float scale_factor;
+  
+  private final int termLength;
+  
+  private int maxEdits;
+  private List<Automaton> automata;
+  private List<RunAutomaton> runAutomata;
+  
+  private final IndexReader reader;
+  private final Term term;
+  private final int realPrefixLength;
+  
+  public FuzzyTermsEnum(IndexReader reader, Term term, 
+      final float minSimilarity, final int prefixLength) throws IOException {
+    this.reader = reader;
+    this.term = term;
+    //The prefix could be longer than the word.
+    //It's kind of silly though.  It means we must match the entire word.
+    this.termLength = term.text().length();
+    this.realPrefixLength = prefixLength > termLength ? termLength : prefixLength;
+    this.minSimilarity = minSimilarity;
+    this.scale_factor = 1.0f / (1.0f - minSimilarity);
+    
+    // calculate the maximum k edits for this similarity, and build automata for 0..n, where n<=k
+    maxEdits = initialMaxDistance(minSimilarity, termLength);
+    // constant prefix
+    Automaton prefix = BasicAutomata.makeString(term.text().substring(0, realPrefixLength));
+    String text = term.text().substring(realPrefixLength);
+    LevenshteinAutomata la = new LevenshteinAutomata(text);
+    automata = new ArrayList<Automaton>(maxEdits);
+    runAutomata = new ArrayList<RunAutomaton>(maxEdits);
+    for (int i = 0; i <= maxEdits; i++) {
+      Automaton a = la.toAutomaton(i);
+      if (a == null)
+        break;
+      a = BasicOperations.concatenate(prefix, a);
+      automata.add(a);
+      runAutomata.add(new RunAutomaton(a));
+    }
+    TermsEnum subEnum = getActualEnum(maxEdits, null);
+    setEnum(subEnum != null ? subEnum : 
+      new LinearFuzzyTermsEnum(reader, term, minSimilarity, prefixLength));
+  }
+  
+  private TermsEnum getActualEnum(int editDistance, BytesRef lastTerm) throws IOException {
+    if (editDistance < automata.size()) {
+      return new AutomatonFuzzyTermsEnum(automata.get(editDistance), term, reader, 
+          minSimilarity, 
+          runAutomata.subList(0, editDistance + 1).toArray(new RunAutomaton[0]), lastTerm);
+    } else {
+      return null;
+    }
+  }
+ 
+  void setEnum(TermsEnum actualEnum) {
+    this.actualEnum = actualEnum;
+    this.actualBoostAtt = actualEnum.attributes().addAttribute(MultiTermQuery.BoostAttribute.class);
+  }
+  
+  /** fired when the max non-competitive boost has changed.
+   *  this is the hook to swap in a smarter actualEnum
+   */
+  void minBoostChanged(float boostValue, BytesRef lastTerm) throws IOException {
+    int oldMaxEdits = maxEdits;
+    
+    // as long as the max non-competitive boost is >= the max boost for some edit distance,
+    // keep dropping the max edit distance.
+    while (maxEdits > 0 && boostValue >= calculateMaxBoost(maxEdits))
+      maxEdits--;
+    
+    if (oldMaxEdits != maxEdits) { // the maximum n has changed
+      TermsEnum newEnum = getActualEnum(maxEdits, lastTerm);
+      if (newEnum != null) {
+        setEnum(newEnum);
+      }
+    }
+    // TODO, besides changing linear -> automaton, and swapping in a smaller automaton,
+    // we can also use this information to optimize the linear case itself:
+    // re-init maxDistances so the fast-fail happens for more terms due to the now
+    // stricter constraints.
+  }
+   
+  // for some raw minimum similarity and input term length, what is the maximum # of edits?
+  static int initialMaxDistance(float minimumSimilarity, int termLen) {
+    return (int) ((1-minimumSimilarity) * termLen);
+  }
+  
+  // for some number of edits, what is the maximum possible scaled boost?
+  float calculateMaxBoost(int nEdits) {
+    final float similarity = 1.0f - ((float) nEdits / (float) (termLength));
+    return (similarity - minSimilarity) * scale_factor;
+  }
 
+  @Override
+  public BytesRef next() throws IOException {
+    BytesRef term = actualEnum.next();
+    boostAtt.setBoost(actualBoostAtt.getBoost());
+    
+    final float lowerBound = boostAtt.getMaxNonCompetitiveBoost();
+    if (lowerBound != this.lowerBound) {
+      this.lowerBound = lowerBound;
+      // clone the term before potentially doing something with it
+      minBoostChanged(lowerBound, term == null ? null : (BytesRef) term.clone());
+    }
+    
+    return term;
+  }
+  
+  // proxy all other enum calls to the actual enum
+  @Override
+  public int docFreq() {
+    return actualEnum.docFreq();
+  }
+  
+  @Override
+  public DocsEnum docs(Bits skipDocs, DocsEnum reuse) throws IOException {
+    return actualEnum.docs(skipDocs, reuse);
+  }
+  
+  @Override
+  public DocsAndPositionsEnum docsAndPositions(Bits skipDocs,
+      DocsAndPositionsEnum reuse) throws IOException {
+    return actualEnum.docsAndPositions(skipDocs, reuse);
+  }
+  
+  @Override
+  public Comparator getComparator() throws IOException {
+    return actualEnum.getComparator();
+  }
+  
+  @Override
+  public long ord() throws IOException {
+    return actualEnum.ord();
+  }
+  
+  @Override
+  public SeekStatus seek(BytesRef text) throws IOException {
+    return actualEnum.seek(text);
+  }
+  
+  @Override
+  public SeekStatus seek(long ord) throws IOException {
+    return actualEnum.seek(ord);
+  }
+  
+  @Override
+  public BytesRef term() throws IOException {
+    return actualEnum.term();
+  }
+}
+
+/**
+ * Implement fuzzy enumeration with automaton.
+ * <p>
+ * This is the fastest method as opposed to LinearFuzzyTermsEnum:
+ *  as enumeration is logarithmic to the number of terms (instead of linear)
+ * and comparison is linear to length of the term (rather than quadratic)
+ */
+final class AutomatonFuzzyTermsEnum extends AutomatonTermsEnum {
+  private final RunAutomaton matchers[];
+  // used for unicode conversion from BytesRef byte[] to char[]
+  private final UnicodeUtil.UTF16Result utf16 = new UnicodeUtil.UTF16Result();
+  
+  private final float minimumSimilarity;
+  private final float scale_factor;
+  
+  private final int fullSearchTermLength;
+  private final BytesRef termRef;
+  
+  private final BytesRef lastTerm;
+  private final MultiTermQuery.BoostAttribute boostAtt =
+    attributes().addAttribute(MultiTermQuery.BoostAttribute.class);
+  
+  public AutomatonFuzzyTermsEnum(Automaton automaton, Term queryTerm,
+      IndexReader reader, float minSimilarity, RunAutomaton matchers[], BytesRef lastTerm) throws IOException {
+    super(automaton, queryTerm, reader, false);
+    this.minimumSimilarity = minSimilarity;
+    this.scale_factor = 1.0f / (1.0f - minimumSimilarity);
+    this.matchers = matchers;
+    this.lastTerm = lastTerm;
+    termRef = new BytesRef(queryTerm.text());
+    fullSearchTermLength = queryTerm.text().length();
+  }
+  
+  @Override
+  protected AcceptStatus accept(BytesRef term) {
+    if (term.equals(termRef)) { // ed = 0
+      boostAtt.setBoost(1.0F);
+      return AcceptStatus.YES_AND_SEEK;
+    }
+    
+    UnicodeUtil.UTF8toUTF16(term.bytes, term.offset, term.length, utf16);
+    
+    for (int i = 1; i < matchers.length; i++)
+      if (matchers[i].run(utf16.result, 0, utf16.length)) {
+        final float similarity = 1.0f - ((float) i / (float) 
+            (Math.min(utf16.length, fullSearchTermLength)));
+        if (similarity > minimumSimilarity) {
+          boostAtt.setBoost((float) ((similarity - minimumSimilarity) * scale_factor));
+          return AcceptStatus.YES_AND_SEEK;
+        } else {
+          // TODO: optimize and intersect automata with length restrictions up
+          // front so this can't happen.
+          return AcceptStatus.NO_AND_SEEK;
+        }
+      }
+
+    return AcceptStatus.NO_AND_SEEK;
+  }
+
+  @Override
+  protected BytesRef nextSeekTerm(BytesRef term) throws IOException {
+    if (term == null)
+      term = lastTerm;
+    return super.nextSeekTerm(term);
+  }
+}
+
+final class LinearFuzzyTermsEnum extends FilteredTermsEnum {
+
   /* This should be somewhere around the average long word.
    * If it is longer, we waste time and space. If it is shorter, we waste a
    * little bit of time growing the array as we encounter longer words.
@@ -68,7 +308,7 @@
    * @param prefixLength Length of required common prefix. Default value is 0.
    * @throws IOException
    */
-  public FuzzyTermsEnum(IndexReader reader, Term term, final float minSimilarity, final int prefixLength) throws IOException {
+  public LinearFuzzyTermsEnum(IndexReader reader, Term term, final float minSimilarity, final int prefixLength) throws IOException {
     super(reader, term.field());
     
     if (minSimilarity >= 1.0f)
Index: src/java/org/apache/lucene/util/automaton/Lev1ParametricDescription.java
===================================================================
--- src/java/org/apache/lucene/util/automaton/Lev1ParametricDescription.java	(revision 0)
+++ src/java/org/apache/lucene/util/automaton/Lev1ParametricDescription.java	(revision 0)
@@ -0,0 +1,99 @@
+package org.apache.lucene.util.automaton;
+
+// The following code was generated with the moman/finenight pkg
+// This package is available under the MIT License, see NOTICE
+// for more details.
+
+import org.apache.lucene.util.automaton.LevenshteinAutomata.ParametricDescription;
+
+class Lev1ParametricDescription extends ParametricDescription {
+  
+  @Override
+  int transition(int absState, int position, int vector) {
+    // null absState should never be passed in
+    assert absState != -1;
+    
+    // decode absState -> state, offset
+    int state = absState/(w+1);
+    int offset = absState%(w+1);
+    assert offset >= 0;
+    
+    if (position == w) {
+      if (state < 2) {
+        final int loc = vector * 2 + state;
+        offset += unpack(offsetIncrs0, loc, 1);
+        state = unpack(toStates0, loc, 2)-1;
+      }
+    } else if (position == w-1) {
+      if (state < 3) {
+        final int loc = vector * 3 + state;
+        offset += unpack(offsetIncrs1, loc, 1);
+        state = unpack(toStates1, loc, 2)-1;
+      }
+    } else if (position == w-2) {
+      if (state < 5) {
+        final int loc = vector * 5 + state;
+        offset += unpack(offsetIncrs2, loc, 2);
+        state = unpack(toStates2, loc, 3)-1;
+      }
+    } else {
+      if (state < 5) {
+        final int loc = vector * 5 + state;
+        offset += unpack(offsetIncrs3, loc, 2);
+        state = unpack(toStates3, loc, 3)-1;
+      }
+    }
+    
+    if (state == -1) {
+      // null state
+      return -1;
+    } else {
+      // translate back to abs
+      return state*(w+1)+offset;
+    }
+  }
+    
+  // 1 vectors; 2 states per vector; array length = 2
+  private final static long[] toStates0 = new long[] /*2 bits per value */ {
+    0x2
+  };
+  private final static long[] offsetIncrs0 = new long[] /*1 bits per value */ {
+    0x0
+  };
+    
+  // 2 vectors; 3 states per vector; array length = 6
+  private final static long[] toStates1 = new long[] /*2 bits per value */ {
+    0xa43
+  };
+  private final static long[] offsetIncrs1 = new long[] /*1 bits per value */ {
+    0x38
+  };
+    
+  // 4 vectors; 5 states per vector; array length = 20
+  private final static long[] toStates2 = new long[] /*3 bits per value */ {
+    0x4da292442420003L
+  };
+  private final static long[] offsetIncrs2 = new long[] /*2 bits per value */ {
+    0x5555528000L
+  };
+    
+  // 8 vectors; 5 states per vector; array length = 40
+  private final static long[] toStates3 = new long[] /*3 bits per value */ {
+    0x14d0812112018003L,0xb1a29b46d48a49L
+  };
+  private final static long[] offsetIncrs3 = new long[] /*2 bits per value */ {
+    0x555555e80a0f0000L,0x5555
+  };
+  
+  // state map
+  //   0 -> [(0, 0)]
+  //   1 -> [(0, 1)]
+  //   2 -> [(0, 1), (1, 1)]
+  //   3 -> [(0, 1), (1, 1), (2, 1)]
+  //   4 -> [(0, 1), (2, 1)]
+  
+  
+  public Lev1ParametricDescription(int w) {
+    super(w, 1, new int[] {0,1,0,-1,-1});
+  }
+}

Property changes on: src\java\org\apache\lucene\util\automaton\Lev1ParametricDescription.java
___________________________________________________________________
Added: svn:eol-style
   + native

Index: src/java/org/apache/lucene/util/automaton/Lev2ParametricDescription.java
===================================================================
--- src/java/org/apache/lucene/util/automaton/Lev2ParametricDescription.java	(revision 0)
+++ src/java/org/apache/lucene/util/automaton/Lev2ParametricDescription.java	(revision 0)
@@ -0,0 +1,199 @@
+package org.apache.lucene.util.automaton;
+
+// The following code was generated with the moman/finenight pkg
+// This package is available under the MIT License, see NOTICE
+// for more details.
+
+import org.apache.lucene.util.automaton.LevenshteinAutomata.ParametricDescription;
+
+class Lev2ParametricDescription extends ParametricDescription {
+  
+  @Override
+  int transition(int absState, int position, int vector) {
+    // null absState should never be passed in
+    assert absState != -1;
+    
+    // decode absState -> state, offset
+    int state = absState/(w+1);
+    int offset = absState%(w+1);
+    assert offset >= 0;
+    
+    if (position == w) {
+      if (state < 3) {
+        final int loc = vector * 3 + state;
+        offset += unpack(offsetIncrs0, loc, 1);
+        state = unpack(toStates0, loc, 2)-1;
+      }
+    } else if (position == w-1) {
+      if (state < 5) {
+        final int loc = vector * 5 + state;
+        offset += unpack(offsetIncrs1, loc, 1);
+        state = unpack(toStates1, loc, 3)-1;
+      }
+    } else if (position == w-2) {
+      if (state < 11) {
+        final int loc = vector * 11 + state;
+        offset += unpack(offsetIncrs2, loc, 2);
+        state = unpack(toStates2, loc, 4)-1;
+      }
+    } else if (position == w-3) {
+      if (state < 21) {
+        final int loc = vector * 21 + state;
+        offset += unpack(offsetIncrs3, loc, 2);
+        state = unpack(toStates3, loc, 5)-1;
+      }
+    } else if (position == w-4) {
+      if (state < 30) {
+        final int loc = vector * 30 + state;
+        offset += unpack(offsetIncrs4, loc, 3);
+        state = unpack(toStates4, loc, 5)-1;
+      }
+    } else {
+      if (state < 30) {
+        final int loc = vector * 30 + state;
+        offset += unpack(offsetIncrs5, loc, 3);
+        state = unpack(toStates5, loc, 5)-1;
+      }
+    }
+    
+    if (state == -1) {
+      // null state
+      return -1;
+    } else {
+      // translate back to abs
+      return state*(w+1)+offset;
+    }
+  }
+    
+  // 1 vectors; 3 states per vector; array length = 3
+  private final static long[] toStates0 = new long[] /*2 bits per value */ {
+    0x23
+  };
+  private final static long[] offsetIncrs0 = new long[] /*1 bits per value */ {
+    0x0
+  };
+    
+  // 2 vectors; 5 states per vector; array length = 10
+  private final static long[] toStates1 = new long[] /*3 bits per value */ {
+    0x1a68c105
+  };
+  private final static long[] offsetIncrs1 = new long[] /*1 bits per value */ {
+    0x3e0
+  };
+    
+  // 4 vectors; 11 states per vector; array length = 44
+  private final static long[] toStates2 = new long[] /*4 bits per value */ {
+    0x6280b80804280405L,0x2323432321608282L,0x523434543213L
+  };
+  private final static long[] offsetIncrs2 = new long[] /*2 bits per value */ {
+    0x5555502220000800L,0x555555
+  };
+    
+  // 8 vectors; 21 states per vector; array length = 168
+  private final static long[] toStates3 = new long[] /*5 bits per value */ {
+    0x40300c0108801005L,0x80202a8208801000L,0x4021006280a0288dL,0x30482184802d8414L,
+    0x5990240880010460L,0x191a28118330900L,0x310c413204c1104L,0x8625084811c4710dL,
+    0xa92a398e2188231aL,0x104e351c4a508ca4L,0x21208511c8341483L,0xe6290620946a1910L,
+    0xd47221423216a4a0L,0x28
+  };
+  private final static long[] offsetIncrs3 = new long[] /*2 bits per value */ {
+    0x33300030c2000800L,0x32828088800c3cfL,0x5555550cace32320L,0x5555555555555555L,
+    0x5555555555555555L,0x5555
+  };
+    
+  // 16 vectors; 30 states per vector; array length = 480
+  private final static long[] toStates4 = new long[] /*5 bits per value */ {
+    0x80300c0108801005L,0x88210802000L,0x44200401400000L,0x7ae3b88621185c07L,
+    0x101500042100404L,0x20803140501446cL,0x40100420006c2122L,0x490140511b004054L,
+    0x8401f2e3c086411L,0x120861200b100822L,0x641102400081180cL,0x4802c40100001088L,
+    0x8c21195607048418L,0x1421014245bc3f2L,0x23450230661200b1L,0x2108664118240803L,
+    0x8c1984802c802004L,0xbc3e28c41150d140L,0xc4120102209421dL,0x7884c11c4710d031L,
+    0x210842109031bc62L,0xd21484360c431044L,0x9c265293a3a6e741L,0x1cc710c41109ce70L,
+    0x1bce27a846525495L,0x3105425094a108c7L,0x6f735e95254731c4L,0x9ee7a9c234a9393aL,
+    0x144720d0520c4150L,0x211051bc646084c2L,0x3614831048220842L,0x93a460e742351488L,
+    0xc4120a2e70a24656L,0x284642d4941cc520L,0x4094a210c51bce46L,0xb525073148310502L,
+    0x24356939460f7358L,0x4098e7aa
+  };
+  private final static long[] offsetIncrs4 = new long[] /*3 bits per value */ {
+    0xc0602000010000L,0xa000040000000001L,0x248204041248L,0xb0180c06c3618618L,
+    0x238d861860001861L,0x41040061c6e06041L,0x4004900c2402400L,0x409489001041001L,
+    0x4184184004148124L,0x1041b4980c24c3L,0xd26040938d061061L,0x2492492492494146L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x24924924
+  };
+    
+  // 32 vectors; 30 states per vector; array length = 960
+  private final static long[] toStates5 = new long[] /*5 bits per value */ {
+    0x80300c0108801005L,0x88210802000L,0x42200401400000L,0xa088201000300c03L,
+    0x100510842108428L,0x2188461701c01108L,0x108401011eb8eeL,0x85c0700442004014L,
+    0x88267ae3b886211L,0x1446c01015108842L,0xc212202080314050L,0x405440100420006L,
+    0x10201c50140511b0L,0x942528423b08888L,0x240501446c010155L,0x21007cb8f0219045L,
+    0x511b004054402088L,0x2e3c086411490140L,0x200b50904428823fL,0x400081180c120861L,
+    0x100001088641102L,0x46030482184802c4L,0x9ce8990840980030L,0x21061200b709c210L,
+    0xf0fca308465581c1L,0x802c405084050916L,0xc211956070484184L,0x9e4209ee65bc3f28L,
+    0x3450230661200b70L,0x1086641182408032L,0xc1984802c8020042L,0x86098201c8d1408L,
+    0xb88a22529ce399L,0x1045434502306612L,0x4088250876f0f8a3L,0xd1408c1984802c80L,
+    0xee3dbc3e28c41150L,0xd0310c4188984429L,0xbc627884c11c4710L,0x1044210842109031L,
+    0x21704711c4340c43L,0xbdef7bdf0c7a18b4L,0x85210d8310c41ef7L,0x994a4e8e9b9d074L,
+    0x60c4310442739c27L,0x3a3a6e741d214843L,0x41ef77bdf77de529L,0x8465254951cc710cL,
+    0x94a108c71bce27aL,0x5254731c43105425L,0xdb1c7a38b4a15949L,0xc710c41cf73dce7bL,
+    0xe4e9bdcd7a54951cL,0x5427b9ea708d2a4L,0x735e95254731c431L,0xbd677db4a9393a6fL,
+    0x4720d0520c41cf75L,0x1051bc646084c214L,0x1483104822084221L,0x193821708511c834L,
+    0x1bf6fdef6f7f147aL,0xd08d45220d8520c4L,0x9c289195a4e91839L,0x488361483104828bL,
+    0xe5693a460e742351L,0x520c41bf71bdf717L,0xe46284642d4941ccL,0x5024094a210c51bcL,
+    0x590b525073148310L,0xce6f7b147a3938a1L,0x941cc520c41f77ddL,0xd5a4e5183dcd62d4L,
+    0x48310502639ea890L,0x460f7358b5250731L,0xf779bd6717b56939L
+  };
+  private final static long[] offsetIncrs5 = new long[] /*3 bits per value */ {
+    0xc0602000010000L,0x8000040000000001L,0xb6db6d4030180L,0x810104922800010L,
+    0x248a000040000092L,0x618000b649654041L,0x861b0180c06c3618L,0x301b0d861860001L,
+    0x61861800075d6ed6L,0x1871b8181048e3L,0xe56041238d861860L,0x40240041040075c6L,
+    0x4100104004900c2L,0x55b5240309009001L,0x1025224004104005L,0x10410010520490L,
+    0x55495240409489L,0x4980c24c34184184L,0x30d061061001041bL,0x184005556d260309L,
+    0x51b4981024e34184L,0x40938d0610610010L,0x492492495546d260L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L
+  };
+  
+  // state map
+  //   0 -> [(0, 0)]
+  //   1 -> [(0, 2)]
+  //   2 -> [(0, 1)]
+  //   3 -> [(0, 2), (1, 2)]
+  //   4 -> [(0, 1), (1, 1)]
+  //   5 -> [(0, 2), (2, 1)]
+  //   6 -> [(0, 1), (2, 2)]
+  //   7 -> [(0, 2), (1, 2), (2, 2)]
+  //   8 -> [(0, 1), (2, 1)]
+  //   9 -> [(0, 2), (2, 2)]
+  //   10 -> [(0, 1), (1, 1), (2, 1)]
+  //   11 -> [(0, 2), (1, 2), (2, 2), (3, 2)]
+  //   12 -> [(0, 2), (2, 1), (3, 1)]
+  //   13 -> [(0, 2), (3, 2)]
+  //   14 -> [(0, 2), (2, 2), (3, 2)]
+  //   15 -> [(0, 2), (1, 2), (3, 1)]
+  //   16 -> [(0, 2), (1, 2), (3, 2)]
+  //   17 -> [(0, 1), (2, 2), (3, 2)]
+  //   18 -> [(0, 2), (3, 1)]
+  //   19 -> [(0, 1), (3, 2)]
+  //   20 -> [(0, 1), (1, 1), (3, 2)]
+  //   21 -> [(0, 2), (2, 1), (4, 2)]
+  //   22 -> [(0, 2), (1, 2), (4, 2)]
+  //   23 -> [(0, 2), (1, 2), (3, 2), (4, 2)]
+  //   24 -> [(0, 2), (2, 2), (4, 2)]
+  //   25 -> [(0, 2), (2, 2), (3, 2), (4, 2)]
+  //   26 -> [(0, 2), (3, 2), (4, 2)]
+  //   27 -> [(0, 2), (1, 2), (2, 2), (3, 2), (4, 2)]
+  //   28 -> [(0, 2), (4, 2)]
+  //   29 -> [(0, 2), (1, 2), (2, 2), (4, 2)]
+  
+  
+  public Lev2ParametricDescription(int w) {
+    super(w, 2, new int[] {0,2,1,1,0,-1,0,0,-1,0,-1,-1,-2,-1,-1,-2,-1,-1,-2,-1,-1,-2,-2,-2,-2,-2,-2,-2,-2,-2});
+  }
+}

Property changes on: src\java\org\apache\lucene\util\automaton\Lev2ParametricDescription.java
___________________________________________________________________
Added: svn:eol-style
   + native

Index: src/java/org/apache/lucene/util/automaton/Lev3ParametricDescription.java
===================================================================
--- src/java/org/apache/lucene/util/automaton/Lev3ParametricDescription.java	(revision 0)
+++ src/java/org/apache/lucene/util/automaton/Lev3ParametricDescription.java	(revision 0)
@@ -0,0 +1,2217 @@
+package org.apache.lucene.util.automaton;
+
+// The following code was generated with the moman/finenight pkg
+// This package is available under the MIT License, see NOTICE
+// for more details.
+
+import org.apache.lucene.util.automaton.LevenshteinAutomata.ParametricDescription;
+
+class Lev3ParametricDescription extends ParametricDescription {
+  
+  @Override
+  int transition(int absState, int position, int vector) {
+    // null absState should never be passed in
+    assert absState != -1;
+    
+    // decode absState -> state, offset
+    int state = absState/(w+1);
+    int offset = absState%(w+1);
+    assert offset >= 0;
+    
+    if (position == w) {
+      if (state < 4) {
+        final int loc = vector * 4 + state;
+        offset += unpack(offsetIncrs0, loc, 1);
+        state = unpack(toStates0, loc, 3)-1;
+      }
+    } else if (position == w-1) {
+      if (state < 7) {
+        final int loc = vector * 7 + state;
+        offset += unpack(offsetIncrs1, loc, 1);
+        state = unpack(toStates1, loc, 3)-1;
+      }
+    } else if (position == w-2) {
+      if (state < 17) {
+        final int loc = vector * 17 + state;
+        offset += unpack(offsetIncrs2, loc, 2);
+        state = unpack(toStates2, loc, 5)-1;
+      }
+    } else if (position == w-3) {
+      if (state < 39) {
+        final int loc = vector * 39 + state;
+        offset += unpack(offsetIncrs3, loc, 2);
+        state = unpack(toStates3, loc, 6)-1;
+      }
+    } else if (position == w-4) {
+      if (state < 82) {
+        final int loc = vector * 82 + state;
+        offset += unpack(offsetIncrs4, loc, 3);
+        state = unpack(toStates4, loc, 7)-1;
+      }
+    } else if (position == w-5) {
+      if (state < 145) {
+        final int loc = vector * 145 + state;
+        offset += unpack(offsetIncrs5, loc, 3);
+        state = unpack(toStates5, loc, 8)-1;
+      }
+    } else if (position == w-6) {
+      if (state < 196) {
+        final int loc = vector * 196 + state;
+        offset += unpack(offsetIncrs6, loc, 3);
+        state = unpack(toStates6, loc, 8)-1;
+      }
+    } else {
+      if (state < 196) {
+        final int loc = vector * 196 + state;
+        offset += unpack(offsetIncrs7, loc, 3);
+        state = unpack(toStates7, loc, 8)-1;
+      }
+    }
+    
+    if (state == -1) {
+      // null state
+      return -1;
+    } else {
+      // translate back to abs
+      return state*(w+1)+offset;
+    }
+  }
+    
+  // 1 vectors; 4 states per vector; array length = 4
+  private final static long[] toStates0 = new long[] /*3 bits per value */ {
+    0x41c
+  };
+  private final static long[] offsetIncrs0 = new long[] /*1 bits per value */ {
+    0x0
+  };
+    
+  // 2 vectors; 7 states per vector; array length = 14
+  private final static long[] toStates1 = new long[] /*3 bits per value */ {
+    0x2351a346a37L
+  };
+  private final static long[] offsetIncrs1 = new long[] /*1 bits per value */ {
+    0x3f80
+  };
+    
+  // 4 vectors; 17 states per vector; array length = 68
+  private final static long[] toStates2 = new long[] /*5 bits per value */ {
+    0x828d6603408280c7L,0x350d6d022006a1aL,0x8831040a4356d1adL,0x8c82208862886418L,
+    0x290c5118e6290620L,0x19c44
+  };
+  private final static long[] offsetIncrs2 = new long[] /*2 bits per value */ {
+    0x82200000200000L,0x5555555555555550L,0x55
+  };
+    
+  // 8 vectors; 39 states per vector; array length = 312
+  private final static long[] toStates3 = new long[] /*6 bits per value */ {
+    0x674600d008140187L,0x932004c049349350L,0xcd18601c0060c00L,0x40067d47458144e0L,
+    0x218220967034804dL,0x7030028130e00e18L,0x893803486080703L,0xca0cb34021051652L,
+    0x2c029348b3467480L,0x60d30080c00932c3L,0xd74d80d2dd18a20L,0x964c62832cd0084L,
+    0x280b19d0e6821752L,0x462880834c34c300L,0x10308135636048b7L,0x93091083420c40c2L,
+    0xc24432c908324330L,0x3c424f4440880c90L,0x13032440c2044344L,0x4f44e3ce3cc2ca25L,
+    0x2c32512510cb3c94L,0x110a10f3093d1302L,0x834218718510308L,0x2c91461431c93051L,
+    0xd2070881890c2443L,0x440c20443443c414L,0x3ce34c2ca2481c61L,0x12510cb3c520d450L,
+    0xf3053481c22c625L,0x10a1
+  };
+  private final static long[] offsetIncrs3 = new long[] /*2 bits per value */ {
+    0xc200cc0000200000L,0x330cc00c30000000L,0x20880000030c3L,0xc220000008280cc2L,
+    0x5500020e33308c00L,0x5555555555555555L,0x5555555555555555L,0x5555555555555555L,
+    0x5555555555555555L,0x555555555555L
+  };
+    
+  // 16 vectors; 82 states per vector; array length = 1312
+  private final static long[] toStates4 = new long[] /*7 bits per value */ {
+    0x8600340080a00307L,0x1600244c9132818eL,0xa40060c002ac100L,0x562c96310d1c3080L,
+    0x2e000030052c9d8L,0x2162c0c144060674L,0xc186800a2000858L,0x2164ca020618003L,
+    0x818084b09855cb03L,0x61804700202800cfL,0x360025ac96b19087L,0x1c106b810308c210L,
+    0xde2d0611414f5c2cL,0xb8183100e0d090L,0x858c170584081bbL,0xc3068e01b8b06218L,
+    0xc085ac6408182000L,0xf060212c58117305L,0xb1c0648013280031L,0xd00342810a04408L,
+    0xa419c0c002a026L,0x1462896310c48302L,0x8029060c10052c8bL,0x4d02c0c509860c5L,
+    0x3381890328080024L,0xe020a81102061818L,0x7c30058810055c80L,0x2c70192004ca000cL,
+    0x6620d0a04281102L,0x41c10ca410308c56L,0xaca2b5611414b5c1L,0x600a4306040e0d09L,
+    0x89340c1714580831L,0xce06240d9050609L,0x52082a0440818206L,0x100c016204011731L,
+    0x8e88062818b1a004L,0x60d500144c90b1a1L,0x806b00080c002ac1L,0xd8d631d53b102840L,
+    0x741c20600303591dL,0x582d62a103458822L,0x9110205001a20008L,0x8402162c68b06181L,
+    0x4018054a898584aL,0x8762018a062c6801L,0x51172017ac96aa38L,0x2c8b0070810308c1L,
+    0x911e2cf73205af84L,0xbb0708883104584fL,0x180b58e610d542c8L,0x644408140238b062L,
+    0x984085aa8e2c1820L,0x410060152a581213L,0x8b130c2818b1a00L,0x1618e834c8109d24L,
+    0x206b01930c002a0L,0xcb0d624953b10284L,0x581ac0c0c103591L,0x2402d02a10345881L,
+    0x31126205031a0800L,0x749820a7490b0618L,0x1040300547500584L,0x22c4c30a062c680L,
+    0x5508760d32042749L,0x4148b00cb010308cL,0xf9b1e2cb73205af8L,0x41606b0406044584L,
+    0x988b40e610d542cL,0xc44988140e38506L,0x3b580829d242c182L,0xc1010c0151d40121L,
+    0x8206820610182080L,0x9040cc8318246090L,0x1130664182340ce9L,0x949042a94c953494L,
+    0x2e3419e060c40332L,0x933208c99041011aL,0x81970408203084c1L,0xc6411840242182e6L,
+    0x30404b833c6449d3L,0x29324081a5060820L,0x6cf17360d1994665L,0x3c80b9b2e78c172cL,
+    0xa742952273690c27L,0xb920678b97265cdL,0xe4cd82326cf043c6L,0x8065c1024a0d2a02L,
+    0xf1b3c610194a60b9L,0xc1012e0cf193258L,0x182c509223018908L,0x8f12447911c3c70fL,
+    0x10b0664889340ceL,0x2945042a30c95343L,0xa342819922445833L,0x18b1e24799041049L,
+    0x688971208611082cL,0x3c3c4983a3c6182eL,0x30404d03323c79dL,0xc60b142488c06242L,
+    0xc54c9a2a4470f1c3L,0x33c74b9b3464c172L,0xda74c952233690c2L,0x60d0a0664d1a165cL,
+    0x2e2ca891e6cf0432L,0x98225c482184529dL,0x8f153260e8f1860bL,0x80c101340cc8f1e5L,
+    0x508206820c1c3050L,0xe990a18a030e2460L,0x1c1130c64182340cL,0x32949042a94a1226L,
+    0x93383431e0c0c406L,0xc1933214c9404102L,0xe6831c0408383084L,0xd3c5011840142202L,
+    0x2030404b83285049L,0x5129324083070c14L,0x2c6ca1c440cf9946L,0x1f3c80e1b2e78c17L,
+    0xda7429522744850L,0x880e120c78e17267L,0x2e4cd853288f042L,0xb980c701020e0d2aL,
+    0x58f223c610144a80L,0x80c1012e0ca1432L,0xd182c509101c305L,0xce8f0a20691203c7L,
+    0x61c10b0c64889340L,0x632945042a30a122L,0x2932628319104458L,0x2c18b1e147940410L,
+    0x2e6841c120839108L,0x9d3c344983a34620L,0x42030404d0328347L,0xc3460b14244070c1L,
+    0x72c54a13244480f1L,0x1f3c74e1b3464c1L,0x70da74c952234485L,0x288098a0c6499a16L,
+    0x9d2e2ca851e88f04L,0xb9810704820e452L,0xe58f123260e8d188L,0x340ca0d1
+  };
+  private final static long[] offsetIncrs4 = new long[] /*3 bits per value */ {
+    0x8000000080000000L,0x1000000060200061L,0x820000038000L,0x200030044048c4L,
+    0x2480400000200000L,0x245000000200a08L,0x4100002880000120L,0x80010011012L,
+    0x186180c30000c06L,0x36006d8000000603L,0x48dc0030c300000L,0x180000180030046L,
+    0xe06248030c0003L,0x11801b70000002L,0x1181247000c38c00L,0x80410000600100L,
+    0x40240061808000L,0x24104120000L,0x30044028d2000082L,0x201040002000L,
+    0x100908248020L,0x2880000090414480L,0x1001100a448000L,0x830000c04100008L,
+    0xa000000403418618L,0x30c30000024104dL,0x180030046028d20L,0x48020c0003010400L,
+    0x136800000100d062L,0x4800c38c00000904L,0x92496001001180a4L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x24924924
+  };
+    
+  // 32 vectors; 145 states per vector; array length = 4640
+  private final static long[] toStates5 = new long[] /*8 bits per value */ {
+    0xd000805000607L,0x1213121314061d06L,0x600052c08002c00L,0x647060800290006L,
+    0x64323b0531322c31L,0x672006f00000600L,0x5f085f5f06050808L,0x6060d0005130013L,
+    0x1d13140506080006L,0x605f130d6f5f0605L,0x306060608000600L,0x60000080303L,
+    0x1c030800130306L,0x50029082c002c06L,0x8080613030806L,0x1300060600031313L,
+    0x606060600130600L,0x1306032c0800001dL,0xd00080500060708L,0x138d131406720600L,
+    0xd5f08005f008dL,0x7406130064000608L,0x6d80055b6d5f5b08L,0x63035803031c0359L,
+    0x847b7b6b76840b02L,0x6b9003762003207bL,0x5c8c04020b03026bL,0x7b5c0a587b6b0416L,
+    0x6b08068400020366L,0x30600000b030303L,0x1c03080313030203L,0x364845f005f1c00L,
+    0xb086b5c03136b0dL,0x6b020003135c03L,0x606020020080320L,0x6035f0803037202L,
+    0x80500063e0813L,0x4b2c32083b060047L,0x430420330004b2cL,0x2e0b0341032e0203L,
+    0x483745503045024fL,0x6f030308034150L,0x5f302e054202063bL,0x4700370b03133008L,
+    0x3205060200060606L,0x2c046f302e051d2cL,0x20608000600605fL,0x2e0303020606032eL,
+    0x302030b03060003L,0x4142300030080313L,0x8062c030b060400L,0x2e0603062c2c0302L,
+    0x2e06001302000b00L,0x6304203003b0608L,0x80500063e022c06L,0x2c32083b06004700L,
+    0x30420330004b2c4bL,0xb0341032e020304L,0x3745503045024f2eL,0x5806061306615048L,
+    0x886f766005028003L,0x3541d062088847bL,0x4020503026b6b74L,0x758886f04165f6dL,
+    0x684000203667b5fL,0x303050606036f02L,0x2060b030203062eL,0x6030003013031303L,
+    0x6b5f030b6b040341L,0x203062c5f060508L,0x2002002031d006fL,0x304206033b02082eL,
+    0x1400061f022c0606L,0x2202161c03120013L,0x1303200321202120L,0x29031c06000520L,
+    0x31222c3106120602L,0x303020064321614L,0x614130808160064L,0x140900095613565fL,
+    0x60803061c061203L,0x6f561c050d202205L,0x130308005f56200dL,0x30803030306061cL,
+    0x9110603030600L,0x20002c0203091108L,0x2003020605002913L,0x1120200308131cL,
+    0x309060309001c06L,0x1300001608021c08L,0x61f0820061120L,0x2161c0312001314L,
+    0x356032120212022L,0x64031c08000d5613L,0x6a5f5b088d060900L,0x110903596d70145bL,
+    0x8c5c0b0b70035911L,0xf030f915c917b6bL,0xb11027c6b8d118cL,0x917c040a566a0402L,
+    0x30b037b91560a58L,0xb0303036b081c5cL,0x911021111060003L,0x5f090309110803L,
+    0x3096b0d03645c56L,0x112056110b137c56L,0xf08110f007c0200L,0x303160b021c0b03L,
+    0x61f082006115613L,0x161c031200131400L,0x3103212021202202L,0x629020304312c06L,
+    0x3045024b2e050341L,0x20341504d324535L,0x2c02081600640606L,0x309311356302e14L,
+    0x3061c0612033205L,0x29050d2022050602L,0x8005f5620046f31L,0x606032e021c1303L,
+    0x110603062e030602L,0x3002060911020305L,0x5060400412c3100L,0x20200602131c2003L,
+    0x203050029060308L,0x16080229080309L,0x1f02200608312c03L,0x1c03120013140006L,
+    0x321202120220216L,0x29020304312c0631L,0x45024b2e05034106L,0x661504d32453530L,
+    0x50b700359080809L,0xf5b5c91886f8c5fL,0x27c6b8d116d0d06L,0x40a566a04020511L,
+    0x37b915607585b64L,0x6036f021c5c030bL,0x211082e03060506L,0x906091102060511L,
+    0x6b0403415f310030L,0x560805137c560305L,0x110d006402030820L,0x160b02290b030f02L,
+    0x2200608312c0603L,0x30a030b0d000810L,0xa13120b0d061d08L,0x600052c0b032a00L,
+    0x80a0808032c0008L,0x5f473b0d31472a3bL,0x1a72036003000603L,0x5f0b5f69080d0b13L,
+    0x8080a000d130013L,0x1d0b0d1d0608031aL,0x6969130d60690805L,0x170808080b000600L,
+    0x303080003130317L,0x1c17080313031aL,0x5032c0b2c032a06L,0x80b080b030808L,
+    0x1300080603171313L,0x1a06080603130600L,0xb08032a0b00001dL,0xa030b0d00081013L,
+    0x138d0b0d06720803L,0xd5f0b03690089L,0x890813035f000808L,0x74800d5b74698013L,
+    0x63176617031c177bL,0x877b678490872018L,0x848903902003207bL,0x879016020b171884L,
+    0x675c0a6667840416L,0x8413088700020367L,0x1708000320031717L,0x1c17081713031817L,
+    0x175f875f03691c00L,0xb0b84870313840dL,0x84020317135c03L,0x608020320080320L,
+    0x803690b03037218L,0x30b0d000810130bL,0x4b2a47083b08030aL,0x4302a1139002f2cL,
+    0x420b113003420203L,0x4847454f39480b2fL,0x36011030811304fL,0x5f39420d2a0b1a3bL,
+    0xa00470b0313300bL,0x471d0602031a0808L,0x2c04603942051d2aL,0xb080b0006006969L,
+    0x4203110b061a1742L,0x1702110b031a0311L,0x302a300339080313L,0xb082a030b080403L,
+    0x4206111a2c2c0302L,0x4206031302000b00L,0x6392a03003b1a08L,0xb0d0008100b2a08L,
+    0x2a47083b08030a03L,0x302a1139002f2c4bL,0xb11300342020304L,0x47454f39480b2f42L,
+    0x661a06131a884f48L,0x836090691d188017L,0x3741d062088877bL,0x1602051718848489L,
+    0x766836004166974L,0x88700020367675fL,0x3111d061a17600bL,0x21a0b0318171a42L,
+    0x6930033913031317L,0x8469030b84041730L,0x2111a2c5f06050bL,0x2032002031d0060L,
+    0x392a06033b180842L,0xd0008100b2a0806L,0x12021613060a030bL,0xb061d032620211dL,
+    0x32c031306000520L,0x31122a3b080a0802L,0x60302035f47160dL,0x80d0b131316035fL,
+    0xd090009560b5669L,0x608061a13080a03L,0x607213050d1d121dL,0xb0308006972200dL,
+    0x613031717080813L,0x309111a06060800L,0x20032a0203091c08L,0x1d03020805032c0bL,
+    0x31c202003080b13L,0x609060309001306L,0xb00001613021308L,0x810131d08111dL,
+    0x21613060a030b0dL,0x672032620211d12L,0x5f031308000d560bL,0x8d69801389080903L,
+    0x1109177b74700d5bL,0x9087202070177b1cL,0xf030f9187916784L,0xb1c185c84891190L,
+    0x635c040a728d1602L,0x30b036763560a66L,0x2003171784131387L,0x911181c1c080006L,
+    0x3690903091c0817L,0x309840d175f8756L,0x1c2056110b0b5c72L,0xf08110f005c0203L,
+    0x303162002130b06L,0x810131d0811720bL,0x1613060a030b0d00L,0x3b032620211d1202L,
+    0x62c020304312a08L,0x39480b2f42051130L,0x211304f4d47454bL,0x2a0b1316035f0806L,
+    0x309310b5639420dL,0x61a13080a034705L,0x2c050d1d121d0602L,0x80069722004603bL,
+    0x61a17420b130b03L,0x111a06084203080bL,0x390206091c021105L,0x5080403302a3103L,
+    0x202006020b131d03L,0x20305002c061113L,0x1613022c080609L,0x100b1d08083b2a03L,
+    0x13060a030b0d0008L,0x32620211d120216L,0x2c020304312a083bL,0x480b2f4205113006L,
+    0x1a884f4d47454b39L,0x1d2070177b130809L,0xf5b879183609069L,0x185c848911740d06L,
+    0x40a728d1602051cL,0x36763560766805fL,0x1a17600b1387030bL,0x181c134203081d06L,
+    0x906091c021a0511L,0x8404173069310339L,0x5608050b5c720305L,0x110d005f02111320L,
+    0x1620022c0b060f02L,0xb1d08083b2a0603L,0x304030204030201L,0xc090c0904080d02L,
+    0x1a031d1902031903L,0x1a25021303190302L,0x4a25120415251915L,0x3a47033403030803L,
+    0x4a024a4a0204022bL,0x2020403042c032cL,0x310904433a2b033aL,0x344a093b344a0243L,
+    0x51021a0202033a03L,0x3030203032b5151L,0x342512b032c513aL,0x1d03190219031908L,
+    0x32b020209511302L,0x2c03023a03510909L,0x3a08023a032c1a03L,0x90251190203030dL,
+    0x40302040302012bL,0x946090408470203L,0x33b4a02034a0346L,0x3c022c034a03022bL,
+    0x3c4b04383c4a382bL,0x4f514c515142512dL,0x3f2d2d3f333f5244L,0x3f3351333051302dL,
+    0x403349445251443fL,0x2d40484c2d3f4945L,0x3f2b023f0344514cL,0x5102030352515151L,
+    0x42512b512c514451L,0x514a3f4a034a4203L,0x52023f40512c3f3bL,0x33f440351094051L,
+    0x8024403302b5130L,0x2514a0251514744L,0x302040302012b09L,0x2319251312020325L,
+    0x161b1e171b032319L,0x1e20171b171e1817L,0x212524271b241827L,0x334171713171b27L,
+    0x4a1b1e041e183a12L,0x25032520172c1b02L,0x25433a18033a0202L,0x1916341b1e433119L,
+    0x180202033a03344aL,0x1e1717183a3a511eL,0x51181720513a0317L,0x1b1e1b031b13172cL,
+    0x202195120021603L,0x1e3a173a19191718L,0x1e3a032c18032003L,0x3a1b1e1703123a13L,
+    0x204030201181902L,0x1925131202032503L,0x1b1e171b03231923L,0x20171b171e181716L,
+    0x2524271b2418271eL,0x4c3a3a2c3a282721L,0x2834333443444b51L,0x513c313a30283f2dL,
+    0x49444351443f3f3cL,0x4d4c283449454a3cL,0x23f0344514c2d4aL,0x1717433a3a513418L,
+    0x183a205144513a1eL,0x341b031b2c172c51L,0x3f4a51203f16511bL,0x44173a194a3a4302L,
+    0x4403301851310334L,0x1b1e3a511244131eL,0x40302011819023aL,0xc0b0a09110c0309L,
+    0x9110f110e0f0e0fL,0x31911091a031d0fL,0x150c19151a0c020bL,0x11110b034a250a04L,
+    0x204092b2b0a034aL,0x42a032a4e094e4aL,0x3a2b113a09020c11L,0x344e09433b0f0c43L,
+    0x9112b034a4e0f3bL,0x112b515151021a09L,0x32a3d3a11110203L,0xf03190b112a3d2bL,
+    0xf510b021d031909L,0x33d0f0f112b0909L,0x112a1a112a03093aL,0x903030a2b0b092bL,
+    0x302012b0f023d0fL,0xb0a09110c030904L,0x114e110e0f0e0f0cL,0x4a11092b033b4e09L,
+    0x464a382b46022a03L,0x3d2a512d3c2f0438L,0x334052522f512d3dL,0x3951393640362d3fL,
+    0x523d44403f463d33L,0x364049484e464944L,0x1152512d364e484cL,0x525151513f2b0940L,
+    0x2a3d443d3d020311L,0x34a2a112a3d2b51L,0x512a3f3b514a404eL,0x3d0f4e3d5209404eL,
+    0x392b3d3903404403L,0x51510a520b095211L,0x2012b0f023d4e09L,0xa09110c03090403L,
+    0x15110e0f0e0f0c0bL,0x1a1918171615191aL,0x1b2418231e1d171bL,0xb171b2726252423L,
+    0x19182b0a034a1a1aL,0x172a15094e1b1e04L,0x113a09020c11251dL,0x19433b0f0c433a18L,
+    0x2b034a4e0f163415L,0x3a3a511e18090911L,0x3d3a111a1e171a18L,0x1b0b1a2a3d18171dL,
+    0x1d0216031b191503L,0xf0f1a1809090f51L,0x18111d03193a172bL,0x30a2b0b192b112aL,
+    0x1180f022b151917L,0x9110c0309040302L,0x110e0f0e0f0c0b0aL,0x1918171615191a15L,
+    0x2418231e1d171b1aL,0x3a2827262524231bL,0x43522f512d2b2b2aL,0x393840362834334aL,
+    0x44403f463d3c3b3aL,0x49484e464944433dL,0x512d364e4d4c384aL,0x3a51341809401152L,
+    0x443d2b1e171a433aL,0x2a1a2a3d183a1d3dL,0x3f16511b4a15031bL,0x4e2b4309404e511dL,
+    0x3d3b034a44172b0fL,0xa520b1952113918L,0x180f022b15193a51L,0x607060504030201L,
+    0x7090c0504080d02L,0x1a031d1905061403L,0x1307021306190302L,0x4a25120415251412L,
+    0x2947063406030806L,0x4a054a320204052cL,0x2020703042c032cL,0x310504313a2b0629L,
+    0x3232093b34320243L,0x2e02130205033a03L,0x6060203062c512eL,0x3422e2b062c5129L,
+    0x1d06190519061408L,0x32b050205511302L,0x2c03023a062e0909L,0x2908023a062c1a03L,
+    0x50251140503030dL,0x70605040302012cL,0x946050408470206L,0x33b4a050632033eL,
+    0x3e022c064a03022bL,0x3c4b04383c324b2cL,0x4f2e4c2e51422e2dL,0x372d503f33373041L,
+    0x3f3e51333051302dL,0x37334544522e413fL,0x5040484c503f4945L,0x3f2c023703445150L,
+    0x2e02030630512e2eL,0x422e2b2e2c51412eL,0x2e4a374a06324203L,0x52053f37512c3f3bL,
+    0x33f44062e094051L,0x8024406302b5130L,0x251320551514741L,0x605040302012c05L,
+    0x2314251312020607L,0x161b141c22031f19L,0x1e201c1b171e1817L,0x212524272221201fL,
+    0x6341c17131c1b27L,0x4a221e0414202912L,0x7032520172c1b05L,0x25313a1806290202L,
+    0x191634221e433114L,0x200205033a033232L,0x1e171c203a292e1eL,0x2e181c205129061cL,
+    0x1b141b062213172cL,0x502145120021606L,0x1e3a1c2919191718L,0x1e3a062c18032003L,
+    0x3a22141703122913L,0x504030201201402L,0x1425131202060706L,0x1b141c22031f1923L,
+    0x201c1b171e181716L,0x2524272221201f1eL,0x4c293a2c29282721L,0x3534333231414b2eL,
+    0x513c313a3028372dL,0x4544432e413f3f3eL,0x4d4c35344945323cL,0x23703445150504aL,
+    0x171c313a292e3420L,0x18292051412e291eL,0x321b06222c172c2eL,0x3f3251203f162e1bL,
+    0x441c29194a3a4305L,0x4406301851310334L,0x22143a511241131eL,0x40302012014023aL,
+    0xc0b0a0908070605L,0x5080d11100f0e0dL,0x61911091a031d0fL,0x150c14121307020bL,
+    0x8110b064a250a04L,0x204052c2c0a064aL,0x42a032a4e054e32L,0x3a2b082909020711L,
+    0x344709433b0d0c31L,0x5112b0332470f3bL,0x82c512e2e021309L,0x62a3d2908080203L,
+    0xf06140b112a422bL,0xd510b021d061905L,0x6420f0f112b0509L,0x82a1a112a03093aL,
+    0x503030a2c0b092bL,0x302012c0d023d0dL,0xb0a090807060504L,0x84711100f0e0d0cL,
+    0x4a11092b033b4e05L,0x46324b2c3e022a06L,0x3d2a2e2d3c2f0438L,0x333730302f2e2d42L,
+    0x395139363736503fL,0x524241403f3e3d33L,0x4f40494847464544L,0x115251504f4e484cL,
+    0x30512e2e3f2c0937L,0x2a3d414242020308L,0x6322a112a422b2eL,0x512a3f3b2e4a374eL,
+    0x420f4e3d52054047L,0x392b3d3903404406L,0x51510a300b095208L,0x2012c0d023d4705L,
+    0xa09080706050403L,0x1211100f0e0d0c0bL,0x1a19181716151413L,0x2221201f1e1d1c1bL,
+    0xb1c1b2726252423L,0x14202c0a064a131aL,0x172a15054e221e04L,0x82909020711251dL,
+    0x19433b0d0c313a18L,0x2b0332470f163412L,0x3a292e1e20090511L,0x3d2908131e171320L,
+    0x220b1a2a42181c1dL,0x1d0216061b141506L,0xf0f1a1805090d51L,0x18111d03193a1c2cL,
+    0x30a2c0b192b082aL,0x1200d022b121417L,0x908070605040302L,0x11100f0e0d0c0b0aL,
+    0x1918171615141312L,0x21201f1e1d1c1b1aL,0x2928272625242322L,0x31302f2e2d2c2b2aL,
+    0x3938373635343332L,0x41403f3e3d3c3b3aL,0x4948474645444342L,0x51504f4e4d4c4b4aL,
+    0x292e342009371152L,0x41422c1e1713313aL,0x2a1a2a4218291d3dL,0x3f162e1b32150622L,
+    0x4e2b43054047511dL,0x3d3b034a441c2c0fL,0xa300b1952083918L,0x200d022b12143a51L
+  };
+  private final static long[] offsetIncrs5 = new long[] /*3 bits per value */ {
+    0x8000000080000000L,0x1000000060200061L,0x820000038000L,0x80200030044048c4L,
+    0x20ab0ac0000eda1L,0x4041400c01506000L,0x3028000884098L,0x30c000000040000L,
+    0x145aa80000030100L,0xd76802855000001dL,0x6d0c016801802a02L,0xa0001055d56da007L,
+    0x84ea028a05600a83L,0x18140b4542L,0xa08248040000020L,0x120024500000020L,
+    0x1012410000288000L,0x1249288008001001L,0x54200000a2b22b04L,0x2210281012402400L,
+    0x100000001008040L,0x100504124020000L,0x94512280000L,0x800a80b65a00a144L,
+    0x5b60924944005a00L,0x2002a12800051591L,0x25150a14a80b201L,0x30000c0600000804L,
+    0x6030186180cL,0xc30000036006d80L,0x80030046048dc003L,0xdb0dc6c06eda180dL,
+    0xc06c01586000036L,0x30180006c36db604L,0xc061800060300000L,0x6e80000030180c30L,
+    0x801875800001b143L,0xc06e801802b02d6eL,0x1b6dd6eb60376d0L,0xb028603600ac3a00L,
+    0x180c0b4361b6dL,0x6248030c00030180L,0x801b7000000200e0L,0x247000c38c000011L,
+    0x9288036001001181L,0xdb72371b11cL,0xdb8d812301c00562L,0xc000010060401b0L,
+    0x703124018600018L,0x8c50db80000010L,0xac0b63a0061c6000L,0x88e494401ba00800L,
+    0x2b1280006db91badL,0xd86dc6c0b180e00L,0x80410000803025L,0x40240061808000L,
+    0x24104120000L,0x30044028d2000082L,0xaa4804aa41002000L,0xc01506800820934L,
+    0x8000484498404480L,0x40208000202L,0x20120030c04L,0x8550000012082a90L,
+    0x6801802a01569002L,0x49a5524025520801L,0xa405600a83400410L,0x10140b4242a4ea02L,
+    0x8020000020104000L,0x4480000010090824L,0x8000288000009041L,0x4008001001100a44L,
+    0x20a2512a92112890L,0x1011202400542200L,0x808040121128L,0x4124010000010082L,
+    0x820a240000008048L,0x562400a144000004L,0x4482005a00800a80L,0x1001051289549089L,
+    0xa94a80a9012002a1L,0x410000404025090L,0x34186180830000cL,0x24104da0000004L,
+    0x46028d20030c3000L,0x804aa4100d800300L,0x1586800836d34da4L,0x4c34db6044806c0L,
+    0x60208000201800L,0x201a0c30c04180L,0x80000120826d0000L,0x1802b01569001875L,
+    0x6d24025520806e80L,0x3600ac340041b69aL,0xc0b4261a6db02a40L,0xc00030104000100L,
+    0x100d0624802L,0xc38c000009041368L,0x6001001180a44800L,0xb513692112890403L,
+    0x1201c0056220020dL,0x806040130d38d81L,0x4010600018082000L,0x9b40000008068312L,
+    0x40061c6000004820L,0x201ba00800ac0562L,0x106da89b49089448L,0x6c0a900e002b1100L,
+    0x924940302509869cL,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x24924924
+  };
+    
+  // 64 vectors; 196 states per vector; array length = 12544
+  private final static long[] toStates6 = new long[] /*8 bits per value */ {
+    0xd000805000607L,0x1213121314061d06L,0x600052c08002c00L,0x647060800290006L,
+    0x64323b0531322c31L,0x672006f00000600L,0x5f085f5f06050808L,0x6060d0005130013L,
+    0x1d13140506080006L,0x605f130d6f5f0605L,0x606060608000600L,0x60000130606L,
+    0x290613002c0608L,0x140029082c002c06L,0x13080613060806L,0x2c00060800061313L,
+    0x8060608002c0600L,0x1306062c0800001dL,0x600000000060813L,0x80000,
+    0x806000600000600L,0x6061300000500L,0x1300000000L,0x6000600080000L,
+    0x500060706060600L,0x14061d06000d0008L,0x8002c0012131213L,0x2900060600142cL,
+    0xbb322cbb06470608L,0x6009e32b505L,0x6050813089200a0L,0x52c002ca408a4a4L,
+    0x813000806060d00L,0xa0a4060d3b13140dL,0xac030800a6a41312L,0x320020202c01cc0L,
+    0x330020b0303c003L,0xbe03be2e03410220L,0x990242c02203b7acL,0x30299990320acc0L,
+    0x3301c033003c00bL,0xac03039b0b2ec00bL,0x308422099c002beL,0x800002e030000L,
+    0x3001c0003030303L,0x3140313060308L,0x303030300061c2cL,0x31300000300002cL,
+    0x60806000008002eL,0xd000805000607L,0x8d138d1314067206L,0x8000d5f08005f00L,
+    0x874061300640006L,0x596d80055b6d5f5bL,0x263035803031c03L,0x7b847b7b6b76840bL,
+    0x6b6b900376200320L,0x165c8c04020b0302L,0x667b5c0a587b6b04L,0x66b080684000203L,
+    0x3030600000b0606L,0x290613032c0602L,0xd0364845f005f1cL,0x30b086b5c06136bL,
+    0x20006b020006135cL,0x206060200200803L,0x1306065f08030372L,0x600030300021313L,
+    0x300030300130000L,0xb08030203030800L,0x31c082000000d00L,0x303002003030000L,
+    0x2031c000b0300L,0x500060708020603L,0x14067206000d0008L,0x8005f008d138d13L,
+    0x64000608000d5fL,0x5b6d5f5b08740613L,0x3031c03596d8005L,0x6b76840b02630358L,
+    0x762003207b847b7bL,0x20b03026b6b9003L,0x587b6b04165c8c04L,0xa9030203667b5c0aL,
+    0x31d020202ab13c0L,0x63002050606c003L,0xa403a42903410220L,0x97022cab12069ea9L,
+    0x3029997061dacabL,0x33113063103ab05L,0xac060692052ec005L,0x3022c2099c002a4L,
+    0x1300002e030303L,0x603130006030606L,0x30d030b080602L,0x6060303031c1320L,
+    0x30b030006030020L,0x802060300020329L,0x4700080500063eL,0x4b2c4b2c32083b06L,
+    0x203043042033000L,0x24f2e0b0341032eL,0x4150483745503045L,0x63b006f03030803L,
+    0x30085f302e054202L,0x6064700370b0313L,0x1d2c320506020006L,0x605f2c046f302e05L,
+    0x62e020608000600L,0x32e0303090808L,0x32c0609032a0608L,0x400414230003008L,
+    0x30908062c060b06L,0x2a002e0803082c2cL,0x8082e08002c0200L,0x2c0608304203003bL,
+    0x803000303060b09L,0x303030b0003L,0x202000603030203L,0x8021300000400L,
+    0x3000b00030303L,0x6030800020003L,0x500063e02060800L,0x32083b0600470008L,
+    0x420330004b2c4b2cL,0x341032e02030430L,0x45503045024f2e0bL,0x3030803a5504837L,
+    0x2e05420908b500a0L,0x372a032cbf08a4bfL,0x809000806064700L,0xa0bf2e0d3b2c320dL,
+    0xac030800a6a42c0cL,0x110f0b0b02ba09c0L,0x1139020b0311ba11L,0xbf03bf421130020fL,
+    0xbe022ac00c03a5b0L,0x110bbebe110facc0L,0x33009033903ba0bL,0xb01103b50b42ba0bL,
+    0x11082a0fbec00bbfL,0x30b000342110003L,0x1103090303031111L,0x3040309020308L,
+    0x31111110008092cL,0x30900030303002aL,0x208080000080342L,0x4700080500063eL,
+    0x4b2c4b2c32083b06L,0x203043042033000L,0x24f2e0b0341032eL,0x6150483745503045L,
+    0x280035806061306L,0x88847b886f766005L,0x6b6b7403541d0620L,0x165f6d0402050302L,
+    0x667b5f0758886f04L,0x66f020684000203L,0x3062e0303050808L,0x32c0609062a0602L,
+    0x403416030003013L,0x605086b5f060b6bL,0x1d006f0203082c5fL,0x2082e0200200203L,
+    0x2c0608304206033bL,0x803030603020b09L,0x3000606030b0003L,0x502030206060203L,
+    0x313022000000400L,0x306001d03060303L,0x2061300050303L,0x500063e02020803L,
+    0x32083b0600470008L,0x420330004b2c4b2cL,0x341032e02030430L,0x45503045024f2e0bL,
+    0x606130661504837L,0x6f76600502800358L,0x541d062088847b88L,0x20503026b6b7403L,
+    0x58886f04165f6d04L,0xa9030203667b5f07L,0x110d0b0b02a009c0L,0x83902050608ba11L,
+    0xbf03bf2c1130020fL,0xa4022aab0c06a5a6L,0x110bbea4080dacabL,0x33109063b03a005L,
+    0xb00806b50542ba05L,0x11022a0fbec00bbfL,0x30b000342110306L,0x806090306030808L,
+    0x3040305020602L,0x608111103130920L,0x30503030606001dL,0x20208030002062cL,
+    0x31200131400061fL,0x212021202202161cL,0x600052013032003L,0x61206020029031cL,
+    0x6432161431222c31L,0x816006403030200L,0x5613565f06141308L,0x1c06120314090009L,
+    0xd20220506080306L,0x5f56200d6f561c05L,0x606061c13030800L,0x303060003130606L,
+    0x3191a1300191a08L,0x1400291320002c02L,0x313131c20060206L,0x19001c08001a2020L,
+    0x13021c1303190603L,0x20061a2013000016L,0x203000303080213L,0x300020303L,
+    0x806030603000600L,0x302060903000503L,0x300000900000000L,0x8030203080003L,
+    0x1400061f06060203L,0x2202161c03120013L,0x1303200321202120L,0x29031c06001420L,
+    0xbb222cbb06120602L,0x30302009e32aa14L,0x614131313aa009eL,0x14190019ae13aea4L,
+    0x81303081c061203L,0xa0ae1c0d1220220dL,0x99171300a4ae2012L,0x1720020202c01c9cL,
+    0x31b180b1717c003L,0xc403be1e171b1820L,0xc4021ec02203b799L,0x318c4c41720999cL,
+    0x171b1c171b039c0bL,0x990303aa201e9c20L,0x17131e20c4c018c4L,0x203031e170003L,
+    0x17001c0003030317L,0x303141713061708L,0x303030303021c19L,0x1713000317000019L,
+    0x60802030013031eL,0x31200131400061fL,0x212021202202161cL,0x8000d5613035603L,
+    0x88d06090064031cL,0x596d70145b6a5f5bL,0xb70035911110903L,0x915c917b6b8c5c0bL,
+    0x7c6b8d118c0f030fL,0xa566a04020b1102L,0x7b91560a58917c04L,0x66b081c5c030b03L,
+    0x11110600030b0606L,0x3191a1303191a02L,0xd03645c56005f09L,0x110b137c5606096bL,
+    0xf007c02001a2056L,0xb021c0b030f0811L,0x20061a5613030316L,0x2030311030b0913L,
+    0x300031100090303L,0xb08110211030800L,0x1109080f03000d03L,0x1103000f03030000L,
+    0xb1109030b0303L,0x1400061f08020211L,0x2202161c03120013L,0x1303560321202120L,
+    0x64031c08000d56L,0x5b6a5f5b088d0609L,0x11110903596d7014L,0x6b8c5c0b0b700359L,
+    0x8c0f030f915c917bL,0x20b11027c6b8d11L,0x58917c040a566a04L,0x97170b037b91560aL,
+    0x171d020202ab139cL,0x61b18051a1ac003L,0xae03a419171b1820L,0xae0219ab12069e97L,
+    0x318c4ae1a1d99b1L,0x1715131a1503b105L,0x990606aa1d1e9c1dL,0x170b1920c4c018aeL,
+    0x903031e170311L,0x1a0313000603061aL,0x3030d170b081a02L,0x60603031109130fL,
+    0x170b03031a03000fL,0x8020211000b1119L,0x31200131400061fL,0x212021202202161cL,
+    0x20304312c063103L,0x24b2e0503410629L,0x41504d3245353045L,0x816006406060203L,
+    0x311356302e142c02L,0x1c06120332050309L,0xd20220506020306L,0x5f5620046f312905L,
+    0x62e021c13030800L,0x3062e0306090808L,0x6191a0903141a08L,0x400412c31003002L,
+    0x609131c20060506L,0x1400290803132020L,0x1302291303190203L,0x200613312c030016L,
+    0x206000606080509L,0x30603050306L,0x202030606030203L,0x302020903000403L,
+    0x303000500030303L,0x8060203020006L,0x1400061f02060203L,0x2202161c03120013L,
+    0x2c06310321202120L,0x341062902030431L,0x45353045024b2e05L,0x6060203a5504d32L,
+    0x2e142c0913aa009eL,0x32140319bb13aebfL,0x80903081c061203L,0xa0bb290d1220220dL,
+    0x99171300a4ae200cL,0x1c0f0b0b02ba099cL,0x1122180b171cba11L,0xbb03bf1e1c1b180fL,
+    0xc40214c00c03a5beL,0x1120c4c41c0f999cL,0x171b09172203b70bL,0xbe1103aa201eb720L,
+    0x1c13140fc4c020bbL,0x30503061e1c0006L,0x1c0309030303111cL,0x303041709021708L,
+    0x311111103020919L,0x1709000617030014L,0x20802030013061eL,0x31200131400061fL,
+    0x212021202202161cL,0x20304312c063103L,0x24b2e0503410629L,0x61504d3245353045L,
+    0xb70035908080906L,0x5b5c91886f8c5f05L,0x7c6b8d116d0d060fL,0xa566a0402051102L,
+    0x7b915607585b6404L,0x66f021c5c030b03L,0x11082e0306050808L,0x6191a0906141a02L,
+    0x403415f31003009L,0x805137c5606056bL,0xd00640203132056L,0xb02290b030f0211L,
+    0x200613312c060316L,0x2060308060b0509L,0x300060803050306L,0x502110208060203L,
+    0x1109020f03000403L,0x1106000d03060303L,0xb080903050306L,0x1400061f02020211L,
+    0x2202161c03120013L,0x2c06310321202120L,0x341062902030431L,0x45353045024b2e05L,
+    0x808090661504d32L,0x6f8c5f050b700359L,0x6d0d060f5b5c9188L,0x20511027c6b8d11L,
+    0x585b64040a566a04L,0x97170b037b915607L,0x1c0d0b0b02a0099cL,0x82218051a13ba11L,
+    0xbb03bf191c1b180fL,0xae0214ab0c06a5a4L,0x1120c4ae130d99b1L,0x1715091a12039e05L,
+    0xbe0806aa1d1eb71dL,0x1c0b140fc4c020bbL,0x30503061e1c0308L,0x1306090306030813L,
+    0x303041705021a02L,0x60811111109090fL,0x170503061a06000dL,0x2020211000b0819L,
+    0x30a030b0d000810L,0xa13120b0d061d08L,0x600052c0b032a00L,0x80a0808032c0008L,
+    0x5f473b0d31472a3bL,0x1a72036003000603L,0x5f0b5f69080d0b13L,0x8080a000d130013L,
+    0x1d0b0d1d0608031aL,0x6969130d60690805L,0x3a0808080b000600L,0x3030800032c063aL,
+    0x293a13032c062bL,0x14032c0b2c032a06L,0x130b080b060808L,0x2c000808033a1313L,
+    0x2b060808032c0600L,0xb08062a0b00001dL,0x60300000006082cL,0x300030003080003L,
+    0x806031a03000600L,0x306081303030503L,0x3001300000003L,0x31a030600130300L,
+    0xd00081008060600L,0xd061d08030a030bL,0xb032a000a13120bL,0x32c00080600142cL,
+    0xbb472ab5080a0808L,0x3000603a447b50dL,0x80d0b2c2b9203a6L,0xd2c002ca40ba4bdL,
+    0x813032b08080a00L,0xa6bd080d3b0b0d3bL,0xc2030800bdbd1312L,0x5130024444ac42acL,
+    0x513002525151ac03L,0xbe51af2e03414420L,0xc20242ac2251bec2L,0x514499990320c2acL,
+    0x51301c033003ac0bL,0xc203039b522eac0bL,0x3084230c2ac02afL,0x30800032e510000L,
+    0x51001c0051035103L,0x35114511306512bL,0x30303510306422cL,0x32c03000303002cL,
+    0x8080600032b032eL,0x30a030b0d000810L,0x89138d0b0d067208L,0x8000d5f0b036900L,
+    0x13890813035f0008L,0x7b74800d5b746980L,0x1863176617031c17L,0x7b877b6784908720L,
+    0x8484890390200320L,0x16879016020b1718L,0x67675c0a66678404L,0x3a84130887000203L,
+    0x171708000320063aL,0x293a13172c0618L,0xd175f875f03691cL,0x30b0b8487061384L,
+    0x20008402033a135cL,0x1806080203200803L,0xb0806690b030372L,0x60303030002132cL,
+    0x1700170303130003L,0xb08171817030800L,0x171c132003030d03L,0x317002003030003L,
+    0x318171c00201700L,0xd00081013020603L,0xd067208030a030bL,0xb03690089138d0bL,
+    0x35f000808000d5fL,0x5b74698013890813L,0x17031c177b74800dL,0x8490872018631766L,
+    0x902003207b877b67L,0x20b171884848903L,0x6667840416879016L,0x9803020367675c0aL,
+    0x5131024444a92cacL,0x3a3002433a3aac03L,0xa451bd2903414420L,0x98022ca9123aa498L,
+    0x51449997061dc2a9L,0x513113063103a905L,0xc2060692432eac05L,0x3022c30c2ac02bdL,
+    0x31300032e510303L,0x3a0313003a033a06L,0x3510d510b083a18L,0x6060351171c2c20L,
+    0x320170006170020L,0x1302060303181729L,0x30a030b0d000810L,0x2f2c4b2a47083b08L,
+    0x20304302a113900L,0xb2f420b11300342L,0x304f4847454f3948L,0x1a3b036011030811L,
+    0x300b5f39420d2a0bL,0x8080a00470b0313L,0x1d2a471d0602031aL,0x69692c0460394205L,
+    0x3a420b080b000600L,0x3114203112a082bL,0x32c3a09112a062bL,0x403302a30033908L,
+    0x3090b082a060b08L,0x2a004208112b2c2cL,0x2b084208032c0200L,0x2a0808392a03003bL,
+    0x811000303060b2aL,0x3001103110b0011L,0x202031a11030203L,0x3080b1303030403L,
+    0x11000b00030311L,0x31a1108000b0303L,0xd0008100b060800L,0x47083b08030a030bL,
+    0x2a1139002f2c4b2aL,0x1130034202030430L,0x454f39480b2f420bL,0x11030811bf4f4847L,
+    0x420d2a2a2bb503a6L,0x472a032cbf0ba4adL,0x809032b08080a00L,0xa6ad420d3b2a473bL,
+    0xc2030800bdbd2c0cL,0x3d390b5244b02aacL,0x3d390252513db011L,0xbf51ad421130440fL,
+    0xaf022aac0c51bfafL,0x3d52bebe110fc2acL,0x513009033903b00bL,0xaf1103b55242b00bL,
+    0x11082a39afac0badL,0x110b0011423d0003L,0x3d03090351033d11L,0x35104510902512bL,
+    0x311113d03082a2cL,0x32a03030311002aL,0xb080800032b1142L,0x30a030b0d000810L,
+    0x2f2c4b2a47083b08L,0x20304302a113900L,0xb2f420b11300342L,0x884f4847454f3948L,
+    0x188017661a06131aL,0x88877b836090691dL,0x84848903741d0620L,0x1669741602051718L,
+    0x67675f0766836004L,0x3a600b0887000203L,0x171a4203111d082bL,0x32c3a091a2a0618L,
+    0x417306930033913L,0x6050b8469060b84L,0x1d006002112b2c5fL,0x1808420203200203L,
+    0x2a0808392a06033bL,0x811030603020b2aL,0x17001a06110b0011L,0x50217181a060203L,
+    0x17130b2003030403L,0x31a001d03060311L,0x3181a13001d1703L,0xd0008100b020803L,
+    0x47083b08030a030bL,0x2a1139002f2c4b2aL,0x1130034202030430L,0x454f39480b2f420bL,
+    0x1a06131a884f4847L,0x6090691d18801766L,0x741d062088877b83L,0x205171884848903L,
+    0x6683600416697416L,0x9803020367675f07L,0x3d3b0b5244a62aacL,0x2b3902433a2bb011L,
+    0xbf51ad2c1130440fL,0xbd022aa90c3abfbdL,0x3d52bea4080dc2a9L,0x513109063b03a605L,
+    0xaf0806b54342b005L,0x11022a39afac0badL,0x110b0011423d0306L,0x2b0609033a032b08L,
+    0x351045105023a18L,0x608113d17132a20L,0x31d1703061a001dL,0xb02080303181a2cL,
+    0x60a030b0d000810L,0x2620211d12021613L,0x60005200b061d03L,0x80a0802032c0313L,
+    0x5f47160d31122a3bL,0x1316035f06030203L,0x560b5669080d0b13L,0x13080a030d090009L,
+    0xd1d121d0608061aL,0x6972200d60721305L,0x3a0808130b030800L,0x6060800062c063aL,
+    0x319291303191a2bL,0x14032c0b20032a02L,0x3130b131d060208L,0x1900130803292020L,
+    0x2c02131306190603L,0x1d081a1d0b000016L,0x20600030308022cL,0x300030303020306L,
+    0x806061a06000600L,0x602080906030506L,0x303000900000003L,0x313060203130303L,
+    0xd00081008060203L,0x12021613060a030bL,0xb061d032620211dL,0x32c031306001420L,
+    0xbb122ab5080a0802L,0x6030203a447aa0dL,0x80d0b2c2caa03a4L,0xd190019ae0baebdL,
+    0x813062b13080a03L,0xa692130d121d123bL,0xc2171300bd922012L,0x2e30024444ac4299L,
+    0x511b18522e2eac03L,0xc451af1e171b4120L,0x9b021eac2251bec2L,0x5141c4c41720c299L,
+    0x2e1b1c171b03990bL,0xc20303aa301e9920L,0x17131e309bac189bL,0x30203061e2e0003L,
+    0x2e001c0051035117L,0x651142e13062e2bL,0x303035106024219L,0x172c030317030019L,
+    0x8080203032c061eL,0x60a030b0d000810L,0x2620211d12021613L,0x8000d560b067203L,
+    0x13890809035f0313L,0x7b74700d5b8d6980L,0x2070177b1c110917L,0x9187916784908720L,
+    0x5c848911900f030fL,0xa728d16020b1c18L,0x6763560a66635c04L,0x3a84131387030b03L,
+    0x1c1c08000620063aL,0x319291317191a18L,0xd175f8756036909L,0x110b0b5c72060984L,
+    0xf005c0203292056L,0x2002130b060f0811L,0x1d081a720b030316L,0x2060311030b092cL,
+    0x1700171103090306L,0xb081c181c030800L,0x1c09130f06030d06L,0x1117000f03030003L,
+    0x3201c0903201703L,0xd00081013020211L,0x12021613060a030bL,0xb0672032620211dL,
+    0x35f031308000d56L,0x5b8d698013890809L,0x1c1109177b74700dL,0x849087202070177bL,
+    0x900f030f91879167L,0x20b1c185c848911L,0x66635c040a728d16L,0x98170b036763560aL,
+    0x2e31024444a92c99L,0x3a1b18432929ac03L,0xae51bd19171b4120L,0x920219a9123aa498L,
+    0x5141c4ae1a1dc297L,0x2e15131a15039705L,0xc20606aa311e991dL,0x170b19309bac1892L,
+    0x30903061e2e0311L,0x290313003a033a1aL,0x6510d2e0b082918L,0x60603511c092c0fL,
+    0x172017031a17000fL,0x1302021103201c19L,0x60a030b0d000810L,0x2620211d12021613L,
+    0x20304312a083b03L,0xb2f42051130062cL,0x304f4d47454b3948L,0x1316035f08060211L,
+    0x310b5639420d2a0bL,0x13080a0347050309L,0xd1d121d0602061aL,0x69722004603b2c05L,
+    0x3a420b130b030800L,0x6084203082a082bL,0x619290911141a2bL,0x403302a31033902L,
+    0x6090b131d060508L,0x14002c08112c2020L,0x2c022c1306190203L,0x1d08133b2a030016L,
+    0x20800060608052aL,0x300110611050308L,0x202061a08030203L,0x6020b0906030406L,
+    0x311000500030311L,0x3130802030b0306L,0xd0008100b060203L,0x12021613060a030bL,
+    0x2a083b032620211dL,0x1130062c02030431L,0x454b39480b2f4205L,0x8060211bf4f4d47L,
+    0x420d2a2a2caa03a4L,0x47140319bb0baeadL,0x809062b13080a03L,0xa6b52c0d121d123bL,
+    0xc2171300bd92200cL,0x42390b5244b02a99L,0x3d2218522e42b011L,0xbb51ad1e1c1b410fL,
+    0x9b0214ac0c51bfafL,0x3d30c4c41c0fc299L,0x2e1b09172203be0bL,0xaf1103aa301ebe20L,
+    0x1c1314399bac20b5L,0x110503081e420006L,0x4203090351033d1cL,0x651042e09022e2bL,
+    0x311113d06022a19L,0x172a030617110014L,0xb080203032c081eL,0x60a030b0d000810L,
+    0x2620211d12021613L,0x20304312a083b03L,0xb2f42051130062cL,0x884f4d47454b3948L,
+    0x2070177b1308091aL,0x5b8791836090691dL,0x5c848911740d060fL,0xa728d1602051c18L,
+    0x6763560766805f04L,0x3a600b1387030b03L,0x1c134203081d082bL,0x61929091a141a18L,
+    0x417306931033909L,0x8050b5c72060584L,0xd005f02112c2056L,0x20022c0b060f0211L,
+    0x1d08133b2a060316L,0x2080308060b052aL,0x17001a0811050308L,0x5021c1813060203L,
+    0x1c090b0f06030406L,0x111a000d03060311L,0x3201309031d1706L,0xd0008100b020211L,
+    0x12021613060a030bL,0x2a083b032620211dL,0x1130062c02030431L,0x454b39480b2f4205L,
+    0x1308091a884f4d47L,0x6090691d2070177bL,0x740d060f5b879183L,0x2051c185c848911L,
+    0x66805f040a728d16L,0x98170b0367635607L,0x423b0b5244a62a99L,0x2b221843292cb011L,
+    0xbb51ad191c1b410fL,0x920214a90c3abfbdL,0x3d30c4ae130dc297L,0x2e15091a1203a405L,
+    0xaf0806aa311ebe1dL,0x1c0b14399bac20b5L,0x110503081e420308L,0x2c0609033a032b13L,
+    0x651042e05022918L,0x608113d1c092a0fL,0x171d17061a1a000dL,0xb02021103201319L,
+    0x304030204030201L,0xc090c0904080d02L,0x1a031d1902031903L,0x1a25021303190302L,
+    0x4a25120415251915L,0x3a47033403030803L,0x4a024a4a0204022bL,0x2020403042c032cL,
+    0x310904433a2b033aL,0x344a093b344a0243L,0x8a021a0202033a03L,0x303020303788a8aL,
+    0x3608a78035f8a8bL,0x7203190219031908L,0x3780202098a1302L,0x5f03028b038a0909L,
+    0x8b08028b035f1a03L,0x9028a190203030dL,0x8030303033a1378L,0x303030303130303L,
+    0x2b1a033a03031a03L,0x3081a2c03031d03L,0x303032c03030303L,0x33a0308032b0303L,
+    0x40302011a3a0803L,0x4080d0203040302L,0x20319030c090c09L,0x31903021a037219L,
+    0x6c25196c1a250213L,0x30308037e258d04L,0x20402788b740357L,0x45f035f7e027e7eL,
+    0x8b78038b02020403L,0x577e02775b090477L,0x8f7f8b03577e0980L,0x7f8e7373738f688fL,
+    0x7f7b735a7f7f8f7fL,0x867f86847f66738eL,0x55735c8f637f868fL,0x7f7355557f8e8f8fL,
+    0x7f7b687f7b7f8f5aL,0x8f7f7f905a848f5aL,0x7f8b5c8e558f7386L,0x3130303847f0303L,
+    0x7f0368037f7f7f7fL,0x37f727f781a7f8bL,0x7f7f7f7f0308685fL,0x7f7803037f03035fL,
+    0x1a8b0803038b0384L,0x304030204030201L,0x4609460904084702L,0x2b033b4a02034a03L,
+    0x2b3c022c034a0302L,0x2d3c4b04383c4a38L,0x444f514c51514251L,0x2d3f2d2d3f333f52L,
+    0x3f3f335133305130L,0x4540334944525144L,0x4c2d40484c2d3f49L,0x8a3f2b023f034451L,
+    0x5151020303528a8aL,0x3608a78515f8a44L,0x3b514a3f4a034a42L,0x5152023f408a2c3fL,
+    0x30033f44038a0940L,0x4408024403302b51L,0x9028a4a02515147L,0x803515103442c78L,
+    0x51035151032c0303L,0x522b514451512b03L,0x51422b3003033b03L,0x5151033051510303L,
+    0x344514203525103L,0x40302012b440851L,0x408470203040302L,0x2034a0346094609L,
+    0x34a03022b033b4aL,0x383c4a382b3c022cL,0x515142512d3c4b04L,0x3f333f52444f514cL,
+    0x333051302d3f2d2dL,0x445251443f3f3351L,0x4c2d3f4945403349L,0x717f44514c2d4048L,
+    0x7f8573737371788fL,0x8a7b737d8a8a8f7fL,0x7e7f7e607f66738eL,0x75735f71808a7e71L,
+    0x7f7355758a858f71L,0x7f88788a887f717dL,0x8f8a8a747d848f7dL,0x7f445f8e558f737eL,
+    0x32c0303847f5151L,0x8a5178038a7f8a8aL,0x37f3b7f522b8a44L,0x8a8a7f7f51427830L,
+    0x7f5251038a510330L,0x2b44085103445160L,0x325030204030201L,0x2319231925131202L,
+    0x1817161b1e171b03L,0x18271e20171b171eL,0x1b27212524271b24L,0x3a12033417171317L,
+    0x1b024a1b1e041e18L,0x20225032520172cL,0x311925433a18033aL,0x344a1916341b1e43L,
+    0x8a1e180202033a03L,0x3171e1717828b8bL,0x175f8a8217568a8bL,0x16031b1e1b031b13L,
+    0x17820202198a2002L,0x56031e8b178b1919L,0x8b131e8b035f1803L,0x19028b1b1e170312L,
+    0x13170317173a2082L,0x303171717200317L,0x1818033a17171817L,0x313182c03031603L,
+    0x317032003171717L,0x33a171303180317L,0x4030201183a1303L,0x2513120203250302L,
+    0x1e171b0323192319L,0x171b171e1817161bL,0x24271b2418271e20L,0x171713176e272125L,
+    0x1e041e828b8d0357L,0x2556175f6e027e6eL,0x8b82038b02022503L,0x576e1e775b192577L,
+    0x8f7f8b03577e1970L,0x5d655a5a735e828fL,0x5d91735a7f5d5e5dL,0x6e7f6e5c5d7b7365L,
+    0x8673568f707f6e5eL,0x5d5a86865d658f8fL,0x7f7b827f917f5e5aL,0x5e5d7f8d5a5c5e5aL,
+    0x5d8b5665868f5a6eL,0x172003175c5d0317L,0x5d1782177f7f5d5dL,0x37f167f82187f8bL,
+    0x7f5d5d5d0313825fL,0x7f8203177f170356L,0x188b1303038b175cL,0x325030204030201L,
+    0x2319231925131202L,0x1817161b1e171b03L,0x18271e20171b171eL,0x2827212524271b24L,
+    0x444b514c3a3a2c3aL,0x283f2d2834333443L,0x3f3f3c513c313a30L,0x454a3c4944435144L,
+    0x4c2d4a4d4c283449L,0x8a3418023f034451L,0x513a1e1717438b8bL,0x175f8a823a568a44L,
+    0x16511b341b031b2cL,0x3a43023f4a8a203fL,0x31033444178b194aL,0x44131e4403301851L,
+    0x19028b1b1e3a5112L,0x1317513a17442082L,0x51033a3a17200317L,0x431851443a3a1817L,
+    0x512c183003031603L,0x513a0331513a1717L,0x3443a2c03435117L,0x403020118441351L,
+    0x2513120203250302L,0x1e171b0323192319L,0x171b171e1817161bL,0x24271b2418271e20L,
+    0x3a3a2c3a28272125L,0x34333443444b514cL,0x3c313a30283f2d28L,0x444351443f3f3c51L,
+    0x4c283449454a3c49L,0x717f44514c2d4a4dL,0x5d775a5a7357828fL,0x8b91737d8a8b5e5dL,
+    0x6e7f6e5f5d7b7365L,0x7e735671708a6e57L,0x5d5a867e8b778f71L,0x7f88828a5b7f577dL,
+    0x5e8b8a8d7d5c5e7dL,0x5d445665868f5a6eL,0x172003175c5d513aL,0x8b3a82178a7f8b8bL,
+    0x37f167f43188a44L,0x8a8b5d5d512c8230L,0x7f4351178a3a0331L,0x1844135103443a5fL,
+    0x110c030904030201L,0xe0f0e0f0c0b0a09L,0x1a031d0f09110f11L,0x1a0c020b03191109L,
+    0x4a250a04150c1915L,0x2b0a034a11110b03L,0x4e094e4a0204092bL,0x9020c11042a032aL,
+    0x3b0f0c433a2b113aL,0x4a4e0f3b344e0943L,0x8a021a0909112b03L,0x1111020311788a8aL,
+    0x116981780369818bL,0x720319090f03190bL,0x117809090f8a0b02L,0x6903098b03810f0fL,
+    0x780b097811691a11L,0xf02810f0903030aL,0xb110311112b0b78L,0x3030311030b1111L,
+    0x2b1a113a11031a03L,0x110b1a2a11031d11L,0x1103032a03030303L,0x32b110b112b0311L,
+    0x40302011a3a0b11L,0xc0b0a09110c0309L,0x9110f110e0f0e0fL,0x31911091a03720fL,
+    0x6c0c196c1a0c020bL,0x11110b037e258904L,0x20409787889037eL,0x46903697909797eL,
+    0x8b78118b09020c11L,0x57790977800f0c77L,0x555378037e790f80L,0x538e7373738f6855L,
+    0x7f67625a53538f7fL,0x7a7f86875367628eL,0x7a73878f637f8655L,0x7f627a7a538e5555L,
+    0x53676853677f555aL,0x557f7f898e87558eL,0x5378878e7a8f627aL,0x30b111187530311L,
+    0x530368037f7f7f53L,0x117f7253781a538bL,0x7f7f7f7f110b6869L,0x5378031153030369L,
+    0x1a8b0b1103781187L,0x110c030904030201L,0xe0f0e0f0c0b0a09L,0x2b033b4e09114e11L,
+    0x2b46022a034a1109L,0x2d3c2f0438464a38L,0x522f512d3d3d2a51L,0x3640362d3f334052L,
+    0x403f463d33395139L,0x484e464944523d44L,0x2d364e484c364049L,0x8a3f2b0940115251L,
+    0x3d3d020311528a8aL,0x1169817851698144L,0x3b514a404e034a2aL,0x3d5209404e8a2a3fL,
+    0x3903404403810f4eL,0x520b095211392b3dL,0xf02814e0951510aL,0xb11513d11522a78L,
+    0x5103513d032a1111L,0x522b3d443d512b03L,0x3d2a2b3911033b11L,0x3d51033951510303L,
+    0x3523d2a11525111L,0x40302012b440b3dL,0xc0b0a09110c0309L,0x9114e110e0f0e0fL,
+    0x34a11092b033b4eL,0x38464a382b46022aL,0x3d3d2a512d3c2f04L,0x3f334052522f512dL,
+    0x333951393640362dL,0x44523d44403f463dL,0x4c364049484e4649L,0x755352512d364e48L,
+    0x5385737373717855L,0x8a67627d81818f7fL,0x797f7e695367628eL,0x79736971808a7e75L,
+    0x7f627a7981855575L,0x53837881837f757dL,0x558a8a8985875585L,0x5352698e7a8f6279L,
+    0x32a11118753513dL,0x815178038a7f8a81L,0x117f3b53522b8144L,0x8a8a7f7f3d2a7839L,
+    0x5352511181510339L,0x2b440b3d03523d69L,0x110c030904030201L,0xe0f0e0f0c0b0a09L,
+    0x18171615191a1511L,0x18231e1d171b1a19L,0x1b27262524231b24L,0x2b0a034a1a1a0b17L,
+    0x15094e1b1e041918L,0x9020c11251d172aL,0x3b0f0c433a18113aL,0x4a4e0f1634151943L,
+    0x8a1e180909112b03L,0x111a1e171a828b8bL,0x1a6981821772818bL,0x16031b1915031b0bL,
+    0x1a8209090f8a1d02L,0x7203198b17780f0fL,0x780b197811691811L,0xf0278151917030aL,
+    0xb1a031a1a2b1d82L,0x303171a171d111aL,0x1818113a1a171817L,0x110b182a11031611L,
+    0x1117031d03171717L,0x32b1a0b1118031aL,0x4030201183a0b11L,0xc0b0a09110c0309L,
+    0x191a15110e0f0e0fL,0x171b1a1918171615L,0x24231b2418231e1dL,0x1a1a0b176e272625L,
+    0x1e0419827889037eL,0x257217696c09796eL,0x8b82118b09020c11L,0x576c1977800f0c77L,
+    0x555378037e790f70L,0x68655a5a735e8255L,0x5d63625a53685e5dL,0x6c7f6e8768676265L,
+    0x7a73728f707f6e86L,0x5d8e7a7a68655555L,0x53678253637f865aL,0x865d7f898e87868eL,
+    0x687872657a8f8e6cL,0x171d111a8768031aL,0x681782177f7f5d68L,0x117f16538218538bL,
+    0x7f5d5d5d110b8269L,0x5382031a53170372L,0x188b0b1103781a87L,0x110c030904030201L,
+    0xe0f0e0f0c0b0a09L,0x18171615191a1511L,0x18231e1d171b1a19L,0x2827262524231b24L,
+    0x522f512d2b2b2a3aL,0x3840362834334a43L,0x403f463d3c3b3a39L,0x484e464944433d44L,
+    0x2d364e4d4c384a49L,0x8a34180940115251L,0x3d2b1e171a438b8bL,0x1a6981823a728144L,
+    0x16511b4a15031b2aL,0x2b4309404e8a1d3fL,0x3b034a4417780f4eL,0x520b19521139183dL,
+    0xf027815193a510aL,0xb1a512b1a521d82L,0x51033a2b171d111aL,0x43183d442b3a1817L,
+    0x3d2a183911031611L,0x3d3a033b513a1717L,0x3522b2a1143511aL,0x403020118440b3dL,
+    0xc0b0a09110c0309L,0x191a15110e0f0e0fL,0x171b1a1918171615L,0x24231b2418231e1dL,
+    0x2b2b2a3a28272625L,0x34334a43522f512dL,0x3c3b3a3938403628L,0x44433d44403f463dL,
+    0x4c384a49484e4649L,0x755352512d364e4dL,0x68775a5a73578255L,0x8b63627d81785e5dL,
+    0x6c7f6e6968676265L,0x79737271708a6e7eL,0x5d8e7a7978775575L,0x53838281807f7e7dL,
+    0x868b8a8985878685L,0x685272657a8f8e6cL,0x171d111a8768512bL,0x783a82178a7f8b78L,
+    0x117f165343188144L,0x8a8b5d5d3d2a8239L,0x5343511a813a033bL,0x18440b3d03522b69L,
+    0x607060504030201L,0x7090c0504080d02L,0x1a031d1905061403L,0x1307021306190302L,
+    0x4a25120415251412L,0x2947063406030806L,0x4a054a320204052cL,0x2020703042c032cL,
+    0x310504313a2b0629L,0x3232093b34320243L,0x6f02130205033a03L,0x6060203065f8a6fL,
+    0x3606f78065f8a64L,0x7206190519061408L,0x3780502058a1302L,0x5f03028b066f0909L,
+    0x6408028b065f1a03L,0x5028a140503030dL,0x8060303033a135fL,0x603060306130306L,
+    0x2b1a062906031a03L,0x608132c06061d06L,0x306032c03030306L,0x6290608032c0603L,
+    0x4030201133a0803L,0x4080d0206070605L,0x506140307090c05L,0x61903021a037219L,
+    0x6c25148d13070213L,0x60308067e258d04L,0x204055f64740657L,0x45f035f7e057e6dL,
+    0x8b78066402020703L,0x576d02775b05045bL,0x767f8b036d6d0980L,0x6b7b7358588f5c8fL,
+    0x6b7b73596b6b8f7fL,0x866b8c847f66588eL,0x76735c8f636b8676L,0x6b5855557f8e768fL,
+    0x6b7b687f7b7f8f5aL,0x767f7f9059848f5aL,0x7f8b5c7b768f738cL,0x6130306846b0303L,
+    0x6b0368036b7f6b7fL,0x66b726b781a6b64L,0x7f7f7f6b06085c5fL,0x7f5f06037f06035fL,
+    0x138b080306640684L,0x607060504030201L,0x3e09460504084702L,0x2b033b4a05063203L,
+    0x2c3e022c064a0302L,0x2d3c4b04383c324bL,0x414f2e4c2e51422eL,0x2d372d503f333730L,
+    0x3f3f3e5133305130L,0x4537334544522e41L,0x505040484c503f49L,0x6f3f2c0237034451L,
+    0x2e2e020306308a6fL,0x3606f782e5f8a41L,0x3b2e4a374a063242L,0x5152053f378a2c3fL,
+    0x30033f44066f0940L,0x4108024406302b51L,0x5028a3205515147L,0x806515103442c5fL,
+    0x2e032e51062c0306L,0x522b2e412e512b03L,0x2e422c3006063b06L,0x512e033051510306L,
+    0x6412e4203302e03L,0x40302012c440851L,0x408470206070605L,0x50632033e094605L,
+    0x64a03022b033b4aL,0x383c324b2c3e022cL,0x2e51422e2d3c4b04L,0x3f333730414f2e4cL,
+    0x333051302d372d50L,0x44522e413f3f3e51L,0x4c503f4945373345L,0x547f445150504048L,
+    0x6b88735858715f8fL,0x6f7b73616f6f8f7fL,0x7e6b6d607f66588eL,0x54735f71806f7e54L,
+    0x6b5855758a857671L,0x6b88788a887f717dL,0x768a8a7461848f7dL,0x7f445f7b768f736dL,
+    0x62c0306846b5151L,0x6f5178036f7f6f8aL,0x66b3b6b522b6f41L,0x8a8a7f6b2e425f30L,
+    0x7f302e038a2e0330L,0x2c44085106412e60L,0x607060504030201L,0x1f19231425131202L,
+    0x1817161b141c2203L,0x201f1e201c1b171eL,0x1b27212524272221L,0x291206341c17131cL,
+    0x1b054a221e041420L,0x20207032520172cL,0x311425313a180629L,0x3232191634221e43L,
+    0x6f1e200205033a03L,0x61c1e171c568b64L,0x175f6f821c568a64L,0x16061b141b062213L,
+    0x17820502148a2002L,0x56031e8b1c641919L,0x64131e8b065f1803L,0x14028b2214170312L,
+    0x131c0317173a2056L,0x6031c171c20031cL,0x181806291c171817L,0x613202c06061606L,
+    0x31c03200317171cL,0x6291c1303200617L,0x4030201203a1303L,0x2513120206070605L,
+    0x141c22031f192314L,0x1c1b171e1817161bL,0x24272221201f1e20L,0x1c17131c6e272125L,
+    0x1e041456648d0657L,0x2556175f6e057e6aL,0x8b82066402020703L,0x576a1e775b14255bL,
+    0x767f8b036d6d1970L,0x7c915a59585e568fL,0x7c9173596b7c5e5dL,0x6e6b6a5c5d7b5865L,
+    0x8c73568f706b6e8cL,0x7c5986865d65768fL,0x6b7b827f917f5e5aL,0x8c5d7f8d595c5e5aL,
+    0x5d8b56918c8f5a6aL,0x1c20031c5c7c0317L,0x7c1782176b7f7c5dL,0x66b166b82186b64L,
+    0x7f5d5d7c0613565fL,0x7f5606177f1c0356L,0x208b130306641c5cL,0x607060504030201L,
+    0x1f19231425131202L,0x1817161b141c2203L,0x201f1e201c1b171eL,0x2827212524272221L,
+    0x414b2e4c293a2c29L,0x28372d3534333231L,0x3f3f3e513c313a30L,0x45323c4544432e41L,
+    0x50504a4d4c353449L,0x6f34200237034451L,0x2e291e171c318b64L,0x175f6f8229568a41L,
+    0x162e1b321b06222cL,0x3a43053f328a203fL,0x310334441c64194aL,0x41131e4406301851L,
+    0x14028b22143a5112L,0x131c513a17442056L,0x2e03293a1c20031cL,0x43182e41293a1817L,
+    0x2e2c203006061606L,0x51290331513a171cL,0x641292c03312e17L,0x403020120441351L,
+    0x2513120206070605L,0x141c22031f192314L,0x1c1b171e1817161bL,0x24272221201f1e20L,
+    0x293a2c2928272125L,0x34333231414b2e4cL,0x3c313a3028372d35L,0x44432e413f3f3e51L,
+    0x4c35344945323c45L,0x547f445150504a4dL,0x7c5b5a595857568fL,0x649173616f645e5dL,
+    0x6e6b6a5f5d7b5865L,0x6d735671706f6e6dL,0x7c59867e8b777671L,0x6b88828a5b7f577dL,
+    0x8c8b8a8d615c5e7dL,0x5d4456918c8f5a6aL,0x1c20031c5c7c513aL,0x643a82176f7f648bL,
+    0x66b166b43186f41L,0x8a8b5d7c2e2c5630L,0x7f312e178a290331L,0x204413510641295fL,
+    0x807060504030201L,0x100f0e0d0c0b0a09L,0x1a031d0f05080d11L,0x1307020b06191109L,
+    0x4a250a04150c1412L,0x2c0a064a08110b06L,0x4e054e320204052cL,0x9020711042a032aL,
+    0x3b0d0c313a2b0829L,0x32470f3b34470943L,0x6f02130905112b03L,0x8080203085f8a6fL,
+    0x1169607806698164L,0x720619050f06140bL,0x117805090d8a0b02L,0x6903098b06600f0fL,
+    0x5f0b097808691a11L,0xd02810d0503030aL,0xb080311112b0b5fL,0x6030611060b1108L,
+    0x2b1a082908031a03L,0x80b132a08061d08L,0x1106032a03030306L,0x62c080b112c0611L,
+    0x4030201133a0b11L,0xc0b0a0908070605L,0x5080d11100f0e0dL,0x61911091a03720fL,
+    0x6c0c148d1307020bL,0x8110b067e258904L,0x204055f5f89067eL,0x46903697905796dL,
+    0x8b78086409020711L,0x57740977800d0c5bL,0x765378036d740f80L,0x847b7358588f5c55L,
+    0x6b67625984848f7fL,0x7a6b8c875367668eL,0x9073878f636b8676L,0x6b667a7a538e7655L,
+    0x84676853677f555aL,0x767f7f897b87558eL,0x5378877b908f6290L,0x60b110887840311L,
+    0x840368036b7f6b53L,0x86b7284781a8464L,0x7f7f7f6b080b5c69L,0x535f061153060369L,
+    0x138b0b11065f0887L,0x807060504030201L,0x100f0e0d0c0b0a09L,0x2b033b4e05084711L,
+    0x2c3e022a064a1109L,0x2d3c2f043846324bL,0x302f2e2d423d2a2eL,0x363736503f333730L,
+    0x403f3e3d33395139L,0x4847464544524241L,0x504f4e484c4f4049L,0x6f3f2c0937115251L,
+    0x4242020308308a6fL,0x116960782e698141L,0x3b2e4a374e06322aL,0x3d520540478a2a3fL,
+    0x3903404406600f4eL,0x300b095208392b3dL,0xd0281470551510aL,0xb08513d11522a5fL,
+    0x2e032e3d062a1108L,0x522b424142512b03L,0x422a2c3908063b08L,0x3d2e033951510306L,
+    0x630422a11302e11L,0x40302012c440b3dL,0xc0b0a0908070605L,0x5084711100f0e0dL,
+    0x64a11092b033b4eL,0x3846324b2c3e022aL,0x423d2a2e2d3c2f04L,0x3f333730302f2e2dL,
+    0x3339513936373650L,0x44524241403f3e3dL,0x4c4f404948474645L,0x54535251504f4e48L,
+    0x8488735858715f55L,0x6f67626160608f7fL,0x796b6d695367668eL,0x74736971806f7e54L,
+    0x6b667a7981857675L,0x84837881837f757dL,0x768a8a8988875585L,0x5352697b908f6274L,
+    0x62a11088784513dL,0x605178036f7f6f81L,0x86b3b84522b6041L,0x8a8a7f6b422a5f39L,
+    0x53302e11812e0339L,0x2c440b3d06304269L,0x807060504030201L,0x100f0e0d0c0b0a09L,
+    0x1817161514131211L,0x201f1e1d1c1b1a19L,0x1b27262524232221L,0x2c0a064a131a0b1cL,
+    0x15054e221e041420L,0x9020711251d172aL,0x3b0d0c313a180829L,0x32470f1634121943L,
+    0x6f1e200905112b03L,0x8131e1713568b64L,0x1a6960821c728164L,0x16061b141506220bL,
+    0x1a8205090d8a1d02L,0x7203198b1c5f0f0fL,0x5f0b197808691811L,0xd0278121417030aL,
+    0xb13031a1a2b1d56L,0x6031c1a1c1d1113L,0x1818082913171817L,0x80b202a08061608L,
+    0x111c031d0317171cL,0x62c130b1120061aL,0x4030201203a0b11L,0xc0b0a0908070605L,
+    0x14131211100f0e0dL,0x1c1b1a1918171615L,0x24232221201f1e1dL,0x131a0b1c6e272625L,
+    0x1e0414565f89067eL,0x257217696c05796aL,0x8b82086409020711L,0x578d1977800d0c5bL,
+    0x765378036d740f70L,0x5c915a59585e5655L,0x7c636259845c5e5dL,0x6c6b6a8768676665L,
+    0x9073728f706b6e8cL,0x7c7b7a7a68657655L,0x84678253637f865aL,0x8c5d7f897b87868eL,
+    0x68787291908f8e8dL,0x1c1d1113875c031aL,0x5c1782176b7f7c68L,0x86b168482188464L,
+    0x7f5d5d7c080b5669L,0x5356061a531c0372L,0x208b0b11065f1387L,0x807060504030201L,
+    0x100f0e0d0c0b0a09L,0x1817161514131211L,0x201f1e1d1c1b1a19L,0x2827262524232221L,
+    0x302f2e2d2c2b2a29L,0x3837363534333231L,0x403f3e3d3c3b3a39L,0x4847464544434241L,
+    0x504f4e4d4c4b4a49L,0x6f34200937115251L,0x422c1e1713318b64L,0x1a69608229728141L,
+    0x162e1b321506222aL,0x2b430540478a1d3fL,0x3b034a441c5f0f4eL,0x300b19520839183dL,
+    0xd027812143a510aL,0xb13512b1a521d56L,0x2e03292b1c1d1113L,0x431842412c3a1817L,
+    0x422a203908061608L,0x3d29033b513a171cL,0x6302c2a11312e1aL,0x403020120440b3dL,
+    0xc0b0a0908070605L,0x14131211100f0e0dL,0x1c1b1a1918171615L,0x24232221201f1e1dL,
+    0x2c2b2a2928272625L,0x34333231302f2e2dL,0x3c3b3a3938373635L,0x44434241403f3e3dL,
+    0x4c4b4a4948474645L,0x54535251504f4e4dL,0x5c5b5a5958575655L,0x64636261605f5e5dL,
+    0x6c6b6a6968676665L,0x74737271706f6e6dL,0x7c7b7a7978777675L,0x84838281807f7e7dL,
+    0x8c8b8a8988878685L,0x68527291908f8e8dL,0x1c1d1113875c512bL,0x5f3a82176f7f6478L,
+    0x86b168443186041L,0x8a8b5d7c422a5639L,0x53312e1a8129033bL,0x20440b3d06302c69L
+  };
+  private final static long[] offsetIncrs6 = new long[] /*3 bits per value */ {
+    0x8000000080000000L,0x1000000060200061L,0x820000038000L,0x80200030044048c4L,
+    0x20ab0ac0000eda1L,0x4041400c01506000L,0x113028000884098L,0x186c401800008040L,
+    0x1020c000200009a0L,0x80000000710L,0x60200061800L,0x820000038000100L,
+    0x30044048c4000L,0xb3cb4d86cf6c181aL,0xd80cc0190780182cL,0x30301b0884c9e584L,
+    0xf4c18db6080580d1L,0xcc0c02db609a19e6L,0x80000000710102L,0x60200061800000L,
+    0x3a28b550000L,0x3005405aed0050aaL,0xadb400eda1802d00L,0xac01507400020abaL,
+    0x8168a8509d405140L,0x58a2d08042d15302L,0xb42b40a9a0186edbL,0x75516a0e8L,
+    0x200061800000008L,0x3a28b550000006L,0x5405aed0050aa000L,0x46cf6c181ad00300L,
+    0x190740182cb3ab5bL,0x8a85c9d585d80ac0L,0xad0805add5303016L,0xb76a9a19e6edb58bL,
+    0x75516ace8b42L,0x2092010000008000L,0x8009140000008028L,0x49040000a2000004L,
+    0x24a2002000400440L,0x8000028ac8ac1049L,0x40a0404900900150L,0x8450491402010088L,
+    0xa20209049240248L,0x910122104102124L,0x2010000008000000L,0x9140000008028209L,
+    0x40000a2000004800L,0x201a000400440490L,0x1828b48b4d04924cL,0x6584900900190980L,
+    0x4914020130884caL,0x1a6934924da48845L,0x122d04d02d240a2L,0x8000000091L,
+    0x8028209201L,0x50a2000004a28914L,0x2d004005405b2d00L,0x8ac8adb04924a200L,
+    0x5900900150940002L,0x54020128a850a540L,0x92d924a2488452c9L,0x212cb02b24aa2020L,
+    0x8000000095516L,0x8028209201000L,0x2000004a28914000L,0x4005405b2d0050aL,
+    0x8b5b04924c201ad0L,0x9001909401828b4L,0x20128a85ca558590L,0x924ba488452c9540L,
+    0xcb02b24aa21a692dL,0xc0600000955162d2L,0x6030186180c30000L,0x36006d8000000L,
+    0x46048dc0030c300L,0x6c06eda180d80030L,0x1586000036db0dcL,0x6c36db6040c06cL,
+    0x30db6c36db0180L,0x30006db61b6dc618L,0x71b0db6c360L,0x186180c30000c06L,
+    0x36006d8000000603L,0x48dc0030c300000L,0x6f6c180d80030046L,0x87801836dbcdc6c6L,
+    0xc36db784cc06c019L,0xdb6c36db0181b06L,0x66db79b6dc618db3L,0x71b0db6c3603dbL,
+    0x6180c30000c06000L,0x86dd000000603018L,0xdd0030eb00000362L,0xa180dd003005605aL,
+    0x36dbadd6c06edL,0xdb6050c06c015874L,0x6eb6db0181686c36L,0xb61b6dd758a2b0dbL,
+    0x5b0db6eb743b406dL,0xc30000c06000007L,0xd000000603018618L,0x30eb0000036286dL,
+    0xdd003005605add0L,0x36dbadd6c66f6c18L,0x85cc06c019874018L,0x6db0181686c36db7L,
+    0xb6dd758bab0db6ebL,0xdb6eb743b766db79L,0xc060000075b0L,0x8038189200c3L,
+    0xe30000046006dc00L,0x400460491c0030L,0xc8dc6c4724a200d8L,0xc07001588000036dL,
+    0x181006c36e36048L,0xc7240238db6c36dcL,0x37031246e362391L,0xc060000091b0db7L,
+    0x8038189200c3000L,0x46006dc00000L,0x460491c0030e30L,0xc6c4724c200d8004L,
+    0x1989801836dc8dL,0x1306c36e37848c07L,0x4da38db6c36dc018L,0x3d246e37a391c72L,
+    0x60000091b0db7037L,0x38189200c30000c0L,0x46286dc00000080L,0x605b1d0030e30000L,
+    0x4724a200dd004005L,0x589400036dc8dd6cL,0x6c36e36058c07001L,0x38db6eb6dc018128L,
+    0x246e362391d724a2L,0x95b0db72b703bL,0x89200c30000c0600L,0x286dc00000080381L,
+    0xb1d0030e30000046L,0x4c200dd004005605L,0x401836dc8dd6c472L,0x6e37858c07001989L,
+    0xb6eb6dc0181286c3L,0xe37a391d724ba38dL,0x95b0db72b703b246L,0x8080000080410000L,
+    0x1200000040240061L,0x820000024104L,0x200030044028d2L,0x820934aa4804aa41L,
+    0x4044800c01506800L,0x112028000484498L,0x9a6d241841048248L,0x4920900820024924L,
+    0x80410000510L,0x40240061808L,0x820000024104120L,0x30044028d2000L,
+    0x934b24864b24101aL,0x480cc0190680082cL,0x20301b048449e584L,0xd2418596482480d1L,
+    0xc90c82db249249a6L,0x80410000510492L,0x40240061808000L,0x24105520000L,
+    0x3005402ad20050aaL,0xaa4804aa41002d00L,0xac01506800820934L,0x816848549d405480L,
+    0x584154824ad15202L,0xa82b4249249a6d25L,0x410000555492090L,0x240061808000008L,
+    0x24105520000004L,0x5402ad20050aa000L,0x864b24101ad00300L,0x190680082c934b24L,
+    0x848549d585480ac0L,0x954824add5203016L,0xb7249249a6d25585L,0x555492c90a82L,
+    0x2092008000008041L,0x4105120000004024L,0x29120000a2000002L,0xa241002000400440L,
+    0x8800828944aa4844L,0x44a0404480900150L,0x8248491202010048L,0x4924a29125244144L,
+    0x510492094082122L,0x2008000008041000L,0x5120000004024209L,0x20000a2000002410L,
+    0x101a000400440291L,0x828944b24844a24L,0x6584480900190880L,0x849120201304844aL,
+    0x4a29125245944824L,0x492c94c82d22492L,0x8000008041000051L,0x4024209200L,
+    0x50a2000002410512L,0x2d004005402b1200L,0x8944aa4844a24100L,0x5480900150880082L,
+    0x520201284854a540L,0x9125244144824ac9L,0x2094a82b224924a2L,0x8041000055549L,
+    0x4024209200800L,0x2000002410512000L,0x4005402b120050aL,0x4b24844a24101ad0L,
+    0x900190880082894L,0x201284854a558548L,0x5245944824ac9520L,0x4a82b224924a2912L,
+    0xc0410000555492c9L,0x4034186180830000L,0x24104da000000L,0x46028d20030c300L,
+    0x4804aa4100d80030L,0x1586800836d34daL,0x4c34db6044806cL,0x4134da6836da0180L,
+    0x30024d349a6d2418L,0x1000051b49369368L,0x4186180830000c04L,0x24104da000000403L,
+    0x28d20030c300000L,0x4b24100d80030046L,0x86800836d34da486L,0xc34db7844806c019L,
+    0x4da6836da0181b04L,0x24d349a6d2418593L,0x51b493693683dbL,0x6180830000c04100L,
+    0x4da000000403418L,0xd20030eb00000241L,0x4100dd003005602aL,0x836d34da4804aaL,
+    0xdb6054806c015868L,0x6ab6da0181684c34L,0x349a6d25584134daL,0x5b493693683b424dL,
+    0x830000c04100005L,0xa000000403418618L,0x30eb0000024104dL,0xdd003005602ad20L,
+    0x36d34da4864b2410L,0x854806c019868008L,0x6da0181684c34db7L,0xa6d25585934da6abL,
+    0x93693683b724d349L,0xc041000055b4L,0x403418920083L,0xe30000024104da00L,
+    0x40046029120030L,0x44da4844a24100d8L,0x807001588800836dL,0x181004c34e36044L,
+    0x25244134da6836daL,0x936831224d34a291L,0xc041000051b4936L,0x403418920083000L,
+    0x24104da00000L,0x46029120030e30L,0xa4844a24100d8004L,0x1988800836d44dL,
+    0x1304c34e37844807L,0x45934da6836da018L,0x83d224d34a291252L,0x41000051b4936936L,
+    0x34189200830000c0L,0x24104da00000040L,0x602b120030e30000L,0x44a24100dd004005L,
+    0x588800836d44da48L,0x4c34e36054807001L,0x34da6ab6da018128L,0x224d34a291252441L,
+    0x55b493693683bL,0x89200830000c0410L,0x104da00000040341L,0xb120030e30000024L,
+    0x24100dd004005602L,0x800836d44da4844aL,0x4e37854807001988L,0xa6ab6da0181284c3L,
+    0xd34a29125245934dL,0x55b493693683b224L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L
+  };
+    
+  // 128 vectors; 196 states per vector; array length = 25088
+  private final static long[] toStates7 = new long[] /*8 bits per value */ {
+    0xd000805000607L,0x1213121314061d06L,0x600052c08002c00L,0x647060800290006L,
+    0x64323b0531322c31L,0x672006f00000600L,0x5f085f5f06050808L,0x6060d0005130013L,
+    0x1d13140506080006L,0x605f130d6f5f0605L,0x606060608000600L,0x60000130606L,
+    0x290613002c0608L,0x140029082c002c06L,0x13080613060806L,0x2c00060800061313L,
+    0x8060608002c0600L,0x1306062c0800001dL,0x600000000060813L,0x80000,
+    0x806000600000600L,0x6061300000500L,0x1300000000L,0x6000600080000L,
+    0x500060706060600L,0x14061d06000d0008L,0x8002c0012131213L,0x2900060600052cL,
+    0x31322c3106470608L,0x60064323b05L,0x60508080672006fL,0x51300135f085f5fL,
+    0x608000606060d00L,0x6f5f061472131414L,0x8000600605f1347L,0x2c080808060606L,
+    0x5f081300000600L,0x2c002c060064082cL,0x1308080632002908L,0x81313002c0806L,
+    0x5f06005f000613L,0x800001d13060613L,0x31c842c1306082cL,0x38403036b030303L,
+    0x3032e0303030303L,0x3033703422e031cL,0x3030303036b2e5cL,0x34203030303035cL,
+    0x2e1c6b03031c036bL,0xd000805000607L,0x1213121314061d06L,0x600142c08002c00L,
+    0x647060800290006L,0x9e32b505bb322cbbL,0x89200a000000600L,0xa408a4a406050813L,
+    0x6060d00052c002cL,0x3b13140d08130008L,0xa6a41312a0a4060dL,0x2c01cc0ac030800L,
+    0x303c00303200202L,0x34102200330020bL,0x2203b7acbe03be2eL,0x320acc0990242c0L,
+    0x3003c00b03029999L,0xb2ec00b03301c03L,0x99c002beac03039bL,0x2e03000003084220L,
+    0x303030300080000L,0x1306030803001c00L,0x61c2c00031403L,0x300002c03030303L,
+    0x8002e03130000L,0x500060706080600L,0x14061d06000d0008L,0x8002c0012131213L,
+    0x2900060600142cL,0xbb322cbb06470608L,0x6009e32b505L,0x6050813089200a0L,
+    0x52c002ca408a4a4L,0x813000806060d00L,0xa0a4060d3b13140dL,0xac030800a6a41312L,
+    0x320020202c01cc0L,0x330020b0303c003L,0xbe03be2e03410220L,0x990242c02203b7acL,
+    0x30299990320acc0L,0x3301c033003c00bL,0xac03039b0b2ec00bL,0x613602099c002beL,
+    0x38403036f060303L,0x603290306060606L,0x30632062c2e0613L,0x6060606036b295fL,
+    0x62c03030603035fL,0x2e136b030313036fL,0xd000805000607L,0x8d138d1314067206L,
+    0x8000d5f08005f00L,0x874061300640006L,0x596d80055b6d5f5bL,0x263035803031c03L,
+    0x7b847b7b6b76840bL,0x6b6b900376200320L,0x165c8c04020b0302L,0x667b5c0a587b6b04L,
+    0x66b080684000203L,0x3030600000b0606L,0x290613032c0602L,0xd0364845f005f1cL,
+    0x30b086b5c06136bL,0x20006b020006135cL,0x206060200200803L,0x1306065f08030372L,
+    0x600030300021313L,0x300030300130000L,0xb08030203030800L,0x31c082000000d00L,
+    0x303002003030000L,0x2031c000b0300L,0x500060708020603L,0x14067206000d0008L,
+    0x8005f008d138d13L,0x64000608000d5fL,0x5b6d5f5b08740613L,0x3031c03596d8005L,
+    0x6b76840b02630358L,0x762003207b847b7bL,0x20b03026b6b9003L,0x587b6b04165c8c04L,
+    0x84000203667b5c0aL,0x2a0808086b0806L,0x35f080903030600L,0x5f005f1c0064082cL,
+    0x5c08136b47036484L,0x8135c032a086bL,0x56080356006b09L,0x803037209060609L,
+    0x3095c2c1306085fL,0x35c03036b031111L,0x1111420311031111L,0x30347032a421109L,
+    0x11110303117c4256L,0x32a110311110356L,0x42096b110309117cL,0xd000805000607L,
+    0x8d138d1314067206L,0x8000d5f08005f00L,0x874061300640006L,0x596d80055b6d5f5bL,
+    0x263035803031c03L,0x7b847b7b6b76840bL,0x6b6b900376200320L,0x165c8c04020b0302L,
+    0x667b5c0a587b6b04L,0x2ab13c0a9030203L,0x606c003031d0202L,0x341022006300205L,
+    0x12069ea9a403a429L,0x61dacab97022cabL,0x3103ab0503029997L,0x52ec00503311306L,
+    0x99c002a4ac060692L,0x2e03030303022c20L,0x603060600130000L,0xb08060206031300L,
+    0x31c132000030d03L,0x603002006060303L,0x20329030b0300L,0x500060708020603L,
+    0x14067206000d0008L,0x8005f008d138d13L,0x64000608000d5fL,0x5b6d5f5b08740613L,
+    0x3031c03596d8005L,0x6b76840b02630358L,0x762003207b847b7bL,0x20b03026b6b9003L,
+    0x587b6b04165c8c04L,0xa9030203667b5c0aL,0x31d020202ab13c0L,0x63002050606c003L,
+    0xa403a42903410220L,0x97022cab12069ea9L,0x3029997061dacabL,0x33113063103ab05L,
+    0xac060692052ec005L,0x6095f2099c002a4L,0x35c03036f061111L,0x8112c0308060808L,
+    0x30647062a420809L,0x8080606117c2c56L,0x62a110308110356L,0x42096b1103091164L,
+    0x4700080500063eL,0x4b2c4b2c32083b06L,0x203043042033000L,0x24f2e0b0341032eL,
+    0x4150483745503045L,0x63b006f03030803L,0x30085f302e054202L,0x6064700370b0313L,
+    0x1d2c320506020006L,0x605f2c046f302e05L,0x62e020608000600L,0x32e0303090808L,
+    0x32c0609032a0608L,0x400414230003008L,0x30908062c060b06L,0x2a002e0803082c2cL,
+    0x8082e08002c0200L,0x2c0608304203003bL,0x803000303060b09L,0x303030b0003L,
+    0x202000603030203L,0x8021300000400L,0x3000b00030303L,0x6030800020003L,
+    0x500063e02060800L,0x32083b0600470008L,0x420330004b2c4b2cL,0x341032e02030430L,
+    0x45503045024f2e0bL,0x303080341504837L,0x2e054202063b006fL,0x370b031330085f30L,
+    0x602000606064700L,0x6f302e14722c3214L,0x8000600605f2c25L,0x3191313082e0206L,
+    0x369081300032e03L,0x30003008035f0819L,0x2c080b0625004142L,0x3132c2c03190806L,
+    0x5f020069002e13L,0x4203003b13082e13L,0x171c87192c061330L,0x1787031784170317L,
+    0x17171e1703031717L,0x30325031e1e031cL,0x317171703841e5cL,0x31e031703170387L,
+    0x1e1c8403031c1784L,0x4700080500063eL,0x4b2c4b2c32083b06L,0x203043042033000L,
+    0x24f2e0b0341032eL,0xa550483745503045L,0x8b500a003030803L,0xbf08a4bf2e054209L,
+    0x6064700372a032cL,0x3b2c320d08090008L,0xa6a42c0ca0bf2e0dL,0x2ba09c0ac030800L,
+    0x311ba11110f0b0bL,0x1130020f1139020bL,0xc03a5b0bf03bf42L,0x110facc0be022ac0L,
+    0x3903ba0b110bbebeL,0xb42ba0b03300903L,0xbec00bbfb01103b5L,0x4211000311082a0fL,
+    0x3031111030b0003L,0x902030811030903L,0x8092c00030403L,0x303002a03111111L,
+    0x8034203090003L,0x500063e02080800L,0x32083b0600470008L,0x420330004b2c4b2cL,
+    0x341032e02030430L,0x45503045024f2e0bL,0x3030803a5504837L,0x2e05420908b500a0L,
+    0x372a032cbf08a4bfL,0x809000806064700L,0xa0bf2e0d3b2c320dL,0xac030800a6a42c0cL,
+    0x110f0b0b02ba09c0L,0x1139020b0311ba11L,0xbf03bf421130020fL,0xbe022ac00c03a5b0L,
+    0x110bbebe110facc0L,0x33009033903ba0bL,0xb01103b50b42ba0bL,0x1a13690fbec00bbfL,
+    0x17870317601a0317L,0x1a17191706061a1aL,0x3062506191e0613L,0x61a1a1a0384195fL,
+    0x619031706170369L,0x1e13840303131760L,0x4700080500063eL,0x4b2c4b2c32083b06L,
+    0x203043042033000L,0x24f2e0b0341032eL,0x6150483745503045L,0x280035806061306L,
+    0x88847b886f766005L,0x6b6b7403541d0620L,0x165f6d0402050302L,0x667b5f0758886f04L,
+    0x66f020684000203L,0x3062e0303050808L,0x32c0609062a0602L,0x403416030003013L,
+    0x605086b5f060b6bL,0x1d006f0203082c5fL,0x2082e0200200203L,0x2c0608304206033bL,
+    0x803030603020b09L,0x3000606030b0003L,0x502030206060203L,0x313022000000400L,
+    0x306001d03060303L,0x2061300050303L,0x500063e02020803L,0x32083b0600470008L,
+    0x420330004b2c4b2cL,0x341032e02030430L,0x45503045024f2e0bL,0x606130661504837L,
+    0x6f76600502800358L,0x541d062088847b88L,0x20503026b6b7403L,0x58886f04165f6d04L,
+    0x84000203667b5f07L,0x3141313086f0206L,0x669080903062e03L,0x30003013035f0819L,
+    0x5f080b6b25034160L,0x3132c5f0614086bL,0x56020372006f09L,0x4206033b09082e09L,
+    0x170987192c061330L,0x178703178417111cL,0x1c1c1e1711031c1cL,0x3032503141e1109L,
+    0x111c1717115c1e56L,0x3141117111c0372L,0x1e09841103091c5cL,0x4700080500063eL,
+    0x4b2c4b2c32083b06L,0x203043042033000L,0x24f2e0b0341032eL,0x6150483745503045L,
+    0x280035806061306L,0x88847b886f766005L,0x6b6b7403541d0620L,0x165f6d0402050302L,
+    0x667b5f0758886f04L,0x2a009c0a9030203L,0x608ba11110d0b0bL,0x1130020f08390205L,
+    0xc06a5a6bf03bf2cL,0x80dacaba4022aabL,0x3b03a005110bbea4L,0x542ba0503310906L,
+    0xbec00bbfb00806b5L,0x4211030611022a0fL,0x6030808030b0003L,0x502060208060903L,
+    0x313092000030403L,0x606001d06081111L,0x2062c03050303L,0x500063e02020803L,
+    0x32083b0600470008L,0x420330004b2c4b2cL,0x341032e02030430L,0x45503045024f2e0bL,
+    0x606130661504837L,0x6f76600502800358L,0x541d062088847b88L,0x20503026b6b7403L,
+    0x58886f04165f6d04L,0xa9030203667b5f07L,0x110d0b0b02a009c0L,0x83902050608ba11L,
+    0xbf03bf2c1130020fL,0xa4022aab0c06a5a6L,0x110bbea4080dacabL,0x33109063b03a005L,
+    0xb00806b50542ba05L,0x1a09690fbec00bbfL,0x17870317601a111cL,0x131c191708061313L,
+    0x3062506141e0809L,0x8131a1a115c1956L,0x6141117081c0372L,0x1e09841103091c5fL,
+    0x31200131400061fL,0x212021202202161cL,0x600052013032003L,0x61206020029031cL,
+    0x6432161431222c31L,0x816006403030200L,0x5613565f06141308L,0x1c06120314090009L,
+    0xd20220506080306L,0x5f56200d6f561c05L,0x606061c13030800L,0x303060003130606L,
+    0x3191a1300191a08L,0x1400291320002c02L,0x313131c20060206L,0x19001c08001a2020L,
+    0x13021c1303190603L,0x20061a2013000016L,0x203000303080213L,0x300020303L,
+    0x806030603000600L,0x302060903000503L,0x300000900000000L,0x8030203080003L,
+    0x1400061f06060203L,0x2202161c03120013L,0x1303200321202120L,0x29031c06000520L,
+    0x31222c3106120602L,0x303020064321614L,0x614130808160064L,0x140900095613565fL,
+    0x60803061c061203L,0x6f561c1447202214L,0x130308005f562047L,0x32c08080806061cL,
+    0x4a2b1303030600L,0x20002c02034a2b2cL,0x2008020632002913L,0x2b2020032c131cL,
+    0x34a06034a001c13L,0x130000162c021c2cL,0x51423f2c20062b20L,0x33f51513f510351L,
+    0x51032e0303030351L,0x51033751422e511cL,0x3030303513f2e40L,0x5142035151030340L,
+    0x2e1c3f510342513fL,0x31200131400061fL,0x212021202202161cL,0x600142013032003L,
+    0x61206020029031cL,0x9e32aa14bb222cbbL,0x13aa009e03030200L,0xae13aea406141313L,
+    0x1c06120314190019L,0x1220220d08130308L,0xa4ae2012a0ae1c0dL,0x2c01c9c99171300L,
+    0x1717c00317200202L,0x171b1820031b180bL,0x2203b799c403be1eL,0x1720999cc4021ec0L,
+    0x1b039c0b0318c4c4L,0x201e9c20171b1c17L,0xc4c018c4990303aaL,0x1e17000317131e20L,
+    0x303031700020303L,0x1306170817001c00L,0x3021c1903031417L,0x1700001903030303L,
+    0x13031e17130003L,0x1400061f06080203L,0x2202161c03120013L,0x1303200321202120L,
+    0x29031c06001420L,0xbb222cbb06120602L,0x30302009e32aa14L,0x614131313aa009eL,
+    0x14190019ae13aea4L,0x81303081c061203L,0xa0ae1c0d1220220dL,0x99171300a4ae2012L,
+    0x1720020202c01c9cL,0x31b180b1717c003L,0xc403be1e171b1820L,0xc4021ec02203b799L,
+    0x318c4c41720999cL,0x171b1c171b039c0bL,0x990303aa201e9c20L,0x3a2c3420c4c018c4L,
+    0x33f5151343a0351L,0x3a0329030606063aL,0x5106323a2c2e3a13L,0x6060606513f294aL,
+    0x3a2c03513a03034aL,0x2e133f51032c5134L,0x31200131400061fL,0x212021202202161cL,
+    0x8000d5613035603L,0x88d06090064031cL,0x596d70145b6a5f5bL,0xb70035911110903L,
+    0x915c917b6b8c5c0bL,0x7c6b8d118c0f030fL,0xa566a04020b1102L,0x7b91560a58917c04L,
+    0x66b081c5c030b03L,0x11110600030b0606L,0x3191a1303191a02L,0xd03645c56005f09L,
+    0x110b137c5606096bL,0xf007c02001a2056L,0xb021c0b030f0811L,0x20061a5613030316L,
+    0x2030311030b0913L,0x300031100090303L,0xb08110211030800L,0x1109080f03000d03L,
+    0x1103000f03030000L,0xb1109030b0303L,0x1400061f08020211L,0x2202161c03120013L,
+    0x1303560321202120L,0x64031c08000d56L,0x5b6a5f5b088d0609L,0x11110903596d7014L,
+    0x6b8c5c0b0b700359L,0x8c0f030f915c917bL,0x20b11027c6b8d11L,0x58917c040a566a04L,
+    0x5c030b037b91560aL,0x32a0808086b081cL,0x34a2b0911110600L,0x56005f09034a2b2cL,
+    0x5608096b4703645cL,0x2b2056112a137cL,0x34e08114e007c09L,0x130303162a021c2aL,
+    0x512a402c20062b56L,0x34051513f51113dL,0x3d1142031103113dL,0x510347512a423d09L,
+    0x111103033d40424eL,0x512a11513d11034eL,0x42093f3d032a3d40L,0x31200131400061fL,
+    0x212021202202161cL,0x8000d5613035603L,0x88d06090064031cL,0x596d70145b6a5f5bL,
+    0xb70035911110903L,0x915c917b6b8c5c0bL,0x7c6b8d118c0f030fL,0xa566a04020b1102L,
+    0x7b91560a58917c04L,0x2ab139c97170b03L,0x1a1ac003171d0202L,0x171b1820061b1805L,
+    0x12069e97ae03a419L,0x1a1d99b1ae0219abL,0x1503b1050318c4aeL,0x1d1e9c1d1715131aL,
+    0xc4c018ae990606aaL,0x1e170311170b1920L,0x603061a00090303L,0xb081a021a031300L,
+    0x1109130f03030d17L,0x1a03000f06060303L,0xb1119170b0303L,0x1400061f08020211L,
+    0x2202161c03120013L,0x1303560321202120L,0x64031c08000d56L,0x5b6a5f5b088d0609L,
+    0x11110903596d7014L,0x6b8c5c0b0b700359L,0x8c0f030f915c917bL,0x20b11027c6b8d11L,
+    0x58917c040a566a04L,0x97170b037b91560aL,0x171d020202ab139cL,0x61b18051a1ac003L,
+    0xae03a419171b1820L,0xae0219ab12069e97L,0x318c4ae1a1d99b1L,0x1715131a1503b105L,
+    0x990606aa1d1e9c1dL,0x3a2a4a20c4c018aeL,0x3405151343a113dL,0x2b112c030806082bL,
+    0x5106473a2a422b09L,0x80806063d402c4eL,0x3a2a11512b11034eL,0x42093f3d032a3d4aL,
+    0x31200131400061fL,0x212021202202161cL,0x20304312c063103L,0x24b2e0503410629L,
+    0x41504d3245353045L,0x816006406060203L,0x311356302e142c02L,0x1c06120332050309L,
+    0xd20220506020306L,0x5f5620046f312905L,0x62e021c13030800L,0x3062e0306090808L,
+    0x6191a0903141a08L,0x400412c31003002L,0x609131c20060506L,0x1400290803132020L,
+    0x1302291303190203L,0x200613312c030016L,0x206000606080509L,0x30603050306L,
+    0x202030606030203L,0x302020903000403L,0x303000500030303L,0x8060203020006L,
+    0x1400061f02060203L,0x2202161c03120013L,0x2c06310321202120L,0x341062902030431L,
+    0x45353045024b2e05L,0x606020341504d32L,0x2e142c0208160064L,0x3205030931135630L,
+    0x60203061c061203L,0x6f31291447202214L,0x130308005f562025L,0x6191313082e021cL,
+    0x3322b1303062e03L,0x31003002064a2b19L,0x200805062500412cL,0x32c20200619131cL,
+    0x34a020332002913L,0x2c0300162c02292cL,0x2e42371920062c31L,0x1737512e3f2e032eL,
+    0x2e171e170303172eL,0x510325511e1e511cL,0x3171717513f1e40L,0x511e032e51170337L,
+    0x1e1c3f5103422e3fL,0x31200131400061fL,0x212021202202161cL,0x20304312c063103L,
+    0x24b2e0503410629L,0xa5504d3245353045L,0x13aa009e06060203L,0xbb13aebf2e142c09L,
+    0x1c06120332140319L,0x1220220d08090308L,0xa4ae200ca0bb290dL,0x2ba099c99171300L,
+    0x171cba111c0f0b0bL,0x1c1b180f1122180bL,0xc03a5bebb03bf1eL,0x1c0f999cc40214c0L,
+    0x2203b70b1120c4c4L,0x201eb720171b0917L,0xc4c020bbbe1103aaL,0x1e1c00061c13140fL,
+    0x303111c03050306L,0x90217081c030903L,0x302091903030417L,0x1703001403111111L,
+    0x13061e17090006L,0x1400061f02080203L,0x2202161c03120013L,0x2c06310321202120L,
+    0x341062902030431L,0x45353045024b2e05L,0x6060203a5504d32L,0x2e142c0913aa009eL,
+    0x32140319bb13aebfL,0x80903081c061203L,0xa0bb290d1220220dL,0x99171300a4ae200cL,
+    0x1c0f0b0b02ba099cL,0x1122180b171cba11L,0xbb03bf1e1c1b180fL,0xc40214c00c03a5beL,
+    0x1120c4c41c0f999cL,0x171b09172203b70bL,0xbe1103aa201eb720L,0x292c320fc4c020bbL,
+    0x1737512e3429032eL,0x2917191706061a29L,0x5106253a191e3a13L,0x61a1a1a513f194aL,
+    0x3a19032e3a170332L,0x1e133f51032c2e34L,0x31200131400061fL,0x212021202202161cL,
+    0x20304312c063103L,0x24b2e0503410629L,0x61504d3245353045L,0xb70035908080906L,
+    0x5b5c91886f8c5f05L,0x7c6b8d116d0d060fL,0xa566a0402051102L,0x7b915607585b6404L,
+    0x66f021c5c030b03L,0x11082e0306050808L,0x6191a0906141a02L,0x403415f31003009L,
+    0x805137c5606056bL,0xd00640203132056L,0xb02290b030f0211L,0x200613312c060316L,
+    0x2060308060b0509L,0x300060803050306L,0x502110208060203L,0x1109020f03000403L,
+    0x1106000d03060303L,0xb080903050306L,0x1400061f02020211L,0x2202161c03120013L,
+    0x2c06310321202120L,0x341062902030431L,0x45353045024b2e05L,0x808090661504d32L,
+    0x6f8c5f050b700359L,0x6d0d060f5b5c9188L,0x20511027c6b8d11L,0x585b64040a566a04L,
+    0x5c030b037b915607L,0x6141313086f021cL,0x6322b0911082e03L,0x31003009064a2b19L,
+    0x5608056b2503415fL,0x32c20560814137cL,0x34e021147006409L,0x2c0603162a02292aL,
+    0x2e2a371920062c31L,0x1737512e3f2e1142L,0x421c1e1711031c42L,0x51032551141e3d09L,
+    0x111c17173d401e4eL,0x5114112e3d1c0347L,0x1e093f3d032a4240L,0x31200131400061fL,
+    0x212021202202161cL,0x20304312c063103L,0x24b2e0503410629L,0x61504d3245353045L,
+    0xb70035908080906L,0x5b5c91886f8c5f05L,0x7c6b8d116d0d060fL,0xa566a0402051102L,
+    0x7b915607585b6404L,0x2a0099c97170b03L,0x1a13ba111c0d0b0bL,0x1c1b180f08221805L,
+    0xc06a5a4bb03bf19L,0x130d99b1ae0214abL,0x12039e051120c4aeL,0x1d1eb71d1715091aL,
+    0xc4c020bbbe0806aaL,0x1e1c03081c0b140fL,0x603081303050306L,0x5021a0213060903L,
+    0x1109090f03030417L,0x1a06000d06081111L,0xb081917050306L,0x1400061f02020211L,
+    0x2202161c03120013L,0x2c06310321202120L,0x341062902030431L,0x45353045024b2e05L,
+    0x808090661504d32L,0x6f8c5f050b700359L,0x6d0d060f5b5c9188L,0x20511027c6b8d11L,
+    0x585b64040a566a04L,0x97170b037b915607L,0x1c0d0b0b02a0099cL,0x82218051a13ba11L,
+    0xbb03bf191c1b180fL,0xae0214ab0c06a5a4L,0x1120c4ae130d99b1L,0x1715091a12039e05L,
+    0xbe0806aa1d1eb71dL,0x292a320fc4c020bbL,0x1737512e34291142L,0x2c1c19170806132cL,
+    0x5106253a141e2b09L,0x8131a1a3d40194eL,0x3a14112e2b1c0347L,0x1e093f3d032a424aL,
+    0x30a030b0d000810L,0xa13120b0d061d08L,0x600052c0b032a00L,0x80a0808032c0008L,
+    0x5f473b0d31472a3bL,0x1a72036003000603L,0x5f0b5f69080d0b13L,0x8080a000d130013L,
+    0x1d0b0d1d0608031aL,0x6969130d60690805L,0x3a0808080b000600L,0x3030800032c063aL,
+    0x293a13032c062bL,0x14032c0b2c032a06L,0x130b080b060808L,0x2c000808033a1313L,
+    0x2b060808032c0600L,0xb08062a0b00001dL,0x60300000006082cL,0x300030003080003L,
+    0x806031a03000600L,0x306081303030503L,0x3001300000003L,0x31a030600130300L,
+    0xd00081008060600L,0xd061d08030a030bL,0xb032a000a13120bL,0x32c00080600052cL,
+    0x31472a3b080a0808L,0x30006035f473b0dL,0x80d0b131a720360L,0xd1300135f0b5f69L,
+    0x608031a08080a00L,0x60690814720b0d72L,0xb00060069691347L,0x35f088b8b080808L,
+    0x35f087803030800L,0x2c032a0600648b2cL,0xb08080832032c0bL,0x38b1313002c0b08L,
+    0x35f06005f000813L,0xb00001d78060813L,0x31c845f0b08082aL,0x7f84037f6b7f0303L,
+    0x7f032e037f037f03L,0x7f7f377f422e7f68L,0x303037f7f6b845cL,0x35c7f03037f035cL,
+    0x841c6b037f687f6bL,0x30a030b0d000810L,0xa13120b0d061d08L,0x600142c0b032a00L,
+    0x80a0808032c0008L,0xa447b50dbb472ab5L,0x2b9203a603000603L,0xa40ba4bd080d0b2cL,
+    0x8080a000d2c002cL,0x3b0b0d3b0813032bL,0xbdbd1312a6bd080dL,0x44ac42acc2030800L,
+    0x5151ac0351300244L,0x341442051300252L,0x2251bec2be51af2eL,0x320c2acc20242acL,
+    0x3003ac0b51449999L,0x522eac0b51301c03L,0xc2ac02afc203039bL,0x2e51000003084230L,
+    0x5103510303080003L,0x1306512b51001c00L,0x306422c03511451L,0x303002c03030351L,
+    0x32b032e032c0300L,0xd00081008080600L,0xd061d08030a030bL,0xb032a000a13120bL,
+    0x32c00080600142cL,0xbb472ab5080a0808L,0x3000603a447b50dL,0x80d0b2c2b9203a6L,
+    0xd2c002ca40ba4bdL,0x813032b08080a00L,0xa6bd080d3b0b0d3bL,0xc2030800bdbd1312L,
+    0x5130024444ac42acL,0x513002525151ac03L,0xbe51af2e03414420L,0xc20242ac2251bec2L,
+    0x514499990320c2acL,0x51301c033003ac0bL,0xc203039b522eac0bL,0x6136030c2ac02afL,
+    0x7f84037f6f8a0303L,0x8a0329038a068a06L,0x7f8a328a2c2e8a78L,0x606068a7f6b605fL,
+    0x65f7f03067f035fL,0x84136b037f787f6fL,0x30a030b0d000810L,0x89138d0b0d067208L,
+    0x8000d5f0b036900L,0x13890813035f0008L,0x7b74800d5b746980L,0x1863176617031c17L,
+    0x7b877b6784908720L,0x8484890390200320L,0x16879016020b1718L,0x67675c0a66678404L,
+    0x3a84130887000203L,0x171708000320063aL,0x293a13172c0618L,0xd175f875f03691cL,
+    0x30b0b8487061384L,0x20008402033a135cL,0x1806080203200803L,0xb0806690b030372L,
+    0x60303030002132cL,0x1700170303130003L,0xb08171817030800L,0x171c132003030d03L,
+    0x317002003030003L,0x318171c00201700L,0xd00081013020603L,0xd067208030a030bL,
+    0xb03690089138d0bL,0x35f000808000d5fL,0x5b74698013890813L,0x17031c177b74800dL,
+    0x8490872018631766L,0x902003207b877b67L,0x20b171884848903L,0x6667840416879016L,
+    0x8700020367675c0aL,0x356088b8b841308L,0x175f088217170800L,0x5f03691c00648b2cL,
+    0x8708138447175f87L,0x38b135c032a0b84L,0x356080356008409L,0xb03037282060809L,
+    0x3095c5f0b080869L,0x7f5c037f6b7f1111L,0x5d1142035d035d11L,0x7f7f477f2a425d82L,
+    0x1111037f5d7c5c56L,0x3565d03115d0356L,0x5c096b117f825d7cL,0x30a030b0d000810L,
+    0x89138d0b0d067208L,0x8000d5f0b036900L,0x13890813035f0008L,0x7b74800d5b746980L,
+    0x1863176617031c17L,0x7b877b6784908720L,0x8484890390200320L,0x16879016020b1718L,
+    0x67675c0a66678404L,0x44a92cac98030203L,0x3a3aac0351310244L,0x34144203a300243L,
+    0x123aa498a451bd29L,0x61dc2a998022ca9L,0x3103a90551449997L,0x432eac0551311306L,
+    0xc2ac02bdc2060692L,0x2e51030303022c30L,0x3a033a0603130003L,0xb083a183a031300L,
+    0x171c2c2003510d51L,0x617002006060351L,0x318172903201700L,0xd00081013020603L,
+    0xd067208030a030bL,0xb03690089138d0bL,0x35f000808000d5fL,0x5b74698013890813L,
+    0x17031c177b74800dL,0x8490872018631766L,0x902003207b877b67L,0x20b171884848903L,
+    0x6667840416879016L,0x9803020367675c0aL,0x5131024444a92cacL,0x3a3002433a3aac03L,
+    0xa451bd2903414420L,0x98022ca9123aa498L,0x51449997061dc2a9L,0x513113063103a905L,
+    0xc2060692432eac05L,0x6095f30c2ac02bdL,0x7f5c037f6f8a1111L,0x8b112c038b068b08L,
+    0x7f8a478a2a428b82L,0x808068a5d7c5f56L,0x6565d03085d0356L,0x5c096b117f825d64L,
+    0x30a030b0d000810L,0x2f2c4b2a47083b08L,0x20304302a113900L,0xb2f420b11300342L,
+    0x304f4847454f3948L,0x1a3b036011030811L,0x300b5f39420d2a0bL,0x8080a00470b0313L,
+    0x1d2a471d0602031aL,0x69692c0460394205L,0x3a420b080b000600L,0x3114203112a082bL,
+    0x32c3a09112a062bL,0x403302a30033908L,0x3090b082a060b08L,0x2a004208112b2c2cL,
+    0x2b084208032c0200L,0x2a0808392a03003bL,0x811000303060b2aL,0x3001103110b0011L,
+    0x202031a11030203L,0x3080b1303030403L,0x11000b00030311L,0x31a1108000b0303L,
+    0xd0008100b060800L,0x47083b08030a030bL,0x2a1139002f2c4b2aL,0x1130034202030430L,
+    0x454f39480b2f420bL,0x11030811304f4847L,0x420d2a0b1a3b0360L,0x470b0313300b5f39L,
+    0x602031a08080a00L,0x60394214722a4772L,0xb00060069692c25L,0x116913788b420b08L,
+    0x1169087803114203L,0x30033908035f8b19L,0x2a080b082503302aL,0x11782c2c03190b08L,
+    0x35f020069004213L,0x2a03003b78084213L,0x171c87692a081339L,0x5387035384530317L,
+    0x53171e177f035317L,0x7f7f257f1e1e7f68L,0x31717537f84875cL,0x3877f1703530387L,
+    0x871c84037f685384L,0x30a030b0d000810L,0x2f2c4b2a47083b08L,0x20304302a113900L,
+    0xb2f420b11300342L,0xbf4f4847454f3948L,0x2bb503a611030811L,0xbf0ba4ad420d2a2aL,
+    0x8080a00472a032cL,0x3b2a473b0809032bL,0xbdbd2c0ca6ad420dL,0x44b02aacc2030800L,
+    0x513db0113d390b52L,0x1130440f3d390252L,0xc51bfafbf51ad42L,0x110fc2acaf022aacL,
+    0x3903b00b3d52bebeL,0x5242b00b51300903L,0xafac0badaf1103b5L,0x423d000311082a39L,
+    0x51033d11110b0011L,0x902512b3d030903L,0x3082a2c03510451L,0x311002a0311113dL,
+    0x32b1142032a0303L,0xd0008100b080800L,0x47083b08030a030bL,0x2a1139002f2c4b2aL,
+    0x1130034202030430L,0x454f39480b2f420bL,0x11030811bf4f4847L,0x420d2a2a2bb503a6L,
+    0x472a032cbf0ba4adL,0x809032b08080a00L,0xa6ad420d3b2a473bL,0xc2030800bdbd2c0cL,
+    0x3d390b5244b02aacL,0x3d390252513db011L,0xbf51ad421130440fL,0xaf022aac0c51bfafL,
+    0x3d52bebe110fc2acL,0x513009033903b00bL,0xaf1103b55242b00bL,0x1a136939afac0badL,
+    0x5387035360810317L,0x811719178a06811aL,0x7f8a258a191e8a78L,0x61a1a817f84695fL,
+    0x6697f1706530369L,0x871384037f785360L,0x30a030b0d000810L,0x2f2c4b2a47083b08L,
+    0x20304302a113900L,0xb2f420b11300342L,0x884f4847454f3948L,0x188017661a06131aL,
+    0x88877b836090691dL,0x84848903741d0620L,0x1669741602051718L,0x67675f0766836004L,
+    0x3a600b0887000203L,0x171a4203111d082bL,0x32c3a091a2a0618L,0x417306930033913L,
+    0x6050b8469060b84L,0x1d006002112b2c5fL,0x1808420203200203L,0x2a0808392a06033bL,
+    0x811030603020b2aL,0x17001a06110b0011L,0x50217181a060203L,0x17130b2003030403L,
+    0x31a001d03060311L,0x3181a13001d1703L,0xd0008100b020803L,0x47083b08030a030bL,
+    0x2a1139002f2c4b2aL,0x1130034202030430L,0x454f39480b2f420bL,0x1a06131a884f4847L,
+    0x6090691d18801766L,0x741d062088877b83L,0x205171884848903L,0x6683600416697416L,
+    0x8700020367675f07L,0x117213788b600b08L,0x1a690882171a4203L,0x30033913035f8b19L,
+    0x69080b8425173069L,0x11782c5f06140b84L,0x356020372006009L,0x2a06033b82084209L,
+    0x170987692a081339L,0x538703538453111cL,0x681c1e175d03681cL,0x7f7f257f141e5d82L,
+    0x111c17535d5c8756L,0x3725d1711680372L,0x870984117f82685cL,0x30a030b0d000810L,
+    0x2f2c4b2a47083b08L,0x20304302a113900L,0xb2f420b11300342L,0x884f4847454f3948L,
+    0x188017661a06131aL,0x88877b836090691dL,0x84848903741d0620L,0x1669741602051718L,
+    0x67675f0766836004L,0x44a62aac98030203L,0x3a2bb0113d3b0b52L,0x1130440f2b390243L,
+    0xc3abfbdbf51ad2cL,0x80dc2a9bd022aa9L,0x3b03a6053d52bea4L,0x4342b00551310906L,
+    0xafac0badaf0806b5L,0x423d030611022a39L,0x3a032b08110b0011L,0x5023a182b060903L,
+    0x17132a2003510451L,0x61a001d0608113dL,0x3181a2c031d1703L,0xd0008100b020803L,
+    0x47083b08030a030bL,0x2a1139002f2c4b2aL,0x1130034202030430L,0x454f39480b2f420bL,
+    0x1a06131a884f4847L,0x6090691d18801766L,0x741d062088877b83L,0x205171884848903L,
+    0x6683600416697416L,0x9803020367675f07L,0x3d3b0b5244a62aacL,0x2b3902433a2bb011L,
+    0xbf51ad2c1130440fL,0xbd022aa90c3abfbdL,0x3d52bea4080dc2a9L,0x513109063b03a605L,
+    0xaf0806b54342b005L,0x1a096939afac0badL,0x538703536081111cL,0x781c19178b067813L,
+    0x7f8a258a141e8b82L,0x8131a815d5c6956L,0x6725d1708680372L,0x870984117f82685fL,
+    0x60a030b0d000810L,0x2620211d12021613L,0x60005200b061d03L,0x80a0802032c0313L,
+    0x5f47160d31122a3bL,0x1316035f06030203L,0x560b5669080d0b13L,0x13080a030d090009L,
+    0xd1d121d0608061aL,0x6972200d60721305L,0x3a0808130b030800L,0x6060800062c063aL,
+    0x319291303191a2bL,0x14032c0b20032a02L,0x3130b131d060208L,0x1900130803292020L,
+    0x2c02131306190603L,0x1d081a1d0b000016L,0x20600030308022cL,0x300030303020306L,
+    0x806061a06000600L,0x602080906030506L,0x303000900000003L,0x313060203130303L,
+    0xd00081008060203L,0x12021613060a030bL,0xb061d032620211dL,0x32c031306000520L,
+    0x31122a3b080a0802L,0x60302035f47160dL,0x80d0b131316035fL,0xd090009560b5669L,
+    0x608061a13080a03L,0x60721314471d1272L,0xb03080069722047L,0x65f088b8b080813L,
+    0x34a2b7806060800L,0x20032a02034a642cL,0x1d08020832032c0bL,0x3642020032c0b13L,
+    0x64a06034a001313L,0xb0000165f02132cL,0x51423f5f1d082b1dL,0x7f3f516b3f6b0351L,
+    0x6b032e037f037f51L,0x6b7f376b422e6b68L,0x303037f6b3f8440L,0x515c7f51517f0340L,
+    0x841c3f517f5c6b3fL,0x60a030b0d000810L,0x2620211d12021613L,0x60014200b061d03L,
+    0x80a0802032c0313L,0xa447aa0dbb122ab5L,0x2caa03a406030203L,0xae0baebd080d0b2cL,
+    0x13080a030d190019L,0x121d123b0813062bL,0xbd922012a692130dL,0x44ac4299c2171300L,
+    0x2e2eac032e300244L,0x171b4120511b1852L,0x2251bec2c451af1eL,0x1720c2999b021eacL,
+    0x1b03990b5141c4c4L,0x301e99202e1b1c17L,0x9bac189bc20303aaL,0x1e2e000317131e30L,
+    0x5103511703020306L,0x13062e2b2e001c00L,0x60242190651142eL,0x1703001903030351L,
+    0x32c061e172c0303L,0xd00081008080203L,0x12021613060a030bL,0xb061d032620211dL,
+    0x32c031306001420L,0xbb122ab5080a0802L,0x6030203a447aa0dL,0x80d0b2c2caa03a4L,
+    0xd190019ae0baebdL,0x813062b13080a03L,0xa692130d121d123bL,0xc2171300bd922012L,
+    0x2e30024444ac4299L,0x511b18522e2eac03L,0xc451af1e171b4120L,0x9b021eac2251bec2L,
+    0x5141c4c41720c299L,0x2e1b1c171b03990bL,0xc20303aa301e9920L,0x3a2c34309bac189bL,
+    0x7f3f516b346f0351L,0x6f0329038a068a3aL,0x6b8a326f2c2e6f78L,0x606068a6b3f604aL,
+    0x3a5f7f513a7f034aL,0x84133f517f5f6b34L,0x60a030b0d000810L,0x2620211d12021613L,
+    0x8000d560b067203L,0x13890809035f0313L,0x7b74700d5b8d6980L,0x2070177b1c110917L,
+    0x9187916784908720L,0x5c848911900f030fL,0xa728d16020b1c18L,0x6763560a66635c04L,
+    0x3a84131387030b03L,0x1c1c08000620063aL,0x319291317191a18L,0xd175f8756036909L,
+    0x110b0b5c72060984L,0xf005c0203292056L,0x2002130b060f0811L,0x1d081a720b030316L,
+    0x2060311030b092cL,0x1700171103090306L,0xb081c181c030800L,0x1c09130f06030d06L,
+    0x1117000f03030003L,0x3201c0903201703L,0xd00081013020211L,0x12021613060a030bL,
+    0xb0672032620211dL,0x35f031308000d56L,0x5b8d698013890809L,0x1c1109177b74700dL,
+    0x849087202070177bL,0x900f030f91879167L,0x20b1c185c848911L,0x66635c040a728d16L,
+    0x87030b036763560aL,0x656088b8b841313L,0x174a2b821c1c0800L,0x56036909034a642cL,
+    0x7208098447175f87L,0x3642056112a0b5cL,0x64e08114e005c09L,0xb0303165602132aL,
+    0x512a405f1d082b72L,0x7f40516b3f6b113dL,0x7c1142035d035d3dL,0x6b7f476b2a427c82L,
+    0x1111037f7c405c4eL,0x51565d513d5d034eL,0x5c093f3d7f567c40L,0x60a030b0d000810L,
+    0x2620211d12021613L,0x8000d560b067203L,0x13890809035f0313L,0x7b74700d5b8d6980L,
+    0x2070177b1c110917L,0x9187916784908720L,0x5c848911900f030fL,0xa728d16020b1c18L,
+    0x6763560a66635c04L,0x44a92c9998170b03L,0x2929ac032e310244L,0x171b41203a1b1843L,
+    0x123aa498ae51bd19L,0x1a1dc297920219a9L,0x150397055141c4aeL,0x311e991d2e15131aL,
+    0x9bac1892c20606aaL,0x1e2e0311170b1930L,0x3a033a1a03090306L,0xb08291829031300L,
+    0x1c092c0f06510d2eL,0x1a17000f06060351L,0x3201c1917201703L,0xd00081013020211L,
+    0x12021613060a030bL,0xb0672032620211dL,0x35f031308000d56L,0x5b8d698013890809L,
+    0x1c1109177b74700dL,0x849087202070177bL,0x900f030f91879167L,0x20b1c185c848911L,
+    0x66635c040a728d16L,0x98170b036763560aL,0x2e31024444a92c99L,0x3a1b18432929ac03L,
+    0xae51bd19171b4120L,0x920219a9123aa498L,0x5141c4ae1a1dc297L,0x2e15131a15039705L,
+    0xc20606aa311e991dL,0x3a2a4a309bac1892L,0x7f40516b346f113dL,0x64112c038b068b2bL,
+    0x6b8a476f2a426482L,0x808068a7c405f4eL,0x3a565d512b5d034eL,0x5c093f3d7f567c4aL,
+    0x60a030b0d000810L,0x2620211d12021613L,0x20304312a083b03L,0xb2f42051130062cL,
+    0x304f4d47454b3948L,0x1316035f08060211L,0x310b5639420d2a0bL,0x13080a0347050309L,
+    0xd1d121d0602061aL,0x69722004603b2c05L,0x3a420b130b030800L,0x6084203082a082bL,
+    0x619290911141a2bL,0x403302a31033902L,0x6090b131d060508L,0x14002c08112c2020L,
+    0x2c022c1306190203L,0x1d08133b2a030016L,0x20800060608052aL,0x300110611050308L,
+    0x202061a08030203L,0x6020b0906030406L,0x311000500030311L,0x3130802030b0306L,
+    0xd0008100b060203L,0x12021613060a030bL,0x2a083b032620211dL,0x1130062c02030431L,
+    0x454b39480b2f4205L,0x8060211304f4d47L,0x420d2a0b1316035fL,0x47050309310b5639L,
+    0x602061a13080a03L,0x603b2c14471d1272L,0xb03080069722025L,0x86913788b420b13L,
+    0x11322b7806084203L,0x31033902064a6419L,0x1d0805082503302aL,0x115f202006190b13L,
+    0x64a020332002c13L,0x2a0300165f022c2cL,0x2e4237691d082c3bL,0x533751843f84032eL,
+    0x84171e177f03532eL,0x6b7f256b1e1e6b68L,0x31717536b3f8740L,0x51877f2e51530337L,
+    0x871c3f517f5c843fL,0x60a030b0d000810L,0x2620211d12021613L,0x20304312a083b03L,
+    0xb2f42051130062cL,0xbf4f4d47454b3948L,0x2caa03a408060211L,0xbb0baead420d2a2aL,
+    0x13080a0347140319L,0x121d123b0809062bL,0xbd92200ca6b52c0dL,0x44b02a99c2171300L,
+    0x2e42b01142390b52L,0x1c1b410f3d221852L,0xc51bfafbb51ad1eL,0x1c0fc2999b0214acL,
+    0x2203be0b3d30c4c4L,0x301ebe202e1b0917L,0x9bac20b5af1103aaL,0x1e4200061c131439L,
+    0x51033d1c11050308L,0x9022e2b42030903L,0x6022a190651042eL,0x171100140311113dL,
+    0x32c081e172a0306L,0xd0008100b080203L,0x12021613060a030bL,0x2a083b032620211dL,
+    0x1130062c02030431L,0x454b39480b2f4205L,0x8060211bf4f4d47L,0x420d2a2a2caa03a4L,
+    0x47140319bb0baeadL,0x809062b13080a03L,0xa6b52c0d121d123bL,0xc2171300bd92200cL,
+    0x42390b5244b02a99L,0x3d2218522e42b011L,0xbb51ad1e1c1b410fL,0x9b0214ac0c51bfafL,
+    0x3d30c4c41c0fc299L,0x2e1b09172203be0bL,0xaf1103aa301ebe20L,0x292c32399bac20b5L,
+    0x533751843460032eL,0x601719178a068129L,0x6b8a256f191e6f78L,0x61a1a816b3f694aL,
+    0x3a697f2e3a530332L,0x87133f517f5f8434L,0x60a030b0d000810L,0x2620211d12021613L,
+    0x20304312a083b03L,0xb2f42051130062cL,0x884f4d47454b3948L,0x2070177b1308091aL,
+    0x5b8791836090691dL,0x5c848911740d060fL,0xa728d1602051c18L,0x6763560766805f04L,
+    0x3a600b1387030b03L,0x1c134203081d082bL,0x61929091a141a18L,0x417306931033909L,
+    0x8050b5c72060584L,0xd005f02112c2056L,0x20022c0b060f0211L,0x1d08133b2a060316L,
+    0x2080308060b052aL,0x17001a0811050308L,0x5021c1813060203L,0x1c090b0f06030406L,
+    0x111a000d03060311L,0x3201309031d1706L,0xd0008100b020211L,0x12021613060a030bL,
+    0x2a083b032620211dL,0x1130062c02030431L,0x454b39480b2f4205L,0x1308091a884f4d47L,
+    0x6090691d2070177bL,0x740d060f5b879183L,0x2051c185c848911L,0x66805f040a728d16L,
+    0x87030b0367635607L,0x87213788b600b13L,0x1a322b821c134203L,0x31033909064a6419L,
+    0x7208058425173069L,0x115f205608140b5cL,0x64e021147005f09L,0x2a06031656022c2aL,
+    0x2e2a37691d082c3bL,0x533751843f841142L,0x5c1c1e175d036842L,0x6b7f256b141e7c82L,
+    0x111c17537c40874eL,0x51725d2e3d680347L,0x87093f3d7f565c40L,0x60a030b0d000810L,
+    0x2620211d12021613L,0x20304312a083b03L,0xb2f42051130062cL,0x884f4d47454b3948L,
+    0x2070177b1308091aL,0x5b8791836090691dL,0x5c848911740d060fL,0xa728d1602051c18L,
+    0x6763560766805f04L,0x44a62a9998170b03L,0x292cb011423b0b52L,0x1c1b410f2b221843L,
+    0xc3abfbdbb51ad19L,0x130dc297920214a9L,0x1203a4053d30c4aeL,0x311ebe1d2e15091aL,
+    0x9bac20b5af0806aaL,0x1e4203081c0b1439L,0x3a032b1311050308L,0x50229182c060903L,
+    0x1c092a0f0651042eL,0x1a1a000d0608113dL,0x3201319171d1706L,0xd0008100b020211L,
+    0x12021613060a030bL,0x2a083b032620211dL,0x1130062c02030431L,0x454b39480b2f4205L,
+    0x1308091a884f4d47L,0x6090691d2070177bL,0x740d060f5b879183L,0x2051c185c848911L,
+    0x66805f040a728d16L,0x98170b0367635607L,0x423b0b5244a62a99L,0x2b221843292cb011L,
+    0xbb51ad191c1b410fL,0x920214a90c3abfbdL,0x3d30c4ae130dc297L,0x2e15091a1203a405L,
+    0xaf0806aa311ebe1dL,0x292a32399bac20b5L,0x5337518434601142L,0x5f1c19178b06782cL,
+    0x6b8a256f141e6482L,0x8131a817c40694eL,0x3a725d2e2b680347L,0x87093f3d7f565c4aL,
+    0x304030204030201L,0xc090c0904080d02L,0x1a031d1902031903L,0x1a25021303190302L,
+    0x4a25120415251915L,0x3a47033403030803L,0x4a024a4a0204022bL,0x2020403042c032cL,
+    0x310904433a2b033aL,0x344a093b344a0243L,0x8a021a0202033a03L,0x303020303788a8aL,
+    0x3608a78035f8a8bL,0x7203190219031908L,0x3780202098a1302L,0x5f03028b038a0909L,
+    0x8b08028b035f1a03L,0x9028a190203030dL,0x8030303033a1378L,0x303030303130303L,
+    0x2b1a033a03031a03L,0x3081a2c03031d03L,0x303032c03030303L,0x33a0308032b0303L,
+    0x40302011a3a0803L,0x4080d0203040302L,0x20319030c090c09L,0x31903021a031d19L,
+    0x152519151a250213L,0x30308034a251204L,0x204022b3a470334L,0x42c032c4a024a4aL,
+    0x3a2b033a02020403L,0x344a02a8bb0904a8L,0x2033a03344a09b5L,0x39db4b4b4021a02L,
+    0x3a4b4b303030203L,0x1903190803a6b49dL,0x9b4130292031902L,0x3b40909039d0202L,
+    0x3a41a03a40302b3L,0x203030db30802b3L,0xb6a3999d0902b419L,0xb699b6b6acb6b6b6L,
+    0xb6b6b9b6b6b6b6b6L,0xb6b69bb695b9b6a3L,0xb6b6b6b6b6acb9beL,0xb695b6b6b6b6b6beL,
+    0xb9a3acb6b6a3b6acL,0x304030204030201L,0xc090c0904080d02L,0x1a03721902031903L,
+    0x1a25021303190302L,0x7e258d046c25196cL,0x8b74035703030803L,0x7e027e7e02040278L,
+    0x2020403045f035fL,0x5b0904778b78038bL,0x577e0980577e0277L,0x738f688f8f7f8b03L,
+    0x7f7f8f7f7f8e7373L,0x7f66738e7f7b735aL,0x637f868f867f8684L,0x7f8e8f8f55735c8fL,
+    0x7b7f8f5a7f735555L,0x5a848f5a7f7b687fL,0x558f73868f7f7f90L,0x847f03037f8b5c8eL,
+    0x7f7f7f7f03130303L,0x781a7f8b7f036803L,0x308685f037f727fL,0x7f03035f7f7f7f7fL,
+    0x38b03847f780303L,0x40302011a8b0803L,0x4080d0203040302L,0x20319030c090c09L,
+    0x31903021a037219L,0x6c25196c1a250213L,0x30308037e258d04L,0x20402788b740357L,
+    0x45f035f7e027e7eL,0x8b78038b02020403L,0x577e02775b090477L,0x8f7f8b03577e0980L,
+    0x7f8e7373738f688fL,0x7f7b735a7f7f8f7fL,0x867f86847f66738eL,0x55735c8f637f868fL,
+    0x7f7355557f8e8f8fL,0x7f7b687f7b7f8f5aL,0x8f7f7f905a848f5aL,0x9fb3978e558f7386L,
+    0xb699b6b6a99fb6b6L,0x9fb694b69f9f9f9fL,0xb69f929f9db99fb3L,0x9f9f9f9fb6ac94a4L,
+    0x9f9db6b69fb6b6a4L,0xb9b3acb6b6b3b6a9L,0x304030204030201L,0x4609460904084702L,
+    0x2b033b4a02034a03L,0x2b3c022c034a0302L,0x2d3c4b04383c4a38L,0x444f514c51514251L,
+    0x2d3f2d2d3f333f52L,0x3f3f335133305130L,0x4540334944525144L,0x4c2d40484c2d3f49L,
+    0x8a3f2b023f034451L,0x5151020303528a8aL,0x3608a78515f8a44L,0x3b514a3f4a034a42L,
+    0x5152023f408a2c3fL,0x30033f44038a0940L,0x4408024403302b51L,0x9028a4a02515147L,
+    0x803515103442c78L,0x51035151032c0303L,0x522b514451512b03L,0x51422b3003033b03L,
+    0x5151033051510303L,0x344514203525103L,0x40302012b440851L,0x408470203040302L,
+    0x2034a0346094609L,0x34a03022b033b4aL,0x383c4a382b3c022cL,0x515142512d3c4b04L,
+    0x3f333f52444f514cL,0x333051302d3f2d2dL,0x445251443f3f3351L,0x4c2d3f4945403349L,
+    0x3f0344514c2d4048L,0x393b4b4b43f2b02L,0x51a4b4c351510203L,0x4a034a4203a6b49dL,
+    0x40b42c3fb5514a3fL,0x3b409405193023fL,0x3bf2b51bf033fc3L,0x2515147c30802c3L,
+    0xb6c3be9d0902b44aL,0xb6beb6b6acb69696L,0x969695b696b69696L,0xb6b6b5b6939596c3L,
+    0x9696b6b696b095bfL,0xb69396b69696b6bfL,0x95c3ac96b6c396b0L,0x304030204030201L,
+    0x4609460904084702L,0x2b033b4a02034a03L,0x2b3c022c034a0302L,0x2d3c4b04383c4a38L,
+    0x444f514c51514251L,0x2d3f2d2d3f333f52L,0x3f3f335133305130L,0x4540334944525144L,
+    0x4c2d40484c2d3f49L,0x7371788f717f4451L,0x8a8a8f7f7f857373L,0x7f66738e8a7b737dL,
+    0x808a7e717e7f7e60L,0x8a858f7175735f71L,0x887f717d7f735575L,0x7d848f7d7f88788aL,
+    0x558f737e8f8a8a74L,0x847f51517f445f8eL,0x8a7f8a8a032c0303L,0x522b8a448a517803L,
+    0x51427830037f3b7fL,0x8a5103308a8a7f7fL,0x34451607f525103L,0x40302012b440851L,
+    0x408470203040302L,0x2034a0346094609L,0x34a03022b033b4aL,0x383c4a382b3c022cL,
+    0x515142512d3c4b04L,0x3f333f52444f514cL,0x333051302d3f2d2dL,0x445251443f3f3351L,
+    0x4c2d3f4945403349L,0x717f44514c2d4048L,0x7f8573737371788fL,0x8a7b737d8a8a8f7fL,
+    0x7e7f7e607f66738eL,0x75735f71808a7e71L,0x7f7355758a858f71L,0x7f88788a887f717dL,
+    0x8f8a8a747d848f7dL,0x9fc3a48e558f737eL,0xb6beb6b6a99f9696L,0xb4969db6b49fb4b4L,
+    0xb69fb59f9395b4c3L,0xb4b49f9f96b09dbfL,0x9f9396b6b496b6bfL,0x95c3ac96b6c396a6L,
+    0x325030204030201L,0x2319231925131202L,0x1817161b1e171b03L,0x18271e20171b171eL,
+    0x1b27212524271b24L,0x3a12033417171317L,0x1b024a1b1e041e18L,0x20225032520172cL,
+    0x311925433a18033aL,0x344a1916341b1e43L,0x8a1e180202033a03L,0x3171e1717828b8bL,
+    0x175f8a8217568a8bL,0x16031b1e1b031b13L,0x17820202198a2002L,0x56031e8b178b1919L,
+    0x8b131e8b035f1803L,0x19028b1b1e170312L,0x13170317173a2082L,0x303171717200317L,
+    0x1818033a17171817L,0x313182c03031603L,0x317032003171717L,0x33a171303180317L,
+    0x4030201183a1303L,0x2513120203250302L,0x1e171b0323192319L,0x171b171e1817161bL,
+    0x24271b2418271e20L,0x171713171b272125L,0x1e041e183a120334L,0x2520172c1b024a1bL,
+    0x3a18033a02022503L,0x341b1ea8bb1925a8L,0x2033a03344a19aaL,0x17a2b3b3b41e1802L,
+    0x17aeb4b303171e17L,0x1b031b1317a4b4a2L,0x19b42002aa031b1eL,0x17b3191917a20202L,
+    0x3a41803ae031eb3L,0x1e170312b3131eb3L,0xa1a3c4a21902b31bL,0xa1c4b6a199a1b6a1L,
+    0xa1a1a7a1b6b6a1a1L,0xb6b6aab6a7a7b6a3L,0xb6a1a1a1b699a7beL,0xb6a7b6a1b6a1b6c4L,
+    0xa7a399b6b6a3a199L,0x325030204030201L,0x2319231925131202L,0x1817161b1e171b03L,
+    0x18271e20171b171eL,0x6e27212524271b24L,0x8b8d035717171317L,0x6e027e6e1e041e82L,
+    0x20225032556175fL,0x5b1925778b82038bL,0x577e1970576e1e77L,0x735e828f8f7f8b03L,
+    0x7f5d5e5d5d655a5aL,0x5d7b73655d91735aL,0x707f6e5e6e7f6e5cL,0x5d658f8f8673568fL,
+    0x917f5e5a5d5a8686L,0x5a5c5e5a7f7b827fL,0x868f5a6e5e5d7f8dL,0x5c5d03175d8b5665L,
+    0x7f7f5d5d17200317L,0x82187f8b5d178217L,0x313825f037f167fL,0x7f1703567f5d5d5dL,
+    0x38b175c7f820317L,0x4030201188b1303L,0x2513120203250302L,0x1e171b0323192319L,
+    0x171b171e1817161bL,0x24271b2418271e20L,0x171713176e272125L,0x1e041e828b8d0357L,
+    0x2556175f6e027e6eL,0x8b82038b02022503L,0x576e1e775b192577L,0x8f7f8b03577e1970L,
+    0x5d655a5a735e828fL,0x5d91735a7f5d5e5dL,0x6e7f6e5c5d7b7365L,0x8673568f707f6e5eL,
+    0x5d5a86865d658f8fL,0x7f7b827f917f5e5aL,0x5e5d7f8d5a5c5e5aL,0xb2b3ae65868f5a6eL,
+    0xa1c4b6a197b2b6a1L,0xb2a1a2a19f9fb2b2L,0xb69faa9fa2a79fb3L,0x9fb2b2b2b699a2a4L,
+    0x9fa2b6a19fa1b6aeL,0xa7b399b6b6b3a197L,0x325030204030201L,0x2319231925131202L,
+    0x1817161b1e171b03L,0x18271e20171b171eL,0x2827212524271b24L,0x444b514c3a3a2c3aL,
+    0x283f2d2834333443L,0x3f3f3c513c313a30L,0x454a3c4944435144L,0x4c2d4a4d4c283449L,
+    0x8a3418023f034451L,0x513a1e1717438b8bL,0x175f8a823a568a44L,0x16511b341b031b2cL,
+    0x3a43023f4a8a203fL,0x31033444178b194aL,0x44131e4403301851L,0x19028b1b1e3a5112L,
+    0x1317513a17442082L,0x51033a3a17200317L,0x431851443a3a1817L,0x512c183003031603L,
+    0x513a0331513a1717L,0x3443a2c03435117L,0x403020118441351L,0x2513120203250302L,
+    0x1e171b0323192319L,0x171b171e1817161bL,0x24271b2418271e20L,0x3a3a2c3a28272125L,
+    0x34333443444b514cL,0x3c313a30283f2d28L,0x444351443f3f3c51L,0x4c283449454a3c49L,
+    0x3f0344514c2d4a4dL,0x17a8b3b3b4341802L,0x3aaeb4c3513a1e17L,0x1b031b2c17a4b4a2L,
+    0x4ab4203faa511b34L,0x17b3194a3aa8023fL,0x3bf1851bb0334c3L,0x1e3a5112c3131ec3L,
+    0xa1c3c4a21902b31bL,0xa1c4b6a199a196a3L,0xa3a3a7a196b6a3a3L,0xb6b6aab6a8a796c3L,
+    0x96a3a1a196bea7bfL,0xb6a896a196a3b6bbL,0xa7c39996b6c3a3beL,0x325030204030201L,
+    0x2319231925131202L,0x1817161b1e171b03L,0x18271e20171b171eL,0x2827212524271b24L,
+    0x444b514c3a3a2c3aL,0x283f2d2834333443L,0x3f3f3c513c313a30L,0x454a3c4944435144L,
+    0x4c2d4a4d4c283449L,0x7357828f717f4451L,0x8a8b5e5d5d775a5aL,0x5d7b73658b91737dL,
+    0x708a6e576e7f6e5fL,0x8b778f717e735671L,0x5b7f577d5d5a867eL,0x7d5c5e7d7f88828aL,
+    0x868f5a6e5e8b8a8dL,0x5c5d513a5d445665L,0x8a7f8b8b17200317L,0x43188a448b3a8217L,
+    0x512c8230037f167fL,0x8a3a03318a8b5d5dL,0x3443a5f7f435117L,0x403020118441351L,
+    0x2513120203250302L,0x1e171b0323192319L,0x171b171e1817161bL,0x24271b2418271e20L,
+    0x3a3a2c3a28272125L,0x34333443444b514cL,0x3c313a30283f2d28L,0x444351443f3f3c51L,
+    0x4c283449454a3c49L,0x717f44514c2d4a4dL,0x5d775a5a7357828fL,0x8b91737d8a8b5e5dL,
+    0x6e7f6e5f5d7b7365L,0x7e735671708a6e57L,0x5d5a867e8b778f71L,0x7f88828a5b7f577dL,
+    0x5e8b8a8d7d5c5e7dL,0xb2c3ae65868f5a6eL,0xa1c4b6a197b296a3L,0xb3a3a2a1b49fb3b3L,
+    0xb69faa9fa8a7b4c3L,0xb4b3b2b296bea2bfL,0x9fa896a1b4a3b6bbL,0xa7c39996b6c3a3a4L,
+    0x110c030904030201L,0xe0f0e0f0c0b0a09L,0x1a031d0f09110f11L,0x1a0c020b03191109L,
+    0x4a250a04150c1915L,0x2b0a034a11110b03L,0x4e094e4a0204092bL,0x9020c11042a032aL,
+    0x3b0f0c433a2b113aL,0x4a4e0f3b344e0943L,0x8a021a0909112b03L,0x1111020311788a8aL,
+    0x116981780369818bL,0x720319090f03190bL,0x117809090f8a0b02L,0x6903098b03810f0fL,
+    0x780b097811691a11L,0xf02810f0903030aL,0xb110311112b0b78L,0x3030311030b1111L,
+    0x2b1a113a11031a03L,0x110b1a2a11031d11L,0x1103032a03030303L,0x32b110b112b0311L,
+    0x40302011a3a0b11L,0xc0b0a09110c0309L,0x9110f110e0f0e0fL,0x31911091a031d0fL,
+    0x150c19151a0c020bL,0x11110b034a250a04L,0x204092b2b0a034aL,0x42a032a4e094e4aL,
+    0x3a2b113a09020c11L,0x344e09a8b50f0ca8L,0x9112b034a4e0fb5L,0x119db4b4b4021a09L,
+    0x3bdb8b311110203L,0xf03190b11bdb89dL,0xfb40b0292031909L,0x3b80f0f119d0909L,
+    0x11bd1a11bd0309b3L,0x903030a9d0b099dL,0x9a95c29d0f02b80fL,0xb6c29a9ac29ab69aL,
+    0x9ab6b9b6b6b6b69aL,0x9ab69b9a95b99aa3L,0xb6b6b6b69ac2b9afL,0x9a95b69a9ab6b6afL,
+    0xb9a3c29ab6959ac2L,0x110c030904030201L,0xe0f0e0f0c0b0a09L,0x1a03720f09110f11L,
+    0x1a0c020b03191109L,0x7e2589046c0c196cL,0x7889037e11110b03L,0x7909797e02040978L,
+    0x9020c1104690369L,0x800f0c778b78118bL,0x7e790f8057790977L,0x738f685555537803L,
+    0x53538f7f538e7373L,0x5367628e7f67625aL,0x637f86557a7f8687L,0x538e55557a73878fL,
+    0x677f555a7f627a7aL,0x8e87558e53676853L,0x7a8f627a557f7f89L,0x875303115378878eL,
+    0x7f7f7f53030b1111L,0x781a538b53036803L,0x110b6869117f7253L,0x530303697f7f7f7fL,
+    0x378118753780311L,0x40302011a8b0b11L,0xc0b0a09110c0309L,0x9110f110e0f0e0fL,
+    0x31911091a03720fL,0x6c0c196c1a0c020bL,0x11110b037e258904L,0x20409787889037eL,
+    0x46903697909797eL,0x8b78118b09020c11L,0x57790977800f0c77L,0x555378037e790f80L,
+    0x538e7373738f6855L,0x7f67625a53538f7fL,0x7a7f86875367628eL,0x7a73878f637f8655L,
+    0x7f627a7a538e5555L,0x53676853677f555aL,0x557f7f898e87558eL,0xbc9d988e7a8f627aL,
+    0xb6c29a9a98bcb69aL,0xbcb694b69f9f9fbcL,0x9a9f92bc9db9bcb3L,0x9f9f9f9f9ac294bdL,
+    0xbc9db69abcb6b6bdL,0xb9b3c29ab69d9a98L,0x110c030904030201L,0xe0f0e0f0c0b0a09L,
+    0x2b033b4e09114e11L,0x2b46022a034a1109L,0x2d3c2f0438464a38L,0x522f512d3d3d2a51L,
+    0x3640362d3f334052L,0x403f463d33395139L,0x484e464944523d44L,0x2d364e484c364049L,
+    0x8a3f2b0940115251L,0x3d3d020311528a8aL,0x1169817851698144L,0x3b514a404e034a2aL,
+    0x3d5209404e8a2a3fL,0x3903404403810f4eL,0x520b095211392b3dL,0xf02814e0951510aL,
+    0xb11513d11522a78L,0x5103513d032a1111L,0x522b3d443d512b03L,0x3d2a2b3911033b11L,
+    0x3d51033951510303L,0x3523d2a11525111L,0x40302012b440b3dL,0xc0b0a09110c0309L,
+    0x9114e110e0f0e0fL,0x34a11092b033b4eL,0x38464a382b46022aL,0x3d3d2a512d3c2f04L,
+    0x3f334052522f512dL,0x333951393640362dL,0x44523d44403f463dL,0x4c364049484e4649L,
+    0x401152512d364e48L,0x1193b4b4b43f2b09L,0x51bdb8c33d3d0203L,0x4e034a2a11bdb89dL,
+    0x4eb42a3fb5514a40L,0x3b80f4e3d930940L,0x11ad2b3dad0340c3L,0x951510a930b0993L,
+    0x9a93af9d0f02b84eL,0xb6af9a9ac29a96c1L,0xc19695b696b696c1L,0x9ab6b59a9395c1c3L,
+    0x9696b6b6c1af95adL,0x9a93969ac196b6adL,0x95c3c2c1b693c1afL,0x110c030904030201L,
+    0xe0f0e0f0c0b0a09L,0x2b033b4e09114e11L,0x2b46022a034a1109L,0x2d3c2f0438464a38L,
+    0x522f512d3d3d2a51L,0x3640362d3f334052L,0x403f463d33395139L,0x484e464944523d44L,
+    0x2d364e484c364049L,0x7371785575535251L,0x81818f7f53857373L,0x5367628e8a67627dL,
+    0x808a7e75797f7e69L,0x8185557579736971L,0x837f757d7f627a79L,0x8587558553837881L,
+    0x7a8f6279558a8a89L,0x8753513d5352698eL,0x8a7f8a81032a1111L,0x522b814481517803L,
+    0x3d2a7839117f3b53L,0x815103398a8a7f7fL,0x3523d6953525111L,0x40302012b440b3dL,
+    0xc0b0a09110c0309L,0x9114e110e0f0e0fL,0x34a11092b033b4eL,0x38464a382b46022aL,
+    0x3d3d2a512d3c2f04L,0x3f334052522f512dL,0x333951393640362dL,0x44523d44403f463dL,
+    0x4c364049484e4649L,0x755352512d364e48L,0x5385737373717855L,0x8a67627d81818f7fL,
+    0x797f7e695367628eL,0x79736971808a7e75L,0x7f627a7981855575L,0x53837881837f757dL,
+    0x558a8a8985875585L,0xbc93bd8e7a8f6279L,0xb6af9a9a98bc96c1L,0xb8969db6b49fb4b8L,
+    0x9a9fb5bc9395b8c3L,0xb4b49f9fc1af9dadL,0xbc93969ab896b6adL,0x95c3c2c1b693c1bdL,
+    0x110c030904030201L,0xe0f0e0f0c0b0a09L,0x18171615191a1511L,0x18231e1d171b1a19L,
+    0x1b27262524231b24L,0x2b0a034a1a1a0b17L,0x15094e1b1e041918L,0x9020c11251d172aL,
+    0x3b0f0c433a18113aL,0x4a4e0f1634151943L,0x8a1e180909112b03L,0x111a1e171a828b8bL,
+    0x1a6981821772818bL,0x16031b1915031b0bL,0x1a8209090f8a1d02L,0x7203198b17780f0fL,
+    0x780b197811691811L,0xf0278151917030aL,0xb1a031a1a2b1d82L,0x303171a171d111aL,
+    0x1818113a1a171817L,0x110b182a11031611L,0x1117031d03171717L,0x32b1a0b1118031aL,
+    0x4030201183a0b11L,0xc0b0a09110c0309L,0x191a15110e0f0e0fL,0x171b1a1918171615L,
+    0x24231b2418231e1dL,0x1a1a0b171b272625L,0x1e0419182b0a034aL,0x251d172a15094e1bL,
+    0x3a18113a09020c11L,0x341519a8b50f0ca8L,0x9112b034a4e0faaL,0x1aa2b3b3b41e1809L,
+    0x1792b8b3111a1e17L,0x15031b0b1abdb8a2L,0xfb41d02aa031b19L,0x179d0f0f1aa20909L,
+    0x11bd1811920319b3L,0x1917030a9d0b199dL,0xb9959ba20f029d15L,0xa19b9ab9c2b9b6b9L,
+    0xb9a1a7a1b6b6a1b9L,0x9ab6aa9aa7a79aa3L,0xb6a1a1a19ac2a7afL,0x9aa7b6b99aa1b69bL,
+    0xa7a3c29ab695b9c2L,0x110c030904030201L,0xe0f0e0f0c0b0a09L,0x18171615191a1511L,
+    0x18231e1d171b1a19L,0x6e27262524231b24L,0x7889037e1a1a0b17L,0x6c09796e1e041982L,
+    0x9020c1125721769L,0x800f0c778b82118bL,0x7e790f70576c1977L,0x735e825555537803L,
+    0x53685e5d68655a5aL,0x686762655d63625aL,0x707f6e866c7f6e87L,0x686555557a73728fL,
+    0x637f865a5d8e7a7aL,0x8e87868e53678253L,0x7a8f8e6c865d7f89L,0x8768031a68787265L,
+    0x7f7f5d68171d111aL,0x8218538b68178217L,0x110b8269117f1653L,0x531703727f5d5d5dL,
+    0x3781a875382031aL,0x4030201188b0b11L,0xc0b0a09110c0309L,0x191a15110e0f0e0fL,
+    0x171b1a1918171615L,0x24231b2418231e1dL,0x1a1a0b176e272625L,0x1e0419827889037eL,
+    0x257217696c09796eL,0x8b82118b09020c11L,0x576c1977800f0c77L,0x555378037e790f70L,
+    0x68655a5a735e8255L,0x5d63625a53685e5dL,0x6c7f6e8768676265L,0x7a73728f707f6e86L,
+    0x5d8e7a7a68655555L,0x53678253637f865aL,0x865d7f898e87868eL,0x949d92657a8f8e6cL,
+    0xa19b9ab99894b6b9L,0x94a1a2a19f9fb294L,0x9a9faabca2a7bcb3L,0x9fb2b2b29ac2a2bdL,
+    0xbca2b6b9bca1b692L,0xa7b3c29ab69db998L,0x110c030904030201L,0xe0f0e0f0c0b0a09L,
+    0x18171615191a1511L,0x18231e1d171b1a19L,0x2827262524231b24L,0x522f512d2b2b2a3aL,
+    0x3840362834334a43L,0x403f463d3c3b3a39L,0x484e464944433d44L,0x2d364e4d4c384a49L,
+    0x8a34180940115251L,0x3d2b1e171a438b8bL,0x1a6981823a728144L,0x16511b4a15031b2aL,
+    0x2b4309404e8a1d3fL,0x3b034a4417780f4eL,0x520b19521139183dL,0xf027815193a510aL,
+    0xb1a512b1a521d82L,0x51033a2b171d111aL,0x43183d442b3a1817L,0x3d2a183911031611L,
+    0x3d3a033b513a1717L,0x3522b2a1143511aL,0x403020118440b3dL,0xc0b0a09110c0309L,
+    0x191a15110e0f0e0fL,0x171b1a1918171615L,0x24231b2418231e1dL,0x2b2b2a3a28272625L,
+    0x34334a43522f512dL,0x3c3b3a3938403628L,0x44433d44403f463dL,0x4c384a49484e4649L,
+    0x401152512d364e4dL,0x1aa8b3b3b4341809L,0x3a92b8c33d2b1e17L,0x15031b2a1abdb8a2L,
+    0x4eb41d3faa511b4aL,0x179d0f4e2ba80940L,0x11ad183db5034ac3L,0x193a510a930b1993L,
+    0xb9939ba20f029d15L,0xa19b9ab9c2b99695L,0x95a3a7a196b6a395L,0x9ab6aa9aa8a7c1c3L,
+    0x96a3a1a1c1afa7adL,0x9aa896b9c1a3b6b5L,0xa7c3c2c1b69395afL,0x110c030904030201L,
+    0xe0f0e0f0c0b0a09L,0x18171615191a1511L,0x18231e1d171b1a19L,0x2827262524231b24L,
+    0x522f512d2b2b2a3aL,0x3840362834334a43L,0x403f463d3c3b3a39L,0x484e464944433d44L,
+    0x2d364e4d4c384a49L,0x7357825575535251L,0x81785e5d68775a5aL,0x686762658b63627dL,
+    0x708a6e7e6c7f6e69L,0x7877557579737271L,0x807f7e7d5d8e7a79L,0x8587868553838281L,
+    0x7a8f8e6c868b8a89L,0x8768512b68527265L,0x8a7f8b78171d111aL,0x43188144783a8217L,
+    0x3d2a8239117f1653L,0x813a033b8a8b5d5dL,0x3522b695343511aL,0x403020118440b3dL,
+    0xc0b0a09110c0309L,0x191a15110e0f0e0fL,0x171b1a1918171615L,0x24231b2418231e1dL,
+    0x2b2b2a3a28272625L,0x34334a43522f512dL,0x3c3b3a3938403628L,0x44433d44403f463dL,
+    0x4c384a49484e4649L,0x755352512d364e4dL,0x68775a5a73578255L,0x8b63627d81785e5dL,
+    0x6c7f6e6968676265L,0x79737271708a6e7eL,0x5d8e7a7978775575L,0x53838281807f7e7dL,
+    0x868b8a8985878685L,0x949392657a8f8e6cL,0xa19b9ab998949695L,0x9da3a2a1b49fb39dL,
+    0x9a9faabca8a7b8c3L,0xb4b3b2b2c1afa2adL,0xbca896b9b8a3b6b5L,0xa7c3c2c1b69395bdL,
+    0x607060504030201L,0x7090c0504080d02L,0x1a031d1905061403L,0x1307021306190302L,
+    0x4a25120415251412L,0x2947063406030806L,0x4a054a320204052cL,0x2020703042c032cL,
+    0x310504313a2b0629L,0x3232093b34320243L,0x6f02130205033a03L,0x6060203065f8a6fL,
+    0x3606f78065f8a64L,0x7206190519061408L,0x3780502058a1302L,0x5f03028b066f0909L,
+    0x6408028b065f1a03L,0x5028a140503030dL,0x8060303033a135fL,0x603060306130306L,
+    0x2b1a062906031a03L,0x608132c06061d06L,0x306032c03030306L,0x6290608032c0603L,
+    0x4030201133a0803L,0x4080d0206070605L,0x506140307090c05L,0x61903021a031d19L,
+    0x1525141213070213L,0x60308064a251204L,0x204052c29470634L,0x42c032c4a054a32L,
+    0x3a2b062902020703L,0x343202a8bb0504bbL,0x5033a03323209b5L,0x6a4b4a0a0021302L,
+    0x6a4b49e06060203L,0x1906140803a6a09dL,0x5b4130292061905L,0x6a00909039d0502L,
+    0x6a41a03a40302b3L,0x503030d9e0802b3L,0xb6a399a40502b414L,0xc099b6c0acc0b6b6L,
+    0xc0b6b9b6c0b6c0b6L,0xc0c09bc095b9c0b7L,0xb6b6b6c0c0ac99beL,0xb6bec0b6b6c0b6beL,
+    0x99a3acb6c0b7c0acL,0x607060504030201L,0x7090c0504080d02L,0x1a03721905061403L,
+    0x1307021306190302L,0x7e258d046c25148dL,0x6474065706030806L,0x7e057e6d0204055fL,
+    0x2020703045f035fL,0x5b05045b8b780664L,0x6d6d0980576d0277L,0x588f5c8f767f8b03L,
+    0x6b6b8f7f6b7b7358L,0x7f66588e6b7b7359L,0x636b8676866b8c84L,0x7f8e768f76735c8fL,
+    0x7b7f8f5a6b585555L,0x59848f5a6b7b687fL,0x768f738c767f7f90L,0x846b03037f8b5c7bL,
+    0x6b7f6b7f06130306L,0x781a6b646b036803L,0x6085c5f066b726bL,0x7f06035f7f7f7f6bL,
+    0x66406847f5f0603L,0x4030201138b0803L,0x4080d0206070605L,0x506140307090c05L,
+    0x61903021a037219L,0x6c25148d13070213L,0x60308067e258d04L,0x204055f64740657L,
+    0x45f035f7e057e6dL,0x8b78066402020703L,0x576d02775b05045bL,0x767f8b036d6d0980L,
+    0x6b7b7358588f5c8fL,0x6b7b73596b6b8f7fL,0x866b8c847f66588eL,0x76735c8f636b8676L,
+    0x6b5855557f8e768fL,0x6b7b687f7b7f8f5aL,0x767f7f9059848f5aL,0x9fb3977b768f738cL,
+    0xc099b6c0a9abb6b6L,0xabb694b6ab9fab9fL,0xc0ab92ab9db9ab9eL,0x9f9f9fabc0ac97a4L,
+    0x9fa4c0b69fc0b6a4L,0x99b3acb6c09ec0a9L,0x607060504030201L,0x3e09460504084702L,
+    0x2b033b4a05063203L,0x2c3e022c064a0302L,0x2d3c4b04383c324bL,0x414f2e4c2e51422eL,
+    0x2d372d503f333730L,0x3f3f3e5133305130L,0x4537334544522e41L,0x505040484c503f49L,
+    0x6f3f2c0237034451L,0x2e2e020306308a6fL,0x3606f782e5f8a41L,0x3b2e4a374a063242L,
+    0x5152053f378a2c3fL,0x30033f44066f0940L,0x4108024406302b51L,0x5028a3205515147L,
+    0x806515103442c5fL,0x2e032e51062c0306L,0x522b2e412e512b03L,0x2e422c3006063b06L,
+    0x512e033051510306L,0x6412e4203302e03L,0x40302012c440851L,0x408470206070605L,
+    0x50632033e094605L,0x64a03022b033b4aL,0x383c324b2c3e022cL,0x2e51422e2d3c4b04L,
+    0x3f333730414f2e4cL,0x333051302d372d50L,0x44522e413f3f3e51L,0x4c503f4945373345L,
+    0x3703445150504048L,0x6bfb4a0a03f2c02L,0x2ea4b4a52e2e0203L,0x4a06324203a6a09dL,
+    0x37b42c3fb52e4a37L,0x6a009405193053fL,0x6bf2b51bf033fc3L,0x5515147a50802c3L,
+    0xb6c3bea40502b432L,0xc0beb6c0acc09696L,0xba9695b6bab6ba96L,0xc0c0b5c09395baa5L,
+    0x9696b6c0bab0bebfL,0xb6bfbab696bab6bfL,0xbec3ac96c0a5bab0L,0x607060504030201L,
+    0x3e09460504084702L,0x2b033b4a05063203L,0x2c3e022c064a0302L,0x2d3c4b04383c324bL,
+    0x414f2e4c2e51422eL,0x2d372d503f333730L,0x3f3f3e5133305130L,0x4537334544522e41L,
+    0x505040484c503f49L,0x58715f8f547f4451L,0x6f6f8f7f6b887358L,0x7f66588e6f7b7361L,
+    0x806f7e547e6b6d60L,0x8a85767154735f71L,0x887f717d6b585575L,0x61848f7d6b88788aL,
+    0x768f736d768a8a74L,0x846b51517f445f7bL,0x6f7f6f8a062c0306L,0x522b6f416f517803L,
+    0x2e425f30066b3b6bL,0x8a2e03308a8a7f6bL,0x6412e607f302e03L,0x40302012c440851L,
+    0x408470206070605L,0x50632033e094605L,0x64a03022b033b4aL,0x383c324b2c3e022cL,
+    0x2e51422e2d3c4b04L,0x3f333730414f2e4cL,0x333051302d372d50L,0x44522e413f3f3e51L,
+    0x4c503f4945373345L,0x547f445150504048L,0x6b88735858715f8fL,0x6f7b73616f6f8f7fL,
+    0x7e6b6d607f66588eL,0x54735f71806f7e54L,0x6b5855758a857671L,0x6b88788a887f717dL,
+    0x768a8a7461848f7dL,0x9fc3a47b768f736dL,0xc0beb6c0a9ab9696L,0xa0969db6a09fa0b4L,
+    0xc0abb5ab9395a0a5L,0xb4b49fabbab0a4bfL,0x9fbfbab6b4bab6bfL,0xbec3ac96c0a5baa6L,
+    0x607060504030201L,0x1f19231425131202L,0x1817161b141c2203L,0x201f1e201c1b171eL,
+    0x1b27212524272221L,0x291206341c17131cL,0x1b054a221e041420L,0x20207032520172cL,
+    0x311425313a180629L,0x3232191634221e43L,0x6f1e200205033a03L,0x61c1e171c568b64L,
+    0x175f6f821c568a64L,0x16061b141b062213L,0x17820502148a2002L,0x56031e8b1c641919L,
+    0x64131e8b065f1803L,0x14028b2214170312L,0x131c0317173a2056L,0x6031c171c20031cL,
+    0x181806291c171817L,0x613202c06061606L,0x31c03200317171cL,0x6291c1303200617L,
+    0x4030201203a1303L,0x2513120206070605L,0x141c22031f192314L,0x1c1b171e1817161bL,
+    0x24272221201f1e20L,0x1c17131c1b272125L,0x1e04142029120634L,0x2520172c1b054a22L,
+    0x3a18062902020703L,0x34221ea8bb1425bbL,0x5033a03323219aaL,0x1caeb39ea01e2002L,
+    0x1caeb49e061c1e17L,0x1b06221317a4a0a2L,0x14b42002aa061b14L,0x1c9e191917a20502L,
+    0x6a41803ae031eb3L,0x141703129e131eb3L,0xa1a3c4ae1402b322L,0x9cc4b69c999cb6a1L,
+    0x9ca1a7a1c0b69ca1L,0xc0c0aac0a7a7c0b7L,0xb6a1a19cc099c4beL,0xb6c4c0a1b69cb6c4L,
+    0xc4a399b6c0b79c99L,0x607060504030201L,0x1f19231425131202L,0x1817161b141c2203L,
+    0x201f1e201c1b171eL,0x6e27212524272221L,0x648d06571c17131cL,0x6e057e6a1e041456L,
+    0x20207032556175fL,0x5b14255b8b820664L,0x6d6d1970576a1e77L,0x585e568f767f8b03L,
+    0x6b7c5e5d7c915a59L,0x5d7b58657c917359L,0x706b6e8c6e6b6a5cL,0x5d65768f8c73568fL,
+    0x917f5e5a7c598686L,0x595c5e5a6b7b827fL,0x8c8f5a6a8c5d7f8dL,0x5c7c03175d8b5691L,
+    0x6b7f7c5d1c20031cL,0x82186b647c178217L,0x613565f066b166bL,0x7f1c03567f5d5d7cL,
+    0x6641c5c7f560617L,0x4030201208b1303L,0x2513120206070605L,0x141c22031f192314L,
+    0x1c1b171e1817161bL,0x24272221201f1e20L,0x1c17131c6e272125L,0x1e041456648d0657L,
+    0x2556175f6e057e6aL,0x8b82066402020703L,0x576a1e775b14255bL,0x767f8b036d6d1970L,
+    0x7c915a59585e568fL,0x7c9173596b7c5e5dL,0x6e6b6a5c5d7b5865L,0x8c73568f706b6e8cL,
+    0x7c5986865d65768fL,0x6b7b827f917f5e5aL,0x8c5d7f8d595c5e5aL,0xb2b3ae918c8f5a6aL,
+    0x9cc4b69c97b1b6a1L,0xb1a1a2a1ab9fb1b2L,0xc0abaaaba2a7ab9eL,0x9fb2b2b1c099aea4L,
+    0x9faec0a19f9cb6aeL,0xc4b399b6c09e9c97L,0x607060504030201L,0x1f19231425131202L,
+    0x1817161b141c2203L,0x201f1e201c1b171eL,0x2827212524272221L,0x414b2e4c293a2c29L,
+    0x28372d3534333231L,0x3f3f3e513c313a30L,0x45323c4544432e41L,0x50504a4d4c353449L,
+    0x6f34200237034451L,0x2e291e171c318b64L,0x175f6f8229568a41L,0x162e1b321b06222cL,
+    0x3a43053f328a203fL,0x310334441c64194aL,0x41131e4406301851L,0x14028b22143a5112L,
+    0x131c513a17442056L,0x2e03293a1c20031cL,0x43182e41293a1817L,0x2e2c203006061606L,
+    0x51290331513a171cL,0x641292c03312e17L,0x403020120441351L,0x2513120206070605L,
+    0x141c22031f192314L,0x1c1b171e1817161bL,0x24272221201f1e20L,0x293a2c2928272125L,
+    0x34333231414b2e4cL,0x3c313a3028372d35L,0x44432e413f3f3e51L,0x4c35344945323c45L,
+    0x3703445150504a4dL,0x1cbbb39ea0342002L,0x29aeb4a52e291e17L,0x1b06222c17a4a0a2L,
+    0x32b4203faa2e1b32L,0x1c9e194a3aa8053fL,0x6bf1851bb0334c3L,0x143a5112a5131ec3L,
+    0xa1c3c4ae1402b322L,0x9cc4b69c999c96a3L,0xb7a3a7a1bab6b7a3L,0xc0c0aac0a8a7baa5L,
+    0x96a3a19cbabec4bfL,0xb6bbbaa196b7b6bbL,0xc4c39996c0a5b7beL,0x607060504030201L,
+    0x1f19231425131202L,0x1817161b141c2203L,0x201f1e201c1b171eL,0x2827212524272221L,
+    0x414b2e4c293a2c29L,0x28372d3534333231L,0x3f3f3e513c313a30L,0x45323c4544432e41L,
+    0x50504a4d4c353449L,0x5857568f547f4451L,0x6f645e5d7c5b5a59L,0x5d7b586564917361L,
+    0x706f6e6d6e6b6a5fL,0x8b7776716d735671L,0x5b7f577d7c59867eL,0x615c5e7d6b88828aL,
+    0x8c8f5a6a8c8b8a8dL,0x5c7c513a5d445691L,0x6f7f648b1c20031cL,0x43186f41643a8217L,
+    0x2e2c5630066b166bL,0x8a2903318a8b5d7cL,0x641295f7f312e17L,0x403020120441351L,
+    0x2513120206070605L,0x141c22031f192314L,0x1c1b171e1817161bL,0x24272221201f1e20L,
+    0x293a2c2928272125L,0x34333231414b2e4cL,0x3c313a3028372d35L,0x44432e413f3f3e51L,
+    0x4c35344945323c45L,0x547f445150504a4dL,0x7c5b5a595857568fL,0x649173616f645e5dL,
+    0x6e6b6a5f5d7b5865L,0x6d735671706f6e6dL,0x7c59867e8b777671L,0x6b88828a5b7f577dL,
+    0x8c8b8a8d615c5e7dL,0xb2c3ae918c8f5a6aL,0x9cc4b69c97b196a3L,0x9ea3a2a1a09f9eb3L,
+    0xc0abaaaba8a7a0a5L,0xb4b3b2b1babeaebfL,0x9fbbbaa1b4b7b6bbL,0xc4c39996c0a5b7a4L,
+    0x807060504030201L,0x100f0e0d0c0b0a09L,0x1a031d0f05080d11L,0x1307020b06191109L,
+    0x4a250a04150c1412L,0x2c0a064a08110b06L,0x4e054e320204052cL,0x9020711042a032aL,
+    0x3b0d0c313a2b0829L,0x32470f3b34470943L,0x6f02130905112b03L,0x8080203085f8a6fL,
+    0x1169607806698164L,0x720619050f06140bL,0x117805090d8a0b02L,0x6903098b06600f0fL,
+    0x5f0b097808691a11L,0xd02810d0503030aL,0xb080311112b0b5fL,0x6030611060b1108L,
+    0x2b1a082908031a03L,0x80b132a08061d08L,0x1106032a03030306L,0x62c080b112c0611L,
+    0x4030201133a0b11L,0xc0b0a0908070605L,0x5080d11100f0e0dL,0x61911091a031d0fL,
+    0x150c14121307020bL,0x8110b064a250a04L,0x204052c2c0a064aL,0x42a032a4e054e32L,
+    0x3a2b082909020711L,0x344709a8b50d0cbbL,0x5112b0332470fb5L,0x8a4b4a0a0021309L,
+    0x6bdb89e08080203L,0xf06140b11bda69dL,0xdb40b0292061905L,0x6a60f0f119d0509L,
+    0x8bd1a11bd0309b3L,0x503030aa40b099dL,0x9a95c2a40d02b80dL,0xc0c29aacc2acb69aL,
+    0xacb6b9b6c0b6c09aL,0xacc09bac95b9acb7L,0xb6b6b6c0acc299afL,0x9abec09a9ac0b6afL,
+    0x99a3c29ac0beacc2L,0x807060504030201L,0x100f0e0d0c0b0a09L,0x1a03720f05080d11L,
+    0x1307020b06191109L,0x7e2589046c0c148dL,0x5f89067e08110b06L,0x7905796d0204055fL,
+    0x902071104690369L,0x800d0c5b8b780864L,0x6d740f8057740977L,0x588f5c5576537803L,
+    0x84848f7f847b7358L,0x5367668e6b676259L,0x636b86767a6b8c87L,0x538e76559073878fL,
+    0x677f555a6b667a7aL,0x7b87558e84676853L,0x908f6290767f7f89L,0x878403115378877bL,
+    0x6b7f6b53060b1108L,0x781a846484036803L,0x80b5c69086b7284L,0x530603697f7f7f6bL,
+    0x65f0887535f0611L,0x4030201138b0b11L,0xc0b0a0908070605L,0x5080d11100f0e0dL,
+    0x61911091a03720fL,0x6c0c148d1307020bL,0x8110b067e258904L,0x204055f5f89067eL,
+    0x46903697905796dL,0x8b78086409020711L,0x57740977800d0c5bL,0x765378036d740f80L,
+    0x847b7358588f5c55L,0x6b67625984848f7fL,0x7a6b8c875367668eL,0x9073878f636b8676L,
+    0x6b667a7a538e7655L,0x84676853677f555aL,0x767f7f897b87558eL,0xbc9d987b908f6290L,
+    0xc0c29aac98a9b69aL,0xa9b694b6ab9fabbcL,0xacab92a99db9a99eL,0x9f9f9fabacc297bdL,
+    0xbca4c09abcc0b6bdL,0x99b3c29ac0a4ac98L,0x807060504030201L,0x100f0e0d0c0b0a09L,
+    0x2b033b4e05084711L,0x2c3e022a064a1109L,0x2d3c2f043846324bL,0x302f2e2d423d2a2eL,
+    0x363736503f333730L,0x403f3e3d33395139L,0x4847464544524241L,0x504f4e484c4f4049L,
+    0x6f3f2c0937115251L,0x4242020308308a6fL,0x116960782e698141L,0x3b2e4a374e06322aL,
+    0x3d520540478a2a3fL,0x3903404406600f4eL,0x300b095208392b3dL,0xd0281470551510aL,
+    0xb08513d11522a5fL,0x2e032e3d062a1108L,0x522b424142512b03L,0x422a2c3908063b08L,
+    0x3d2e033951510306L,0x630422a11302e11L,0x40302012c440b3dL,0xc0b0a0908070605L,
+    0x5084711100f0e0dL,0x64a11092b033b4eL,0x3846324b2c3e022aL,0x423d2a2e2d3c2f04L,
+    0x3f333730302f2e2dL,0x3339513936373650L,0x44524241403f3e3dL,0x4c4f404948474645L,
+    0x37115251504f4e48L,0x8bfb4a0a03f2c09L,0x2ebdb8a542420203L,0x4e06322a11bda69dL,
+    0x47b42a3fb52e4a37L,0x6a60f4e3d930540L,0x8ad2b3dad0340c3L,0x551510abf0b0993L,
+    0x9a93afa40d02b847L,0xc0af9aacc2ac96c1L,0xb09695b6bab6bac1L,0xacc0b5ac9395b0a5L,
+    0x9696b6c0b0afbeadL,0x9abfba9ac1bab6adL,0xbec3c2c1c0bfb0afL,0x807060504030201L,
+    0x100f0e0d0c0b0a09L,0x2b033b4e05084711L,0x2c3e022a064a1109L,0x2d3c2f043846324bL,
+    0x302f2e2d423d2a2eL,0x363736503f333730L,0x403f3e3d33395139L,0x4847464544524241L,
+    0x504f4e484c4f4049L,0x58715f5554535251L,0x60608f7f84887358L,0x5367668e6f676261L,
+    0x806f7e54796b6d69L,0x8185767574736971L,0x837f757d6b667a79L,0x8887558584837881L,
+    0x908f6274768a8a89L,0x8784513d5352697bL,0x6f7f6f81062a1108L,0x522b604160517803L,
+    0x422a5f39086b3b84L,0x812e03398a8a7f6bL,0x630426953302e11L,0x40302012c440b3dL,
+    0xc0b0a0908070605L,0x5084711100f0e0dL,0x64a11092b033b4eL,0x3846324b2c3e022aL,
+    0x423d2a2e2d3c2f04L,0x3f333730302f2e2dL,0x3339513936373650L,0x44524241403f3e3dL,
+    0x4c4f404948474645L,0x54535251504f4e48L,0x8488735858715f55L,0x6f67626160608f7fL,
+    0x796b6d695367668eL,0x74736971806f7e54L,0x6b667a7981857675L,0x84837881837f757dL,
+    0x768a8a8988875585L,0xbc93bd7b908f6274L,0xc0af9aac98a996c1L,0xa6969db6a09fa0b8L,
+    0xacabb5a99395a6a5L,0xb4b49fabb0afa4adL,0xbcbfba9ab8bab6adL,0xbec3c2c1c0bfb0bdL,
+    0x807060504030201L,0x100f0e0d0c0b0a09L,0x1817161514131211L,0x201f1e1d1c1b1a19L,
+    0x1b27262524232221L,0x2c0a064a131a0b1cL,0x15054e221e041420L,0x9020711251d172aL,
+    0x3b0d0c313a180829L,0x32470f1634121943L,0x6f1e200905112b03L,0x8131e1713568b64L,
+    0x1a6960821c728164L,0x16061b141506220bL,0x1a8205090d8a1d02L,0x7203198b1c5f0f0fL,
+    0x5f0b197808691811L,0xd0278121417030aL,0xb13031a1a2b1d56L,0x6031c1a1c1d1113L,
+    0x1818082913171817L,0x80b202a08061608L,0x111c031d0317171cL,0x62c130b1120061aL,
+    0x4030201203a0b11L,0xc0b0a0908070605L,0x14131211100f0e0dL,0x1c1b1a1918171615L,
+    0x24232221201f1e1dL,0x131a0b1c1b272625L,0x1e0414202c0a064aL,0x251d172a15054e22L,
+    0x3a18082909020711L,0x341219a8b50d0cbbL,0x5112b0332470faaL,0x13aeb39ea01e2009L,
+    0x1c92b89e08131e17L,0x1506220b1abda6a2L,0xdb41d02aa061b14L,0x1ca40f0f1aa20509L,
+    0x8bd1811920319b3L,0x1417030aa40b199dL,0xb9959bae0d029d12L,0x9c9b9a99c299b6b9L,
+    0x99a1a7a1c0b69cb9L,0xacc0aaaca7a7acb7L,0xb6a1a19cacc2c4afL,0x9ac4c0b99a9cb69bL,
+    0xc4a3c29ac0be99c2L,0x807060504030201L,0x100f0e0d0c0b0a09L,0x1817161514131211L,
+    0x201f1e1d1c1b1a19L,0x6e27262524232221L,0x5f89067e131a0b1cL,0x6c05796a1e041456L,
+    0x902071125721769L,0x800d0c5b8b820864L,0x6d740f70578d1977L,0x585e565576537803L,
+    0x845c5e5d5c915a59L,0x686766657c636259L,0x706b6e8c6c6b6a87L,0x686576559073728fL,
+    0x637f865a7c7b7a7aL,0x7b87868e84678253L,0x908f8e8d8c5d7f89L,0x875c031a68787291L,
+    0x6b7f7c681c1d1113L,0x821884645c178217L,0x80b5669086b1684L,0x531c03727f5d5d7cL,
+    0x65f13875356061aL,0x4030201208b0b11L,0xc0b0a0908070605L,0x14131211100f0e0dL,
+    0x1c1b1a1918171615L,0x24232221201f1e1dL,0x131a0b1c6e272625L,0x1e0414565f89067eL,
+    0x257217696c05796aL,0x8b82086409020711L,0x578d1977800d0c5bL,0x765378036d740f70L,
+    0x5c915a59585e5655L,0x7c636259845c5e5dL,0x6c6b6a8768676665L,0x9073728f706b6e8cL,
+    0x7c7b7a7a68657655L,0x84678253637f865aL,0x8c5d7f897b87868eL,0x949d9291908f8e8dL,
+    0x9c9b9a999897b6b9L,0x97a1a2a1ab9fb194L,0xacabaaa9a2a7a99eL,0x9fb2b2b1acc2aebdL,
+    0xbcaec0b9bc9cb692L,0xc4b3c29ac0a49998L,0x807060504030201L,0x100f0e0d0c0b0a09L,
+    0x1817161514131211L,0x201f1e1d1c1b1a19L,0x2827262524232221L,0x302f2e2d2c2b2a29L,
+    0x3837363534333231L,0x403f3e3d3c3b3a39L,0x4847464544434241L,0x504f4e4d4c4b4a49L,
+    0x6f34200937115251L,0x422c1e1713318b64L,0x1a69608229728141L,0x162e1b321506222aL,
+    0x2b430540478a1d3fL,0x3b034a441c5f0f4eL,0x300b19520839183dL,0xd027812143a510aL,
+    0xb13512b1a521d56L,0x2e03292b1c1d1113L,0x431842412c3a1817L,0x422a203908061608L,
+    0x3d29033b513a171cL,0x6302c2a11312e1aL,0x403020120440b3dL,0xc0b0a0908070605L,
+    0x14131211100f0e0dL,0x1c1b1a1918171615L,0x24232221201f1e1dL,0x2c2b2a2928272625L,
+    0x34333231302f2e2dL,0x3c3b3a3938373635L,0x44434241403f3e3dL,0x4c4b4a4948474645L,
+    0x37115251504f4e4dL,0x13bbb39ea0342009L,0x2992b8a5422c1e17L,0x1506222a1abda6a2L,
+    0x47b41d3faa2e1b32L,0x1ca40f4e2ba80540L,0x8ad183db5034ac3L,0x143a510abf0b1993L,
+    0xb9939bae0d029d12L,0x9c9b9a99c2999695L,0xbea3a7a1bab6b795L,0xacc0aaaca8a7b0a5L,
+    0x96a3a19cb0afc4adL,0x9abbbab9c1b7b6b5L,0xc4c3c2c1c0bfbeafL,0x807060504030201L,
+    0x100f0e0d0c0b0a09L,0x1817161514131211L,0x201f1e1d1c1b1a19L,0x2827262524232221L,
+    0x302f2e2d2c2b2a29L,0x3837363534333231L,0x403f3e3d3c3b3a39L,0x4847464544434241L,
+    0x504f4e4d4c4b4a49L,0x5857565554535251L,0x605f5e5d5c5b5a59L,0x6867666564636261L,
+    0x706f6e6d6c6b6a69L,0x7877767574737271L,0x807f7e7d7c7b7a79L,0x8887868584838281L,
+    0x908f8e8d8c8b8a89L,0x875c512b68527291L,0x6f7f64781c1d1113L,0x431860415f3a8217L,
+    0x422a5639086b1684L,0x8129033b8a8b5d7cL,0x6302c6953312e1aL,0x403020120440b3dL,
+    0xc0b0a0908070605L,0x14131211100f0e0dL,0x1c1b1a1918171615L,0x24232221201f1e1dL,
+    0x2c2b2a2928272625L,0x34333231302f2e2dL,0x3c3b3a3938373635L,0x44434241403f3e3dL,
+    0x4c4b4a4948474645L,0x54535251504f4e4dL,0x5c5b5a5958575655L,0x64636261605f5e5dL,
+    0x6c6b6a6968676665L,0x74737271706f6e6dL,0x7c7b7a7978777675L,0x84838281807f7e7dL,
+    0x8c8b8a8988878685L,0x94939291908f8e8dL,0x9c9b9a9998979695L,0xa4a3a2a1a09f9e9dL,
+    0xacabaaa9a8a7a6a5L,0xb4b3b2b1b0afaeadL,0xbcbbbab9b8b7b6b5L,0xc4c3c2c1c0bfbebdL
+  };
+  private final static long[] offsetIncrs7 = new long[] /*3 bits per value */ {
+    0x8000000080000000L,0x1000000060200061L,0x820000038000L,0x80200030044048c4L,
+    0x20ab0ac0000eda1L,0x4041400c01506000L,0x113028000884098L,0x186c401800008040L,
+    0x1020c000200009a0L,0x80000000710L,0x60200061800L,0x820000038000100L,
+    0x30044048c4000L,0xab0ac0000eda1802L,0x1400c01506000020L,0x3028000884098404L,
+    0xfcfdffffebf5fff1L,0xeffffafffe9afdf6L,0x80000000717f3aL,0x60200061800000L,
+    0x38000100000L,0x30044048c4000082L,0xb4d86cf6c181a000L,0xcc0190780182cb3cL,
+    0x1b0884c9e584d80L,0x18db6080580d1303L,0xc02db609a19e6f4cL,0x710102cc0L,
+    0x200061800000008L,0x38000100000006L,0x44048c4000082000L,0x86cf6c181a000300L,
+    0x190780182cb3cb4dL,0x884c9e584d80cc0L,0xb6ebf5bfd130301bL,0xdb6e9af9e6f4ddfdL,
+    0x717f3acffdfaL,0x61800000008000L,0xa28b550000006020L,0x5aed0050aa000003L,
+    0xeda1802d00300540L,0x7400020abaadb400L,0x509d405140ac0150L,0x8042d153028168a8L,
+    0xa9a0186edb58a2d0L,0x75516a0e8b42b40L,0x1800000008000000L,0xb550000006020006L,
+    0xd0050aa000003a28L,0x1802d003005405aeL,0x20abaadb400edaL,0xd405140ac0150740L,
+    0xedf53028168a8509L,0xfdf6edb5fbedebf5L,0x5f6aeefb7ab7fa9aL,0x8000000075L,
+    0x6020006180L,0x50aa000003a28b55L,0xad003005405aed00L,0xcb3ab5b46cf6c181L,
+    0x5d80ac0190740182L,0x53030168a85c9d58L,0x6edb58bad0805addL,0xace8b42b76a9a19eL,
+    0x8000000075516L,0x6020006180000L,0xa000003a28b55000L,0x3005405aed0050aL,
+    0xab5b46cf6c181ad0L,0xac0190740182cb3L,0x30168a85c9d585d8L,0xb5fbadebf5add530L,
+    0xfb7ab76a9af9e6edL,0x80000000755f6aceL,0x8028209201000000L,0x4800914000000L,
+    0x44049040000a200L,0x104924a200200040L,0x1508000028ac8acL,0x8840a040490090L,
+    0x248845049140201L,0x21240a2020904924L,0x91012210410L,0x8209201000000800L,
+    0x4800914000000802L,0x49040000a200000L,0x924a200200040044L,0x8000028ac8ac104L,
+    0x840a040490090015L,0x8bc53c9140201008L,0x4ea2fe793c924fe4L,0x917f22f3cf3af2L,
+    0x9201000000800000L,0x914000000802820L,0x40000a200000480L,0xc201a00040044049L,
+    0x1828b48b4d04924L,0xa658490090019098L,0x504914020130884cL,0x21a6934924da4884L,
+    0x10122d04d02d240aL,0x1000000800000009L,0x4000000802820920L,0xa200000480091L,
+    0x1a00040044049040L,0x28b48b4d04924c20L,0x8490090019098018L,0x914020130884ca65L,
+    0x6934924da48bc53cL,0x22d3cd3ad24ea2faL,0x80000000917fL,0x802820920100L,
+    0xa2000004a2891400L,0x4005405b2d0050L,0xc8adb04924a2002dL,0x9001509400028aL,
+    0x20128a850a54059L,0xd924a2488452c954L,0x2cb02b24aa202092L,0x800000009551621L,
+    0x802820920100000L,0x4a2891400000L,0x5405b2d0050a20L,0xdb04924a2002d004L,
+    0x1509400028ac8aL,0x128a850a54059009L,0x4be48bc52c954020L,0x3ab24aa2fe792d92L,
+    0x955f62f2cbL,0x2820920100000080L,0x4a2891400000080L,0x405b2d0050a20000L,
+    0x4924c201ad004005L,0x909401828b48b5b0L,0xa85ca55859009001L,0x488452c954020128L,
+    0x24aa21a692d924baL,0x955162d2cb02bL,0x920100000080000L,0x2891400000080282L,
+    0xb2d0050a2000004aL,0x4c201ad004005405L,0x401828b48b5b0492L,0xca55859009001909L,
+    0xc52c954020128a85L,0xa2fa692d924ba48bL,0x955f62d2cb3ab24aL,0x80c30000c0600000L,
+    0xd800000060301861L,0x30c30000036006L,0x80d80030046048dcL,0x36db0dc6c06eda1L,
+    0x6040c06c01586000L,0x36db0180006c36dbL,0x1b6dc6180030db6cL,0xdb6c36030006db6L,
+    0x30000c060000071bL,0x6030186180cL,0xc30000036006d80L,0x80030046048dc003L,
+    0xdb0dc6c06eda180dL,0xc06c01586000036L,0xb0180006c36db604L,0xdc7dfffbedb6fb6dL,
+    0x6fb7fbfff6db7db6L,0xc060000071bedbL,0x6030186180c300L,0x36006d80000L,
+    0x30046048dc0030c3L,0xdc6c66f6c180d800L,0x6c01987801836dbcL,0x81b06c36db784cc0L,
+    0x18db30db6c36db01L,0x603db66db79b6dc6L,0x60000071b0db6c3L,0x30186180c30000cL,
+    0x36006d80000006L,0x46048dc0030c3000L,0xc66f6c180d800300L,0x1987801836dbcdc6L,
+    0x6c36db784cc06c0L,0xb3edb6fb6db0181bL,0xdb66db79b6dc7dfdL,0x71bedb6fb7fbL,
+    0x186180c30000c060L,0x6286dd0000006030L,0x5add0030eb000003L,0xeda180dd00300560L,
+    0x7400036dbadd6c06L,0x36db6050c06c0158L,0xdb6eb6db0181686cL,0x6db61b6dd758a2b0L,
+    0x75b0db6eb743b40L,0x180c30000c060000L,0x6dd0000006030186L,0xd0030eb000003628L,
+    0x180dd003005605adL,0x36dbadd6c06edaL,0xb6050c06c0158740L,0xeb6db0181686c36dL,
+    0x7db6dd75fbebedb6L,0xbedb6eb77bb7f6dbL,0xc30000c060000075L,0x6030186180L,
+    0x30eb0000036286ddL,0xdd003005605add00L,0x6dbadd6c66f6c180L,0x5cc06c0198740183L,
+    0xdb0181686c36db78L,0x6dd758bab0db6eb6L,0xb6eb743b766db79bL,0xc060000075b0dL,
+    0x6030186180c30L,0xb0000036286dd000L,0x3005605add0030eL,0xadd6c66f6c180dd0L,
+    0x6c01987401836dbL,0x181686c36db785ccL,0x75fbabedb6eb6db0L,0xb77bb766db79b6ddL,
+    0xc060000075bedb6eL,0x8038189200c30000L,0x46006dc000000L,0x460491c0030e300L,
+    0x6c4724a200d80040L,0x1588000036dc8dcL,0x6c36e36048c070L,0x238db6c36dc0181L,
+    0x31246e362391c724L,0x91b0db70370L,0x8189200c30000c06L,0x46006dc000000803L,
+    0x491c0030e300000L,0x724a200d80040046L,0x88000036dc8dc6c4L,0xc36e36048c070015L,
+    0x8db6fb6dc0181006L,0x46e37e391c724fe3L,0x91bedb73b73bf2L,0x9200c30000c06000L,
+    0x6dc000000803818L,0x1c0030e300000460L,0xc200d80040046049L,0x1836dc8dc6c4724L,
+    0xe37848c070019898L,0x6c36dc0181306c36L,0x37a391c724da38dbL,0x1b0db703703d246eL,
+    0xc30000c06000009L,0xc000000803818920L,0x30e30000046006dL,0xd800400460491c0L,
+    0x36dc8dc6c4724c20L,0x848c070019898018L,0x6dc0181306c36e37L,0x391c724da38db6fbL,
+    0xdb73b73bd246e37aL,0xc060000091beL,0x8038189200c3L,0xe30000046286dc00L,
+    0x4005605b1d0030L,0xc8dd6c4724a200ddL,0xc07001589400036dL,0x181286c36e36058L,
+    0xd724a238db6eb6dcL,0x2b703b246e362391L,0xc060000095b0db7L,0x8038189200c3000L,
+    0x46286dc00000L,0x5605b1d0030e30L,0xd6c4724a200dd004L,0x1589400036dc8dL,
+    0x1286c36e36058c07L,0x4be38db6eb6dc018L,0x3bb246e37e391d72L,0x60000095bedb72b7L,
+    0x38189200c30000c0L,0x46286dc00000080L,0x605b1d0030e30000L,0x4724c200dd004005L,
+    0x989401836dc8dd6cL,0x6c36e37858c07001L,0x38db6eb6dc018128L,0x246e37a391d724baL,
+    0x95b0db72b703bL,0x89200c30000c0600L,0x286dc00000080381L,0xb1d0030e30000046L,
+    0x4c200dd004005605L,0x401836dc8dd6c472L,0x6e37858c07001989L,0xb6eb6dc0181286c3L,
+    0xe37a391d724ba38dL,0x95bedb72b73bb246L,0x8080000080410000L,0x1200000040240061L,
+    0x820000024104L,0x200030044028d2L,0x820934aa4804aa41L,0x4044800c01506800L,
+    0x112028000484498L,0x9a6d241841048248L,0x4920900820024924L,0x80410000510L,
+    0x40240061808L,0x820000024104120L,0x30044028d2000L,0x934aa4804aa41002L,
+    0x4800c01506800820L,0x2028000484498404L,0xd25df5d74ba4bff1L,0xe97ebaffa49249a6L,
+    0x80410000517492L,0x40240061808000L,0x24104120000L,0x30044028d2000082L,
+    0xb24864b24101a000L,0xcc0190680082c934L,0x1b048449e584480L,0x18596482480d1203L,
+    0xc82db249249a6d24L,0x410000510492c90L,0x240061808000008L,0x24104120000004L,
+    0x44028d2000082000L,0x864b24101a000300L,0x190680082c934b24L,0x48449e584480cc0L,
+    0x964ba4bfd120301bL,0xdb249249a6d25df5L,0x517492c97cbaL,0x61808000008041L,
+    0x4105520000004024L,0x2ad20050aa000002L,0xaa41002d00300540L,0x6800820934aa4804L,
+    0x549d405480ac0150L,0x824ad15202816848L,0x49249a6d25584154L,0x555492090a82b42L,
+    0x1808000008041000L,0x5520000004024006L,0x20050aa000002410L,0x1002d003005402adL,
+    0x820934aa4804aa4L,0xd405480ac0150680L,0xadf5202816848549L,0x49a6d255f5d54ba4L,
+    0x5492e97abab7a492L,0x8000008041000055L,0x4024006180L,0x50aa000002410552L,
+    0xad003005402ad200L,0xc934b24864b24101L,0x5480ac0190680082L,0x5203016848549d58L,
+    0x6d25585954824addL,0x2c90a82b7249249aL,0x8041000055549L,0x4024006180800L,
+    0xa000002410552000L,0x3005402ad20050aL,0x4b24864b24101ad0L,0xac0190680082c93L,
+    0x3016848549d58548L,0x55f5954ba4add520L,0x7abab7249249a6d2L,0x80410000555492c9L,
+    0x4024209200800000L,0x2410512000000L,0x44029120000a200L,0x4844a24100200040L,
+    0x1508800828944aaL,0x4844a040448090L,0x4144824849120201L,0x21224924a2912524L,
+    0x1000051049209408L,0x4209200800000804L,0x2410512000000402L,0x29120000a200000L,
+    0x4a24100200040044L,0x8800828944aa484L,0x844a040448090015L,0x4ba4bc9120201004L,
+    0x24924a29125245d4L,0x517492e94ebaf2L,0x9200800000804100L,0x512000000402420L,
+    0x120000a200000241L,0x4101a00040044029L,0x828944b24844a2L,0xa658448090019088L,
+    0x4849120201304844L,0x24a2912524594482L,0x10492c94c82d2249L,0x800000804100005L,
+    0x2000000402420920L,0xa200000241051L,0x1a00040044029120L,0x28944b24844a2410L,
+    0x8448090019088008L,0x9120201304844a65L,0x29125245944ba4bcL,0x92c94cbad224924aL,
+    0x804100005174L,0x402420920080L,0xa200000241051200L,0x4005402b120050L,
+    0x44aa4844a241002dL,0x8090015088008289L,0x201284854a54054L,0x25244144824ac952L,
+    0x94a82b224924a291L,0x804100005554920L,0x402420920080000L,0x241051200000L,
+    0x5402b120050a20L,0xa4844a241002d004L,0x1508800828944aL,0x1284854a54054809L,
+    0x45d44ba4ac952020L,0xbab224924a291252L,0x410000555492e94aL,0x2420920080000080L,
+    0x241051200000040L,0x402b120050a20000L,0x44a24101ad004005L,0x908800828944b248L,
+    0x4854a55854809001L,0x44824ac952020128L,0x224924a291252459L,0x555492c94a82bL,
+    0x920080000080410L,0x1051200000040242L,0xb120050a20000024L,0x24101ad004005402L,
+    0x800828944b24844aL,0x4a55854809001908L,0xa4ac952020128485L,0x924a29125245944bL,
+    0x555492c94abab224L,0x80830000c0410000L,0xda00000040341861L,0x30c30000024104L,
+    0xd80030046028d2L,0x836d34da4804aa41L,0x6044806c01586800L,0x36da0180004c34dbL,
+    0x9a6d24184134da68L,0x4936936830024d34L,0x30000c041000051bL,0x40341861808L,
+    0xc30000024104da0L,0x80030046028d2003L,0xd34da4804aa4100dL,0x4806c01586800836L,
+    0xa0180004c34db604L,0xd25df5d34da6bb6dL,0x6936bbffa4d349a6L,0xc041000051b493L,
+    0x40341861808300L,0x24104da0000L,0x30046028d20030c3L,0xda4864b24100d800L,
+    0x6c01986800836d34L,0x81b04c34db784480L,0x185934da6836da01L,0x683db24d349a6d24L,
+    0x41000051b493693L,0x34186180830000cL,0x24104da0000004L,0x46028d20030c3000L,
+    0x864b24100d800300L,0x1986800836d34da4L,0x4c34db7844806c0L,0x934da6bb6da0181bL,
+    0xdb24d349a6d25df5L,0x51b4936936bbL,0x186180830000c041L,0x4104da0000004034L,
+    0x2ad20030eb000002L,0xaa4100dd00300560L,0x6800836d34da4804L,0x34db6054806c0158L,
+    0xda6ab6da0181684cL,0x4d349a6d25584134L,0x55b493693683b42L,0x180830000c041000L,
+    0x4da0000004034186L,0x20030eb000002410L,0x100dd003005602adL,0x836d34da4804aa4L,
+    0xb6054806c0158680L,0xab6da0181684c34dL,0x49a6d255f5d34da6L,0xb4936936bbb7a4d3L,
+    0x830000c041000055L,0x4034186180L,0x30eb0000024104daL,0xdd003005602ad200L,
+    0x6d34da4864b24100L,0x54806c0198680083L,0xda0181684c34db78L,0x6d25585934da6ab6L,
+    0x3693683b724d349aL,0xc041000055b49L,0x4034186180830L,0xb0000024104da000L,
+    0x3005602ad20030eL,0x4da4864b24100dd0L,0x6c01986800836d3L,0x181684c34db78548L,
+    0x55f5934da6ab6da0L,0x36bbb724d349a6d2L,0xc041000055b49369L,0x4034189200830000L,
+    0x24104da000000L,0x46029120030e300L,0x4844a24100d80040L,0x1588800836d44daL,
+    0x4c34e360448070L,0x4134da6836da0181L,0x31224d34a2912524L,0x1000051b49369368L,
+    0x4189200830000c04L,0x24104da000000403L,0x29120030e300000L,0x4a24100d80040046L,
+    0x88800836d44da484L,0xc34e360448070015L,0x4da6bb6da0181004L,0x24d34a29125245d3L,
+    0x51b4936936bbf2L,0x9200830000c04100L,0x4da000000403418L,0x120030e300000241L,
+    0x4100d80040046029L,0x836d44da4844a2L,0xe378448070019888L,0x6836da0181304c34L,
+    0x34a29125245934daL,0x1b493693683d224dL,0x830000c04100005L,0xa000000403418920L,
+    0x30e30000024104dL,0xd80040046029120L,0x36d44da4844a2410L,0x8448070019888008L,
+    0x6da0181304c34e37L,0x29125245934da6bbL,0x936936bbd224d34aL,0xc041000051b4L,
+    0x403418920083L,0xe30000024104da00L,0x4005602b120030L,0x44da4844a24100ddL,
+    0x807001588800836dL,0x181284c34e36054L,0x25244134da6ab6daL,0x93683b224d34a291L,
+    0xc041000055b4936L,0x403418920083000L,0x24104da00000L,0x5602b120030e30L,
+    0xa4844a24100dd004L,0x1588800836d44dL,0x1284c34e36054807L,0x45d34da6ab6da018L,
+    0xbbb224d34a291252L,0x41000055b4936936L,0x34189200830000c0L,0x24104da00000040L,
+    0x602b120030e30000L,0x44a24100dd004005L,0x988800836d44da48L,0x4c34e37854807001L,
+    0x34da6ab6da018128L,0x224d34a291252459L,0x55b493693683bL,0x89200830000c0410L,
+    0x104da00000040341L,0xb120030e30000024L,0x24100dd004005602L,0x800836d44da4844aL,
+    0x4e37854807001988L,0xa6ab6da0181284c3L,0xd34a29125245934dL,0x55b4936936bbb224L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,
+    0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,
+    0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,
+    0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L
+  };
+  
+  // state map
+  //   0 -> [(0, 0)]
+  //   1 -> [(0, 2)]
+  //   2 -> [(0, 3)]
+  //   3 -> [(0, 1)]
+  //   4 -> [(0, 2), (1, 2)]
+  //   5 -> [(0, 3), (1, 3)]
+  //   6 -> [(0, 1), (1, 1)]
+  //   7 -> [(0, 3), (1, 3), (2, 3)]
+  //   8 -> [(0, 2), (2, 3)]
+  //   9 -> [(0, 2), (2, 1)]
+  //   10 -> [(0, 3), (2, 2)]
+  //   11 -> [(0, 1), (2, 2)]
+  //   12 -> [(0, 2), (1, 2), (2, 2)]
+  //   13 -> [(0, 1), (2, 1)]
+  //   14 -> [(0, 2), (2, 2)]
+  //   15 -> [(0, 1), (1, 1), (2, 1)]
+  //   16 -> [(0, 3), (2, 3)]
+  //   17 -> [(0, 2), (1, 2), (2, 2), (3, 2)]
+  //   18 -> [(0, 3), (1, 3), (2, 3), (3, 3)]
+  //   19 -> [(0, 2), (1, 2), (3, 3)]
+  //   20 -> [(0, 2), (2, 2), (3, 2)]
+  //   21 -> [(0, 3), (3, 1)]
+  //   22 -> [(0, 3), (3, 3)]
+  //   23 -> [(0, 3), (3, 2)]
+  //   24 -> [(0, 2), (2, 3), (3, 3)]
+  //   25 -> [(0, 3), (2, 3), (3, 3)]
+  //   26 -> [(0, 2), (3, 2)]
+  //   27 -> [(0, 3), (1, 3), (3, 3)]
+  //   28 -> [(0, 3), (2, 2), (3, 2)]
+  //   29 -> [(0, 2), (3, 3)]
+  //   30 -> [(0, 1), (1, 1), (3, 2)]
+  //   31 -> [(0, 3), (1, 3), (3, 2)]
+  //   32 -> [(0, 2), (1, 2), (3, 1)]
+  //   33 -> [(0, 2), (1, 2), (3, 2)]
+  //   34 -> [(0, 1), (2, 2), (3, 2)]
+  //   35 -> [(0, 2), (3, 1)]
+  //   36 -> [(0, 1), (3, 3)]
+  //   37 -> [(0, 2), (2, 1), (3, 1)]
+  //   38 -> [(0, 1), (3, 2)]
+  //   39 -> [(0, 2), (3, 2), (4, 2)]
+  //   40 -> [(0, 3), (1, 3), (3, 3), (4, 3)]
+  //   41 -> [(0, 3), (2, 2), (4, 3)]
+  //   42 -> [(0, 3), (2, 3), (3, 3), (4, 3)]
+  //   43 -> [(0, 3), (1, 3), (2, 3), (3, 3), (4, 3)]
+  //   44 -> [(0, 2), (2, 3), (4, 2)]
+  //   45 -> [(0, 3), (1, 3), (4, 3)]
+  //   46 -> [(0, 2), (2, 1), (4, 2)]
+  //   47 -> [(0, 3), (1, 3), (2, 3), (4, 2)]
+  //   48 -> [(0, 3), (1, 3), (3, 2), (4, 2)]
+  //   49 -> [(0, 2), (1, 2), (3, 3), (4, 3)]
+  //   50 -> [(0, 1), (4, 3)]
+  //   51 -> [(0, 2), (3, 3), (4, 3)]
+  //   52 -> [(0, 2), (1, 2), (3, 2), (4, 2)]
+  //   53 -> [(0, 2), (2, 2), (4, 2)]
+  //   54 -> [(0, 2), (1, 2), (4, 3)]
+  //   55 -> [(0, 2), (2, 2), (3, 2), (4, 2)]
+  //   56 -> [(0, 3), (2, 2), (4, 2)]
+  //   57 -> [(0, 3), (3, 3), (4, 3)]
+  //   58 -> [(0, 3), (2, 2), (3, 2), (4, 2)]
+  //   59 -> [(0, 1), (3, 3), (4, 3)]
+  //   60 -> [(0, 3), (2, 3), (4, 3)]
+  //   61 -> [(0, 1), (1, 1), (4, 3)]
+  //   62 -> [(0, 2), (4, 3)]
+  //   63 -> [(0, 2), (2, 3), (4, 3)]
+  //   64 -> [(0, 3), (1, 3), (4, 2)]
+  //   65 -> [(0, 3), (1, 3), (2, 3), (4, 3)]
+  //   66 -> [(0, 3), (3, 2), (4, 2)]
+  //   67 -> [(0, 3), (4, 2)]
+  //   68 -> [(0, 3), (1, 3), (4, 1)]
+  //   69 -> [(0, 1), (2, 2), (4, 3)]
+  //   70 -> [(0, 2), (1, 2), (2, 2), (4, 3)]
+  //   71 -> [(0, 3), (2, 2), (4, 1)]
+  //   72 -> [(0, 3), (4, 1)]
+  //   73 -> [(0, 2), (2, 3), (3, 3), (4, 3)]
+  //   74 -> [(0, 2), (1, 2), (2, 2), (3, 2), (4, 2)]
+  //   75 -> [(0, 2), (4, 2)]
+  //   76 -> [(0, 3), (3, 1), (4, 1)]
+  //   77 -> [(0, 2), (2, 2), (4, 3)]
+  //   78 -> [(0, 2), (1, 2), (2, 2), (4, 2)]
+  //   79 -> [(0, 2), (1, 2), (4, 2)]
+  //   80 -> [(0, 3), (4, 3)]
+  //   81 -> [(0, 3), (2, 3), (4, 2)]
+  //   82 -> [(0, 3), (2, 3), (5, 3)]
+  //   83 -> [(0, 2), (1, 2), (4, 3), (5, 3)]
+  //   84 -> [(0, 2), (2, 3), (5, 3)]
+  //   85 -> [(0, 3), (1, 3), (3, 2), (5, 3)]
+  //   86 -> [(0, 2), (3, 3), (4, 3), (5, 3)]
+  //   87 -> [(0, 3), (1, 3), (5, 2)]
+  //   88 -> [(0, 3), (1, 3), (3, 3), (5, 2)]
+  //   89 -> [(0, 3), (3, 3), (5, 2)]
+  //   90 -> [(0, 3), (1, 3), (3, 2), (4, 2), (5, 2)]
+  //   91 -> [(0, 3), (1, 3), (2, 3), (3, 3), (5, 3)]
+  //   92 -> [(0, 3), (3, 3), (5, 3)]
+  //   93 -> [(0, 2), (3, 3), (5, 3)]
+  //   94 -> [(0, 3), (1, 3), (2, 3), (3, 3), (4, 3), (5, 3)]
+  //   95 -> [(0, 3), (1, 3), (2, 3), (4, 3), (5, 3)]
+  //   96 -> [(0, 3), (1, 3), (4, 2), (5, 2)]
+  //   97 -> [(0, 3), (2, 3), (5, 2)]
+  //   98 -> [(0, 3), (2, 2), (3, 2), (5, 2)]
+  //   99 -> [(0, 3), (1, 3), (3, 3), (4, 3), (5, 3)]
+  //   100 -> [(0, 3), (3, 2), (5, 2)]
+  //   101 -> [(0, 3), (1, 3), (2, 3), (5, 2)]
+  //   102 -> [(0, 3), (2, 2), (5, 2)]
+  //   103 -> [(0, 3), (2, 3), (3, 3), (5, 3)]
+  //   104 -> [(0, 3), (2, 2), (4, 3), (5, 3)]
+  //   105 -> [(0, 2), (1, 2), (3, 2), (5, 3)]
+  //   106 -> [(0, 3), (1, 3), (5, 3)]
+  //   107 -> [(0, 2), (2, 2), (3, 2), (5, 3)]
+  //   108 -> [(0, 2), (1, 2), (3, 3), (4, 3), (5, 3)]
+  //   109 -> [(0, 2), (3, 2), (5, 3)]
+  //   110 -> [(0, 3), (1, 3), (4, 3), (5, 3)]
+  //   111 -> [(0, 3), (3, 1), (5, 2)]
+  //   112 -> [(0, 2), (4, 3), (5, 3)]
+  //   113 -> [(0, 3), (2, 2), (3, 2), (5, 3)]
+  //   114 -> [(0, 3), (5, 2)]
+  //   115 -> [(0, 2), (1, 2), (2, 2), (4, 3), (5, 3)]
+  //   116 -> [(0, 2), (2, 3), (4, 3), (5, 3)]
+  //   117 -> [(0, 2), (1, 2), (5, 3)]
+  //   118 -> [(0, 3), (3, 2), (4, 2), (5, 2)]
+  //   119 -> [(0, 3), (2, 3), (3, 3), (4, 3), (5, 3)]
+  //   120 -> [(0, 2), (2, 2), (4, 3), (5, 3)]
+  //   121 -> [(0, 2), (2, 2), (5, 3)]
+  //   122 -> [(0, 3), (1, 3), (2, 3), (3, 3), (5, 2)]
+  //   123 -> [(0, 3), (1, 3), (3, 3), (5, 3)]
+  //   124 -> [(0, 3), (4, 2), (5, 2)]
+  //   125 -> [(0, 2), (2, 3), (3, 3), (4, 3), (5, 3)]
+  //   126 -> [(0, 3), (5, 3)]
+  //   127 -> [(0, 3), (2, 2), (3, 2), (4, 2), (5, 2)]
+  //   128 -> [(0, 3), (2, 3), (4, 3), (5, 3)]
+  //   129 -> [(0, 3), (3, 2), (5, 3)]
+  //   130 -> [(0, 3), (2, 2), (4, 2), (5, 2)]
+  //   131 -> [(0, 3), (1, 3), (2, 3), (5, 3)]
+  //   132 -> [(0, 3), (2, 3), (4, 2), (5, 2)]
+  //   133 -> [(0, 2), (2, 3), (3, 3), (5, 3)]
+  //   134 -> [(0, 3), (2, 2), (5, 3)]
+  //   135 -> [(0, 3), (1, 3), (2, 3), (4, 2), (5, 2)]
+  //   136 -> [(0, 2), (2, 1), (5, 3)]
+  //   137 -> [(0, 3), (4, 3), (5, 3)]
+  //   138 -> [(0, 3), (3, 3), (4, 3), (5, 3)]
+  //   139 -> [(0, 2), (1, 2), (3, 3), (5, 3)]
+  //   140 -> [(0, 2), (1, 2), (2, 2), (3, 2), (5, 3)]
+  //   141 -> [(0, 3), (2, 3), (3, 3), (5, 2)]
+  //   142 -> [(0, 2), (5, 3)]
+  //   143 -> [(0, 2), (1, 2), (2, 2), (5, 3)]
+  //   144 -> [(0, 3), (1, 3), (3, 2), (5, 2)]
+  //   145 -> [(0, 3), (2, 2), (3, 2), (5, 3), (6, 3)]
+  //   146 -> [(0, 3), (2, 3), (4, 2), (6, 3)]
+  //   147 -> [(0, 3), (2, 3), (3, 3), (5, 3), (6, 3)]
+  //   148 -> [(0, 3), (2, 3), (3, 3), (4, 3), (6, 3)]
+  //   149 -> [(0, 3), (4, 3), (6, 3)]
+  //   150 -> [(0, 3), (1, 3), (2, 3), (3, 3), (5, 3), (6, 3)]
+  //   151 -> [(0, 3), (2, 2), (5, 3), (6, 3)]
+  //   152 -> [(0, 3), (1, 3), (2, 3), (3, 3), (6, 3)]
+  //   153 -> [(0, 3), (2, 3), (6, 3)]
+  //   154 -> [(0, 3), (2, 2), (3, 2), (6, 3)]
+  //   155 -> [(0, 3), (1, 3), (3, 3), (6, 3)]
+  //   156 -> [(0, 3), (2, 3), (3, 3), (4, 3), (5, 3), (6, 3)]
+  //   157 -> [(0, 3), (1, 3), (3, 3), (4, 3), (5, 3), (6, 3)]
+  //   158 -> [(0, 3), (5, 3), (6, 3)]
+  //   159 -> [(0, 3), (1, 3), (4, 3), (5, 3), (6, 3)]
+  //   160 -> [(0, 3), (3, 3), (6, 3)]
+  //   161 -> [(0, 3), (3, 2), (5, 3), (6, 3)]
+  //   162 -> [(0, 3), (3, 3), (4, 3), (6, 3)]
+  //   163 -> [(0, 3), (1, 3), (2, 3), (3, 3), (4, 3), (5, 3), (6, 3)]
+  //   164 -> [(0, 3), (1, 3), (4, 2), (6, 3)]
+  //   165 -> [(0, 3), (1, 3), (2, 3), (4, 3), (5, 3), (6, 3)]
+  //   166 -> [(0, 3), (3, 2), (6, 3)]
+  //   167 -> [(0, 3), (3, 2), (4, 2), (6, 3)]
+  //   168 -> [(0, 3), (1, 3), (2, 3), (5, 3), (6, 3)]
+  //   169 -> [(0, 3), (3, 1), (6, 3)]
+  //   170 -> [(0, 3), (1, 3), (5, 3), (6, 3)]
+  //   171 -> [(0, 3), (1, 3), (2, 3), (6, 3)]
+  //   172 -> [(0, 3), (2, 2), (4, 2), (6, 3)]
+  //   173 -> [(0, 3), (1, 3), (3, 2), (5, 3), (6, 3)]
+  //   174 -> [(0, 3), (2, 2), (4, 3), (6, 3)]
+  //   175 -> [(0, 3), (1, 3), (2, 3), (4, 3), (6, 3)]
+  //   176 -> [(0, 3), (1, 3), (3, 3), (5, 3), (6, 3)]
+  //   177 -> [(0, 3), (3, 3), (5, 3), (6, 3)]
+  //   178 -> [(0, 3), (3, 3), (4, 3), (5, 3), (6, 3)]
+  //   179 -> [(0, 3), (4, 3), (5, 3), (6, 3)]
+  //   180 -> [(0, 3), (2, 2), (3, 2), (4, 2), (6, 3)]
+  //   181 -> [(0, 3), (6, 3)]
+  //   182 -> [(0, 3), (1, 3), (3, 3), (4, 3), (6, 3)]
+  //   183 -> [(0, 3), (2, 3), (4, 3), (5, 3), (6, 3)]
+  //   184 -> [(0, 3), (2, 3), (3, 3), (6, 3)]
+  //   185 -> [(0, 3), (1, 3), (4, 3), (6, 3)]
+  //   186 -> [(0, 3), (1, 3), (3, 2), (4, 2), (6, 3)]
+  //   187 -> [(0, 3), (2, 3), (5, 3), (6, 3)]
+  //   188 -> [(0, 3), (2, 2), (4, 3), (5, 3), (6, 3)]
+  //   189 -> [(0, 3), (1, 3), (2, 3), (3, 3), (4, 3), (6, 3)]
+  //   190 -> [(0, 3), (1, 3), (2, 3), (4, 2), (6, 3)]
+  //   191 -> [(0, 3), (1, 3), (6, 3)]
+  //   192 -> [(0, 3), (2, 3), (4, 3), (6, 3)]
+  //   193 -> [(0, 3), (2, 2), (6, 3)]
+  //   194 -> [(0, 3), (4, 2), (6, 3)]
+  //   195 -> [(0, 3), (1, 3), (3, 2), (6, 3)]
+  
+  
+  public Lev3ParametricDescription(int w) {
+    super(w, 3, new int[] {0,2,3,1,1,2,0,1,1,-1,0,0,0,-1,0,-1,1,-1,0,0,-1,-2,0,-1,0,0,-1,0,-1,0,-1,-1,-2,-1,-1,-2,0,-2,-1,-2,-1,-1,-1,-1,-2,-1,-2,-2,-2,-1,-1,-1,-2,-2,-1,-2,-2,-1,-2,-1,-1,-1,-1,-1,-2,-1,-2,-2,-3,-1,-1,-3,-3,-1,-2,-2,-3,-1,-2,-2,-1,-2,-2,-2,-2,-2,-2,-3,-3,-3,-3,-2,-2,-2,-2,-2,-3,-3,-3,-2,-3,-3,-3,-2,-2,-2,-2,-2,-2,-2,-2,-3,-2,-2,-3,-2,-2,-2,-3,-2,-2,-2,-3,-2,-3,-2,-2,-3,-2,-2,-3,-2,-3,-2,-2,-3,-2,-2,-2,-2,-2,-3,-2,-2,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3});
+  }
+}

Property changes on: src\java\org\apache\lucene\util\automaton\Lev3ParametricDescription.java
___________________________________________________________________
Added: svn:eol-style
   + native

Index: src/java/org/apache/lucene/util/automaton/LevenshteinAutomata.java
===================================================================
--- src/java/org/apache/lucene/util/automaton/LevenshteinAutomata.java	(revision 0)
+++ src/java/org/apache/lucene/util/automaton/LevenshteinAutomata.java	(revision 0)
@@ -0,0 +1,257 @@
+package org.apache.lucene.util.automaton;
+
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.util.Iterator;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+import org.apache.lucene.util.automaton.Automaton;
+import org.apache.lucene.util.automaton.BasicAutomata;
+import org.apache.lucene.util.automaton.State;
+import org.apache.lucene.util.automaton.Transition;
+
+/**
+ * Class to construct DFAs that match a word within some edit distance.
+ * <p>
+ * Implements the algorithm described in:
+ * Schulz and Mihov: Fast String Correction with Levenshtein Automata
+ * <p>
+ * @lucene.experimental
+ */
+public class LevenshteinAutomata {
+  /* input word */
+  final String input;
+  final char word[];
+  /* the automata alphabet. */
+  final char alphabet[];
+
+  /* the unicode ranges outside of alphabet */
+  final char rangeLower[];
+  final char rangeUpper[];
+  int numRanges = 0;
+  
+  ParametricDescription descriptions[]; 
+  
+  /**
+   * Create a new LevenshteinAutomata for some input String.
+   */
+  public LevenshteinAutomata(String input) {
+    this.input = input;
+    this.word = input.toCharArray();
+    
+    // calculate the alphabet
+    SortedSet<Character> set = new TreeSet<Character>();
+    for (int i = 0; i < word.length; i++)
+      set.add(word[i]);
+    alphabet = new char[set.size()];
+    Iterator<Character> iterator = set.iterator();
+    for (int i = 0; i < alphabet.length; i++)
+      alphabet[i] = iterator.next();
+      
+    rangeLower = new char[alphabet.length + 2];
+    rangeUpper = new char[alphabet.length + 2];
+    // calculate the unicode range intervals that exclude the alphabet
+    // these are the ranges for all unicode characters not in the alphabet
+    int lower = 0;
+    for (int i = 0; i < alphabet.length; i++) {
+      char higher = alphabet[i];
+      if (higher > lower) {
+        rangeLower[numRanges] = (char) lower;
+        rangeUpper[numRanges] = (char) (higher - 1);
+        numRanges++;
+      }
+      lower = higher + 1;
+    }
+    /* add the final endpoint */
+    if (lower <= 0xFFFF) {
+      rangeLower[numRanges] = (char) lower;
+      rangeUpper[numRanges] = '\uFFFF';
+      numRanges++;
+    }
+
+    descriptions = new ParametricDescription[] {
+        null, /* for n=0, we do not need to go through the trouble */
+        new Lev1ParametricDescription(input.length()),
+        new Lev2ParametricDescription(input.length()),
+        new Lev3ParametricDescription(input.length())
+    };
+  }
+  
+  /**
+   * Compute a DFA that accepts all strings within an edit distance of <code>n</code>.
+   * <p>
+   * All automata have the following properties:
+   * <ul>
+   * <li>They are deterministic (DFA).
+   * <li>There are no transitions to dead states.
+   * <li>They are not minimal (some transitions could be combined).
+   * </ul>
+   * </p>
+   */
+  public Automaton toAutomaton(int n) {
+    if (n == 0)
+      return BasicAutomata.makeString(input);
+    
+    if (n >= descriptions.length)
+      return null;
+    
+    final int range = 2*n+1;
+    ParametricDescription description = descriptions[n];
+    // the number of states is based on the length of the word and n
+    State states[] = new State[description.size()];
+    // create all states, and mark as accept states if appropriate
+    for (int i = 0; i < states.length; i++) {
+      states[i] = new State();
+      states[i].setAccept(description.isAccept(i));
+    }
+    // create transitions from state to state
+    for (int k = 0; k < states.length; k++) {
+      final int xpos = description.getPosition(k);
+      if (xpos < 0)
+        continue;
+      final int end = xpos + Math.min(word.length - xpos, range);
+      
+      for (int x = 0; x < alphabet.length; x++) {
+        final char ch = alphabet[x];
+        // get the characteristic vector at this position wrt ch
+        final int cvec = getVector(ch, xpos, end);
+        int dest = description.transition(k, xpos, cvec);
+        if (dest >= 0)
+          states[k].addTransition(new Transition(ch, states[dest]));
+      }
+      // add transitions for all other chars in unicode
+      // by definition, their characteristic vectors are always 0,
+      // because they do not exist in the input string.
+      int dest = description.transition(k, xpos, 0); // by definition
+      if (dest >= 0)
+        for (int r = 0; r < numRanges; r++)
+          states[k].addTransition(new Transition(rangeLower[r], rangeUpper[r], states[dest]));      
+    }
+
+    Automaton a = new Automaton();
+    a.setInitialState(states[0]);
+    a.setDeterministic(true);
+    // we need not trim transitions to dead states, as they are not created.
+    // a.restoreInvariant();
+    return a;
+  }
+  
+  /**
+   * Get the characteristic vector <code>X(x, V)</code> 
+   * where V is <code>substring(pos, end)</code>
+   */
+  int getVector(char x, int pos, int end) {
+    int vector = 0;
+    for (int i = pos; i < end; i++) {
+      vector <<= 1;
+      if (word[i] == x)
+        vector |= 1;
+    }
+    return vector;
+  }
+    
+  /**
+   * A ParametricDescription describes the structure of a Levenshtein DFA for some degree n.
+   * <p>
+   * There are four components of a parametric description, all parameterized on the length
+   * of the word <code>w</code>:
+   * <ol>
+   * <li>The number of states: {@link #size()}
+   * <li>The set of final states: {@link #isAccept(int)}
+   * <li>The transition function: {@link #transition(int, int, int)}
+   * <li>Minimal boundary function: {@link #getPosition(int)}
+   * </ol>
+   */
+  static abstract class ParametricDescription {
+    protected final int w;
+    protected final int n;
+    private final int[] minErrors;
+    
+    ParametricDescription(int w, int n, int[] minErrors) {
+      this.w = w;
+      this.n = n;
+      this.minErrors = minErrors;
+    }
+    
+    /**
+     * Return the number of states needed to compute a Levenshtein DFA
+     */
+    int size() {
+      return minErrors.length * (w+1);
+    };
+
+    /**
+     * Returns true if the <code>state</code> in any Levenshtein DFA is an accept state (final state).
+     */
+    boolean isAccept(int absState) {
+      // decode absState -> state, offset
+      int state = absState/(w+1);
+      int offset = absState%(w+1);
+      assert offset >= 0;
+      return w - offset + minErrors[state] <= n;
+    }
+
+    /**
+     * Returns the position in the input word for a given <code>state</code>.
+     * This is the minimal boundary for the state.
+     */
+    int getPosition(int absState) {
+      return absState % (w+1);
+    }
+    
+    /**
+     * Returns the state number for a transition from the given <code>state</code>,
+     * assuming <code>position</code> and characteristic vector <code>vector</code>
+     */
+    abstract int transition(int state, int position, int vector);
+
+    private final static long[] MASKS = new long[] {0x1,0x3,0x7,0xf,
+                                                    0x1f,0x3f,0x7f,0xff,
+                                                    0x1ff,0x3ff,0x7ff,0xfff,
+                                                    0x1fff,0x3fff,0x7fff,0xffff,
+                                                    0x1ffff,0x3ffff,0x7ffff,0xfffff,
+                                                    0x1fffff,0x3fffff,0x7fffff,0xffffff,
+                                                    0x1ffffff,0x3ffffff,0x7ffffff,0xfffffff,
+                                                    0x1fffffff,0x3fffffff,0x7fffffffL,0xffffffffL,
+                                                    0x1ffffffffL,0x3ffffffffL,0x7ffffffffL,0xfffffffffL,
+                                                    0x1fffffffffL,0x3fffffffffL,0x7fffffffffL,0xffffffffffL,
+                                                    0x1ffffffffffL,0x3ffffffffffL,0x7ffffffffffL,0xfffffffffffL,
+                                                    0x1fffffffffffL,0x3fffffffffffL,0x7fffffffffffL,0xffffffffffffL,
+                                                    0x1ffffffffffffL,0x3ffffffffffffL,0x7ffffffffffffL,0xfffffffffffffL,
+                                                    0x1fffffffffffffL,0x3fffffffffffffL,0x7fffffffffffffL,0xffffffffffffffL,
+                                                    0x1ffffffffffffffL,0x3ffffffffffffffL,0x7ffffffffffffffL,0xfffffffffffffffL,
+                                                    0x1fffffffffffffffL,0x3fffffffffffffffL,0x7fffffffffffffffL};
+  
+    protected int unpack(long[] data, int index, int bitsPerValue) {
+      final long bitLoc = bitsPerValue * index;
+      final int dataLoc = (int) (bitLoc >> 6);
+      final int bitStart = (int) (bitLoc & 63);
+      //System.out.println("index=" + index + " dataLoc=" + dataLoc + " bitStart=" + bitStart + " bitsPerV=" + bitsPerValue);
+      if (bitStart + bitsPerValue <= 64) {
+        // not split
+        return (int) ((data[dataLoc] >> bitStart) & MASKS[bitsPerValue-1]);
+      } else {
+        // split
+        final int part = 64-bitStart;
+        return (int) (((data[dataLoc] >> bitStart) & MASKS[part-1]) +
+                      ((data[1+dataLoc] & MASKS[bitsPerValue-part-1]) << part));
+      }
+    }
+  }
+}

Property changes on: src\java\org\apache\lucene\util\automaton\LevenshteinAutomata.java
___________________________________________________________________
Added: svn:eol-style
   + native

Index: src/test/org/apache/lucene/util/automaton/TestLevenshteinAutomata.java
===================================================================
--- src/test/org/apache/lucene/util/automaton/TestLevenshteinAutomata.java	(revision 0)
+++ src/test/org/apache/lucene/util/automaton/TestLevenshteinAutomata.java	(revision 0)
@@ -0,0 +1,269 @@
+package org.apache.lucene.util.automaton;
+
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.lucene.util.LuceneTestCase;
+import org.apache.lucene.util.automaton.Automaton;
+import org.apache.lucene.util.automaton.BasicAutomata;
+import org.apache.lucene.util.automaton.BasicOperations;
+import org.apache.lucene.util.automaton.MinimizationOperations;
+
+public class TestLevenshteinAutomata extends LuceneTestCase {
+   
+  public void testLev2Bug() throws Exception {
+    LevenshteinAutomata la = new LevenshteinAutomata("1001");
+    Automaton a1 = la.toAutomaton(2);
+    assertTrue(BasicOperations.run(a1, "111"));
+    //assertBruteForce("1001", a1, 2);
+  }
+  
+  public void testLev0() throws Exception {
+    assertLev("", 0);
+    assertCharVectors(0);
+  }
+  
+  public void testLev1() throws Exception {
+    assertLev("", 1);
+    assertCharVectors(1);
+  }
+  
+  public void testLev2() throws Exception {
+    assertLev("", 2);
+    assertCharVectors(2);
+  }
+  
+  public void testLev3() throws Exception {
+    assertLev("", 3);
+    assertCharVectors(3);
+  }
+  
+  /** 
+   * Tests all possible characteristic vectors for some n
+   * This exhaustively tests the parametric transitions tables.
+   */
+  private void assertCharVectors(int n) {
+    int k = 2*n + 1;
+    // use k + 2 as the exponent: the formula generates different transitions
+    // for w, w-1, w-2
+    int limit = (int) Math.pow(2, k + 2);
+    for (int i = 0; i < limit; i++) {
+      String encoded = Integer.toString(i, 2);
+      assertLev(encoded, n);
+    }
+  }
+
+  private void assertLev(String s, int maxDistance) {
+    LevenshteinAutomata builder = new LevenshteinAutomata(s);
+    Automaton automata[] = new Automaton[maxDistance + 1];
+    for (int n = 0; n < automata.length; n++) {
+      automata[n] = builder.toAutomaton(n);
+      assertNotNull(automata[n]);
+      assertTrue(automata[n].isDeterministic());
+      assertTrue(SpecialOperations.isFinite(automata[n]));
+      // check that the dfa for n-1 accepts a subset of the dfa for n
+      if (n > 0) {
+        assertTrue(automata[n-1].subsetOf(automata[n]));
+        assertNotSame(automata[n-1], automata[n]);
+      }
+      // special checks for specific n
+      switch(n) {
+        case 0:
+          // easy, matches the string itself
+          assertEquals(BasicAutomata.makeString(s), automata[0]);
+          break;
+        case 1:
+          // generate a lev1 naively, and check the accepted lang is the same.
+          assertEquals(naiveLev1(s), automata[1]);
+          break;
+        default:
+          assertBruteForce(s, automata[n], n);
+          break;
+      }
+    }
+  }
+  
+  /**
+   * Return an automaton that accepts all 1-character insertions, deletions, and
+   * substitutions of s.
+   */
+  private Automaton naiveLev1(String s) {
+    Automaton a = BasicAutomata.makeString(s);
+    a = BasicOperations.union(a, insertionsOf(s));
+    MinimizationOperations.minimize(a);
+    a = BasicOperations.union(a, deletionsOf(s));
+    MinimizationOperations.minimize(a);
+    a = BasicOperations.union(a, substitutionsOf(s));
+    MinimizationOperations.minimize(a);
+    
+    return a;
+  }
+  
+  /**
+   * Return an automaton that accepts all 1-character insertions of s (inserting
+   * one character)
+   */
+  private Automaton insertionsOf(String s) {
+    List<Automaton> list = new ArrayList<Automaton>();
+    
+    for (int i = 0; i <= s.length(); i++) {
+      Automaton a = BasicAutomata.makeString(s.substring(0, i));
+      a = BasicOperations.concatenate(a, BasicAutomata.makeAnyChar());
+      a = BasicOperations.concatenate(a, BasicAutomata.makeString(s
+          .substring(i)));
+      list.add(a);
+    }
+    
+    Automaton a = BasicOperations.union(list);
+    MinimizationOperations.minimize(a);
+    return a;
+  }
+  
+  /**
+   * Return an automaton that accepts all 1-character deletions of s (deleting
+   * one character).
+   */
+  private Automaton deletionsOf(String s) {
+    List<Automaton> list = new ArrayList<Automaton>();
+    
+    for (int i = 0; i < s.length(); i++) {
+      Automaton a = BasicAutomata.makeString(s.substring(0, i));
+      a = BasicOperations.concatenate(a, BasicAutomata.makeString(s
+          .substring(i + 1)));
+      a.expandSingleton();
+      list.add(a);
+    }
+    
+    Automaton a = BasicOperations.union(list);
+    MinimizationOperations.minimize(a);
+    return a;
+  }
+  
+  /**
+   * Return an automaton that accepts all 1-character substitutions of s
+   * (replacing one character)
+   */
+  private Automaton substitutionsOf(String s) {
+    List<Automaton> list = new ArrayList<Automaton>();
+    
+    for (int i = 0; i < s.length(); i++) {
+      Automaton a = BasicAutomata.makeString(s.substring(0, i));
+      a = BasicOperations.concatenate(a, BasicAutomata.makeAnyChar());
+      a = BasicOperations.concatenate(a, BasicAutomata.makeString(s
+          .substring(i + 1)));
+      list.add(a);
+    }
+    
+    Automaton a = BasicOperations.union(list);
+    MinimizationOperations.minimize(a);
+    return a;
+  }
+  
+  private void assertBruteForce(String input, Automaton dfa, int distance) {
+    RunAutomaton ra = new RunAutomaton(dfa);
+    int maxLen = input.length() + distance + 1;
+    int maxNum = (int) Math.pow(2, maxLen);
+    for (int i = 0; i < maxNum; i++) {
+      String encoded = Integer.toString(i, 2);
+      boolean accepts = ra.run(encoded);
+      if (accepts) {
+        assertTrue(getDistance(input, encoded) <= distance);
+      } else {
+        assertTrue(getDistance(input, encoded) > distance);
+      }
+    }
+  }
+  
+  //*****************************
+  // Compute Levenshtein distance: see org.apache.commons.lang.StringUtils#getLevenshteinDistance(String, String)
+  //*****************************
+  private int getDistance (String target, String other) {
+    char[] sa;
+    int n;
+    int p[]; //'previous' cost array, horizontally
+    int d[]; // cost array, horizontally
+    int _d[]; //placeholder to assist in swapping p and d
+    
+      /*
+         The difference between this impl. and the previous is that, rather
+         than creating and retaining a matrix of size s.length()+1 by t.length()+1,
+         we maintain two single-dimensional arrays of length s.length()+1.  The first, d,
+         is the 'current working' distance array that maintains the newest distance cost
+         counts as we iterate through the characters of String s.  Each time we increment
+         the index of String t we are comparing, d is copied to p, the second int[].  Doing so
+         allows us to retain the previous cost counts as required by the algorithm (taking
+         the minimum of the cost count to the left, up one, and diagonally up and to the left
+         of the current cost count being calculated).  (Note that the arrays aren't really
+         copied anymore, just switched...this is clearly much better than cloning an array
+         or doing a System.arraycopy() each time  through the outer loop.)
+
+         Effectively, the difference between the two implementations is this one does not
+         cause an out of memory condition when calculating the LD over two very large strings.
+       */
+
+      sa = target.toCharArray();
+      n = sa.length;
+      p = new int[n+1]; 
+      d = new int[n+1]; 
+    
+      final int m = other.length();
+      if (n == 0 || m == 0) {
+        if (n == m) {
+          return 0;
+        }
+        else {
+          return Math.max(n, m);
+        }
+      } 
+
+
+      // indexes into strings s and t
+      int i; // iterates through s
+      int j; // iterates through t
+
+      char t_j; // jth character of t
+
+      int cost; // cost
+
+      for (i = 0; i<=n; i++) {
+          p[i] = i;
+      }
+
+      for (j = 1; j<=m; j++) {
+          t_j = other.charAt(j-1);
+          d[0] = j;
+
+          for (i=1; i<=n; i++) {
+              cost = sa[i-1]==t_j ? 0 : 1;
+              // minimum of cell to the left+1, to the top+1, diagonally left and up +cost
+              d[i] = Math.min(Math.min(d[i-1]+1, p[i]+1),  p[i-1]+cost);
+          }
+
+          // copy current distance counts to 'previous row' distance counts
+          _d = p;
+          p = d;
+          d = _d;
+      }
+
+      // our last action in the above loop was to switch d and p, so p now
+      // actually has the most recent cost counts
+      return Math.abs(p[n]);
+  }
+}

Property changes on: src\test\org\apache\lucene\util\automaton\TestLevenshteinAutomata.java
___________________________________________________________________
Added: svn:eol-style
   + native

