1ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto//===- subzero/crosstest/test_vector_ops.cpp - Vector tests -----*- C++ -*-===//
2ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto//
3ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto//                        The Subzero Code Generator
4ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto//
5ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto// This file is distributed under the University of Illinois Open Source
6ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto// License. See LICENSE.TXT for details.
7ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto//
8ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto//===----------------------------------------------------------------------===//
9ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto//
10ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto// This file implements the vector shuffle routines.
11ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto//
12ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto//===----------------------------------------------------------------------===//
13ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto
14ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto#include "test_vector_ops.h"
15ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto
16ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto#include <algorithm>
17ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto#include <type_traits>
18ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto
19ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Portonamespace {
20ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto// SHUFFLETESTS_TABLE declares several shufflevector test cases. Each test case
21ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto// has 16 indexes because 16 is the max number of elements in a vector type in
22ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto// PNaCl bitcode. For vector types with fewer than 16 elements, the additional
23ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto// indexes are ignored. This strategy allows a single test table definition.
24ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto#define SHUFFLETESTS_TABLE                                                     \
25ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  /* Indexes... */                                                             \
26ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  /* Simple tests splatting elements. */                                       \
27ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)                            \
28ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)                            \
29ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2)                            \
30ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3)                            \
31ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4)                            \
32ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5)                            \
33ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6)                            \
34ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7)                            \
35ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8)                            \
36ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9)                            \
37ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10)            \
38ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11)            \
39ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12)            \
40ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13)            \
41ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14)            \
42ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15)            \
43ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16)            \
44ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17)            \
45ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18)            \
46ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19)            \
47ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20)            \
48ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21)            \
49ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22)            \
50ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23)            \
51ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24)            \
52ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25)            \
53ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26)            \
54ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27)            \
55ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28)            \
56ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29)            \
57ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30)            \
58ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31)            \
59ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  /* Rotating vectors. */                                                      \
60ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)                     \
61ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17)                    \
62ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18)                   \
63ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19)                  \
64ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20)                 \
65ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21)                \
66ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22)               \
67ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23)              \
68ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24)             \
69ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25)            \
70ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26)            \
71ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27)            \
72ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28)            \
73ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29)            \
74ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30)            \
75ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31)            \
76ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 0)             \
77ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 0, 1)              \
78ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 0, 1, 2)               \
79ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 0, 1, 2, 3)                \
80ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 0, 1, 2, 3, 4)                 \
81ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 0, 1, 2, 3, 4, 5)                  \
82ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(23, 24, 25, 26, 27, 28, 29, 30, 31, 0, 1, 2, 3, 4, 5, 6)                   \
83ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(24, 25, 26, 27, 28, 29, 30, 31, 0, 1, 2, 3, 4, 5, 6, 7)                    \
84ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(25, 26, 27, 28, 29, 30, 31, 0, 1, 2, 3, 4, 5, 6, 7, 8)                     \
85ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(26, 27, 28, 29, 30, 31, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9)                      \
86ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(27, 28, 29, 30, 31, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)                      \
87ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(28, 29, 30, 31, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)                      \
88ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(29, 30, 31, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)                      \
89ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(30, 31, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13)                      \
90ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(31, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)                      \
91ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  /* Swapping elements. */                                                     \
92ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
93ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
94ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(3, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
95ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(4, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
96ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(5, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
97ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(6, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
98ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(7, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
99ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(8, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
100ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(9, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
101ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
102ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(11, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
103ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
104ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(13, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
105ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(14, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
106ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(15, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
107ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(16, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
108ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(17, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
109ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(18, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
110ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(19, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
111ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(20, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
112ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(21, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
113ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(22, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
114ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(23, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
115ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(24, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
116ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(25, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
117ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(26, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
118ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(27, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
119ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(28, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
120ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(29, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
121ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(30, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
122ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(31, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
123ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
124ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 3, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
125ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 4, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
126ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 5, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
127ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 6, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
128ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 7, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
129ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 8, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
130ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 9, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
131ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 10, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
132ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
133ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 12, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
134ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 13, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
135ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 14, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
136ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 15, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
137ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 16, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
138ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 17, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
139ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 18, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
140ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 19, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
141ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 20, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
142ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 21, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
143ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 22, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
144ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 23, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
145ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 24, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
146ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 25, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
147ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 26, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
148ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 27, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
149ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 28, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
150ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 29, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
151ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 30, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
152ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 31, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
153ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
154ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
155ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 3, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
156ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 4, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
157ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 5, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
158ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 6, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
159ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 7, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
160ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 8, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
161ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 9, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
162ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 10, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
163ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 11, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
164ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 12, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
165ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 13, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
166ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 14, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
167ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 15, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
168ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 16, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
169ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 17, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
170ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 18, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
171ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 19, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
172ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 20, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
173ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 21, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
174ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 22, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
175ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 23, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
176ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 24, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
177ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 25, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
178ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 26, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
179ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 27, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
180ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 28, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
181ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 29, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
182ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 30, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
183ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 31, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
184ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
185ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
186ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
187ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 4, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
188ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 5, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
189ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 6, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
190ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 7, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
191ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 8, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
192ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 9, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
193ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 10, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
194ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 11, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
195ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 12, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
196ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 13, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
197ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 14, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
198ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 15, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
199ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 16, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
200ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 17, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
201ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 18, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
202ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 19, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
203ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 20, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
204ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 21, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
205ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 22, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
206ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 23, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
207ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 24, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
208ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 25, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
209ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 26, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
210ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 27, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
211ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 28, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
212ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 29, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
213ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 30, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
214ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 31, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
215ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
216ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 1, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
217ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 2, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
218ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
219ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
220ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 6, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
221ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 7, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
222ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 8, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
223ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 9, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
224ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 10, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
225ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 11, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
226ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 12, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
227ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 13, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
228ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 14, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
229ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 15, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
230ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 16, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
231ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 17, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
232ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 18, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
233ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 19, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
234ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 20, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
235ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 21, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
236ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 22, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
237ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 22, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
238ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 23, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
239ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 24, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
240ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 25, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
241ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 26, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
242ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 27, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
243ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 28, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
244ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 29, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
245ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 30, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
246ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 31, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
247ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
248ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 1, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
249ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 2, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
250ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 3, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
251ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
252ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
253ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 6, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
254ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 7, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
255ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 8, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
256ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 9, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
257ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
258ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 11, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
259ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 12, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
260ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 13, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
261ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 14, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
262ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 15, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
263ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 16, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
264ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 17, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
265ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 18, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
266ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 19, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
267ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 20, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
268ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 21, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
269ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 22, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
270ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 23, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
271ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 24, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
272ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 25, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
273ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 26, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
274ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 27, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
275ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 28, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
276ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 29, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
277ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 30, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
278ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 31, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
279ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 0, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
280ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 1, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
281ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 2, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
282ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 3, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
283ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 4, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
284ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
285ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 7, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
286ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 8, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
287ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 9, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
288ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 0, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
289ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 11, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
290ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 12, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
291ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 13, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
292ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 14, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
293ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 15, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
294ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
295ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 17, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
296ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 18, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
297ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 19, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
298ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 20, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
299ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 21, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
300ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 22, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
301ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 23, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
302ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 24, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
303ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 25, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
304ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 26, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
305ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 27, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
306ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 28, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
307ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 29, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
308ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 30, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
309ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 31, 7, 8, 9, 10, 11, 12, 13, 14, 15)                     \
310ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 0, 8, 9, 10, 11, 12, 13, 14, 15)                      \
311ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 1, 8, 9, 10, 11, 12, 13, 14, 15)                      \
312ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 2, 8, 9, 10, 11, 12, 13, 14, 15)                      \
313ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 3, 8, 9, 10, 11, 12, 13, 14, 15)                      \
314ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 4, 8, 9, 10, 11, 12, 13, 14, 15)                      \
315ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 5, 8, 9, 10, 11, 12, 13, 14, 15)                      \
316ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 6, 8, 9, 10, 11, 12, 13, 14, 15)                      \
317ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 8, 8, 9, 10, 11, 12, 13, 14, 15)                      \
318ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 9, 8, 9, 10, 11, 12, 13, 14, 15)                      \
319ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 10, 8, 9, 10, 11, 12, 13, 14, 15)                     \
320ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 11, 8, 9, 10, 11, 12, 13, 14, 15)                     \
321ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 12, 8, 9, 10, 11, 12, 13, 14, 15)                     \
322ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 13, 8, 9, 10, 11, 12, 13, 14, 15)                     \
323ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 14, 8, 9, 10, 11, 12, 13, 14, 15)                     \
324ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 15, 8, 9, 10, 11, 12, 13, 14, 15)                     \
325ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 16, 8, 9, 10, 11, 12, 13, 14, 15)                     \
326ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 17, 8, 9, 10, 11, 12, 13, 14, 15)                     \
327ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 18, 8, 9, 10, 11, 12, 13, 14, 15)                     \
328ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 19, 8, 9, 10, 11, 12, 13, 14, 15)                     \
329ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 20, 8, 9, 10, 11, 12, 13, 14, 15)                     \
330ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 21, 8, 9, 10, 11, 12, 13, 14, 15)                     \
331ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 22, 8, 9, 10, 11, 12, 13, 14, 15)                     \
332ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 23, 8, 9, 10, 11, 12, 13, 14, 15)                     \
333ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 24, 8, 9, 10, 11, 12, 13, 14, 15)                     \
334ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 25, 8, 9, 10, 11, 12, 13, 14, 15)                     \
335ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 26, 8, 9, 10, 11, 12, 13, 14, 15)                     \
336ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 27, 8, 9, 10, 11, 12, 13, 14, 15)                     \
337ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 28, 8, 9, 10, 11, 12, 13, 14, 15)                     \
338ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 29, 8, 9, 10, 11, 12, 13, 14, 15)                     \
339ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 30, 8, 9, 10, 11, 12, 13, 14, 15)                     \
340ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 31, 0, 9, 10, 11, 12, 13, 14, 15)                     \
341ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 0, 9, 10, 11, 12, 13, 14, 15)                      \
342ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 1, 9, 10, 11, 12, 13, 14, 15)                      \
343ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 2, 9, 10, 11, 12, 13, 14, 15)                      \
344ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 3, 9, 10, 11, 12, 13, 14, 15)                      \
345ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 4, 9, 10, 11, 12, 13, 14, 15)                      \
346ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 5, 9, 10, 11, 12, 13, 14, 15)                      \
347ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 6, 9, 10, 11, 12, 13, 14, 15)                      \
348ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 7, 9, 10, 11, 12, 13, 14, 15)                      \
349ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 9, 9, 10, 11, 12, 13, 14, 15)                      \
350ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 10, 9, 10, 11, 12, 13, 14, 15)                     \
351ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 11, 9, 10, 11, 12, 13, 14, 15)                     \
352ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 12, 9, 10, 11, 12, 13, 14, 15)                     \
353ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 13, 9, 10, 11, 12, 13, 14, 15)                     \
354ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 14, 9, 10, 11, 12, 13, 14, 15)                     \
355ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 15, 9, 10, 11, 12, 13, 14, 15)                     \
356ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 16, 9, 10, 11, 12, 13, 14, 15)                     \
357ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 17, 9, 10, 11, 12, 13, 14, 15)                     \
358ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 18, 9, 10, 11, 12, 13, 14, 15)                     \
359ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 19, 9, 10, 11, 12, 13, 14, 15)                     \
360ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 20, 9, 10, 11, 12, 13, 14, 15)                     \
361ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 21, 9, 10, 11, 12, 13, 14, 15)                     \
362ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 22, 9, 10, 11, 12, 13, 14, 15)                     \
363ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 23, 9, 10, 11, 12, 13, 14, 15)                     \
364ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 24, 9, 10, 11, 12, 13, 14, 15)                     \
365ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 25, 9, 10, 11, 12, 13, 14, 15)                     \
366ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 26, 9, 10, 11, 12, 13, 14, 15)                     \
367ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 27, 9, 10, 11, 12, 13, 14, 15)                     \
368ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 28, 9, 10, 11, 12, 13, 14, 15)                     \
369ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 29, 9, 10, 11, 12, 13, 14, 15)                     \
370ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 30, 9, 10, 11, 12, 13, 14, 15)                     \
371ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 31, 9, 10, 11, 12, 13, 14, 15)                     \
372ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 10, 11, 12, 13, 14, 15)                      \
373ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 1, 10, 11, 12, 13, 14, 15)                      \
374ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 2, 10, 11, 12, 13, 14, 15)                      \
375ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 3, 10, 11, 12, 13, 14, 15)                      \
376ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 4, 10, 11, 12, 13, 14, 15)                      \
377ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 5, 10, 11, 12, 13, 14, 15)                      \
378ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 6, 10, 11, 12, 13, 14, 15)                      \
379ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 7, 10, 11, 12, 13, 14, 15)                      \
380ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 10, 11, 12, 13, 14, 15)                      \
381ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 10, 11, 12, 13, 14, 15)                     \
382ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 11, 10, 11, 12, 13, 14, 15)                     \
383ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 12, 10, 11, 12, 13, 14, 15)                     \
384ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 13, 10, 11, 12, 13, 14, 15)                     \
385ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 14, 10, 11, 12, 13, 14, 15)                     \
386ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 15, 10, 11, 12, 13, 14, 15)                     \
387ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 16, 10, 11, 12, 13, 14, 15)                     \
388ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 17, 10, 11, 12, 13, 14, 15)                     \
389ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 18, 10, 11, 12, 13, 14, 15)                     \
390ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 19, 10, 11, 12, 13, 14, 15)                     \
391ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 20, 10, 11, 12, 13, 14, 15)                     \
392ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 21, 10, 11, 12, 13, 14, 15)                     \
393ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 22, 10, 11, 12, 13, 14, 15)                     \
394ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 23, 10, 11, 12, 13, 14, 15)                     \
395ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 24, 10, 11, 12, 13, 14, 15)                     \
396ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 25, 10, 11, 12, 13, 14, 15)                     \
397ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 26, 10, 11, 12, 13, 14, 15)                     \
398ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 27, 10, 11, 12, 13, 14, 15)                     \
399ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 28, 10, 11, 12, 13, 14, 15)                     \
400ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 29, 10, 11, 12, 13, 14, 15)                     \
401ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 30, 10, 11, 12, 13, 14, 15)                     \
402ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 31, 10, 11, 12, 13, 14, 15)                     \
403ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 11, 12, 13, 14, 15)                       \
404ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 11, 12, 13, 14, 15)                       \
405ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 2, 11, 12, 13, 14, 15)                       \
406ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 3, 11, 12, 13, 14, 15)                       \
407ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 4, 11, 12, 13, 14, 15)                       \
408ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 5, 11, 12, 13, 14, 15)                       \
409ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 6, 11, 12, 13, 14, 15)                       \
410ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 7, 11, 12, 13, 14, 15)                       \
411ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 8, 11, 12, 13, 14, 15)                       \
412ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 11, 12, 13, 14, 15)                       \
413ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 11, 12, 13, 14, 15)                      \
414ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 11, 12, 13, 14, 15)                      \
415ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 13, 11, 12, 13, 14, 15)                      \
416ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 14, 11, 12, 13, 14, 15)                      \
417ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 15, 11, 12, 13, 14, 15)                      \
418ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 16, 11, 12, 13, 14, 15)                      \
419ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 17, 11, 12, 13, 14, 15)                      \
420ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 18, 11, 12, 13, 14, 15)                      \
421ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 19, 11, 12, 13, 14, 15)                      \
422ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 20, 11, 12, 13, 14, 15)                      \
423ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 21, 11, 12, 13, 14, 15)                      \
424ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 22, 11, 12, 13, 14, 15)                      \
425ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 23, 11, 12, 13, 14, 15)                      \
426ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 24, 11, 12, 13, 14, 15)                      \
427ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 25, 11, 12, 13, 14, 15)                      \
428ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 26, 11, 12, 13, 14, 15)                      \
429ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 27, 11, 12, 13, 14, 15)                      \
430ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 28, 11, 12, 13, 14, 15)                      \
431ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 29, 11, 12, 13, 14, 15)                      \
432ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 30, 11, 12, 13, 14, 15)                      \
433ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 31, 11, 12, 13, 14, 15)                      \
434ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 12, 13, 14, 15)                       \
435ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 12, 13, 14, 15)                       \
436ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 2, 12, 13, 14, 15)                       \
437ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 3, 12, 13, 14, 15)                       \
438ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 4, 12, 13, 14, 15)                       \
439ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 12, 13, 14, 15)                       \
440ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 6, 12, 13, 14, 15)                       \
441ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 7, 12, 13, 14, 15)                       \
442ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 8, 12, 13, 14, 15)                       \
443ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 12, 13, 14, 15)                       \
444ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 12, 13, 14, 15)                      \
445ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 12, 13, 14, 15)                      \
446ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 13, 12, 13, 14, 15)                      \
447ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 14, 12, 13, 14, 15)                      \
448ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 12, 13, 14, 15)                      \
449ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 16, 12, 13, 14, 15)                      \
450ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 17, 12, 13, 14, 15)                      \
451ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 18, 12, 13, 14, 15)                      \
452ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 19, 12, 13, 14, 15)                      \
453ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 12, 13, 14, 15)                      \
454ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 21, 12, 13, 14, 15)                      \
455ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 22, 12, 13, 14, 15)                      \
456ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 23, 12, 13, 14, 15)                      \
457ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 24, 12, 13, 14, 15)                      \
458ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 25, 12, 13, 14, 15)                      \
459ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 26, 12, 13, 14, 15)                      \
460ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 27, 12, 13, 14, 15)                      \
461ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 28, 12, 13, 14, 15)                      \
462ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 29, 12, 13, 14, 15)                      \
463ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 30, 12, 13, 14, 15)                      \
464ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 31, 12, 13, 14, 15)                      \
465ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 13, 14, 15)                       \
466ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 1, 13, 14, 15)                       \
467ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 2, 13, 14, 15)                       \
468ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 3, 13, 14, 15)                       \
469ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 4, 13, 14, 15)                       \
470ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 5, 13, 14, 15)                       \
471ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 6, 13, 14, 15)                       \
472ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 7, 13, 14, 15)                       \
473ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 8, 13, 14, 15)                       \
474ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 9, 13, 14, 15)                       \
475ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 13, 14, 15)                       \
476ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 11, 13, 14, 15)                      \
477ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 13, 14, 15)                      \
478ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 14, 13, 14, 15)                      \
479ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 15, 13, 14, 15)                      \
480ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 16, 13, 14, 15)                      \
481ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 17, 13, 14, 15)                      \
482ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 18, 13, 14, 15)                      \
483ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 19, 13, 14, 15)                      \
484ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 20, 13, 14, 15)                      \
485ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 21, 13, 14, 15)                      \
486ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 22, 13, 14, 15)                      \
487ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 23, 13, 14, 15)                      \
488ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 24, 13, 14, 15)                      \
489ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 25, 13, 14, 15)                      \
490ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 26, 13, 14, 15)                      \
491ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 27, 13, 14, 15)                      \
492ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 28, 13, 14, 15)                      \
493ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 29, 13, 14, 15)                      \
494ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 30, 13, 14, 15)                      \
495ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 31, 13, 14, 15)                      \
496ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 0, 14, 15)                       \
497ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 14, 15)                       \
498ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 2, 14, 15)                       \
499ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 3, 14, 15)                       \
500ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 4, 14, 15)                       \
501ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 5, 14, 15)                       \
502ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 6, 14, 15)                       \
503ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 7, 14, 15)                       \
504ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 8, 14, 15)                       \
505ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 9, 14, 15)                       \
506ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 10, 14, 15)                      \
507ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 11, 14, 15)                      \
508ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 12, 14, 15)                      \
509ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)                      \
510ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 15, 14, 15)                      \
511ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 16, 14, 15)                      \
512ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 17, 14, 15)                      \
513ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 18, 14, 15)                      \
514ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 19, 14, 15)                      \
515ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 20, 14, 15)                      \
516ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 21, 14, 15)                      \
517ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 22, 14, 15)                      \
518ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 23, 14, 15)                      \
519ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 24, 14, 15)                      \
520ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 25, 14, 15)                      \
521ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 26, 14, 15)                      \
522ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 27, 14, 15)                      \
523ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 28, 14, 15)                      \
524ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 29, 14, 15)                      \
525ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 30, 14, 15)                      \
526ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 31, 14, 15)                      \
527ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, 15)                       \
528ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1, 15)                       \
529ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 2, 15)                       \
530ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 3, 15)                       \
531ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 4, 15)                       \
532ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 5, 15)                       \
533ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 6, 15)                       \
534ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 7, 15)                       \
535ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 8, 15)                       \
536ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 9, 15)                       \
537ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 10, 15)                      \
538ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 11, 15)                      \
539ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 12, 15)                      \
540ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 15)                      \
541ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 15)                      \
542ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, 15)                      \
543ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 17, 15)                      \
544ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 18, 15)                      \
545ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 19, 15)                      \
546ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 20, 15)                      \
547ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 21, 15)                      \
548ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 22, 15)                      \
549ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 23, 15)                      \
550ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 24, 15)                      \
551ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 25, 15)                      \
552ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 26, 15)                      \
553ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 27, 15)                      \
554ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 28, 15)                      \
555ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 29, 15)                      \
556ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 30, 15)                      \
557ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 31, 15)                      \
558ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0)                       \
559ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 1)                       \
560ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 2)                       \
561ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 3)                       \
562ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 4)                       \
563ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 5)                       \
564ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 6)                       \
565ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 7)                       \
566ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 8)                       \
567ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 9)                       \
568ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 10)                      \
569ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 11)                      \
570ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 12)                      \
571ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 13)                      \
572ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 14)                      \
573ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16)                      \
574ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 17)                      \
575ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 18)                      \
576ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 19)                      \
577ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 20)                      \
578ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 21)                      \
579ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 22)                      \
580ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 23)                      \
581ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 24)                      \
582ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 25)                      \
583ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 26)                      \
584ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 27)                      \
585ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 28)                      \
586ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 29)                      \
587ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 30)                      \
588ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 31)                      \
589ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  /* Testing the optimized shufflevectors for x86. */                          \
590ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  /* (Src0, Src0, Src0, Src0) */                                               \
591ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(3, 2, 1, 0, 3, 2, 1, 0, 3, 2, 1, 0, 3, 2, 1, 0)                            \
592ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(2, 2, 3, 3, 2, 2, 3, 3, 2, 2, 3, 3, 2, 2, 3, 3)                            \
593ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  /* (Src0, Src0, Src0, Src1) */                                               \
594ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 1, 3, 7, 0, 1, 3, 7, 0, 1, 3, 7, 0, 1, 3, 7)                            \
595ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(2, 2, 2, 5, 2, 2, 2, 5, 2, 2, 2, 5, 2, 2, 2, 5)                            \
596ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  /* (Src0, Src0, Src1, Src0) */                                               \
597ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(1, 2, 6, 0, 1, 2, 6, 0, 1, 2, 6, 0, 1, 2, 6, 0)                            \
598ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(3, 2, 3, 5, 3, 2, 3, 5, 3, 2, 3, 5, 3, 2, 3, 5)                            \
599ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  /* (Src0, Src0, Src1, Src1) */                                               \
600ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(2, 3, 5, 7, 2, 3, 5, 7, 2, 3, 5, 7, 2, 3, 5, 7)                            \
601ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(3, 3, 7, 6, 3, 3, 7, 6, 3, 3, 7, 6, 3, 3, 7, 6)                            \
602ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  /* (Src0, Src1, Src0, Src0) */                                               \
603ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(3, 7, 0, 0, 3, 7, 0, 0, 3, 7, 0, 0, 3, 7, 0, 0)                            \
604ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(1, 7, 3, 3, 1, 7, 3, 3, 1, 7, 3, 3, 1, 7, 3, 3)                            \
605ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  /* (Src0, Src1, Src0, Src1) */                                               \
606ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 4, 1, 5, 0, 4, 1, 5, 0, 4, 1, 5, 0, 4, 1, 5)                            \
607ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7)                            \
608ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4)                            \
609ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(1, 7, 3, 6, 1, 7, 3, 6, 1, 7, 3, 6, 1, 7, 3, 6)                            \
610ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 6, 3, 7, 0, 6, 3, 7, 0, 6, 3, 7, 0, 6, 3, 7)                            \
611ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  /* (Src0, Src1, Src1, Src0) */                                               \
612ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 7, 7, 0, 0, 7, 7, 0, 0, 7, 7, 0, 0, 7, 7, 0)                            \
613ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(3, 4, 4, 3, 3, 4, 4, 3, 3, 4, 4, 3, 3, 4, 4, 3)                            \
614ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(1, 5, 3, 6, 1, 5, 3, 6, 1, 5, 3, 6, 1, 5, 3, 6)                            \
615ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 6, 2, 6, 0, 6, 2, 6, 0, 6, 2, 6, 0, 6, 2, 6)                            \
616ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  /* (Src0, Src1, Src1, Src1) */                                               \
617ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(0, 7, 7, 7, 0, 7, 7, 7, 0, 7, 7, 7, 0, 7, 7, 7)                            \
618ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(3, 6, 7, 4, 3, 6, 7, 4, 3, 6, 7, 4, 3, 6, 7, 4)                            \
619ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  /* (Src1, Src0, Src0, Src0) */                                               \
620ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(4, 3, 3, 0, 4, 3, 3, 0, 4, 3, 3, 0, 4, 3, 3, 0)                            \
621ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(6, 0, 0, 3, 6, 0, 0, 3, 6, 0, 0, 3, 6, 0, 0, 3)                            \
622ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  /* (Src1, Src0, Src0, Src1) */                                               \
623ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(4, 3, 2, 6, 4, 3, 2, 6, 4, 3, 2, 6, 4, 3, 2, 6)                            \
624ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(5, 2, 1, 4, 5, 2, 1, 4, 5, 2, 1, 4, 5, 2, 1, 4)                            \
625ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(6, 0, 0, 4, 6, 0, 0, 4, 6, 0, 0, 4, 6, 0, 0, 4)                            \
626ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(5, 2, 2, 6, 5, 2, 2, 6, 5, 2, 2, 6, 5, 2, 2, 6)                            \
627ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  /* (Src1, Src0, Src1, Src0) */                                               \
628ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(4, 0, 5, 1, 4, 0, 5, 1, 4, 0, 5, 1, 4, 0, 5, 1)                            \
629ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(7, 2, 7, 2, 7, 2, 7, 2, 7, 2, 7, 2, 7, 2, 7, 2)                            \
630ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3)                            \
631ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(7, 1, 5, 0, 7, 1, 5, 0, 7, 1, 5, 0, 7, 1, 5, 0)                            \
632ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(4, 3, 6, 2, 4, 3, 6, 2, 4, 3, 6, 2, 4, 3, 6, 2)                            \
633ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  /* (Src1, Src0, Src1, Src1) */                                               \
634ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(6, 0, 3, 2, 6, 0, 3, 2, 6, 0, 3, 2, 6, 0, 3, 2)                            \
635ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(4, 2, 4, 7, 4, 2, 4, 7, 4, 2, 4, 7, 4, 2, 4, 7)                            \
636ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  /* (Src1, Src1, Src0, Src0) */                                               \
637ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(6, 5, 2, 3, 6, 5, 2, 3, 6, 5, 2, 3, 6, 5, 2, 3)                            \
638ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(7, 7, 0, 1, 7, 7, 0, 1, 7, 7, 0, 1, 7, 7, 0, 1)                            \
639ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  /* (Src1, Src1, Src0, Src1) */                                               \
640ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(7, 6, 0, 5, 7, 6, 0, 5, 7, 6, 0, 5, 7, 6, 0, 5)                            \
641ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(4, 5, 3, 7, 4, 5, 3, 7, 4, 5, 3, 7, 4, 5, 3, 7)                            \
642ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  /* (Src1, Src1, Src1, Src0) */                                               \
643ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(6, 6, 4, 0, 6, 6, 4, 0, 6, 6, 4, 0, 6, 6, 4, 0)                            \
644ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(7, 4, 6, 1, 7, 4, 6, 1, 7, 4, 6, 1, 7, 4, 6, 1)                            \
645ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  /* (Src1, Src1, Src1, Src1) */                                               \
646ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(7, 6, 4, 4, 7, 6, 4, 4, 7, 6, 4, 4, 7, 6, 4, 4)                            \
647ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  X(5, 7, 7, 6, 5, 7, 7, 6, 5, 7, 7, 6, 5, 7, 7, 6)
648ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto/* End of x86-optimized shufflevectors. */
649ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto//#define X(...)
650ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto
651ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto// ShuffleVectorTest declares the template functions that are used to shuffle
652ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto// the test vectors. It has specific template methods depending on how many
653ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto// elements VecTy has.
654ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Portotemplate <typename VecTy> class ShuffleVectorTest {
655ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  //----------------------------------------------------------------------------
656ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  //
657ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  // V4??? Shuffles.
658ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  //
659ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  //----------------------------------------------------------------------------
660ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  template <typename Ty, uint8_t Idx0, uint8_t Idx1, uint8_t Idx2, uint8_t Idx3,
661ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto            uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t,
662ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto            uint8_t, uint8_t, uint8_t, uint8_t, uint8_t>
663ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  static typename std::enable_if<Vectors<Ty>::NumElements == 4, Ty>::type
664ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  shufflevector(Ty V1, Ty V2) {
665ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto    const uint8_t NumElements = 4;
666ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto    return __builtin_shufflevector(
667ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto        V1, V2, Idx0 % (NumElements * 2), Idx1 % (NumElements * 2),
668ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto        Idx2 % (NumElements * 2), Idx3 % (NumElements * 2));
669ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  }
670ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto
671ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  //----------------------------------------------------------------------------
672ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  //
673ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  // V8??? Shuffles.
674ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  //
675ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  //----------------------------------------------------------------------------
676ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  template <typename Ty, uint8_t Idx0, uint8_t Idx1, uint8_t Idx2, uint8_t Idx3,
677ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto            uint8_t Idx4, uint8_t Idx5, uint8_t Idx6, uint8_t Idx7, uint8_t,
678ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto            uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t>
679ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  static typename std::enable_if<Vectors<Ty>::NumElements == 8, Ty>::type
680ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  shufflevector(Ty V1, Ty V2) {
681ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto    const uint8_t NumElements = 8;
682ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto    return __builtin_shufflevector(
683ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto        V1, V2, Idx0 % (NumElements * 2), Idx1 % (NumElements * 2),
684ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto        Idx2 % (NumElements * 2), Idx3 % (NumElements * 2),
685ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto        Idx4 % (NumElements * 2), Idx5 % (NumElements * 2),
686ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto        Idx6 % (NumElements * 2), Idx7 % (NumElements * 2));
687ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  }
688ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto
689ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  //----------------------------------------------------------------------------
690ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  //
691ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  // V16??? Shuffles.
692ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  //
693ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  //----------------------------------------------------------------------------
694ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  template <typename Ty, uint8_t Idx0, uint8_t Idx1, uint8_t Idx2, uint8_t Idx3,
695ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto            uint8_t Idx4, uint8_t Idx5, uint8_t Idx6, uint8_t Idx7,
696ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto            uint8_t Idx8, uint8_t Idx9, uint8_t Idx10, uint8_t Idx11,
697ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto            uint8_t Idx12, uint8_t Idx13, uint8_t Idx14, uint8_t Idx15>
698ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  static typename std::enable_if<Vectors<Ty>::NumElements == 16, Ty>::type
699ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  shufflevector(Ty V1, Ty V2) {
700ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto    const uint8_t NumElements = 16;
701ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto    return __builtin_shufflevector(
702ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto        V1, V2, Idx0, Idx1 % (NumElements * 2), Idx2 % (NumElements * 2),
703ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto        Idx3 % (NumElements * 2), Idx4 % (NumElements * 2),
704ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto        Idx5 % (NumElements * 2), Idx6 % (NumElements * 2),
705ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto        Idx7 % (NumElements * 2), Idx8 % (NumElements * 2),
706ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto        Idx9 % (NumElements * 2), Idx10 % (NumElements * 2),
707ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto        Idx11 % (NumElements * 2), Idx12 % (NumElements * 2),
708ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto        Idx13 % (NumElements * 2), Idx14 % (NumElements * 2),
709ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto        Idx15 % (NumElements * 2));
710ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  }
711ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto
712ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Portopublic:
713ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  typedef VecTy (*TestFn)(VecTy V1, VecTy V2);
714ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  static TestFn Tests[];
715ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  static const uint32_t NumTests;
716ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto};
717ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto
718ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Portotemplate <typename Ty>
719ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Portotypename ShuffleVectorTest<Ty>::TestFn ShuffleVectorTest<Ty>::Tests[] = {
720ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto#define X(...) &ShuffleVectorTest<Ty>::shufflevector<Ty, __VA_ARGS__>,
721ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto    SHUFFLETESTS_TABLE
722ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto#undef X
723ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto};
724ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto
725ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Portotemplate <typename Ty>
726ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Portoconst uint32_t ShuffleVectorTest<Ty>::NumTests = 0
727ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto#define X(...) +1
728ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto    SHUFFLETESTS_TABLE
729ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto#undef X
730ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto    ;
731ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto} // end of anonymous namespace
732ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto
733ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Portoextern "C" {
734ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto#define X(Ty, ElmtTy, CastTy)                                                  \
735ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  TY(Ty) shufflevector_##Ty(TY(Ty) V1, TY(Ty) V2, uint32_t Which) {            \
736ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto    return (*ShuffleVectorTest<TY(Ty)>::Tests[Which])(V1, V2);                 \
737ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  }                                                                            \
738ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  uint32_t shufflevector_count_##Ty() {                                        \
739ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto    return ShuffleVectorTest<TY(Ty)>::NumTests;                                \
740ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  }
741ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn PortoVECTOR_TYPE_TABLE
742ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto#undef X
743ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto
744ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto#define X(I1Ty, Ty, numelements)                                               \
745ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  TY(I1Ty) shufflevector_##I1Ty(TY(I1Ty) V1, TY(I1Ty) V2, uint32_t Which) {    \
746ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto    return (*ShuffleVectorTest<TY(I1Ty)>::Tests[Which])(V1, V2);               \
747ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  }                                                                            \
748ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  uint32_t shufflevector_count_##I1Ty() {                                      \
749ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto    return ShuffleVectorTest<TY(I1Ty)>::NumTests;                              \
750ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto  }
751ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn PortoI1_VECTOR_TYPE_TABLE
752ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto#undef X
753ae15f0fd85df9f13a251222d048761a9aa1dcf2aJohn Porto} // end of extern "C"
754