UbcCheck.java

  1. /*
  2. * Copyright 2017 Marc Stevens <marc@marc-stevens.nl>, Dan Shumow <danshu@microsoft.com>
  3. * Distributed under the MIT Software License.
  4. * MIT License
  5. *
  6. * Copyright (c) 2017:
  7. *     Marc Stevens
  8. *     Cryptology Group
  9. *     Centrum Wiskunde & Informatica
  10. *     P.O. Box 94079, 1090 GB Amsterdam, Netherlands
  11. *     marc@marc-stevens.nl
  12. *
  13. *     Dan Shumow
  14. *     Microsoft Research
  15. *     danshu@microsoft.com
  16. *
  17. * Permission is hereby granted, free of charge, to any person obtaining a copy
  18. * of this software and associated documentation files (the "Software"), to deal
  19. * in the Software without restriction, including without limitation the rights
  20. * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  21. * copies of the Software, and to permit persons to whom the Software is
  22. * furnished to do so, subject to the following conditions:
  23. *
  24. * The above copyright notice and this permission notice shall be included in all
  25. * copies or substantial portions of the Software.
  26. *
  27. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  28. * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  29. * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  30. * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  31. * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  32. * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  33. * SOFTWARE.
  34. */

  35. package org.eclipse.jgit.util.sha1;

  36. // Converted by hand by Shawn Pearce (Google), using lib/ubc_check.c from
  37. // https://github.com/cr-marcstevens/sha1collisiondetection/
  38. //
  39. // this file was generated by the 'parse_bitrel' program in the tools section
  40. // using the data files from directory 'tools/data/3565'
  41. //
  42. // Array DV contains a list of SHA-1 Disturbance Vectors (DV) to check
  43. // dvType, dvK and dvB define the DV: I(K,B) or II(K,B) (see the paper)
  44. // dm[80] is the expanded message block XOR-difference defined by the DV
  45. // testt is the step to do the recompression from for collision detection
  46. // maski and maskb define the bit to check for each DV in the dvmask returned by ubc_check
  47. //
  48. // ubc_check takes as input an expanded message block and verifies the unavoidable bitconditions for all listed DVs
  49. // it returns a dvmask where each bit belonging to a DV is set if all unavoidable bitconditions for that DV have been met
  50. // thus one needs to do the recompression check for each DV that has its bit set
  51. //
  52. // ubc_check is programmatically generated and the unavoidable bitconditions have been hardcoded
  53. // a directly verifiable version named ubc_check_verify can be found in ubc_check_verify.c
  54. // ubc_check has been verified against ubc_check_verify using the 'ubc_check_test' program in the tools section

  55. final class UbcCheck {
  56.     private static final int DV_I_43_0_bit = 1 << 0;
  57.     private static final int DV_I_44_0_bit = 1 << 1;
  58.     private static final int DV_I_45_0_bit = 1 << 2;
  59.     private static final int DV_I_46_0_bit = 1 << 3;
  60.     private static final int DV_I_46_2_bit = 1 << 4;
  61.     private static final int DV_I_47_0_bit = 1 << 5;
  62.     private static final int DV_I_47_2_bit = 1 << 6;
  63.     private static final int DV_I_48_0_bit = 1 << 7;
  64.     private static final int DV_I_48_2_bit = 1 << 8;
  65.     private static final int DV_I_49_0_bit = 1 << 9;
  66.     private static final int DV_I_49_2_bit = 1 << 10;
  67.     private static final int DV_I_50_0_bit = 1 << 11;
  68.     private static final int DV_I_50_2_bit = 1 << 12;
  69.     private static final int DV_I_51_0_bit = 1 << 13;
  70.     private static final int DV_I_51_2_bit = 1 << 14;
  71.     private static final int DV_I_52_0_bit = 1 << 15;
  72.     private static final int DV_II_45_0_bit = 1 << 16;
  73.     private static final int DV_II_46_0_bit = 1 << 17;
  74.     private static final int DV_II_46_2_bit = 1 << 18;
  75.     private static final int DV_II_47_0_bit = 1 << 19;
  76.     private static final int DV_II_48_0_bit = 1 << 20;
  77.     private static final int DV_II_49_0_bit = 1 << 21;
  78.     private static final int DV_II_49_2_bit = 1 << 22;
  79.     private static final int DV_II_50_0_bit = 1 << 23;
  80.     private static final int DV_II_50_2_bit = 1 << 24;
  81.     private static final int DV_II_51_0_bit = 1 << 25;
  82.     private static final int DV_II_51_2_bit = 1 << 26;
  83.     private static final int DV_II_52_0_bit = 1 << 27;
  84.     private static final int DV_II_53_0_bit = 1 << 28;
  85.     private static final int DV_II_54_0_bit = 1 << 29;
  86.     private static final int DV_II_55_0_bit = 1 << 30;
  87.     private static final int DV_II_56_0_bit = 1 << 31;

  88.     static int check(int[] w) {
  89.         int mask = ~0;
  90.         mask &= (((((w[44] ^ w[45]) >>> 29) & 1) - 1) | ~(DV_I_48_0_bit
  91.                 | DV_I_51_0_bit | DV_I_52_0_bit | DV_II_45_0_bit
  92.                 | DV_II_46_0_bit | DV_II_50_0_bit | DV_II_51_0_bit));
  93.         mask &= (((((w[49] ^ w[50]) >>> 29) & 1) - 1)
  94.                 | ~(DV_I_46_0_bit | DV_II_45_0_bit | DV_II_50_0_bit
  95.                         | DV_II_51_0_bit | DV_II_55_0_bit | DV_II_56_0_bit));
  96.         mask &= (((((w[48] ^ w[49]) >>> 29) & 1) - 1)
  97.                 | ~(DV_I_45_0_bit | DV_I_52_0_bit | DV_II_49_0_bit
  98.                         | DV_II_50_0_bit | DV_II_54_0_bit | DV_II_55_0_bit));
  99.         mask &= ((((w[47] ^ (w[50] >>> 25)) & (1 << 4)) - (1 << 4))
  100.                 | ~(DV_I_47_0_bit | DV_I_49_0_bit | DV_I_51_0_bit
  101.                         | DV_II_45_0_bit | DV_II_51_0_bit | DV_II_56_0_bit));
  102.         mask &= (((((w[47] ^ w[48]) >>> 29) & 1) - 1)
  103.                 | ~(DV_I_44_0_bit | DV_I_51_0_bit | DV_II_48_0_bit
  104.                         | DV_II_49_0_bit | DV_II_53_0_bit | DV_II_54_0_bit));
  105.         mask &= (((((w[46] >>> 4) ^ (w[49] >>> 29)) & 1) - 1)
  106.                 | ~(DV_I_46_0_bit | DV_I_48_0_bit | DV_I_50_0_bit
  107.                         | DV_I_52_0_bit | DV_II_50_0_bit | DV_II_55_0_bit));
  108.         mask &= (((((w[46] ^ w[47]) >>> 29) & 1) - 1)
  109.                 | ~(DV_I_43_0_bit | DV_I_50_0_bit | DV_II_47_0_bit
  110.                         | DV_II_48_0_bit | DV_II_52_0_bit | DV_II_53_0_bit));
  111.         mask &= (((((w[45] >>> 4) ^ (w[48] >>> 29)) & 1) - 1)
  112.                 | ~(DV_I_45_0_bit | DV_I_47_0_bit | DV_I_49_0_bit
  113.                         | DV_I_51_0_bit | DV_II_49_0_bit | DV_II_54_0_bit));
  114.         mask &= (((((w[45] ^ w[46]) >>> 29) & 1) - 1)
  115.                 | ~(DV_I_49_0_bit | DV_I_52_0_bit | DV_II_46_0_bit
  116.                         | DV_II_47_0_bit | DV_II_51_0_bit | DV_II_52_0_bit));
  117.         mask &= (((((w[44] >>> 4) ^ (w[47] >>> 29)) & 1) - 1)
  118.                 | ~(DV_I_44_0_bit | DV_I_46_0_bit | DV_I_48_0_bit
  119.                         | DV_I_50_0_bit | DV_II_48_0_bit | DV_II_53_0_bit));
  120.         mask &= (((((w[43] >>> 4) ^ (w[46] >>> 29)) & 1) - 1)
  121.                 | ~(DV_I_43_0_bit | DV_I_45_0_bit | DV_I_47_0_bit
  122.                         | DV_I_49_0_bit | DV_II_47_0_bit | DV_II_52_0_bit));
  123.         mask &= (((((w[43] ^ w[44]) >>> 29) & 1) - 1)
  124.                 | ~(DV_I_47_0_bit | DV_I_50_0_bit | DV_I_51_0_bit
  125.                         | DV_II_45_0_bit | DV_II_49_0_bit | DV_II_50_0_bit));
  126.         mask &= (((((w[42] >>> 4) ^ (w[45] >>> 29)) & 1) - 1)
  127.                 | ~(DV_I_44_0_bit | DV_I_46_0_bit | DV_I_48_0_bit
  128.                         | DV_I_52_0_bit | DV_II_46_0_bit | DV_II_51_0_bit));
  129.         mask &= (((((w[41] >>> 4) ^ (w[44] >>> 29)) & 1) - 1)
  130.                 | ~(DV_I_43_0_bit | DV_I_45_0_bit | DV_I_47_0_bit
  131.                         | DV_I_51_0_bit | DV_II_45_0_bit | DV_II_50_0_bit));
  132.         mask &= (((((w[40] ^ w[41]) >>> 29) & 1) - 1)
  133.                 | ~(DV_I_44_0_bit | DV_I_47_0_bit | DV_I_48_0_bit
  134.                         | DV_II_46_0_bit | DV_II_47_0_bit | DV_II_56_0_bit));
  135.         mask &= (((((w[54] ^ w[55]) >>> 29) & 1) - 1)
  136.                 | ~(DV_I_51_0_bit | DV_II_47_0_bit | DV_II_50_0_bit
  137.                         | DV_II_55_0_bit | DV_II_56_0_bit));
  138.         mask &= (((((w[53] ^ w[54]) >>> 29) & 1) - 1)
  139.                 | ~(DV_I_50_0_bit | DV_II_46_0_bit | DV_II_49_0_bit
  140.                         | DV_II_54_0_bit | DV_II_55_0_bit));
  141.         mask &= (((((w[52] ^ w[53]) >>> 29) & 1) - 1)
  142.                 | ~(DV_I_49_0_bit | DV_II_45_0_bit | DV_II_48_0_bit
  143.                         | DV_II_53_0_bit | DV_II_54_0_bit));
  144.         mask &= ((((w[50] ^ (w[53] >>> 25)) & (1 << 4)) - (1 << 4))
  145.                 | ~(DV_I_50_0_bit | DV_I_52_0_bit | DV_II_46_0_bit
  146.                         | DV_II_48_0_bit | DV_II_54_0_bit));
  147.         mask &= (((((w[50] ^ w[51]) >>> 29) & 1) - 1)
  148.                 | ~(DV_I_47_0_bit | DV_II_46_0_bit | DV_II_51_0_bit
  149.                         | DV_II_52_0_bit | DV_II_56_0_bit));
  150.         mask &= ((((w[49] ^ (w[52] >>> 25)) & (1 << 4)) - (1 << 4))
  151.                 | ~(DV_I_49_0_bit | DV_I_51_0_bit | DV_II_45_0_bit
  152.                         | DV_II_47_0_bit | DV_II_53_0_bit));
  153.         mask &= ((((w[48] ^ (w[51] >>> 25)) & (1 << 4)) - (1 << 4))
  154.                 | ~(DV_I_48_0_bit | DV_I_50_0_bit | DV_I_52_0_bit
  155.                         | DV_II_46_0_bit | DV_II_52_0_bit));
  156.         mask &= (((((w[42] ^ w[43]) >>> 29) & 1) - 1)
  157.                 | ~(DV_I_46_0_bit | DV_I_49_0_bit | DV_I_50_0_bit
  158.                         | DV_II_48_0_bit | DV_II_49_0_bit));
  159.         mask &= (((((w[41] ^ w[42]) >>> 29) & 1) - 1)
  160.                 | ~(DV_I_45_0_bit | DV_I_48_0_bit | DV_I_49_0_bit
  161.                         | DV_II_47_0_bit | DV_II_48_0_bit));
  162.         mask &= (((((w[40] >>> 4) ^ (w[43] >>> 29)) & 1) - 1)
  163.                 | ~(DV_I_44_0_bit | DV_I_46_0_bit | DV_I_50_0_bit
  164.                         | DV_II_49_0_bit | DV_II_56_0_bit));
  165.         mask &= (((((w[39] >>> 4) ^ (w[42] >>> 29)) & 1) - 1)
  166.                 | ~(DV_I_43_0_bit | DV_I_45_0_bit | DV_I_49_0_bit
  167.                         | DV_II_48_0_bit | DV_II_55_0_bit));
  168.         if ((mask & (DV_I_44_0_bit | DV_I_48_0_bit | DV_II_47_0_bit
  169.                 | DV_II_54_0_bit | DV_II_56_0_bit)) != 0)
  170.             mask &= (((((w[38] >>> 4) ^ (w[41] >>> 29)) & 1) - 1)
  171.                     | ~(DV_I_44_0_bit | DV_I_48_0_bit | DV_II_47_0_bit
  172.                             | DV_II_54_0_bit | DV_II_56_0_bit));
  173.         mask &= (((((w[37] >>> 4) ^ (w[40] >>> 29)) & 1) - 1)
  174.                 | ~(DV_I_43_0_bit | DV_I_47_0_bit | DV_II_46_0_bit
  175.                         | DV_II_53_0_bit | DV_II_55_0_bit));
  176.         if ((mask & (DV_I_52_0_bit | DV_II_48_0_bit | DV_II_51_0_bit
  177.                 | DV_II_56_0_bit)) != 0)
  178.             mask &= (((((w[55] ^ w[56]) >>> 29) & 1) - 1) | ~(DV_I_52_0_bit
  179.                     | DV_II_48_0_bit | DV_II_51_0_bit | DV_II_56_0_bit));
  180.         if ((mask & (DV_I_52_0_bit | DV_II_48_0_bit | DV_II_50_0_bit
  181.                 | DV_II_56_0_bit)) != 0)
  182.             mask &= ((((w[52] ^ (w[55] >>> 25)) & (1 << 4)) - (1 << 4))
  183.                     | ~(DV_I_52_0_bit | DV_II_48_0_bit | DV_II_50_0_bit
  184.                             | DV_II_56_0_bit));
  185.         if ((mask & (DV_I_51_0_bit | DV_II_47_0_bit | DV_II_49_0_bit
  186.                 | DV_II_55_0_bit)) != 0)
  187.             mask &= ((((w[51] ^ (w[54] >>> 25)) & (1 << 4)) - (1 << 4))
  188.                     | ~(DV_I_51_0_bit | DV_II_47_0_bit | DV_II_49_0_bit
  189.                             | DV_II_55_0_bit));
  190.         if ((mask & (DV_I_48_0_bit | DV_II_47_0_bit | DV_II_52_0_bit
  191.                 | DV_II_53_0_bit)) != 0)
  192.             mask &= (((((w[51] ^ w[52]) >>> 29) & 1) - 1) | ~(DV_I_48_0_bit
  193.                     | DV_II_47_0_bit | DV_II_52_0_bit | DV_II_53_0_bit));
  194.         if ((mask & (DV_I_46_0_bit | DV_I_49_0_bit | DV_II_45_0_bit
  195.                 | DV_II_48_0_bit)) != 0)
  196.             mask &= (((((w[36] >>> 4) ^ (w[40] >>> 29)) & 1) - 1)
  197.                     | ~(DV_I_46_0_bit | DV_I_49_0_bit | DV_II_45_0_bit
  198.                             | DV_II_48_0_bit));
  199.         if ((mask & (DV_I_52_0_bit | DV_II_48_0_bit | DV_II_49_0_bit)) != 0)
  200.             mask &= ((0 - (((w[53] ^ w[56]) >>> 29) & 1))
  201.                     | ~(DV_I_52_0_bit | DV_II_48_0_bit | DV_II_49_0_bit));
  202.         if ((mask & (DV_I_50_0_bit | DV_II_46_0_bit | DV_II_47_0_bit)) != 0)
  203.             mask &= ((0 - (((w[51] ^ w[54]) >>> 29) & 1))
  204.                     | ~(DV_I_50_0_bit | DV_II_46_0_bit | DV_II_47_0_bit));
  205.         if ((mask & (DV_I_49_0_bit | DV_I_51_0_bit | DV_II_45_0_bit)) != 0)
  206.             mask &= ((0 - (((w[50] ^ w[52]) >>> 29) & 1))
  207.                     | ~(DV_I_49_0_bit | DV_I_51_0_bit | DV_II_45_0_bit));
  208.         if ((mask & (DV_I_48_0_bit | DV_I_50_0_bit | DV_I_52_0_bit)) != 0)
  209.             mask &= ((0 - (((w[49] ^ w[51]) >>> 29) & 1))
  210.                     | ~(DV_I_48_0_bit | DV_I_50_0_bit | DV_I_52_0_bit));
  211.         if ((mask & (DV_I_47_0_bit | DV_I_49_0_bit | DV_I_51_0_bit)) != 0)
  212.             mask &= ((0 - (((w[48] ^ w[50]) >>> 29) & 1))
  213.                     | ~(DV_I_47_0_bit | DV_I_49_0_bit | DV_I_51_0_bit));
  214.         if ((mask & (DV_I_46_0_bit | DV_I_48_0_bit | DV_I_50_0_bit)) != 0)
  215.             mask &= ((0 - (((w[47] ^ w[49]) >>> 29) & 1))
  216.                     | ~(DV_I_46_0_bit | DV_I_48_0_bit | DV_I_50_0_bit));
  217.         if ((mask & (DV_I_45_0_bit | DV_I_47_0_bit | DV_I_49_0_bit)) != 0)
  218.             mask &= ((0 - (((w[46] ^ w[48]) >>> 29) & 1))
  219.                     | ~(DV_I_45_0_bit | DV_I_47_0_bit | DV_I_49_0_bit));
  220.         mask &= ((((w[45] ^ w[47]) & (1 << 6)) - (1 << 6))
  221.                 | ~(DV_I_47_2_bit | DV_I_49_2_bit | DV_I_51_2_bit));
  222.         if ((mask & (DV_I_44_0_bit | DV_I_46_0_bit | DV_I_48_0_bit)) != 0)
  223.             mask &= ((0 - (((w[45] ^ w[47]) >>> 29) & 1))
  224.                     | ~(DV_I_44_0_bit | DV_I_46_0_bit | DV_I_48_0_bit));
  225.         mask &= (((((w[44] ^ w[46]) >>> 6) & 1) - 1)
  226.                 | ~(DV_I_46_2_bit | DV_I_48_2_bit | DV_I_50_2_bit));
  227.         if ((mask & (DV_I_43_0_bit | DV_I_45_0_bit | DV_I_47_0_bit)) != 0)
  228.             mask &= ((0 - (((w[44] ^ w[46]) >>> 29) & 1))
  229.                     | ~(DV_I_43_0_bit | DV_I_45_0_bit | DV_I_47_0_bit));
  230.         mask &= ((0 - ((w[41] ^ (w[42] >>> 5)) & (1 << 1)))
  231.                 | ~(DV_I_48_2_bit | DV_II_46_2_bit | DV_II_51_2_bit));
  232.         mask &= ((0 - ((w[40] ^ (w[41] >>> 5)) & (1 << 1)))
  233.                 | ~(DV_I_47_2_bit | DV_I_51_2_bit | DV_II_50_2_bit));
  234.         if ((mask & (DV_I_44_0_bit | DV_I_46_0_bit | DV_II_56_0_bit)) != 0)
  235.             mask &= ((0 - (((w[40] ^ w[42]) >>> 4) & 1))
  236.                     | ~(DV_I_44_0_bit | DV_I_46_0_bit | DV_II_56_0_bit));
  237.         mask &= ((0 - ((w[39] ^ (w[40] >>> 5)) & (1 << 1)))
  238.                 | ~(DV_I_46_2_bit | DV_I_50_2_bit | DV_II_49_2_bit));
  239.         if ((mask & (DV_I_43_0_bit | DV_I_45_0_bit | DV_II_55_0_bit)) != 0)
  240.             mask &= ((0 - (((w[39] ^ w[41]) >>> 4) & 1))
  241.                     | ~(DV_I_43_0_bit | DV_I_45_0_bit | DV_II_55_0_bit));
  242.         if ((mask & (DV_I_44_0_bit | DV_II_54_0_bit | DV_II_56_0_bit)) != 0)
  243.             mask &= ((0 - (((w[38] ^ w[40]) >>> 4) & 1))
  244.                     | ~(DV_I_44_0_bit | DV_II_54_0_bit | DV_II_56_0_bit));
  245.         if ((mask & (DV_I_43_0_bit | DV_II_53_0_bit | DV_II_55_0_bit)) != 0)
  246.             mask &= ((0 - (((w[37] ^ w[39]) >>> 4) & 1))
  247.                     | ~(DV_I_43_0_bit | DV_II_53_0_bit | DV_II_55_0_bit));
  248.         mask &= ((0 - ((w[36] ^ (w[37] >>> 5)) & (1 << 1)))
  249.                 | ~(DV_I_47_2_bit | DV_I_50_2_bit | DV_II_46_2_bit));
  250.         if ((mask & (DV_I_45_0_bit | DV_I_48_0_bit | DV_II_47_0_bit)) != 0)
  251.             mask &= (((((w[35] >>> 4) ^ (w[39] >>> 29)) & 1) - 1)
  252.                     | ~(DV_I_45_0_bit | DV_I_48_0_bit | DV_II_47_0_bit));
  253.         if ((mask & (DV_I_48_0_bit | DV_II_48_0_bit)) != 0)
  254.             mask &= ((0 - ((w[63] ^ (w[64] >>> 5)) & (1 << 0)))
  255.                     | ~(DV_I_48_0_bit | DV_II_48_0_bit));
  256.         if ((mask & (DV_I_45_0_bit | DV_II_45_0_bit)) != 0)
  257.             mask &= ((0 - ((w[63] ^ (w[64] >>> 5)) & (1 << 1)))
  258.                     | ~(DV_I_45_0_bit | DV_II_45_0_bit));
  259.         if ((mask & (DV_I_47_0_bit | DV_II_47_0_bit)) != 0)
  260.             mask &= ((0 - ((w[62] ^ (w[63] >>> 5)) & (1 << 0)))
  261.                     | ~(DV_I_47_0_bit | DV_II_47_0_bit));
  262.         if ((mask & (DV_I_46_0_bit | DV_II_46_0_bit)) != 0)
  263.             mask &= ((0 - ((w[61] ^ (w[62] >>> 5)) & (1 << 0)))
  264.                     | ~(DV_I_46_0_bit | DV_II_46_0_bit));
  265.         mask &= ((0 - ((w[61] ^ (w[62] >>> 5)) & (1 << 2)))
  266.                 | ~(DV_I_46_2_bit | DV_II_46_2_bit));
  267.         if ((mask & (DV_I_45_0_bit | DV_II_45_0_bit)) != 0)
  268.             mask &= ((0 - ((w[60] ^ (w[61] >>> 5)) & (1 << 0)))
  269.                     | ~(DV_I_45_0_bit | DV_II_45_0_bit));
  270.         if ((mask & (DV_II_51_0_bit | DV_II_54_0_bit)) != 0)
  271.             mask &= (((((w[58] ^ w[59]) >>> 29) & 1) - 1)
  272.                     | ~(DV_II_51_0_bit | DV_II_54_0_bit));
  273.         if ((mask & (DV_II_50_0_bit | DV_II_53_0_bit)) != 0)
  274.             mask &= (((((w[57] ^ w[58]) >>> 29) & 1) - 1)
  275.                     | ~(DV_II_50_0_bit | DV_II_53_0_bit));
  276.         if ((mask & (DV_II_52_0_bit | DV_II_54_0_bit)) != 0)
  277.             mask &= ((((w[56] ^ (w[59] >>> 25)) & (1 << 4)) - (1 << 4))
  278.                     | ~(DV_II_52_0_bit | DV_II_54_0_bit));
  279.         if ((mask & (DV_II_51_0_bit | DV_II_52_0_bit)) != 0)
  280.             mask &= ((0 - (((w[56] ^ w[59]) >>> 29) & 1))
  281.                     | ~(DV_II_51_0_bit | DV_II_52_0_bit));
  282.         if ((mask & (DV_II_49_0_bit | DV_II_52_0_bit)) != 0)
  283.             mask &= (((((w[56] ^ w[57]) >>> 29) & 1) - 1)
  284.                     | ~(DV_II_49_0_bit | DV_II_52_0_bit));
  285.         if ((mask & (DV_II_51_0_bit | DV_II_53_0_bit)) != 0)
  286.             mask &= ((((w[55] ^ (w[58] >>> 25)) & (1 << 4)) - (1 << 4))
  287.                     | ~(DV_II_51_0_bit | DV_II_53_0_bit));
  288.         if ((mask & (DV_II_50_0_bit | DV_II_52_0_bit)) != 0)
  289.             mask &= ((((w[54] ^ (w[57] >>> 25)) & (1 << 4)) - (1 << 4))
  290.                     | ~(DV_II_50_0_bit | DV_II_52_0_bit));
  291.         if ((mask & (DV_II_49_0_bit | DV_II_51_0_bit)) != 0)
  292.             mask &= ((((w[53] ^ (w[56] >>> 25)) & (1 << 4)) - (1 << 4))
  293.                     | ~(DV_II_49_0_bit | DV_II_51_0_bit));
  294.         mask &= ((((w[51] ^ (w[50] >>> 5)) & (1 << 1)) - (1 << 1))
  295.                 | ~(DV_I_50_2_bit | DV_II_46_2_bit));
  296.         mask &= ((((w[48] ^ w[50]) & (1 << 6)) - (1 << 6))
  297.                 | ~(DV_I_50_2_bit | DV_II_46_2_bit));
  298.         if ((mask & (DV_I_51_0_bit | DV_I_52_0_bit)) != 0)
  299.             mask &= ((0 - (((w[48] ^ w[55]) >>> 29) & 1))
  300.                     | ~(DV_I_51_0_bit | DV_I_52_0_bit));
  301.         mask &= ((((w[47] ^ w[49]) & (1 << 6)) - (1 << 6))
  302.                 | ~(DV_I_49_2_bit | DV_I_51_2_bit));
  303.         mask &= ((((w[48] ^ (w[47] >>> 5)) & (1 << 1)) - (1 << 1))
  304.                 | ~(DV_I_47_2_bit | DV_II_51_2_bit));
  305.         mask &= ((((w[46] ^ w[48]) & (1 << 6)) - (1 << 6))
  306.                 | ~(DV_I_48_2_bit | DV_I_50_2_bit));
  307.         mask &= ((((w[47] ^ (w[46] >>> 5)) & (1 << 1)) - (1 << 1))
  308.                 | ~(DV_I_46_2_bit | DV_II_50_2_bit));
  309.         mask &= ((0 - ((w[44] ^ (w[45] >>> 5)) & (1 << 1)))
  310.                 | ~(DV_I_51_2_bit | DV_II_49_2_bit));
  311.         mask &= ((((w[43] ^ w[45]) & (1 << 6)) - (1 << 6))
  312.                 | ~(DV_I_47_2_bit | DV_I_49_2_bit));
  313.         mask &= (((((w[42] ^ w[44]) >>> 6) & 1) - 1)
  314.                 | ~(DV_I_46_2_bit | DV_I_48_2_bit));
  315.         mask &= ((((w[43] ^ (w[42] >>> 5)) & (1 << 1)) - (1 << 1))
  316.                 | ~(DV_II_46_2_bit | DV_II_51_2_bit));
  317.         mask &= ((((w[42] ^ (w[41] >>> 5)) & (1 << 1)) - (1 << 1))
  318.                 | ~(DV_I_51_2_bit | DV_II_50_2_bit));
  319.         mask &= ((((w[41] ^ (w[40] >>> 5)) & (1 << 1)) - (1 << 1))
  320.                 | ~(DV_I_50_2_bit | DV_II_49_2_bit));
  321.         if ((mask & (DV_I_52_0_bit | DV_II_51_0_bit)) != 0)
  322.             mask &= ((((w[39] ^ (w[43] >>> 25)) & (1 << 4)) - (1 << 4))
  323.                     | ~(DV_I_52_0_bit | DV_II_51_0_bit));
  324.         if ((mask & (DV_I_51_0_bit | DV_II_50_0_bit)) != 0)
  325.             mask &= ((((w[38] ^ (w[42] >>> 25)) & (1 << 4)) - (1 << 4))
  326.                     | ~(DV_I_51_0_bit | DV_II_50_0_bit));
  327.         if ((mask & (DV_I_48_2_bit | DV_I_51_2_bit)) != 0)
  328.             mask &= ((0 - ((w[37] ^ (w[38] >>> 5)) & (1 << 1)))
  329.                     | ~(DV_I_48_2_bit | DV_I_51_2_bit));
  330.         if ((mask & (DV_I_50_0_bit | DV_II_49_0_bit)) != 0)
  331.             mask &= ((((w[37] ^ (w[41] >>> 25)) & (1 << 4)) - (1 << 4))
  332.                     | ~(DV_I_50_0_bit | DV_II_49_0_bit));
  333.         if ((mask & (DV_II_52_0_bit | DV_II_54_0_bit)) != 0)
  334.             mask &= ((0 - ((w[36] ^ w[38]) & (1 << 4)))
  335.                     | ~(DV_II_52_0_bit | DV_II_54_0_bit));
  336.         mask &= ((0 - ((w[35] ^ (w[36] >>> 5)) & (1 << 1)))
  337.                 | ~(DV_I_46_2_bit | DV_I_49_2_bit));
  338.         if ((mask & (DV_I_51_0_bit | DV_II_47_0_bit)) != 0)
  339.             mask &= ((((w[35] ^ (w[39] >>> 25)) & (1 << 3)) - (1 << 3))
  340.                     | ~(DV_I_51_0_bit | DV_II_47_0_bit));

  341.         if (mask == 0) {
  342.             return mask;
  343.         }

  344.         if ((mask & DV_I_43_0_bit) != 0)
  345.             if (0 == ((w[61] ^ (w[62] >>> 5)) & (1 << 1))
  346.                     || 0 != ((w[59] ^ (w[63] >>> 25)) & (1 << 5))
  347.                     || 0 == ((w[58] ^ (w[63] >>> 30)) & (1 << 0)))
  348.                 mask &= ~DV_I_43_0_bit;
  349.         if ((mask & DV_I_44_0_bit) != 0)
  350.             if (0 == ((w[62] ^ (w[63] >>> 5)) & (1 << 1))
  351.                     || 0 != ((w[60] ^ (w[64] >>> 25)) & (1 << 5))
  352.                     || 0 == ((w[59] ^ (w[64] >>> 30)) & (1 << 0)))
  353.                 mask &= ~DV_I_44_0_bit;
  354.         if ((mask & DV_I_46_2_bit) != 0)
  355.             mask &= ((~((w[40] ^ w[42]) >>> 2)) | ~DV_I_46_2_bit);
  356.         if ((mask & DV_I_47_2_bit) != 0)
  357.             if (0 == ((w[62] ^ (w[63] >>> 5)) & (1 << 2))
  358.                     || 0 != ((w[41] ^ w[43]) & (1 << 6)))
  359.                 mask &= ~DV_I_47_2_bit;
  360.         if ((mask & DV_I_48_2_bit) != 0)
  361.             if (0 == ((w[63] ^ (w[64] >>> 5)) & (1 << 2))
  362.                     || 0 != ((w[48] ^ (w[49] << 5)) & (1 << 6)))
  363.                 mask &= ~DV_I_48_2_bit;
  364.         if ((mask & DV_I_49_2_bit) != 0)
  365.             if (0 != ((w[49] ^ (w[50] << 5)) & (1 << 6))
  366.                     || 0 == ((w[42] ^ w[50]) & (1 << 1))
  367.                     || 0 != ((w[39] ^ (w[40] << 5)) & (1 << 6))
  368.                     || 0 == ((w[38] ^ w[40]) & (1 << 1)))
  369.                 mask &= ~DV_I_49_2_bit;
  370.         if ((mask & DV_I_50_0_bit) != 0)
  371.             mask &= ((((w[36] ^ w[37]) << 7)) | ~DV_I_50_0_bit);
  372.         if ((mask & DV_I_50_2_bit) != 0)
  373.             mask &= ((((w[43] ^ w[51]) << 11)) | ~DV_I_50_2_bit);
  374.         if ((mask & DV_I_51_0_bit) != 0)
  375.             mask &= ((((w[37] ^ w[38]) << 9)) | ~DV_I_51_0_bit);
  376.         if ((mask & DV_I_51_2_bit) != 0)
  377.             if (0 != ((w[51] ^ (w[52] << 5)) & (1 << 6))
  378.                     || 0 != ((w[49] ^ w[51]) & (1 << 6))
  379.                     || 0 != ((w[37] ^ (w[37] >>> 5)) & (1 << 1))
  380.                     || 0 != ((w[35] ^ (w[39] >>> 25)) & (1 << 5)))
  381.                 mask &= ~DV_I_51_2_bit;
  382.         if ((mask & DV_I_52_0_bit) != 0)
  383.             mask &= ((((w[38] ^ w[39]) << 11)) | ~DV_I_52_0_bit);
  384.         if ((mask & DV_II_46_2_bit) != 0)
  385.             mask &= ((((w[47] ^ w[51]) << 17)) | ~DV_II_46_2_bit);
  386.         if ((mask & DV_II_48_0_bit) != 0)
  387.             if (0 != ((w[36] ^ (w[40] >>> 25)) & (1 << 3))
  388.                     || 0 == ((w[35] ^ (w[40] << 2)) & (1 << 30)))
  389.                 mask &= ~DV_II_48_0_bit;
  390.         if ((mask & DV_II_49_0_bit) != 0)
  391.             if (0 != ((w[37] ^ (w[41] >>> 25)) & (1 << 3))
  392.                     || 0 == ((w[36] ^ (w[41] << 2)) & (1 << 30)))
  393.                 mask &= ~DV_II_49_0_bit;
  394.         if ((mask & DV_II_49_2_bit) != 0)
  395.             if (0 != ((w[53] ^ (w[54] << 5)) & (1 << 6))
  396.                     || 0 != ((w[51] ^ w[53]) & (1 << 6))
  397.                     || 0 == ((w[50] ^ w[54]) & (1 << 1))
  398.                     || 0 != ((w[45] ^ (w[46] << 5)) & (1 << 6))
  399.                     || 0 != ((w[37] ^ (w[41] >>> 25)) & (1 << 5))
  400.                     || 0 == ((w[36] ^ (w[41] >>> 30)) & (1 << 0)))
  401.                 mask &= ~DV_II_49_2_bit;
  402.         if ((mask & DV_II_50_0_bit) != 0)
  403.             if (0 == ((w[55] ^ w[58]) & (1 << 29))
  404.                     || 0 != ((w[38] ^ (w[42] >>> 25)) & (1 << 3))
  405.                     || 0 == ((w[37] ^ (w[42] << 2)) & (1 << 30)))
  406.                 mask &= ~DV_II_50_0_bit;
  407.         if ((mask & DV_II_50_2_bit) != 0)
  408.             if (0 != ((w[54] ^ (w[55] << 5)) & (1 << 6))
  409.                     || 0!=((w[52] ^ w[54]) & (1 << 6))
  410.                     || 0==((w[51] ^ w[55]) & (1 << 1))
  411.                     || 0==((w[45] ^ w[47]) & (1 << 1))
  412.                     || 0!=((w[38] ^ (w[42] >>> 25)) & (1 << 5))
  413.                     || 0==((w[37] ^ (w[42] >>> 30)) & (1 << 0)))
  414.                 mask &= ~DV_II_50_2_bit;
  415.         if ((mask & DV_II_51_0_bit) != 0)
  416.             if (0 != ((w[39] ^ (w[43] >>> 25)) & (1 << 3))
  417.                     || 0 == ((w[38] ^ (w[43] << 2)) & (1 << 30)))
  418.                 mask &= ~DV_II_51_0_bit;
  419.         if ((mask & DV_II_51_2_bit) != 0)
  420.             if (0 != ((w[55] ^ (w[56] << 5)) & (1 << 6))
  421.                     || 0 != ((w[53] ^ w[55]) & (1 << 6))
  422.                     || 0 == ((w[52] ^ w[56]) & (1 << 1))
  423.                     || 0 == ((w[46] ^ w[48]) & (1 << 1))
  424.                     || 0 != ((w[39] ^ (w[43] >>> 25)) & (1 << 5))
  425.                     || 0 == ((w[38] ^ (w[43] >>> 30)) & (1 << 0)))
  426.                 mask &= ~DV_II_51_2_bit;
  427.         if ((mask & DV_II_52_0_bit) != 0)
  428.             if (0 != ((w[59] ^ w[60]) & (1 << 29))
  429.                     || 0 != ((w[40] ^ (w[44] >>> 25)) & (1 << 3))
  430.                     || 0 != ((w[40] ^ (w[44] >>> 25)) & (1 << 4))
  431.                     || 0==((w[39] ^ (w[44] << 2)) & (1 << 30)))
  432.                 mask &= ~DV_II_52_0_bit;
  433.         if ((mask & DV_II_53_0_bit) != 0)
  434.             if (0==((w[58] ^ w[61]) & (1 << 29))
  435.                     || 0!=((w[57] ^ (w[61] >>> 25)) & (1 << 4))
  436.                     || 0!=((w[41] ^ (w[45] >>> 25)) & (1 << 3))
  437.                     || 0!=((w[41] ^ (w[45] >>> 25)) & (1 << 4)))
  438.                 mask &= ~DV_II_53_0_bit;
  439.         if ((mask & DV_II_54_0_bit) != 0)
  440.             if (0 != ((w[58] ^ (w[62] >>> 25)) & (1 << 4))
  441.                     || 0 != ((w[42] ^ (w[46] >>> 25)) & (1 << 3))
  442.                     || 0 != ((w[42] ^ (w[46] >>> 25)) & (1 << 4)))
  443.                 mask &= ~DV_II_54_0_bit;
  444.         if ((mask & DV_II_55_0_bit) != 0)
  445.             if (0 != ((w[59] ^ (w[63] >>> 25)) & (1 << 4))
  446.                     || 0 != ((w[57] ^ (w[59] >>> 25)) & (1 << 4))
  447.                     || 0 != ((w[43] ^ (w[47] >>> 25)) & (1 << 3))
  448.                     || 0 != ((w[43] ^ (w[47] >>> 25)) & (1 << 4)))
  449.                 mask &= ~DV_II_55_0_bit;
  450.         if ((mask & DV_II_56_0_bit) != 0)
  451.             if (0 != ((w[60] ^ (w[64] >>> 25)) & (1 << 4))
  452.                     || 0 != ((w[44] ^ (w[48] >>> 25)) & (1 << 3))
  453.                     || 0 != ((w[44] ^ (w[48] >>> 25)) & (1 << 4)))
  454.                 mask &= ~DV_II_56_0_bit;
  455.         return mask;
  456.     }

  457.     private UbcCheck() {
  458.     }

  459.     static final class DvInfo {
  460.         final int testt;
  461.         final int maskb;
  462.         final int[] dm;

  463.         @SuppressWarnings("unused")
  464.         DvInfo(int dvType, int dvK, int dvB, int testt, int maskb, int[] dm) {
  465.             this.testt = testt;
  466.             this.maskb = maskb;
  467.             this.dm = dm;

  468.             // Only states 58 and 65 are saved.
  469.             if (testt != 58 && testt != 65) {
  470.                 throw new IllegalArgumentException();
  471.             }
  472.         }
  473.     }

  474.     static final DvInfo[] DV = new DvInfo[] {
  475.             new DvInfo(1, 43, 0, 58, 0, new int[] { 0x08000000, 0x9800000c,
  476.                     0xd8000010, 0x08000010, 0xb8000010, 0x98000000, 0x60000000,
  477.                     0x00000008, 0xc0000000, 0x90000014, 0x10000010, 0xb8000014,
  478.                     0x28000000, 0x20000010, 0x48000000, 0x08000018, 0x60000000,
  479.                     0x90000010, 0xf0000010, 0x90000008, 0xc0000000, 0x90000010,
  480.                     0xf0000010, 0xb0000008, 0x40000000, 0x90000000, 0xf0000010,
  481.                     0x90000018, 0x60000000, 0x90000010, 0x90000010, 0x90000000,
  482.                     0x80000000, 0x00000010, 0xa0000000, 0x20000000, 0xa0000000,
  483.                     0x20000010, 0x00000000, 0x20000010, 0x20000000, 0x00000010,
  484.                     0x20000000, 0x00000010, 0xa0000000, 0x00000000, 0x20000000,
  485.                     0x20000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  486.                     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  487.                     0x00000000, 0x00000001, 0x00000020, 0x00000001, 0x40000002,
  488.                     0x40000040, 0x40000002, 0x80000004, 0x80000080, 0x80000006,
  489.                     0x00000049, 0x00000103, 0x80000009, 0x80000012, 0x80000202,
  490.                     0x00000018, 0x00000164, 0x00000408, 0x800000e6, 0x8000004c,
  491.                     0x00000803, 0x80000161, 0x80000599 }),
  492.             new DvInfo(1, 44, 0, 58, 1, new int[] { 0xb4000008, 0x08000000,
  493.                     0x9800000c, 0xd8000010, 0x08000010, 0xb8000010, 0x98000000,
  494.                     0x60000000, 0x00000008, 0xc0000000, 0x90000014, 0x10000010,
  495.                     0xb8000014, 0x28000000, 0x20000010, 0x48000000, 0x08000018,
  496.                     0x60000000, 0x90000010, 0xf0000010, 0x90000008, 0xc0000000,
  497.                     0x90000010, 0xf0000010, 0xb0000008, 0x40000000, 0x90000000,
  498.                     0xf0000010, 0x90000018, 0x60000000, 0x90000010, 0x90000010,
  499.                     0x90000000, 0x80000000, 0x00000010, 0xa0000000, 0x20000000,
  500.                     0xa0000000, 0x20000010, 0x00000000, 0x20000010, 0x20000000,
  501.                     0x00000010, 0x20000000, 0x00000010, 0xa0000000, 0x00000000,
  502.                     0x20000000, 0x20000000, 0x00000000, 0x00000000, 0x00000000,
  503.                     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  504.                     0x00000000, 0x00000000, 0x00000001, 0x00000020, 0x00000001,
  505.                     0x40000002, 0x40000040, 0x40000002, 0x80000004, 0x80000080,
  506.                     0x80000006, 0x00000049, 0x00000103, 0x80000009, 0x80000012,
  507.                     0x80000202, 0x00000018, 0x00000164, 0x00000408, 0x800000e6,
  508.                     0x8000004c, 0x00000803, 0x80000161 }),
  509.             new DvInfo(1, 45, 0, 58, 2, new int[] { 0xf4000014, 0xb4000008,
  510.                     0x08000000, 0x9800000c, 0xd8000010, 0x08000010, 0xb8000010,
  511.                     0x98000000, 0x60000000, 0x00000008, 0xc0000000, 0x90000014,
  512.                     0x10000010, 0xb8000014, 0x28000000, 0x20000010, 0x48000000,
  513.                     0x08000018, 0x60000000, 0x90000010, 0xf0000010, 0x90000008,
  514.                     0xc0000000, 0x90000010, 0xf0000010, 0xb0000008, 0x40000000,
  515.                     0x90000000, 0xf0000010, 0x90000018, 0x60000000, 0x90000010,
  516.                     0x90000010, 0x90000000, 0x80000000, 0x00000010, 0xa0000000,
  517.                     0x20000000, 0xa0000000, 0x20000010, 0x00000000, 0x20000010,
  518.                     0x20000000, 0x00000010, 0x20000000, 0x00000010, 0xa0000000,
  519.                     0x00000000, 0x20000000, 0x20000000, 0x00000000, 0x00000000,
  520.                     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  521.                     0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000020,
  522.                     0x00000001, 0x40000002, 0x40000040, 0x40000002, 0x80000004,
  523.                     0x80000080, 0x80000006, 0x00000049, 0x00000103, 0x80000009,
  524.                     0x80000012, 0x80000202, 0x00000018, 0x00000164, 0x00000408,
  525.                     0x800000e6, 0x8000004c, 0x00000803 }),
  526.             new DvInfo(1, 46, 0, 58, 3, new int[] { 0x2c000010, 0xf4000014,
  527.                     0xb4000008, 0x08000000, 0x9800000c, 0xd8000010, 0x08000010,
  528.                     0xb8000010, 0x98000000, 0x60000000, 0x00000008, 0xc0000000,
  529.                     0x90000014, 0x10000010, 0xb8000014, 0x28000000, 0x20000010,
  530.                     0x48000000, 0x08000018, 0x60000000, 0x90000010, 0xf0000010,
  531.                     0x90000008, 0xc0000000, 0x90000010, 0xf0000010, 0xb0000008,
  532.                     0x40000000, 0x90000000, 0xf0000010, 0x90000018, 0x60000000,
  533.                     0x90000010, 0x90000010, 0x90000000, 0x80000000, 0x00000010,
  534.                     0xa0000000, 0x20000000, 0xa0000000, 0x20000010, 0x00000000,
  535.                     0x20000010, 0x20000000, 0x00000010, 0x20000000, 0x00000010,
  536.                     0xa0000000, 0x00000000, 0x20000000, 0x20000000, 0x00000000,
  537.                     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  538.                     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001,
  539.                     0x00000020, 0x00000001, 0x40000002, 0x40000040, 0x40000002,
  540.                     0x80000004, 0x80000080, 0x80000006, 0x00000049, 0x00000103,
  541.                     0x80000009, 0x80000012, 0x80000202, 0x00000018, 0x00000164,
  542.                     0x00000408, 0x800000e6, 0x8000004c }),
  543.             new DvInfo(1, 46, 2, 58, 4, new int[] { 0xb0000040, 0xd0000053,
  544.                     0xd0000022, 0x20000000, 0x60000032, 0x60000043, 0x20000040,
  545.                     0xe0000042, 0x60000002, 0x80000001, 0x00000020, 0x00000003,
  546.                     0x40000052, 0x40000040, 0xe0000052, 0xa0000000, 0x80000040,
  547.                     0x20000001, 0x20000060, 0x80000001, 0x40000042, 0xc0000043,
  548.                     0x40000022, 0x00000003, 0x40000042, 0xc0000043, 0xc0000022,
  549.                     0x00000001, 0x40000002, 0xc0000043, 0x40000062, 0x80000001,
  550.                     0x40000042, 0x40000042, 0x40000002, 0x00000002, 0x00000040,
  551.                     0x80000002, 0x80000000, 0x80000002, 0x80000040, 0x00000000,
  552.                     0x80000040, 0x80000000, 0x00000040, 0x80000000, 0x00000040,
  553.                     0x80000002, 0x00000000, 0x80000000, 0x80000000, 0x00000000,
  554.                     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  555.                     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000004,
  556.                     0x00000080, 0x00000004, 0x00000009, 0x00000101, 0x00000009,
  557.                     0x00000012, 0x00000202, 0x0000001a, 0x00000124, 0x0000040c,
  558.                     0x00000026, 0x0000004a, 0x0000080a, 0x00000060, 0x00000590,
  559.                     0x00001020, 0x0000039a, 0x00000132 }),
  560.             new DvInfo(1, 47, 0, 58, 5, new int[] { 0xc8000010, 0x2c000010,
  561.                     0xf4000014, 0xb4000008, 0x08000000, 0x9800000c, 0xd8000010,
  562.                     0x08000010, 0xb8000010, 0x98000000, 0x60000000, 0x00000008,
  563.                     0xc0000000, 0x90000014, 0x10000010, 0xb8000014, 0x28000000,
  564.                     0x20000010, 0x48000000, 0x08000018, 0x60000000, 0x90000010,
  565.                     0xf0000010, 0x90000008, 0xc0000000, 0x90000010, 0xf0000010,
  566.                     0xb0000008, 0x40000000, 0x90000000, 0xf0000010, 0x90000018,
  567.                     0x60000000, 0x90000010, 0x90000010, 0x90000000, 0x80000000,
  568.                     0x00000010, 0xa0000000, 0x20000000, 0xa0000000, 0x20000010,
  569.                     0x00000000, 0x20000010, 0x20000000, 0x00000010, 0x20000000,
  570.                     0x00000010, 0xa0000000, 0x00000000, 0x20000000, 0x20000000,
  571.                     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  572.                     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  573.                     0x00000001, 0x00000020, 0x00000001, 0x40000002, 0x40000040,
  574.                     0x40000002, 0x80000004, 0x80000080, 0x80000006, 0x00000049,
  575.                     0x00000103, 0x80000009, 0x80000012, 0x80000202, 0x00000018,
  576.                     0x00000164, 0x00000408, 0x800000e6 }),
  577.             new DvInfo(1, 47, 2, 58, 6, new int[] { 0x20000043, 0xb0000040,
  578.                     0xd0000053, 0xd0000022, 0x20000000, 0x60000032, 0x60000043,
  579.                     0x20000040, 0xe0000042, 0x60000002, 0x80000001, 0x00000020,
  580.                     0x00000003, 0x40000052, 0x40000040, 0xe0000052, 0xa0000000,
  581.                     0x80000040, 0x20000001, 0x20000060, 0x80000001, 0x40000042,
  582.                     0xc0000043, 0x40000022, 0x00000003, 0x40000042, 0xc0000043,
  583.                     0xc0000022, 0x00000001, 0x40000002, 0xc0000043, 0x40000062,
  584.                     0x80000001, 0x40000042, 0x40000042, 0x40000002, 0x00000002,
  585.                     0x00000040, 0x80000002, 0x80000000, 0x80000002, 0x80000040,
  586.                     0x00000000, 0x80000040, 0x80000000, 0x00000040, 0x80000000,
  587.                     0x00000040, 0x80000002, 0x00000000, 0x80000000, 0x80000000,
  588.                     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  589.                     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  590.                     0x00000004, 0x00000080, 0x00000004, 0x00000009, 0x00000101,
  591.                     0x00000009, 0x00000012, 0x00000202, 0x0000001a, 0x00000124,
  592.                     0x0000040c, 0x00000026, 0x0000004a, 0x0000080a, 0x00000060,
  593.                     0x00000590, 0x00001020, 0x0000039a }),
  594.             new DvInfo(1, 48, 0, 58, 7, new int[] { 0xb800000a, 0xc8000010,
  595.                     0x2c000010, 0xf4000014, 0xb4000008, 0x08000000, 0x9800000c,
  596.                     0xd8000010, 0x08000010, 0xb8000010, 0x98000000, 0x60000000,
  597.                     0x00000008, 0xc0000000, 0x90000014, 0x10000010, 0xb8000014,
  598.                     0x28000000, 0x20000010, 0x48000000, 0x08000018, 0x60000000,
  599.                     0x90000010, 0xf0000010, 0x90000008, 0xc0000000, 0x90000010,
  600.                     0xf0000010, 0xb0000008, 0x40000000, 0x90000000, 0xf0000010,
  601.                     0x90000018, 0x60000000, 0x90000010, 0x90000010, 0x90000000,
  602.                     0x80000000, 0x00000010, 0xa0000000, 0x20000000, 0xa0000000,
  603.                     0x20000010, 0x00000000, 0x20000010, 0x20000000, 0x00000010,
  604.                     0x20000000, 0x00000010, 0xa0000000, 0x00000000, 0x20000000,
  605.                     0x20000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  606.                     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  607.                     0x00000000, 0x00000001, 0x00000020, 0x00000001, 0x40000002,
  608.                     0x40000040, 0x40000002, 0x80000004, 0x80000080, 0x80000006,
  609.                     0x00000049, 0x00000103, 0x80000009, 0x80000012, 0x80000202,
  610.                     0x00000018, 0x00000164, 0x00000408 }),
  611.             new DvInfo(1, 48, 2, 58, 8, new int[] { 0xe000002a, 0x20000043,
  612.                     0xb0000040, 0xd0000053, 0xd0000022, 0x20000000, 0x60000032,
  613.                     0x60000043, 0x20000040, 0xe0000042, 0x60000002, 0x80000001,
  614.                     0x00000020, 0x00000003, 0x40000052, 0x40000040, 0xe0000052,
  615.                     0xa0000000, 0x80000040, 0x20000001, 0x20000060, 0x80000001,
  616.                     0x40000042, 0xc0000043, 0x40000022, 0x00000003, 0x40000042,
  617.                     0xc0000043, 0xc0000022, 0x00000001, 0x40000002, 0xc0000043,
  618.                     0x40000062, 0x80000001, 0x40000042, 0x40000042, 0x40000002,
  619.                     0x00000002, 0x00000040, 0x80000002, 0x80000000, 0x80000002,
  620.                     0x80000040, 0x00000000, 0x80000040, 0x80000000, 0x00000040,
  621.                     0x80000000, 0x00000040, 0x80000002, 0x00000000, 0x80000000,
  622.                     0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  623.                     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  624.                     0x00000000, 0x00000004, 0x00000080, 0x00000004, 0x00000009,
  625.                     0x00000101, 0x00000009, 0x00000012, 0x00000202, 0x0000001a,
  626.                     0x00000124, 0x0000040c, 0x00000026, 0x0000004a, 0x0000080a,
  627.                     0x00000060, 0x00000590, 0x00001020 }),
  628.             new DvInfo(1, 49, 0, 58, 9, new int[] { 0x18000000, 0xb800000a,
  629.                     0xc8000010, 0x2c000010, 0xf4000014, 0xb4000008, 0x08000000,
  630.                     0x9800000c, 0xd8000010, 0x08000010, 0xb8000010, 0x98000000,
  631.                     0x60000000, 0x00000008, 0xc0000000, 0x90000014, 0x10000010,
  632.                     0xb8000014, 0x28000000, 0x20000010, 0x48000000, 0x08000018,
  633.                     0x60000000, 0x90000010, 0xf0000010, 0x90000008, 0xc0000000,
  634.                     0x90000010, 0xf0000010, 0xb0000008, 0x40000000, 0x90000000,
  635.                     0xf0000010, 0x90000018, 0x60000000, 0x90000010, 0x90000010,
  636.                     0x90000000, 0x80000000, 0x00000010, 0xa0000000, 0x20000000,
  637.                     0xa0000000, 0x20000010, 0x00000000, 0x20000010, 0x20000000,
  638.                     0x00000010, 0x20000000, 0x00000010, 0xa0000000, 0x00000000,
  639.                     0x20000000, 0x20000000, 0x00000000, 0x00000000, 0x00000000,
  640.                     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  641.                     0x00000000, 0x00000000, 0x00000001, 0x00000020, 0x00000001,
  642.                     0x40000002, 0x40000040, 0x40000002, 0x80000004, 0x80000080,
  643.                     0x80000006, 0x00000049, 0x00000103, 0x80000009, 0x80000012,
  644.                     0x80000202, 0x00000018, 0x00000164 }),
  645.             new DvInfo(1, 49, 2, 58, 10, new int[] { 0x60000000, 0xe000002a,
  646.                     0x20000043, 0xb0000040, 0xd0000053, 0xd0000022, 0x20000000,
  647.                     0x60000032, 0x60000043, 0x20000040, 0xe0000042, 0x60000002,
  648.                     0x80000001, 0x00000020, 0x00000003, 0x40000052, 0x40000040,
  649.                     0xe0000052, 0xa0000000, 0x80000040, 0x20000001, 0x20000060,
  650.                     0x80000001, 0x40000042, 0xc0000043, 0x40000022, 0x00000003,
  651.                     0x40000042, 0xc0000043, 0xc0000022, 0x00000001, 0x40000002,
  652.                     0xc0000043, 0x40000062, 0x80000001, 0x40000042, 0x40000042,
  653.                     0x40000002, 0x00000002, 0x00000040, 0x80000002, 0x80000000,
  654.                     0x80000002, 0x80000040, 0x00000000, 0x80000040, 0x80000000,
  655.                     0x00000040, 0x80000000, 0x00000040, 0x80000002, 0x00000000,
  656.                     0x80000000, 0x80000000, 0x00000000, 0x00000000, 0x00000000,
  657.                     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  658.                     0x00000000, 0x00000000, 0x00000004, 0x00000080, 0x00000004,
  659.                     0x00000009, 0x00000101, 0x00000009, 0x00000012, 0x00000202,
  660.                     0x0000001a, 0x00000124, 0x0000040c, 0x00000026, 0x0000004a,
  661.                     0x0000080a, 0x00000060, 0x00000590 }),
  662.             new DvInfo(1, 50, 0, 65, 11, new int[] { 0x0800000c, 0x18000000,
  663.                     0xb800000a, 0xc8000010, 0x2c000010, 0xf4000014, 0xb4000008,
  664.                     0x08000000, 0x9800000c, 0xd8000010, 0x08000010, 0xb8000010,
  665.                     0x98000000, 0x60000000, 0x00000008, 0xc0000000, 0x90000014,
  666.                     0x10000010, 0xb8000014, 0x28000000, 0x20000010, 0x48000000,
  667.                     0x08000018, 0x60000000, 0x90000010, 0xf0000010, 0x90000008,
  668.                     0xc0000000, 0x90000010, 0xf0000010, 0xb0000008, 0x40000000,
  669.                     0x90000000, 0xf0000010, 0x90000018, 0x60000000, 0x90000010,
  670.                     0x90000010, 0x90000000, 0x80000000, 0x00000010, 0xa0000000,
  671.                     0x20000000, 0xa0000000, 0x20000010, 0x00000000, 0x20000010,
  672.                     0x20000000, 0x00000010, 0x20000000, 0x00000010, 0xa0000000,
  673.                     0x00000000, 0x20000000, 0x20000000, 0x00000000, 0x00000000,
  674.                     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  675.                     0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000020,
  676.                     0x00000001, 0x40000002, 0x40000040, 0x40000002, 0x80000004,
  677.                     0x80000080, 0x80000006, 0x00000049, 0x00000103, 0x80000009,
  678.                     0x80000012, 0x80000202, 0x00000018 }),
  679.             new DvInfo(1, 50, 2, 65, 12, new int[] { 0x20000030, 0x60000000,
  680.                     0xe000002a, 0x20000043, 0xb0000040, 0xd0000053, 0xd0000022,
  681.                     0x20000000, 0x60000032, 0x60000043, 0x20000040, 0xe0000042,
  682.                     0x60000002, 0x80000001, 0x00000020, 0x00000003, 0x40000052,
  683.                     0x40000040, 0xe0000052, 0xa0000000, 0x80000040, 0x20000001,
  684.                     0x20000060, 0x80000001, 0x40000042, 0xc0000043, 0x40000022,
  685.                     0x00000003, 0x40000042, 0xc0000043, 0xc0000022, 0x00000001,
  686.                     0x40000002, 0xc0000043, 0x40000062, 0x80000001, 0x40000042,
  687.                     0x40000042, 0x40000002, 0x00000002, 0x00000040, 0x80000002,
  688.                     0x80000000, 0x80000002, 0x80000040, 0x00000000, 0x80000040,
  689.                     0x80000000, 0x00000040, 0x80000000, 0x00000040, 0x80000002,
  690.                     0x00000000, 0x80000000, 0x80000000, 0x00000000, 0x00000000,
  691.                     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  692.                     0x00000000, 0x00000000, 0x00000000, 0x00000004, 0x00000080,
  693.                     0x00000004, 0x00000009, 0x00000101, 0x00000009, 0x00000012,
  694.                     0x00000202, 0x0000001a, 0x00000124, 0x0000040c, 0x00000026,
  695.                     0x0000004a, 0x0000080a, 0x00000060 }),
  696.             new DvInfo(1, 51, 0, 65, 13, new int[] { 0xe8000000, 0x0800000c,
  697.                     0x18000000, 0xb800000a, 0xc8000010, 0x2c000010, 0xf4000014,
  698.                     0xb4000008, 0x08000000, 0x9800000c, 0xd8000010, 0x08000010,
  699.                     0xb8000010, 0x98000000, 0x60000000, 0x00000008, 0xc0000000,
  700.                     0x90000014, 0x10000010, 0xb8000014, 0x28000000, 0x20000010,
  701.                     0x48000000, 0x08000018, 0x60000000, 0x90000010, 0xf0000010,
  702.                     0x90000008, 0xc0000000, 0x90000010, 0xf0000010, 0xb0000008,
  703.                     0x40000000, 0x90000000, 0xf0000010, 0x90000018, 0x60000000,
  704.                     0x90000010, 0x90000010, 0x90000000, 0x80000000, 0x00000010,
  705.                     0xa0000000, 0x20000000, 0xa0000000, 0x20000010, 0x00000000,
  706.                     0x20000010, 0x20000000, 0x00000010, 0x20000000, 0x00000010,
  707.                     0xa0000000, 0x00000000, 0x20000000, 0x20000000, 0x00000000,
  708.                     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  709.                     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001,
  710.                     0x00000020, 0x00000001, 0x40000002, 0x40000040, 0x40000002,
  711.                     0x80000004, 0x80000080, 0x80000006, 0x00000049, 0x00000103,
  712.                     0x80000009, 0x80000012, 0x80000202 }),
  713.             new DvInfo(1, 51, 2, 65, 14, new int[] { 0xa0000003, 0x20000030,
  714.                     0x60000000, 0xe000002a, 0x20000043, 0xb0000040, 0xd0000053,
  715.                     0xd0000022, 0x20000000, 0x60000032, 0x60000043, 0x20000040,
  716.                     0xe0000042, 0x60000002, 0x80000001, 0x00000020, 0x00000003,
  717.                     0x40000052, 0x40000040, 0xe0000052, 0xa0000000, 0x80000040,
  718.                     0x20000001, 0x20000060, 0x80000001, 0x40000042, 0xc0000043,
  719.                     0x40000022, 0x00000003, 0x40000042, 0xc0000043, 0xc0000022,
  720.                     0x00000001, 0x40000002, 0xc0000043, 0x40000062, 0x80000001,
  721.                     0x40000042, 0x40000042, 0x40000002, 0x00000002, 0x00000040,
  722.                     0x80000002, 0x80000000, 0x80000002, 0x80000040, 0x00000000,
  723.                     0x80000040, 0x80000000, 0x00000040, 0x80000000, 0x00000040,
  724.                     0x80000002, 0x00000000, 0x80000000, 0x80000000, 0x00000000,
  725.                     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  726.                     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000004,
  727.                     0x00000080, 0x00000004, 0x00000009, 0x00000101, 0x00000009,
  728.                     0x00000012, 0x00000202, 0x0000001a, 0x00000124, 0x0000040c,
  729.                     0x00000026, 0x0000004a, 0x0000080a }),
  730.             new DvInfo(1, 52, 0, 65, 15, new int[] { 0x04000010, 0xe8000000,
  731.                     0x0800000c, 0x18000000, 0xb800000a, 0xc8000010, 0x2c000010,
  732.                     0xf4000014, 0xb4000008, 0x08000000, 0x9800000c, 0xd8000010,
  733.                     0x08000010, 0xb8000010, 0x98000000, 0x60000000, 0x00000008,
  734.                     0xc0000000, 0x90000014, 0x10000010, 0xb8000014, 0x28000000,
  735.                     0x20000010, 0x48000000, 0x08000018, 0x60000000, 0x90000010,
  736.                     0xf0000010, 0x90000008, 0xc0000000, 0x90000010, 0xf0000010,
  737.                     0xb0000008, 0x40000000, 0x90000000, 0xf0000010, 0x90000018,
  738.                     0x60000000, 0x90000010, 0x90000010, 0x90000000, 0x80000000,
  739.                     0x00000010, 0xa0000000, 0x20000000, 0xa0000000, 0x20000010,
  740.                     0x00000000, 0x20000010, 0x20000000, 0x00000010, 0x20000000,
  741.                     0x00000010, 0xa0000000, 0x00000000, 0x20000000, 0x20000000,
  742.                     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  743.                     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  744.                     0x00000001, 0x00000020, 0x00000001, 0x40000002, 0x40000040,
  745.                     0x40000002, 0x80000004, 0x80000080, 0x80000006, 0x00000049,
  746.                     0x00000103, 0x80000009, 0x80000012 }),
  747.             new DvInfo(2, 45, 0, 58, 16, new int[] { 0xec000014, 0x0c000002,
  748.                     0xc0000010, 0xb400001c, 0x2c000004, 0xbc000018, 0xb0000010,
  749.                     0x0000000c, 0xb8000010, 0x08000018, 0x78000010, 0x08000014,
  750.                     0x70000010, 0xb800001c, 0xe8000000, 0xb0000004, 0x58000010,
  751.                     0xb000000c, 0x48000000, 0xb0000000, 0xb8000010, 0x98000010,
  752.                     0xa0000000, 0x00000000, 0x00000000, 0x20000000, 0x80000000,
  753.                     0x00000010, 0x00000000, 0x20000010, 0x20000000, 0x00000010,
  754.                     0x60000000, 0x00000018, 0xe0000000, 0x90000000, 0x30000010,
  755.                     0xb0000000, 0x20000000, 0x20000000, 0xa0000000, 0x00000010,
  756.                     0x80000000, 0x20000000, 0x20000000, 0x20000000, 0x80000000,
  757.                     0x00000010, 0x00000000, 0x20000010, 0xa0000000, 0x00000000,
  758.                     0x20000000, 0x20000000, 0x00000000, 0x00000000, 0x00000000,
  759.                     0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000020,
  760.                     0x00000001, 0x40000002, 0x40000041, 0x40000022, 0x80000005,
  761.                     0xc0000082, 0xc0000046, 0x4000004b, 0x80000107, 0x00000089,
  762.                     0x00000014, 0x8000024b, 0x0000011b, 0x8000016d, 0x8000041a,
  763.                     0x000002e4, 0x80000054, 0x00000967 }),
  764.             new DvInfo(2, 46, 0, 58, 17, new int[] { 0x2400001c, 0xec000014,
  765.                     0x0c000002, 0xc0000010, 0xb400001c, 0x2c000004, 0xbc000018,
  766.                     0xb0000010, 0x0000000c, 0xb8000010, 0x08000018, 0x78000010,
  767.                     0x08000014, 0x70000010, 0xb800001c, 0xe8000000, 0xb0000004,
  768.                     0x58000010, 0xb000000c, 0x48000000, 0xb0000000, 0xb8000010,
  769.                     0x98000010, 0xa0000000, 0x00000000, 0x00000000, 0x20000000,
  770.                     0x80000000, 0x00000010, 0x00000000, 0x20000010, 0x20000000,
  771.                     0x00000010, 0x60000000, 0x00000018, 0xe0000000, 0x90000000,
  772.                     0x30000010, 0xb0000000, 0x20000000, 0x20000000, 0xa0000000,
  773.                     0x00000010, 0x80000000, 0x20000000, 0x20000000, 0x20000000,
  774.                     0x80000000, 0x00000010, 0x00000000, 0x20000010, 0xa0000000,
  775.                     0x00000000, 0x20000000, 0x20000000, 0x00000000, 0x00000000,
  776.                     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001,
  777.                     0x00000020, 0x00000001, 0x40000002, 0x40000041, 0x40000022,
  778.                     0x80000005, 0xc0000082, 0xc0000046, 0x4000004b, 0x80000107,
  779.                     0x00000089, 0x00000014, 0x8000024b, 0x0000011b, 0x8000016d,
  780.                     0x8000041a, 0x000002e4, 0x80000054 }),
  781.             new DvInfo(2, 46, 2, 58, 18, new int[] { 0x90000070, 0xb0000053,
  782.                     0x30000008, 0x00000043, 0xd0000072, 0xb0000010, 0xf0000062,
  783.                     0xc0000042, 0x00000030, 0xe0000042, 0x20000060, 0xe0000041,
  784.                     0x20000050, 0xc0000041, 0xe0000072, 0xa0000003, 0xc0000012,
  785.                     0x60000041, 0xc0000032, 0x20000001, 0xc0000002, 0xe0000042,
  786.                     0x60000042, 0x80000002, 0x00000000, 0x00000000, 0x80000000,
  787.                     0x00000002, 0x00000040, 0x00000000, 0x80000040, 0x80000000,
  788.                     0x00000040, 0x80000001, 0x00000060, 0x80000003, 0x40000002,
  789.                     0xc0000040, 0xc0000002, 0x80000000, 0x80000000, 0x80000002,
  790.                     0x00000040, 0x00000002, 0x80000000, 0x80000000, 0x80000000,
  791.                     0x00000002, 0x00000040, 0x00000000, 0x80000040, 0x80000002,
  792.                     0x00000000, 0x80000000, 0x80000000, 0x00000000, 0x00000000,
  793.                     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000004,
  794.                     0x00000080, 0x00000004, 0x00000009, 0x00000105, 0x00000089,
  795.                     0x00000016, 0x0000020b, 0x0000011b, 0x0000012d, 0x0000041e,
  796.                     0x00000224, 0x00000050, 0x0000092e, 0x0000046c, 0x000005b6,
  797.                     0x0000106a, 0x00000b90, 0x00000152 }),
  798.             new DvInfo(2, 47, 0, 58, 19, new int[] { 0x20000010, 0x2400001c,
  799.                     0xec000014, 0x0c000002, 0xc0000010, 0xb400001c, 0x2c000004,
  800.                     0xbc000018, 0xb0000010, 0x0000000c, 0xb8000010, 0x08000018,
  801.                     0x78000010, 0x08000014, 0x70000010, 0xb800001c, 0xe8000000,
  802.                     0xb0000004, 0x58000010, 0xb000000c, 0x48000000, 0xb0000000,
  803.                     0xb8000010, 0x98000010, 0xa0000000, 0x00000000, 0x00000000,
  804.                     0x20000000, 0x80000000, 0x00000010, 0x00000000, 0x20000010,
  805.                     0x20000000, 0x00000010, 0x60000000, 0x00000018, 0xe0000000,
  806.                     0x90000000, 0x30000010, 0xb0000000, 0x20000000, 0x20000000,
  807.                     0xa0000000, 0x00000010, 0x80000000, 0x20000000, 0x20000000,
  808.                     0x20000000, 0x80000000, 0x00000010, 0x00000000, 0x20000010,
  809.                     0xa0000000, 0x00000000, 0x20000000, 0x20000000, 0x00000000,
  810.                     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  811.                     0x00000001, 0x00000020, 0x00000001, 0x40000002, 0x40000041,
  812.                     0x40000022, 0x80000005, 0xc0000082, 0xc0000046, 0x4000004b,
  813.                     0x80000107, 0x00000089, 0x00000014, 0x8000024b, 0x0000011b,
  814.                     0x8000016d, 0x8000041a, 0x000002e4 }),
  815.             new DvInfo(2, 48, 0, 58, 20, new int[] { 0xbc00001a, 0x20000010,
  816.                     0x2400001c, 0xec000014, 0x0c000002, 0xc0000010, 0xb400001c,
  817.                     0x2c000004, 0xbc000018, 0xb0000010, 0x0000000c, 0xb8000010,
  818.                     0x08000018, 0x78000010, 0x08000014, 0x70000010, 0xb800001c,
  819.                     0xe8000000, 0xb0000004, 0x58000010, 0xb000000c, 0x48000000,
  820.                     0xb0000000, 0xb8000010, 0x98000010, 0xa0000000, 0x00000000,
  821.                     0x00000000, 0x20000000, 0x80000000, 0x00000010, 0x00000000,
  822.                     0x20000010, 0x20000000, 0x00000010, 0x60000000, 0x00000018,
  823.                     0xe0000000, 0x90000000, 0x30000010, 0xb0000000, 0x20000000,
  824.                     0x20000000, 0xa0000000, 0x00000010, 0x80000000, 0x20000000,
  825.                     0x20000000, 0x20000000, 0x80000000, 0x00000010, 0x00000000,
  826.                     0x20000010, 0xa0000000, 0x00000000, 0x20000000, 0x20000000,
  827.                     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  828.                     0x00000000, 0x00000001, 0x00000020, 0x00000001, 0x40000002,
  829.                     0x40000041, 0x40000022, 0x80000005, 0xc0000082, 0xc0000046,
  830.                     0x4000004b, 0x80000107, 0x00000089, 0x00000014, 0x8000024b,
  831.                     0x0000011b, 0x8000016d, 0x8000041a }),
  832.             new DvInfo(2, 49, 0, 58, 21, new int[] { 0x3c000004, 0xbc00001a,
  833.                     0x20000010, 0x2400001c, 0xec000014, 0x0c000002, 0xc0000010,
  834.                     0xb400001c, 0x2c000004, 0xbc000018, 0xb0000010, 0x0000000c,
  835.                     0xb8000010, 0x08000018, 0x78000010, 0x08000014, 0x70000010,
  836.                     0xb800001c, 0xe8000000, 0xb0000004, 0x58000010, 0xb000000c,
  837.                     0x48000000, 0xb0000000, 0xb8000010, 0x98000010, 0xa0000000,
  838.                     0x00000000, 0x00000000, 0x20000000, 0x80000000, 0x00000010,
  839.                     0x00000000, 0x20000010, 0x20000000, 0x00000010, 0x60000000,
  840.                     0x00000018, 0xe0000000, 0x90000000, 0x30000010, 0xb0000000,
  841.                     0x20000000, 0x20000000, 0xa0000000, 0x00000010, 0x80000000,
  842.                     0x20000000, 0x20000000, 0x20000000, 0x80000000, 0x00000010,
  843.                     0x00000000, 0x20000010, 0xa0000000, 0x00000000, 0x20000000,
  844.                     0x20000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  845.                     0x00000000, 0x00000000, 0x00000001, 0x00000020, 0x00000001,
  846.                     0x40000002, 0x40000041, 0x40000022, 0x80000005, 0xc0000082,
  847.                     0xc0000046, 0x4000004b, 0x80000107, 0x00000089, 0x00000014,
  848.                     0x8000024b, 0x0000011b, 0x8000016d }),
  849.             new DvInfo(2, 49, 2, 58, 22, new int[] { 0xf0000010, 0xf000006a,
  850.                     0x80000040, 0x90000070, 0xb0000053, 0x30000008, 0x00000043,
  851.                     0xd0000072, 0xb0000010, 0xf0000062, 0xc0000042, 0x00000030,
  852.                     0xe0000042, 0x20000060, 0xe0000041, 0x20000050, 0xc0000041,
  853.                     0xe0000072, 0xa0000003, 0xc0000012, 0x60000041, 0xc0000032,
  854.                     0x20000001, 0xc0000002, 0xe0000042, 0x60000042, 0x80000002,
  855.                     0x00000000, 0x00000000, 0x80000000, 0x00000002, 0x00000040,
  856.                     0x00000000, 0x80000040, 0x80000000, 0x00000040, 0x80000001,
  857.                     0x00000060, 0x80000003, 0x40000002, 0xc0000040, 0xc0000002,
  858.                     0x80000000, 0x80000000, 0x80000002, 0x00000040, 0x00000002,
  859.                     0x80000000, 0x80000000, 0x80000000, 0x00000002, 0x00000040,
  860.                     0x00000000, 0x80000040, 0x80000002, 0x00000000, 0x80000000,
  861.                     0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  862.                     0x00000000, 0x00000000, 0x00000004, 0x00000080, 0x00000004,
  863.                     0x00000009, 0x00000105, 0x00000089, 0x00000016, 0x0000020b,
  864.                     0x0000011b, 0x0000012d, 0x0000041e, 0x00000224, 0x00000050,
  865.                     0x0000092e, 0x0000046c, 0x000005b6 }),
  866.             new DvInfo(2, 50, 0, 65, 23, new int[] { 0xb400001c, 0x3c000004,
  867.                     0xbc00001a, 0x20000010, 0x2400001c, 0xec000014, 0x0c000002,
  868.                     0xc0000010, 0xb400001c, 0x2c000004, 0xbc000018, 0xb0000010,
  869.                     0x0000000c, 0xb8000010, 0x08000018, 0x78000010, 0x08000014,
  870.                     0x70000010, 0xb800001c, 0xe8000000, 0xb0000004, 0x58000010,
  871.                     0xb000000c, 0x48000000, 0xb0000000, 0xb8000010, 0x98000010,
  872.                     0xa0000000, 0x00000000, 0x00000000, 0x20000000, 0x80000000,
  873.                     0x00000010, 0x00000000, 0x20000010, 0x20000000, 0x00000010,
  874.                     0x60000000, 0x00000018, 0xe0000000, 0x90000000, 0x30000010,
  875.                     0xb0000000, 0x20000000, 0x20000000, 0xa0000000, 0x00000010,
  876.                     0x80000000, 0x20000000, 0x20000000, 0x20000000, 0x80000000,
  877.                     0x00000010, 0x00000000, 0x20000010, 0xa0000000, 0x00000000,
  878.                     0x20000000, 0x20000000, 0x00000000, 0x00000000, 0x00000000,
  879.                     0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000020,
  880.                     0x00000001, 0x40000002, 0x40000041, 0x40000022, 0x80000005,
  881.                     0xc0000082, 0xc0000046, 0x4000004b, 0x80000107, 0x00000089,
  882.                     0x00000014, 0x8000024b, 0x0000011b }),
  883.             new DvInfo(2, 50, 2, 65, 24, new int[] { 0xd0000072, 0xf0000010,
  884.                     0xf000006a, 0x80000040, 0x90000070, 0xb0000053, 0x30000008,
  885.                     0x00000043, 0xd0000072, 0xb0000010, 0xf0000062, 0xc0000042,
  886.                     0x00000030, 0xe0000042, 0x20000060, 0xe0000041, 0x20000050,
  887.                     0xc0000041, 0xe0000072, 0xa0000003, 0xc0000012, 0x60000041,
  888.                     0xc0000032, 0x20000001, 0xc0000002, 0xe0000042, 0x60000042,
  889.                     0x80000002, 0x00000000, 0x00000000, 0x80000000, 0x00000002,
  890.                     0x00000040, 0x00000000, 0x80000040, 0x80000000, 0x00000040,
  891.                     0x80000001, 0x00000060, 0x80000003, 0x40000002, 0xc0000040,
  892.                     0xc0000002, 0x80000000, 0x80000000, 0x80000002, 0x00000040,
  893.                     0x00000002, 0x80000000, 0x80000000, 0x80000000, 0x00000002,
  894.                     0x00000040, 0x00000000, 0x80000040, 0x80000002, 0x00000000,
  895.                     0x80000000, 0x80000000, 0x00000000, 0x00000000, 0x00000000,
  896.                     0x00000000, 0x00000000, 0x00000000, 0x00000004, 0x00000080,
  897.                     0x00000004, 0x00000009, 0x00000105, 0x00000089, 0x00000016,
  898.                     0x0000020b, 0x0000011b, 0x0000012d, 0x0000041e, 0x00000224,
  899.                     0x00000050, 0x0000092e, 0x0000046c }),
  900.             new DvInfo(2, 51, 0, 65, 25, new int[] { 0xc0000010, 0xb400001c,
  901.                     0x3c000004, 0xbc00001a, 0x20000010, 0x2400001c, 0xec000014,
  902.                     0x0c000002, 0xc0000010, 0xb400001c, 0x2c000004, 0xbc000018,
  903.                     0xb0000010, 0x0000000c, 0xb8000010, 0x08000018, 0x78000010,
  904.                     0x08000014, 0x70000010, 0xb800001c, 0xe8000000, 0xb0000004,
  905.                     0x58000010, 0xb000000c, 0x48000000, 0xb0000000, 0xb8000010,
  906.                     0x98000010, 0xa0000000, 0x00000000, 0x00000000, 0x20000000,
  907.                     0x80000000, 0x00000010, 0x00000000, 0x20000010, 0x20000000,
  908.                     0x00000010, 0x60000000, 0x00000018, 0xe0000000, 0x90000000,
  909.                     0x30000010, 0xb0000000, 0x20000000, 0x20000000, 0xa0000000,
  910.                     0x00000010, 0x80000000, 0x20000000, 0x20000000, 0x20000000,
  911.                     0x80000000, 0x00000010, 0x00000000, 0x20000010, 0xa0000000,
  912.                     0x00000000, 0x20000000, 0x20000000, 0x00000000, 0x00000000,
  913.                     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001,
  914.                     0x00000020, 0x00000001, 0x40000002, 0x40000041, 0x40000022,
  915.                     0x80000005, 0xc0000082, 0xc0000046, 0x4000004b, 0x80000107,
  916.                     0x00000089, 0x00000014, 0x8000024b }),
  917.             new DvInfo(2, 51, 2, 65, 26, new int[] { 0x00000043, 0xd0000072,
  918.                     0xf0000010, 0xf000006a, 0x80000040, 0x90000070, 0xb0000053,
  919.                     0x30000008, 0x00000043, 0xd0000072, 0xb0000010, 0xf0000062,
  920.                     0xc0000042, 0x00000030, 0xe0000042, 0x20000060, 0xe0000041,
  921.                     0x20000050, 0xc0000041, 0xe0000072, 0xa0000003, 0xc0000012,
  922.                     0x60000041, 0xc0000032, 0x20000001, 0xc0000002, 0xe0000042,
  923.                     0x60000042, 0x80000002, 0x00000000, 0x00000000, 0x80000000,
  924.                     0x00000002, 0x00000040, 0x00000000, 0x80000040, 0x80000000,
  925.                     0x00000040, 0x80000001, 0x00000060, 0x80000003, 0x40000002,
  926.                     0xc0000040, 0xc0000002, 0x80000000, 0x80000000, 0x80000002,
  927.                     0x00000040, 0x00000002, 0x80000000, 0x80000000, 0x80000000,
  928.                     0x00000002, 0x00000040, 0x00000000, 0x80000040, 0x80000002,
  929.                     0x00000000, 0x80000000, 0x80000000, 0x00000000, 0x00000000,
  930.                     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000004,
  931.                     0x00000080, 0x00000004, 0x00000009, 0x00000105, 0x00000089,
  932.                     0x00000016, 0x0000020b, 0x0000011b, 0x0000012d, 0x0000041e,
  933.                     0x00000224, 0x00000050, 0x0000092e }),
  934.             new DvInfo(2, 52, 0, 65, 27, new int[] { 0x0c000002, 0xc0000010,
  935.                     0xb400001c, 0x3c000004, 0xbc00001a, 0x20000010, 0x2400001c,
  936.                     0xec000014, 0x0c000002, 0xc0000010, 0xb400001c, 0x2c000004,
  937.                     0xbc000018, 0xb0000010, 0x0000000c, 0xb8000010, 0x08000018,
  938.                     0x78000010, 0x08000014, 0x70000010, 0xb800001c, 0xe8000000,
  939.                     0xb0000004, 0x58000010, 0xb000000c, 0x48000000, 0xb0000000,
  940.                     0xb8000010, 0x98000010, 0xa0000000, 0x00000000, 0x00000000,
  941.                     0x20000000, 0x80000000, 0x00000010, 0x00000000, 0x20000010,
  942.                     0x20000000, 0x00000010, 0x60000000, 0x00000018, 0xe0000000,
  943.                     0x90000000, 0x30000010, 0xb0000000, 0x20000000, 0x20000000,
  944.                     0xa0000000, 0x00000010, 0x80000000, 0x20000000, 0x20000000,
  945.                     0x20000000, 0x80000000, 0x00000010, 0x00000000, 0x20000010,
  946.                     0xa0000000, 0x00000000, 0x20000000, 0x20000000, 0x00000000,
  947.                     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  948.                     0x00000001, 0x00000020, 0x00000001, 0x40000002, 0x40000041,
  949.                     0x40000022, 0x80000005, 0xc0000082, 0xc0000046, 0x4000004b,
  950.                     0x80000107, 0x00000089, 0x00000014 }),
  951.             new DvInfo(2, 53, 0, 65, 28, new int[] { 0xcc000014, 0x0c000002,
  952.                     0xc0000010, 0xb400001c, 0x3c000004, 0xbc00001a, 0x20000010,
  953.                     0x2400001c, 0xec000014, 0x0c000002, 0xc0000010, 0xb400001c,
  954.                     0x2c000004, 0xbc000018, 0xb0000010, 0x0000000c, 0xb8000010,
  955.                     0x08000018, 0x78000010, 0x08000014, 0x70000010, 0xb800001c,
  956.                     0xe8000000, 0xb0000004, 0x58000010, 0xb000000c, 0x48000000,
  957.                     0xb0000000, 0xb8000010, 0x98000010, 0xa0000000, 0x00000000,
  958.                     0x00000000, 0x20000000, 0x80000000, 0x00000010, 0x00000000,
  959.                     0x20000010, 0x20000000, 0x00000010, 0x60000000, 0x00000018,
  960.                     0xe0000000, 0x90000000, 0x30000010, 0xb0000000, 0x20000000,
  961.                     0x20000000, 0xa0000000, 0x00000010, 0x80000000, 0x20000000,
  962.                     0x20000000, 0x20000000, 0x80000000, 0x00000010, 0x00000000,
  963.                     0x20000010, 0xa0000000, 0x00000000, 0x20000000, 0x20000000,
  964.                     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  965.                     0x00000000, 0x00000001, 0x00000020, 0x00000001, 0x40000002,
  966.                     0x40000041, 0x40000022, 0x80000005, 0xc0000082, 0xc0000046,
  967.                     0x4000004b, 0x80000107, 0x00000089 }),
  968.             new DvInfo(2, 54, 0, 65, 29, new int[] { 0x0400001c, 0xcc000014,
  969.                     0x0c000002, 0xc0000010, 0xb400001c, 0x3c000004, 0xbc00001a,
  970.                     0x20000010, 0x2400001c, 0xec000014, 0x0c000002, 0xc0000010,
  971.                     0xb400001c, 0x2c000004, 0xbc000018, 0xb0000010, 0x0000000c,
  972.                     0xb8000010, 0x08000018, 0x78000010, 0x08000014, 0x70000010,
  973.                     0xb800001c, 0xe8000000, 0xb0000004, 0x58000010, 0xb000000c,
  974.                     0x48000000, 0xb0000000, 0xb8000010, 0x98000010, 0xa0000000,
  975.                     0x00000000, 0x00000000, 0x20000000, 0x80000000, 0x00000010,
  976.                     0x00000000, 0x20000010, 0x20000000, 0x00000010, 0x60000000,
  977.                     0x00000018, 0xe0000000, 0x90000000, 0x30000010, 0xb0000000,
  978.                     0x20000000, 0x20000000, 0xa0000000, 0x00000010, 0x80000000,
  979.                     0x20000000, 0x20000000, 0x20000000, 0x80000000, 0x00000010,
  980.                     0x00000000, 0x20000010, 0xa0000000, 0x00000000, 0x20000000,
  981.                     0x20000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  982.                     0x00000000, 0x00000000, 0x00000001, 0x00000020, 0x00000001,
  983.                     0x40000002, 0x40000041, 0x40000022, 0x80000005, 0xc0000082,
  984.                     0xc0000046, 0x4000004b, 0x80000107 }),
  985.             new DvInfo(2, 55, 0, 65, 30, new int[] { 0x00000010, 0x0400001c,
  986.                     0xcc000014, 0x0c000002, 0xc0000010, 0xb400001c, 0x3c000004,
  987.                     0xbc00001a, 0x20000010, 0x2400001c, 0xec000014, 0x0c000002,
  988.                     0xc0000010, 0xb400001c, 0x2c000004, 0xbc000018, 0xb0000010,
  989.                     0x0000000c, 0xb8000010, 0x08000018, 0x78000010, 0x08000014,
  990.                     0x70000010, 0xb800001c, 0xe8000000, 0xb0000004, 0x58000010,
  991.                     0xb000000c, 0x48000000, 0xb0000000, 0xb8000010, 0x98000010,
  992.                     0xa0000000, 0x00000000, 0x00000000, 0x20000000, 0x80000000,
  993.                     0x00000010, 0x00000000, 0x20000010, 0x20000000, 0x00000010,
  994.                     0x60000000, 0x00000018, 0xe0000000, 0x90000000, 0x30000010,
  995.                     0xb0000000, 0x20000000, 0x20000000, 0xa0000000, 0x00000010,
  996.                     0x80000000, 0x20000000, 0x20000000, 0x20000000, 0x80000000,
  997.                     0x00000010, 0x00000000, 0x20000010, 0xa0000000, 0x00000000,
  998.                     0x20000000, 0x20000000, 0x00000000, 0x00000000, 0x00000000,
  999.                     0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000020,
  1000.                     0x00000001, 0x40000002, 0x40000041, 0x40000022, 0x80000005,
  1001.                     0xc0000082, 0xc0000046, 0x4000004b }),
  1002.             new DvInfo(2, 56, 0, 65, 31, new int[] { 0x2600001a, 0x00000010,
  1003.                     0x0400001c, 0xcc000014, 0x0c000002, 0xc0000010, 0xb400001c,
  1004.                     0x3c000004, 0xbc00001a, 0x20000010, 0x2400001c, 0xec000014,
  1005.                     0x0c000002, 0xc0000010, 0xb400001c, 0x2c000004, 0xbc000018,
  1006.                     0xb0000010, 0x0000000c, 0xb8000010, 0x08000018, 0x78000010,
  1007.                     0x08000014, 0x70000010, 0xb800001c, 0xe8000000, 0xb0000004,
  1008.                     0x58000010, 0xb000000c, 0x48000000, 0xb0000000, 0xb8000010,
  1009.                     0x98000010, 0xa0000000, 0x00000000, 0x00000000, 0x20000000,
  1010.                     0x80000000, 0x00000010, 0x00000000, 0x20000010, 0x20000000,
  1011.                     0x00000010, 0x60000000, 0x00000018, 0xe0000000, 0x90000000,
  1012.                     0x30000010, 0xb0000000, 0x20000000, 0x20000000, 0xa0000000,
  1013.                     0x00000010, 0x80000000, 0x20000000, 0x20000000, 0x20000000,
  1014.                     0x80000000, 0x00000010, 0x00000000, 0x20000010, 0xa0000000,
  1015.                     0x00000000, 0x20000000, 0x20000000, 0x00000000, 0x00000000,
  1016.                     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001,
  1017.                     0x00000020, 0x00000001, 0x40000002, 0x40000041, 0x40000022,
  1018.                     0x80000005, 0xc0000082, 0xc0000046 }), };

  1019.     static {
  1020.         // Assert the DV array is indexed by maskb; that is DV block using
  1021.         // maskb = N must be at array index N.
  1022.         for (int i = 0; i < DV.length; i++) {
  1023.             if (i != DV[i].maskb) {
  1024.                 throw new IllegalStateException("must be indexed by maskb"); //$NON-NLS-1$
  1025.             }
  1026.         }
  1027.     }
  1028. }