1 package org.jmol.util;
2 
3 import javajs.util.P3i;
4 
5 /**
6  * An adaptation of Marching Cubes that allows for indicating edges on triangles.
7  *
8  * the triangle data for MarchingCube and Triangulator
9  *
10  * Used for Marching Cubes as well as calculating the intersection of unit cells
11  * and bounding boxes with planes.
12  *
13  */
14 
15 public class TriangleData {
16 
17 
18 // Note that this is NOT the same as for BoxInfo
19 //
20 //                       Y
21 //                        4 --------4--------- 5                     +z --------4--------- +yz+z
22 //                       /|                   /|                     /|                   /|
23 //                      / |                  / |                    / |                  / |
24 //                     /  |                 /  |                   /  |                 /  |
25 //                    7   8                5   |                  7   8                5   |
26 //                   /    |               /    9                 /    |               /    9
27 //                  /     |              /     |                /     |              /     |
28 //                 7 --------6--------- 6      |            +z+1 --------6--------- +yz+z+1|
29 //                 |      |             |      |               |      |             |      |
30 //                 |      0 ---------0--|----- 1    X          |      0 ---------0--|----- +yz    X(outer)
31 //                 |     /              |     /                |     /              |     /
32 //                11    /               10   /                11    /               10   /
33 //                 |   3                |   1                  |   3                |   1
34 //                 |  /                 |  /                   |  /                 |  /
35 //                 | /                  | /                    | /                  | /
36 //                 3 ---------2-------- 2                     +1 ---------2-------- +yz+1
37 //                Z                                           Z (inner)
38 //
39 //                                                                streaming data offsets
40 //
41 //
42   protected static final int[] Pwr2 = new int[] { 1, 2, 4, 8, 16, 32, 64, 128,
43     256, 512, 1024, 2048 };
44 
45 
46   protected final static P3i[] cubeVertexOffsets = {
47     P3i.new3(0, 0, 0), //0 pt
48     P3i.new3(1, 0, 0), //1 pt + yz
49     P3i.new3(1, 0, 1), //2 pt + yz + 1
50     P3i.new3(0, 0, 1), //3 pt + 1
51     P3i.new3(0, 1, 0), //4 pt + z
52     P3i.new3(1, 1, 0), //5 pt + yz + z
53     P3i.new3(1, 1, 1), //6 pt + yz + z + 1
54     P3i.new3(0, 1, 1)  //7 pt + z + 1
55   };
56 
57   protected final static byte edgeVertexes[] = {
58     0, 1, 1, 2, 2, 3, 3, 0, 4, 5,
59   //0     1     2     3     4
60     5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 };
61   //5     6     7     8     9     10    11
62 
63 
64 
65   /**
66    *
67    * The new triangle table developed specifically for Jmol.
68    * The fourth number in each ABC set is three bits, b3b2b1, where
69    * b1 = 1 for AB, b2 = 1 for BC, b3 = 1 for CA, and
70    * mark lines to be drawn for mesh
71    *
72    * So, for example:
73    *
74    *   1, 8, 3, 6
75    *
76    * 6 is 110 in binary, so b3 = 1, b2 = 1, b1 = 0;
77    * b1 refers to the 18 edge, b2 refers to the 83 edge,
78    * and b3 refers to the 31 edge. The 31 and 83, but not 18 edges
79    * should be drawn for a mesh. On the cube above, you can see
80    * that the 18 edges is in the interior of the cube. That's why we
81    * don't render it with a mesh.
82    *
83    *
84    * Bob Hanson, 3/29/2007
85    *
86    */
87 
88   protected final static byte[][] triangleTable2 = { null, { 0, 8, 3, 7 },
89       { 0, 1, 9, 7 }, { 1, 8, 3, 6, 9, 8, 1, 5 }, { 1, 2, 10, 7 },
90       { 0, 8, 3, 7, 1, 2, 10, 7 }, { 9, 2, 10, 6, 0, 2, 9, 5 },
91       { 2, 8, 3, 6, 2, 10, 8, 1, 10, 9, 8, 3 }, { 3, 11, 2, 7 },
92       { 0, 11, 2, 6, 8, 11, 0, 5 }, { 1, 9, 0, 7, 2, 3, 11, 7 },
93       { 1, 11, 2, 6, 1, 9, 11, 1, 9, 8, 11, 3 }, { 3, 10, 1, 6, 11, 10, 3, 5 },
94       { 0, 10, 1, 6, 0, 8, 10, 1, 8, 11, 10, 3 },
95       { 3, 9, 0, 6, 3, 11, 9, 1, 11, 10, 9, 3 }, { 9, 8, 10, 5, 10, 8, 11, 6 },
96       { 4, 7, 8, 7 }, { 4, 3, 0, 6, 7, 3, 4, 5 }, { 0, 1, 9, 7, 8, 4, 7, 7 },
97       { 4, 1, 9, 6, 4, 7, 1, 1, 7, 3, 1, 3 }, { 1, 2, 10, 7, 8, 4, 7, 7 },
98       { 3, 4, 7, 6, 3, 0, 4, 3, 1, 2, 10, 7 },
99       { 9, 2, 10, 6, 9, 0, 2, 3, 8, 4, 7, 7 },
100       { 2, 10, 9, 3, 2, 9, 7, 0, 2, 7, 3, 6, 7, 9, 4, 6 },
101       { 8, 4, 7, 7, 3, 11, 2, 7 }, { 11, 4, 7, 6, 11, 2, 4, 1, 2, 0, 4, 3 },
102       { 9, 0, 1, 7, 8, 4, 7, 7, 2, 3, 11, 7 },
103       { 4, 7, 11, 3, 9, 4, 11, 1, 9, 11, 2, 2, 9, 2, 1, 6 },
104       { 3, 10, 1, 6, 3, 11, 10, 3, 7, 8, 4, 7 },
105       { 1, 11, 10, 6, 1, 4, 11, 0, 1, 0, 4, 3, 7, 11, 4, 5 },
106       { 4, 7, 8, 7, 9, 0, 11, 1, 9, 11, 10, 6, 11, 0, 3, 6 },
107       { 4, 7, 11, 3, 4, 11, 9, 4, 9, 11, 10, 6 }, { 9, 5, 4, 7 },
108       { 9, 5, 4, 7, 0, 8, 3, 7 }, { 0, 5, 4, 6, 1, 5, 0, 5 },
109       { 8, 5, 4, 6, 8, 3, 5, 1, 3, 1, 5, 3 }, { 1, 2, 10, 7, 9, 5, 4, 7 },
110       { 3, 0, 8, 7, 1, 2, 10, 7, 4, 9, 5, 7 },
111       { 5, 2, 10, 6, 5, 4, 2, 1, 4, 0, 2, 3 },
112       { 2, 10, 5, 3, 3, 2, 5, 1, 3, 5, 4, 2, 3, 4, 8, 6 },
113       { 9, 5, 4, 7, 2, 3, 11, 7 }, { 0, 11, 2, 6, 0, 8, 11, 3, 4, 9, 5, 7 },
114       { 0, 5, 4, 6, 0, 1, 5, 3, 2, 3, 11, 7 },
115       { 2, 1, 5, 3, 2, 5, 8, 0, 2, 8, 11, 6, 4, 8, 5, 5 },
116       { 10, 3, 11, 6, 10, 1, 3, 3, 9, 5, 4, 7 },
117       { 4, 9, 5, 7, 0, 8, 1, 5, 8, 10, 1, 2, 8, 11, 10, 3 },
118       { 5, 4, 0, 3, 5, 0, 11, 0, 5, 11, 10, 6, 11, 0, 3, 6 },
119       { 5, 4, 8, 3, 5, 8, 10, 4, 10, 8, 11, 6 }, { 9, 7, 8, 6, 5, 7, 9, 5 },
120       { 9, 3, 0, 6, 9, 5, 3, 1, 5, 7, 3, 3 },
121       { 0, 7, 8, 6, 0, 1, 7, 1, 1, 5, 7, 3 }, { 1, 5, 3, 5, 3, 5, 7, 6 },
122       { 9, 7, 8, 6, 9, 5, 7, 3, 10, 1, 2, 7 },
123       { 10, 1, 2, 7, 9, 5, 0, 5, 5, 3, 0, 2, 5, 7, 3, 3 },
124       { 8, 0, 2, 3, 8, 2, 5, 0, 8, 5, 7, 6, 10, 5, 2, 5 },
125       { 2, 10, 5, 3, 2, 5, 3, 4, 3, 5, 7, 6 },
126       { 7, 9, 5, 6, 7, 8, 9, 3, 3, 11, 2, 7 },
127       { 9, 5, 7, 3, 9, 7, 2, 0, 9, 2, 0, 6, 2, 7, 11, 6 },
128       { 2, 3, 11, 7, 0, 1, 8, 5, 1, 7, 8, 2, 1, 5, 7, 3 },
129       { 11, 2, 1, 3, 11, 1, 7, 4, 7, 1, 5, 6 },
130       { 9, 5, 8, 5, 8, 5, 7, 6, 10, 1, 3, 3, 10, 3, 11, 6 },
131       { 5, 7, 0, 1, 5, 0, 9, 6, 7, 11, 0, 1, 1, 0, 10, 5, 11, 10, 0, 1 },
132       { 11, 10, 0, 1, 11, 0, 3, 6, 10, 5, 0, 1, 8, 0, 7, 5, 5, 7, 0, 1 },
133       { 11, 10, 5, 3, 7, 11, 5, 5 }, { 10, 6, 5, 7 },
134       { 0, 8, 3, 7, 5, 10, 6, 7 }, { 9, 0, 1, 7, 5, 10, 6, 7 },
135       { 1, 8, 3, 6, 1, 9, 8, 3, 5, 10, 6, 7 }, { 1, 6, 5, 6, 2, 6, 1, 5 },
136       { 1, 6, 5, 6, 1, 2, 6, 3, 3, 0, 8, 7 },
137       { 9, 6, 5, 6, 9, 0, 6, 1, 0, 2, 6, 3 },
138       { 5, 9, 8, 3, 5, 8, 2, 0, 5, 2, 6, 6, 3, 2, 8, 5 },
139       { 2, 3, 11, 7, 10, 6, 5, 7 }, { 11, 0, 8, 6, 11, 2, 0, 3, 10, 6, 5, 7 },
140       { 0, 1, 9, 7, 2, 3, 11, 7, 5, 10, 6, 7 },
141       { 5, 10, 6, 7, 1, 9, 2, 5, 9, 11, 2, 2, 9, 8, 11, 3 },
142       { 6, 3, 11, 6, 6, 5, 3, 1, 5, 1, 3, 3 },
143       { 0, 8, 11, 3, 0, 11, 5, 0, 0, 5, 1, 6, 5, 11, 6, 6 },
144       { 3, 11, 6, 3, 0, 3, 6, 1, 0, 6, 5, 2, 0, 5, 9, 6 },
145       { 6, 5, 9, 3, 6, 9, 11, 4, 11, 9, 8, 6 }, { 5, 10, 6, 7, 4, 7, 8, 7 },
146       { 4, 3, 0, 6, 4, 7, 3, 3, 6, 5, 10, 7 },
147       { 1, 9, 0, 7, 5, 10, 6, 7, 8, 4, 7, 7 },
148       { 10, 6, 5, 7, 1, 9, 7, 1, 1, 7, 3, 6, 7, 9, 4, 6 },
149       { 6, 1, 2, 6, 6, 5, 1, 3, 4, 7, 8, 7 },
150       { 1, 2, 5, 5, 5, 2, 6, 6, 3, 0, 4, 3, 3, 4, 7, 6 },
151       { 8, 4, 7, 7, 9, 0, 5, 5, 0, 6, 5, 2, 0, 2, 6, 3 },
152       { 7, 3, 9, 1, 7, 9, 4, 6, 3, 2, 9, 1, 5, 9, 6, 5, 2, 6, 9, 1 },
153       { 3, 11, 2, 7, 7, 8, 4, 7, 10, 6, 5, 7 },
154       { 5, 10, 6, 7, 4, 7, 2, 1, 4, 2, 0, 6, 2, 7, 11, 6 },
155       { 0, 1, 9, 7, 4, 7, 8, 7, 2, 3, 11, 7, 5, 10, 6, 7 },
156       { 9, 2, 1, 6, 9, 11, 2, 2, 9, 4, 11, 1, 7, 11, 4, 5, 5, 10, 6, 7 },
157       { 8, 4, 7, 7, 3, 11, 5, 1, 3, 5, 1, 6, 5, 11, 6, 6 },
158       { 5, 1, 11, 1, 5, 11, 6, 6, 1, 0, 11, 1, 7, 11, 4, 5, 0, 4, 11, 1 },
159       { 0, 5, 9, 6, 0, 6, 5, 2, 0, 3, 6, 1, 11, 6, 3, 5, 8, 4, 7, 7 },
160       { 6, 5, 9, 3, 6, 9, 11, 4, 4, 7, 9, 5, 7, 11, 9, 1 },
161       { 10, 4, 9, 6, 6, 4, 10, 5 }, { 4, 10, 6, 6, 4, 9, 10, 3, 0, 8, 3, 7 },
162       { 10, 0, 1, 6, 10, 6, 0, 1, 6, 4, 0, 3 },
163       { 8, 3, 1, 3, 8, 1, 6, 0, 8, 6, 4, 6, 6, 1, 10, 6 },
164       { 1, 4, 9, 6, 1, 2, 4, 1, 2, 6, 4, 3 },
165       { 3, 0, 8, 7, 1, 2, 9, 5, 2, 4, 9, 2, 2, 6, 4, 3 },
166       { 0, 2, 4, 5, 4, 2, 6, 6 }, { 8, 3, 2, 3, 8, 2, 4, 4, 4, 2, 6, 6 },
167       { 10, 4, 9, 6, 10, 6, 4, 3, 11, 2, 3, 7 },
168       { 0, 8, 2, 5, 2, 8, 11, 6, 4, 9, 10, 3, 4, 10, 6, 6 },
169       { 3, 11, 2, 7, 0, 1, 6, 1, 0, 6, 4, 6, 6, 1, 10, 6 },
170       { 6, 4, 1, 1, 6, 1, 10, 6, 4, 8, 1, 1, 2, 1, 11, 5, 8, 11, 1, 1 },
171       { 9, 6, 4, 6, 9, 3, 6, 0, 9, 1, 3, 3, 11, 6, 3, 5 },
172       { 8, 11, 1, 1, 8, 1, 0, 6, 11, 6, 1, 1, 9, 1, 4, 5, 6, 4, 1, 1 },
173       { 3, 11, 6, 3, 3, 6, 0, 4, 0, 6, 4, 6 }, { 6, 4, 8, 3, 11, 6, 8, 5 },
174       { 7, 10, 6, 6, 7, 8, 10, 1, 8, 9, 10, 3 },
175       { 0, 7, 3, 6, 0, 10, 7, 0, 0, 9, 10, 3, 6, 7, 10, 5 },
176       { 10, 6, 7, 3, 1, 10, 7, 1, 1, 7, 8, 2, 1, 8, 0, 6 },
177       { 10, 6, 7, 3, 10, 7, 1, 4, 1, 7, 3, 6 },
178       { 1, 2, 6, 3, 1, 6, 8, 0, 1, 8, 9, 6, 8, 6, 7, 6 },
179       { 2, 6, 9, 1, 2, 9, 1, 6, 6, 7, 9, 1, 0, 9, 3, 5, 7, 3, 9, 1 },
180       { 7, 8, 0, 3, 7, 0, 6, 4, 6, 0, 2, 6 }, { 7, 3, 2, 3, 6, 7, 2, 5 },
181       { 2, 3, 11, 7, 10, 6, 8, 1, 10, 8, 9, 6, 8, 6, 7, 6 },
182       { 2, 0, 7, 1, 2, 7, 11, 6, 0, 9, 7, 1, 6, 7, 10, 5, 9, 10, 7, 1 },
183       { 1, 8, 0, 6, 1, 7, 8, 2, 1, 10, 7, 1, 6, 7, 10, 5, 2, 3, 11, 7 },
184       { 11, 2, 1, 3, 11, 1, 7, 4, 10, 6, 1, 5, 6, 7, 1, 1 },
185       { 8, 9, 6, 1, 8, 6, 7, 6, 9, 1, 6, 1, 11, 6, 3, 5, 1, 3, 6, 1 },
186       { 0, 9, 1, 7, 11, 6, 7, 7 },
187       { 7, 8, 0, 3, 7, 0, 6, 4, 3, 11, 0, 5, 11, 6, 0, 1 }, { 7, 11, 6, 7 },
188       { 7, 6, 11, 7 }, { 3, 0, 8, 7, 11, 7, 6, 7 },
189       { 0, 1, 9, 7, 11, 7, 6, 7 }, { 8, 1, 9, 6, 8, 3, 1, 3, 11, 7, 6, 7 },
190       { 10, 1, 2, 7, 6, 11, 7, 7 }, { 1, 2, 10, 7, 3, 0, 8, 7, 6, 11, 7, 7 },
191       { 2, 9, 0, 6, 2, 10, 9, 3, 6, 11, 7, 7 },
192       { 6, 11, 7, 7, 2, 10, 3, 5, 10, 8, 3, 2, 10, 9, 8, 3 },
193       { 7, 2, 3, 6, 6, 2, 7, 5 }, { 7, 0, 8, 6, 7, 6, 0, 1, 6, 2, 0, 3 },
194       { 2, 7, 6, 6, 2, 3, 7, 3, 0, 1, 9, 7 },
195       { 1, 6, 2, 6, 1, 8, 6, 0, 1, 9, 8, 3, 8, 7, 6, 3 },
196       { 10, 7, 6, 6, 10, 1, 7, 1, 1, 3, 7, 3 },
197       { 10, 7, 6, 6, 1, 7, 10, 4, 1, 8, 7, 2, 1, 0, 8, 3 },
198       { 0, 3, 7, 3, 0, 7, 10, 0, 0, 10, 9, 6, 6, 10, 7, 5 },
199       { 7, 6, 10, 3, 7, 10, 8, 4, 8, 10, 9, 6 }, { 6, 8, 4, 6, 11, 8, 6, 5 },
200       { 3, 6, 11, 6, 3, 0, 6, 1, 0, 4, 6, 3 },
201       { 8, 6, 11, 6, 8, 4, 6, 3, 9, 0, 1, 7 },
202       { 9, 4, 6, 3, 9, 6, 3, 0, 9, 3, 1, 6, 11, 3, 6, 5 },
203       { 6, 8, 4, 6, 6, 11, 8, 3, 2, 10, 1, 7 },
204       { 1, 2, 10, 7, 3, 0, 11, 5, 0, 6, 11, 2, 0, 4, 6, 3 },
205       { 4, 11, 8, 6, 4, 6, 11, 3, 0, 2, 9, 5, 2, 10, 9, 3 },
206       { 10, 9, 3, 1, 10, 3, 2, 6, 9, 4, 3, 1, 11, 3, 6, 5, 4, 6, 3, 1 },
207       { 8, 2, 3, 6, 8, 4, 2, 1, 4, 6, 2, 3 }, { 0, 4, 2, 5, 4, 6, 2, 3 },
208       { 1, 9, 0, 7, 2, 3, 4, 1, 2, 4, 6, 6, 4, 3, 8, 6 },
209       { 1, 9, 4, 3, 1, 4, 2, 4, 2, 4, 6, 6 },
210       { 8, 1, 3, 6, 8, 6, 1, 0, 8, 4, 6, 3, 6, 10, 1, 3 },
211       { 10, 1, 0, 3, 10, 0, 6, 4, 6, 0, 4, 6 },
212       { 4, 6, 3, 1, 4, 3, 8, 6, 6, 10, 3, 1, 0, 3, 9, 5, 10, 9, 3, 1 },
213       { 10, 9, 4, 3, 6, 10, 4, 5 }, { 4, 9, 5, 7, 7, 6, 11, 7 },
214       { 0, 8, 3, 7, 4, 9, 5, 7, 11, 7, 6, 7 },
215       { 5, 0, 1, 6, 5, 4, 0, 3, 7, 6, 11, 7 },
216       { 11, 7, 6, 7, 8, 3, 4, 5, 3, 5, 4, 2, 3, 1, 5, 3 },
217       { 9, 5, 4, 7, 10, 1, 2, 7, 7, 6, 11, 7 },
218       { 6, 11, 7, 7, 1, 2, 10, 7, 0, 8, 3, 7, 4, 9, 5, 7 },
219       { 7, 6, 11, 7, 5, 4, 10, 5, 4, 2, 10, 2, 4, 0, 2, 3 },
220       { 3, 4, 8, 6, 3, 5, 4, 2, 3, 2, 5, 1, 10, 5, 2, 5, 11, 7, 6, 7 },
221       { 7, 2, 3, 6, 7, 6, 2, 3, 5, 4, 9, 7 },
222       { 9, 5, 4, 7, 0, 8, 6, 1, 0, 6, 2, 6, 6, 8, 7, 6 },
223       { 3, 6, 2, 6, 3, 7, 6, 3, 1, 5, 0, 5, 5, 4, 0, 3 },
224       { 6, 2, 8, 1, 6, 8, 7, 6, 2, 1, 8, 1, 4, 8, 5, 5, 1, 5, 8, 1 },
225       { 9, 5, 4, 7, 10, 1, 6, 5, 1, 7, 6, 2, 1, 3, 7, 3 },
226       { 1, 6, 10, 6, 1, 7, 6, 2, 1, 0, 7, 1, 8, 7, 0, 5, 9, 5, 4, 7 },
227       { 4, 0, 10, 1, 4, 10, 5, 6, 0, 3, 10, 1, 6, 10, 7, 5, 3, 7, 10, 1 },
228       { 7, 6, 10, 3, 7, 10, 8, 4, 5, 4, 10, 5, 4, 8, 10, 1 },
229       { 6, 9, 5, 6, 6, 11, 9, 1, 11, 8, 9, 3 },
230       { 3, 6, 11, 6, 0, 6, 3, 4, 0, 5, 6, 2, 0, 9, 5, 3 },
231       { 0, 11, 8, 6, 0, 5, 11, 0, 0, 1, 5, 3, 5, 6, 11, 3 },
232       { 6, 11, 3, 3, 6, 3, 5, 4, 5, 3, 1, 6 },
233       { 1, 2, 10, 7, 9, 5, 11, 1, 9, 11, 8, 6, 11, 5, 6, 6 },
234       { 0, 11, 3, 6, 0, 6, 11, 2, 0, 9, 6, 1, 5, 6, 9, 5, 1, 2, 10, 7 },
235       { 11, 8, 5, 1, 11, 5, 6, 6, 8, 0, 5, 1, 10, 5, 2, 5, 0, 2, 5, 1 },
236       { 6, 11, 3, 3, 6, 3, 5, 4, 2, 10, 3, 5, 10, 5, 3, 1 },
237       { 5, 8, 9, 6, 5, 2, 8, 0, 5, 6, 2, 3, 3, 8, 2, 5 },
238       { 9, 5, 6, 3, 9, 6, 0, 4, 0, 6, 2, 6 },
239       { 1, 5, 8, 1, 1, 8, 0, 6, 5, 6, 8, 1, 3, 8, 2, 5, 6, 2, 8, 1 },
240       { 1, 5, 6, 3, 2, 1, 6, 5 },
241       { 1, 3, 6, 1, 1, 6, 10, 6, 3, 8, 6, 1, 5, 6, 9, 5, 8, 9, 6, 1 },
242       { 10, 1, 0, 3, 10, 0, 6, 4, 9, 5, 0, 5, 5, 6, 0, 1 },
243       { 0, 3, 8, 7, 5, 6, 10, 7 }, { 10, 5, 6, 7 },
244       { 11, 5, 10, 6, 7, 5, 11, 5 }, { 11, 5, 10, 6, 11, 7, 5, 3, 8, 3, 0, 7 },
245       { 5, 11, 7, 6, 5, 10, 11, 3, 1, 9, 0, 7 },
246       { 10, 7, 5, 6, 10, 11, 7, 3, 9, 8, 1, 5, 8, 3, 1, 3 },
247       { 11, 1, 2, 6, 11, 7, 1, 1, 7, 5, 1, 3 },
248       { 0, 8, 3, 7, 1, 2, 7, 1, 1, 7, 5, 6, 7, 2, 11, 6 },
249       { 9, 7, 5, 6, 9, 2, 7, 0, 9, 0, 2, 3, 2, 11, 7, 3 },
250       { 7, 5, 2, 1, 7, 2, 11, 6, 5, 9, 2, 1, 3, 2, 8, 5, 9, 8, 2, 1 },
251       { 2, 5, 10, 6, 2, 3, 5, 1, 3, 7, 5, 3 },
252       { 8, 2, 0, 6, 8, 5, 2, 0, 8, 7, 5, 3, 10, 2, 5, 5 },
253       { 9, 0, 1, 7, 5, 10, 3, 1, 5, 3, 7, 6, 3, 10, 2, 6 },
254       { 9, 8, 2, 1, 9, 2, 1, 6, 8, 7, 2, 1, 10, 2, 5, 5, 7, 5, 2, 1 },
255       { 1, 3, 5, 5, 3, 7, 5, 3 }, { 0, 8, 7, 3, 0, 7, 1, 4, 1, 7, 5, 6 },
256       { 9, 0, 3, 3, 9, 3, 5, 4, 5, 3, 7, 6 }, { 9, 8, 7, 3, 5, 9, 7, 5 },
257       { 5, 8, 4, 6, 5, 10, 8, 1, 10, 11, 8, 3 },
258       { 5, 0, 4, 6, 5, 11, 0, 0, 5, 10, 11, 3, 11, 3, 0, 3 },
259       { 0, 1, 9, 7, 8, 4, 10, 1, 8, 10, 11, 6, 10, 4, 5, 6 },
260       { 10, 11, 4, 1, 10, 4, 5, 6, 11, 3, 4, 1, 9, 4, 1, 5, 3, 1, 4, 1 },
261       { 2, 5, 1, 6, 2, 8, 5, 0, 2, 11, 8, 3, 4, 5, 8, 5 },
262       { 0, 4, 11, 1, 0, 11, 3, 6, 4, 5, 11, 1, 2, 11, 1, 5, 5, 1, 11, 1 },
263       { 0, 2, 5, 1, 0, 5, 9, 6, 2, 11, 5, 1, 4, 5, 8, 5, 11, 8, 5, 1 },
264       { 9, 4, 5, 7, 2, 11, 3, 7 },
265       { 2, 5, 10, 6, 3, 5, 2, 4, 3, 4, 5, 2, 3, 8, 4, 3 },
266       { 5, 10, 2, 3, 5, 2, 4, 4, 4, 2, 0, 6 },
267       { 3, 10, 2, 6, 3, 5, 10, 2, 3, 8, 5, 1, 4, 5, 8, 5, 0, 1, 9, 7 },
268       { 5, 10, 2, 3, 5, 2, 4, 4, 1, 9, 2, 5, 9, 4, 2, 1 },
269       { 8, 4, 5, 3, 8, 5, 3, 4, 3, 5, 1, 6 }, { 0, 4, 5, 3, 1, 0, 5, 5 },
270       { 8, 4, 5, 3, 8, 5, 3, 4, 9, 0, 5, 5, 0, 3, 5, 1 }, { 9, 4, 5, 7 },
271       { 4, 11, 7, 6, 4, 9, 11, 1, 9, 10, 11, 3 },
272       { 0, 8, 3, 7, 4, 9, 7, 5, 9, 11, 7, 2, 9, 10, 11, 3 },
273       { 1, 10, 11, 3, 1, 11, 4, 0, 1, 4, 0, 6, 7, 4, 11, 5 },
274       { 3, 1, 4, 1, 3, 4, 8, 6, 1, 10, 4, 1, 7, 4, 11, 5, 10, 11, 4, 1 },
275       { 4, 11, 7, 6, 9, 11, 4, 4, 9, 2, 11, 2, 9, 1, 2, 3 },
276       { 9, 7, 4, 6, 9, 11, 7, 2, 9, 1, 11, 1, 2, 11, 1, 5, 0, 8, 3, 7 },
277       { 11, 7, 4, 3, 11, 4, 2, 4, 2, 4, 0, 6 },
278       { 11, 7, 4, 3, 11, 4, 2, 4, 8, 3, 4, 5, 3, 2, 4, 1 },
279       { 2, 9, 10, 6, 2, 7, 9, 0, 2, 3, 7, 3, 7, 4, 9, 3 },
280       { 9, 10, 7, 1, 9, 7, 4, 6, 10, 2, 7, 1, 8, 7, 0, 5, 2, 0, 7, 1 },
281       { 3, 7, 10, 1, 3, 10, 2, 6, 7, 4, 10, 1, 1, 10, 0, 5, 4, 0, 10, 1 },
282       { 1, 10, 2, 7, 8, 7, 4, 7 }, { 4, 9, 1, 3, 4, 1, 7, 4, 7, 1, 3, 6 },
283       { 4, 9, 1, 3, 4, 1, 7, 4, 0, 8, 1, 5, 8, 7, 1, 1 },
284       { 4, 0, 3, 3, 7, 4, 3, 5 }, { 4, 8, 7, 7 },
285       { 9, 10, 8, 5, 10, 11, 8, 3 }, { 3, 0, 9, 3, 3, 9, 11, 4, 11, 9, 10, 6 },
286       { 0, 1, 10, 3, 0, 10, 8, 4, 8, 10, 11, 6 },
287       { 3, 1, 10, 3, 11, 3, 10, 5 }, { 1, 2, 11, 3, 1, 11, 9, 4, 9, 11, 8, 6 },
288       { 3, 0, 9, 3, 3, 9, 11, 4, 1, 2, 9, 5, 2, 11, 9, 1 },
289       { 0, 2, 11, 3, 8, 0, 11, 5 }, { 3, 2, 11, 7 },
290       { 2, 3, 8, 3, 2, 8, 10, 4, 10, 8, 9, 6 }, { 9, 10, 2, 3, 0, 9, 2, 5 },
291       { 2, 3, 8, 3, 2, 8, 10, 4, 0, 1, 8, 5, 1, 10, 8, 1 }, { 1, 10, 2, 7 },
292       { 1, 3, 8, 3, 9, 1, 8, 5 }, { 0, 9, 1, 7 }, { 0, 3, 8, 7 }, null };
293 
294 }
295