7#include <btllib/hashing_internals.hpp>
9namespace btllib::hashing_internals {
11static const uint64_t XX_SEED_N_ = SEED_N;
13static const uint64_t BI_SEED_A_ = 0x6a8c7aa7db953866ULL;
14static const uint64_t BI_SEED_T_ = 0x320d1bb2e76ae9f2ULL;
16const uint64_t BI_BI_SEED_TAB[ASCII_SIZE] = {
17 XX_SEED_N_, BI_SEED_T_, XX_SEED_N_, BI_SEED_A_,
18 BI_SEED_A_, BI_SEED_A_, XX_SEED_N_, BI_SEED_T_,
19 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
20 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
21 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
22 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
23 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
24 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
25 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
26 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
27 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
28 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
29 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
30 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
31 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
32 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
33 XX_SEED_N_, BI_SEED_A_, XX_SEED_N_, BI_SEED_T_,
34 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, BI_SEED_A_,
35 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
36 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
37 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
38 BI_SEED_T_, BI_SEED_T_, XX_SEED_N_, XX_SEED_N_,
39 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
40 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
41 XX_SEED_N_, BI_SEED_A_, XX_SEED_N_, BI_SEED_T_,
42 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, BI_SEED_A_,
43 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
44 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
45 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
46 BI_SEED_T_, BI_SEED_T_, XX_SEED_N_, XX_SEED_N_,
47 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
48 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
49 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
50 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
51 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
52 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
53 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
54 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
55 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
56 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
57 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
58 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
59 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
60 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
61 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
62 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
63 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
64 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
65 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
66 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
67 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
68 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
69 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
70 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
71 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
72 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
73 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
74 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
75 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
76 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
77 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
78 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
79 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
80 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_
83static const uint64_t BI_A_33R[33] = {
84 0x00000001db953866, 0x00000001b72a70cd, 0x000000016e54e19b,
85 0x00000000dca9c337, 0x00000001b953866e, 0x0000000172a70cdd,
86 0x00000000e54e19bb, 0x00000001ca9c3376, 0x00000001953866ed,
87 0x000000012a70cddb, 0x0000000054e19bb7, 0x00000000a9c3376e,
88 0x0000000153866edc, 0x00000000a70cddb9, 0x000000014e19bb72,
89 0x000000009c3376e5, 0x000000013866edca, 0x0000000070cddb95,
90 0x00000000e19bb72a, 0x00000001c3376e54, 0x00000001866edca9,
91 0x000000010cddb953, 0x0000000019bb72a7, 0x000000003376e54e,
92 0x0000000066edca9c, 0x00000000cddb9538, 0x000000019bb72a70,
93 0x00000001376e54e1, 0x000000006edca9c3, 0x00000000ddb95386,
94 0x00000001bb72a70c, 0x0000000176e54e19, 0x00000000edca9c33
97static const uint64_t BI_A_31L[31] = {
98 0x6a8c7aa600000000, 0xd518f54c00000000, 0xaa31ea9a00000000,
99 0x5463d53600000000, 0xa8c7aa6c00000000, 0x518f54da00000000,
100 0xa31ea9b400000000, 0x463d536a00000000, 0x8c7aa6d400000000,
101 0x18f54daa00000000, 0x31ea9b5400000000, 0x63d536a800000000,
102 0xc7aa6d5000000000, 0x8f54daa200000000, 0x1ea9b54600000000,
103 0x3d536a8c00000000, 0x7aa6d51800000000, 0xf54daa3000000000,
104 0xea9b546200000000, 0xd536a8c600000000, 0xaa6d518e00000000,
105 0x54daa31e00000000, 0xa9b5463c00000000, 0x536a8c7a00000000,
106 0xa6d518f400000000, 0x4daa31ea00000000, 0x9b5463d400000000,
107 0x36a8c7aa00000000, 0x6d518f5400000000, 0xdaa31ea800000000,
112static const uint64_t BI_T_33R[33] = {
113 0x00000000e76ae9f2, 0x00000001ced5d3e4, 0x000000019daba7c9,
114 0x000000013b574f93, 0x0000000076ae9f27, 0x00000000ed5d3e4e,
115 0x00000001daba7c9c, 0x00000001b574f939, 0x000000016ae9f273,
116 0x00000000d5d3e4e7, 0x00000001aba7c9ce, 0x00000001574f939d,
117 0x00000000ae9f273b, 0x000000015d3e4e76, 0x00000000ba7c9ced,
118 0x0000000174f939da, 0x00000000e9f273b5, 0x00000001d3e4e76a,
119 0x00000001a7c9ced5, 0x000000014f939dab, 0x000000009f273b57,
120 0x000000013e4e76ae, 0x000000007c9ced5d, 0x00000000f939daba,
121 0x00000001f273b574, 0x00000001e4e76ae9, 0x00000001c9ced5d3,
122 0x00000001939daba7, 0x00000001273b574f, 0x000000004e76ae9f,
123 0x000000009ced5d3e, 0x0000000139daba7c, 0x0000000073b574f9
126static const uint64_t BI_T_31L[31] = {
127 0x320d1bb200000000, 0x641a376400000000, 0xc8346ec800000000,
128 0x9068dd9200000000, 0x20d1bb2600000000, 0x41a3764c00000000,
129 0x8346ec9800000000, 0x68dd93200000000, 0xd1bb26400000000,
130 0x1a3764c800000000, 0x346ec99000000000, 0x68dd932000000000,
131 0xd1bb264000000000, 0xa3764c8200000000, 0x46ec990600000000,
132 0x8dd9320c00000000, 0x1bb2641a00000000, 0x3764c83400000000,
133 0x6ec9906800000000, 0xdd9320d000000000, 0xbb2641a200000000,
134 0x764c834600000000, 0xec99068c00000000, 0xd9320d1a00000000,
135 0xb2641a3600000000, 0x64c8346e00000000, 0xc99068dc00000000,
136 0x9320d1ba00000000, 0x2641a37600000000, 0x4c8346ec00000000,
140const uint64_t XX_N_33R[33] = { SEED_N, SEED_N, SEED_N, SEED_N, SEED_N, SEED_N,
141 SEED_N, SEED_N, SEED_N, SEED_N, SEED_N, SEED_N,
142 SEED_N, SEED_N, SEED_N, SEED_N, SEED_N, SEED_N,
143 SEED_N, SEED_N, SEED_N, SEED_N, SEED_N, SEED_N,
144 SEED_N, SEED_N, SEED_N, SEED_N, SEED_N, SEED_N,
145 SEED_N, SEED_N, SEED_N };
147const uint64_t XX_N_31L[31] = { SEED_N, SEED_N, SEED_N, SEED_N, SEED_N, SEED_N,
148 SEED_N, SEED_N, SEED_N, SEED_N, SEED_N, SEED_N,
149 SEED_N, SEED_N, SEED_N, SEED_N, SEED_N, SEED_N,
150 SEED_N, SEED_N, SEED_N, SEED_N, SEED_N, SEED_N,
151 SEED_N, SEED_N, SEED_N, SEED_N, SEED_N, SEED_N,
154const uint64_t BI_BI_DIMER_TAB[16] = { 13804816994807007403ULL,
157 16651477977602758975ULL,
166 1051113059013159810ULL,
169 6203476314356136470ULL
173const uint64_t BI_BI_TRIMER_TAB[64] = { 1559764382008453424ULL,
176 5558572668666804388ULL,
185 11864635746089699865ULL,
188 18169427777599298445ULL,
221 8620137231271915362ULL,
224 3396136566885400310ULL,
233 14313041098185591883ULL,
236 11395024181815188959ULL
240const uint64_t BI_BI_TETRAMER_TAB[256] = { 4739669480572086791ULL,
243 1821654728216263571ULL,
252 17349117488419162414ULL,
255 12125118989076666554ULL,
288 2576960677352385621ULL,
291 8881754873906003393ULL,
300 10575004143309721468ULL,
303 14573814593982652136ULL,
432 9641565659040900771ULL,
435 15946360035580524343ULL,
444 3805395219231491466ULL,
447 7804205850964038686ULL,
480 16701665948108824817ULL,
483 13783651101934645605ULL,
492 6254090964361282520ULL,
495 1030092370127082060ULL
499const uint64_t*
const BI_BI_MS_TAB_33R[ASCII_SIZE] = {
500 XX_N_33R, BI_T_33R, XX_N_33R, BI_A_33R,
501 BI_A_33R, BI_A_33R, XX_N_33R, BI_T_33R,
502 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
503 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
504 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
505 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
506 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
507 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
508 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
509 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
510 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
511 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
512 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
513 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
514 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
515 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
516 XX_N_33R, BI_A_33R, XX_N_33R, BI_T_33R,
517 XX_N_33R, XX_N_33R, XX_N_33R, BI_A_33R,
518 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
519 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
520 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
521 BI_T_33R, BI_T_33R, XX_N_33R, XX_N_33R,
522 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
523 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
524 XX_N_33R, BI_A_33R, XX_N_33R, BI_T_33R,
525 XX_N_33R, XX_N_33R, XX_N_33R, BI_A_33R,
526 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
527 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
528 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
529 BI_T_33R, BI_T_33R, XX_N_33R, XX_N_33R,
530 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
531 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
532 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
533 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
534 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
535 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
536 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
537 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
538 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
539 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
540 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
541 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
542 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
543 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
544 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
545 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
546 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
547 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
548 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
549 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
550 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
551 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
552 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
553 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
554 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
555 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
556 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
557 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
558 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
559 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
560 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
561 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
562 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
563 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R
566const uint64_t*
const BI_BI_MS_TAB_31L[ASCII_SIZE] = {
567 XX_N_31L, BI_T_31L, XX_N_31L, BI_A_31L,
568 BI_A_31L, BI_A_31L, XX_N_31L, BI_T_31L,
569 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
570 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
571 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
572 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
573 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
574 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
575 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
576 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
577 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
578 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
579 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
580 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
581 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
582 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
583 XX_N_31L, BI_A_31L, XX_N_31L, BI_T_31L,
584 XX_N_31L, XX_N_31L, XX_N_31L, BI_A_31L,
585 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
586 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
587 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
588 BI_T_31L, BI_T_31L, XX_N_31L, XX_N_31L,
589 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
590 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
591 XX_N_31L, BI_A_31L, XX_N_31L, BI_T_31L,
592 XX_N_31L, XX_N_31L, XX_N_31L, BI_A_31L,
593 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
594 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
595 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
596 BI_T_31L, BI_T_31L, XX_N_31L, XX_N_31L,
597 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
598 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
599 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
600 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
601 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
602 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
603 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
604 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
605 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
606 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
607 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
608 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
609 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
610 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
611 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
612 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
613 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
614 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
615 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
616 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
617 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
618 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
619 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
620 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
621 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
622 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
623 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
624 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
625 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
626 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
627 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
628 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
629 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
630 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L
633const uint8_t BI_BI_CONVERT_TAB[ASCII_SIZE] = {
634 255, 255, 255, 255, 255, 255, 255, 255,
635 255, 255, 255, 255, 255, 255, 255, 255,
636 255, 255, 255, 255, 255, 255, 255, 255,
637 255, 255, 255, 255, 255, 255, 255, 255,
638 255, 255, 255, 255, 255, 255, 255, 255,
639 255, 255, 255, 255, 255, 255, 255, 255,
640 255, 255, 255, 255, 255, 255, 255, 255,
641 255, 255, 255, 255, 255, 255, 255, 255,
642 255, 0, 255, 3, 255, 255, 255, 0,
643 255, 255, 255, 255, 255, 255, 255, 255,
644 255, 255, 255, 255, 3, 3, 255, 255,
645 255, 255, 255, 255, 255, 255, 255, 255,
646 255, 0, 255, 3, 255, 255, 255, 0,
647 255, 255, 255, 255, 255, 255, 255, 255,
648 255, 255, 255, 255, 3, 3, 255, 255,
649 255, 255, 255, 255, 255, 255, 255, 255,
650 255, 255, 255, 255, 255, 255, 255, 255,
651 255, 255, 255, 255, 255, 255, 255, 255,
652 255, 255, 255, 255, 255, 255, 255, 255,
653 255, 255, 255, 255, 255, 255, 255, 255,
654 255, 255, 255, 255, 255, 255, 255, 255,
655 255, 255, 255, 255, 255, 255, 255, 255,
656 255, 255, 255, 255, 255, 255, 255, 255,
657 255, 255, 255, 255, 255, 255, 255, 255,
658 255, 255, 255, 255, 255, 255, 255, 255,
659 255, 255, 255, 255, 255, 255, 255, 255,
660 255, 255, 255, 255, 255, 255, 255, 255,
661 255, 255, 255, 255, 255, 255, 255, 255,
662 255, 255, 255, 255, 255, 255, 255, 255,
663 255, 255, 255, 255, 255, 255, 255, 255,
664 255, 255, 255, 255, 255, 255, 255, 255,
665 255, 255, 255, 255, 255, 255, 255, 255
668const uint8_t BI_BI_RC_CONVERT_TAB[ASCII_SIZE] = {
669 255, 255, 255, 255, 255, 255, 255, 255,
670 255, 255, 255, 255, 255, 255, 255, 255,
671 255, 255, 255, 255, 255, 255, 255, 255,
672 255, 255, 255, 255, 255, 255, 255, 255,
673 255, 255, 255, 255, 255, 255, 255, 255,
674 255, 255, 255, 255, 255, 255, 255, 255,
675 255, 255, 255, 255, 255, 255, 255, 255,
676 255, 255, 255, 255, 255, 255, 255, 255,
677 255, 3, 255, 0, 255, 255, 255, 3,
678 255, 255, 255, 255, 255, 255, 255, 255,
679 255, 255, 255, 255, 0, 0, 255, 255,
680 255, 255, 255, 255, 255, 255, 255, 255,
681 255, 3, 255, 0, 255, 255, 255, 3,
682 255, 255, 255, 255, 255, 255, 255, 255,
683 255, 255, 255, 255, 0, 0, 255, 255,
684 255, 255, 255, 255, 255, 255, 255, 255,
685 255, 255, 255, 255, 255, 255, 255, 255,
686 255, 255, 255, 255, 255, 255, 255, 255,
687 255, 255, 255, 255, 255, 255, 255, 255,
688 255, 255, 255, 255, 255, 255, 255, 255,
689 255, 255, 255, 255, 255, 255, 255, 255,
690 255, 255, 255, 255, 255, 255, 255, 255,
691 255, 255, 255, 255, 255, 255, 255, 255,
692 255, 255, 255, 255, 255, 255, 255, 255,
693 255, 255, 255, 255, 255, 255, 255, 255,
694 255, 255, 255, 255, 255, 255, 255, 255,
695 255, 255, 255, 255, 255, 255, 255, 255,
696 255, 255, 255, 255, 255, 255, 255, 255,
697 255, 255, 255, 255, 255, 255, 255, 255,
698 255, 255, 255, 255, 255, 255, 255, 255,
699 255, 255, 255, 255, 255, 255, 255, 255,
700 255, 255, 255, 255, 255, 255, 255, 255
704static const uint64_t CT_SEED_A_ = 0x38e1680db3188ddfULL;
705static const uint64_t CT_SEED_G_ = 0x07d6453133a367b1ULL;
706static const uint64_t CT_SEED_CT = 0x2c555d4ed6a221a1ULL;
710static const uint64_t GA_SEED_GA = 0x4d9c9d29392bb7d6ULL;
711static const uint64_t GA_SEED_C_ = 0x0e06d727c6e35043ULL;
712static const uint64_t GA_SEED_T_ = 0x013a8fe8dea57b07ULL;
713inline const std::unordered_set<std::string> VALID_MODES = {
"CG",
718const uint64_t BI_CT_SEED_TAB[ASCII_SIZE] = {
719 XX_SEED_N_, GA_SEED_T_, XX_SEED_N_, GA_SEED_GA,
720 GA_SEED_GA, GA_SEED_GA, XX_SEED_N_, GA_SEED_C_,
721 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
722 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
723 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
724 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
725 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
726 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
727 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
728 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
729 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
730 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
731 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
732 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
733 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
734 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
735 XX_SEED_N_, CT_SEED_A_, XX_SEED_N_, CT_SEED_CT,
736 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, CT_SEED_G_,
737 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
738 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
739 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
740 CT_SEED_CT, CT_SEED_CT, XX_SEED_N_, XX_SEED_N_,
741 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
742 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
743 XX_SEED_N_, CT_SEED_A_, XX_SEED_N_, CT_SEED_CT,
744 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, CT_SEED_G_,
745 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
746 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
747 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
748 CT_SEED_CT, CT_SEED_CT, XX_SEED_N_, XX_SEED_N_,
749 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
750 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
751 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
752 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
753 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
754 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
755 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
756 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
757 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
758 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
759 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
760 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
761 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
762 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
763 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
764 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
765 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
766 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
767 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
768 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
769 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
770 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
771 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
772 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
773 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
774 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
775 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
776 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
777 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
778 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
779 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
780 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
781 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
782 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_
785const uint64_t BI_GA_SEED_TAB[ASCII_SIZE] = {
786 XX_SEED_N_, CT_SEED_CT, XX_SEED_N_, CT_SEED_G_,
787 CT_SEED_A_, CT_SEED_A_, XX_SEED_N_, CT_SEED_CT,
788 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
789 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
790 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
791 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
792 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
793 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
794 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
795 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
796 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
797 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
798 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
799 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
800 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
801 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
802 XX_SEED_N_, GA_SEED_GA, XX_SEED_N_, GA_SEED_C_,
803 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, GA_SEED_GA,
804 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
805 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
806 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
807 GA_SEED_T_, GA_SEED_T_, XX_SEED_N_, XX_SEED_N_,
808 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
809 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
810 XX_SEED_N_, GA_SEED_GA, XX_SEED_N_, GA_SEED_C_,
811 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, GA_SEED_GA,
812 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
813 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
814 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
815 GA_SEED_T_, GA_SEED_T_, XX_SEED_N_, XX_SEED_N_,
816 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
817 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
818 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
819 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
820 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
821 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
822 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
823 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
824 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
825 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
826 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
827 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
828 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
829 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
830 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
831 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
832 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
833 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
834 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
835 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
836 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
837 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
838 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
839 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
840 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
841 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
842 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
843 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
844 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
845 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
846 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
847 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
848 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_,
849 XX_SEED_N_, XX_SEED_N_, XX_SEED_N_, XX_SEED_N_
852const uint64_t BI_CT_DIMER_TAB[16] = { 5270258388568741472ULL,
854 8508589596476603406ULL,
855 6744014374774716958ULL,
860 3985090206635016892ULL,
862 611028647685761234ULL,
863 2592339656081469122ULL,
864 6938871167320903325ULL,
866 6880655447580681459ULL,
867 8430711922963669731ULL
871const uint64_t BI_CT_TRIMER_TAB[64] = { 12296542375903994143ULL,
873 10777453763052456817ULL,
874 13696059339288153441ULL,
879 15332577898988860867ULL,
881 17005433182935818157ULL,
882 13870091925232998845ULL,
883 9497654699218631138ULL,
885 13617020073335395212ULL,
886 10915115690247869852ULL,
903 6231483061417281702ULL,
905 7587863783224107720ULL,
906 4813953927640687832ULL,
911 2888204484391197818ULL,
913 1667417705464477204ULL,
914 4368707067656630276ULL,
915 9156599042800701531ULL,
917 4622359443003849269ULL,
918 7757154674165939237ULL,
919 17903722964224905445ULL,
921 14358003450906344075ULL,
922 17060471493690637467ULL,
927 9662639389952885817ULL,
929 13344089177003470423ULL,
930 10569000649149409351ULL,
931 15068665748674332696ULL,
933 17161400230922396278ULL,
934 14243358305793533030ULL
938const uint64_t BI_CT_TETRAMER_TAB[256] = { 7903069985244696545ULL,
940 5952199028685153679ULL,
941 8726125620783047583ULL,
946 1423984374654180157ULL,
948 3239265717627122003ULL,
949 537959694350858051ULL,
950 4955422779349047068ULL,
952 8931236194499526002ULL,
953 5796422442532485986ULL,
970 10480418080795158104ULL,
972 12557937413778541622ULL,
973 9639350223324760614ULL,
978 17230691697404916356ULL,
980 14999410022686677226ULL,
981 18134732970037944058ULL,
982 13265781732207312549ULL,
984 9740911128328721611ULL,
985 12442798639878738651ULL,
986 4574968163017784859ULL,
988 21005562311251061ULL,
989 3155255381851099749ULL,
994 4689328268616313543ULL,
996 9089664875619762345ULL,
997 6172150804119029433ULL,
998 1591432901806794470ULL,
1000 2964154664228736136ULL,
1001 189664148293585560ULL,
1066 10670208004106787987ULL,
1068 12331731648208664317ULL,
1069 9268413422807691501ULL,
1074 16895935546904758351ULL,
1076 15370019031266140705ULL,
1077 18360716771597345841ULL,
1078 13653888368900424814ULL,
1080 9388727718593310208ULL,
1081 12234149755652892688ULL,
1098 7550431377666028842ULL,
1100 6340971969386962756ULL,
1101 8970238170159749460ULL,
1106 1632237297318027766ULL,
1108 2995441377836469144ULL,
1109 149439503918058888ULL,
1110 4729043290971336151ULL,
1112 9121973896872036281ULL,
1113 6130765314036646313ULL,
1114 14322824142644718953ULL,
1116 18010960957546809095ULL,
1117 15163850771780370711ULL,
1122 13306657871389129141ULL,
1124 9772129397874496475ULL,
1125 12402503902173812171ULL,
1126 17270334977163097492ULL,
1128 15031787489074651130ULL,
1129 18093417574358702570ULL,
1130 14415162961378847764ULL,
1132 17815078398106617466ULL,
1133 15904680980454047850ULL,
1138 13142251585342896328ULL,
1140 9895962073632248486ULL,
1141 11733738969707828406ULL,
1142 16241274185646601449ULL,
1144 16020348337179074183ULL,
1145 17712848172773365911ULL,
1162 3805619366837683629ULL,
1164 857772563979235267ULL,
1165 2334117937676265939ULL,
1170 5385773951433757041ULL,
1172 8469355426070739743ULL,
1173 6776274342720863503ULL,
1174 2141510149062286672ULL,
1176 2490210351169910590ULL,
1177 651923950472458542ULL,
1178 11158837266677243374ULL,
1180 11955661059224500096ULL,
1181 10261471664026595728ULL,
1186 16479371589667244338ULL,
1188 15818137341953581916ULL,
1189 17295591019177141580ULL,
1190 12949060435646432531ULL,
1192 10125042934416846717ULL,
1193 12033750801055738221ULL
1197const uint64_t BI_GA_DIMER_TAB[16] = { 15466952634673191035ULL,
1198 10754575533572636654ULL,
1200 11097913711551190186ULL,
1201 5877535496320390993ULL,
1202 1300266414860792004ULL,
1204 2105188344771369856ULL,
1209 5758277602454356440ULL,
1210 897281711739086413ULL,
1212 238567881438104841ULL
1216const uint64_t BI_GA_TRIMER_TAB[64] = { 16201651124989724449ULL,
1217 11767230542839996596ULL,
1219 12425925165519260656ULL,
1220 7485905922695612427ULL,
1221 2628147013137149854ULL,
1223 3117991808660735194ULL,
1228 8762868368011140738ULL,
1229 4179829000807872791ULL,
1231 3836473814229799507ULL,
1232 17203464567451130228ULL,
1233 12476292506423230177ULL,
1235 11680341964607149477ULL,
1236 7605014056128239198ULL,
1237 3030964276180857291ULL,
1239 2678653576253708943ULL,
1244 8643215145753641175ULL,
1245 3776431493625472834ULL,
1247 4275266935868017670ULL,
1264 15154499325442733158ULL,
1265 10508537125562078195ULL,
1267 11450835371142150327ULL,
1268 6159530959071411020ULL,
1269 1648676777120242905ULL,
1271 1863678824033957789ULL,
1276 5405372172001914309ULL,
1277 619798376795097680ULL,
1279 551039597220094228ULL
1283const uint64_t BI_GA_TETRAMER_TAB[256] = { 10102482841122093461ULL,
1284 14963615003264376320ULL,
1286 13877042217463412036ULL,
1287 794795739487041215ULL,
1288 5232589638041243946ULL,
1290 5161613641720576622ULL,
1295 1548991017688113206ULL,
1296 6261504389880137635ULL,
1298 6474221187766217959ULL,
1299 9392840475291690944ULL,
1300 13961256338029068373ULL,
1302 14914796497557187345ULL,
1303 391398344175249642ULL,
1304 5112936561611444095ULL,
1306 5316662609698825275ULL,
1311 1951808117724528227ULL,
1312 6380612394262551030ULL,
1314 6318591945652269746ULL,
1331 13739200011520215762ULL,
1332 18244429068126416199ULL,
1334 17441706179187852803ULL,
1335 4152289719497344504ULL,
1336 8792626876107301485ULL,
1338 8447054438424348969ULL,
1343 2875359367268995953ULL,
1344 7240976841901733092ULL,
1346 7728536354038472608ULL,
1347 10439742971334657342ULL,
1348 15238809933785883307ULL,
1350 15872787535609874927ULL,
1351 1717559167161027092ULL,
1352 6075273402150661505ULL,
1354 6589870402902132421ULL,
1359 697300835471006877ULL,
1360 5347749012401158920ULL,
1362 4975173205340442700ULL,
1363 11423453917689355115ULL,
1364 15929804584091122942ULL,
1366 15145130632992380858ULL,
1367 1854593325084628033ULL,
1368 6496051875600806868ULL,
1370 6132429400583706768ULL,
1375 559685854125523656ULL,
1376 4926424929898751325ULL,
1378 5432033363231264281ULL,
1395 11707425986759079545ULL,
1396 16276972118015169004ULL,
1398 17212532555803097768ULL,
1399 2688004620665649491ULL,
1400 7410673165475159750ULL,
1402 7632377835808404866ULL,
1407 4266321074409320410ULL,
1408 8696255610672826447ULL,
1410 8616255423678309131ULL,
1475 16790453619013574426ULL,
1476 12293110188280461455ULL,
1478 11936155684350399435ULL,
1479 7941878618842992688ULL,
1480 3291412832639317925ULL,
1482 2490818554466065633ULL,
1487 8092837802684991161ULL,
1488 3735105958421766444ULL,
1490 4389210678668986984ULL,
1491 16675286395804860751ULL,
1492 11885226664861542106ULL,
1494 12379434820203482526ULL,
1495 6944006080901647973ULL,
1496 2577284614385265136ULL,
1498 3240342666676093620ULL,
1503 9090130062791399660ULL,
1504 4448689121532002169ULL,
1506 3639106275939783741ULL,
1523 15824496359018523741ULL,
1524 10953226629488970696ULL,
1526 10898136436499554444ULL,
1527 6678683788476883831ULL,
1528 2248766861403210978ULL,
1530 1155561727788445606ULL,
1535 4816531739325199870ULL,
1536 93880803705459307ULL,
1538 1040842618995587375ULL
1543static const uint64_t CT_A_33R[33] = {
1544 0x00000001b3188ddf, 0x0000000166311bbf, 0x00000000cc62377f,
1545 0x0000000198c46efe, 0x000000013188ddfd, 0x000000006311bbfb,
1546 0x00000000c62377f6, 0x000000018c46efec, 0x00000001188ddfd9,
1547 0x00000000311bbfb3, 0x0000000062377f66, 0x00000000c46efecc,
1548 0x0000000188ddfd98, 0x0000000111bbfb31, 0x000000002377f663,
1549 0x0000000046efecc6, 0x000000008ddfd98c, 0x000000011bbfb318,
1550 0x00000000377f6631, 0x000000006efecc62, 0x00000000ddfd98c4,
1551 0x00000001bbfb3188, 0x0000000177f66311, 0x00000000efecc623,
1552 0x00000001dfd98c46, 0x00000001bfb3188d, 0x000000017f66311b,
1553 0x00000000fecc6237, 0x00000001fd98c46e, 0x00000001fb3188dd,
1554 0x00000001f66311bb, 0x00000001ecc62377, 0x00000001d98c46ef
1557static const uint64_t CT_A_31L[31] = {
1558 0x38e1680c00000000, 0x71c2d01800000000, 0xe385a03000000000,
1559 0xc70b406200000000, 0x8e1680c600000000, 0x1c2d018e00000000,
1560 0x385a031c00000000, 0x70b4063800000000, 0xe1680c7000000000,
1561 0xc2d018e200000000, 0x85a031c600000000, 0xb40638e00000000,
1562 0x1680c71c00000000, 0x2d018e3800000000, 0x5a031c7000000000,
1563 0xb40638e000000000, 0x680c71c200000000, 0xd018e38400000000,
1564 0xa031c70a00000000, 0x40638e1600000000, 0x80c71c2c00000000,
1565 0x18e385a00000000, 0x31c70b400000000, 0x638e16800000000,
1566 0xc71c2d000000000, 0x18e385a000000000, 0x31c70b4000000000,
1567 0x638e168000000000, 0xc71c2d0000000000, 0x8e385a0200000000,
1572static const uint64_t CT_G_33R[33] = {
1573 0x0000000133a367b1, 0x000000006746cf63, 0x00000000ce8d9ec6,
1574 0x000000019d1b3d8c, 0x000000013a367b19, 0x00000000746cf633,
1575 0x00000000e8d9ec66, 0x00000001d1b3d8cc, 0x00000001a367b199,
1576 0x0000000146cf6333, 0x000000008d9ec667, 0x000000011b3d8cce,
1577 0x00000000367b199d, 0x000000006cf6333a, 0x00000000d9ec6674,
1578 0x00000001b3d8cce8, 0x0000000167b199d1, 0x00000000cf6333a3,
1579 0x000000019ec66746, 0x000000013d8cce8d, 0x000000007b199d1b,
1580 0x00000000f6333a36, 0x00000001ec66746c, 0x00000001d8cce8d9,
1581 0x00000001b199d1b3, 0x000000016333a367, 0x00000000c66746cf,
1582 0x000000018cce8d9e, 0x00000001199d1b3d, 0x00000000333a367b,
1583 0x0000000066746cf6, 0x00000000cce8d9ec, 0x0000000199d1b3d8
1586static const uint64_t CT_G_31L[31] = {
1587 0x7d6453000000000, 0xfac8a6000000000, 0x1f5914c000000000,
1588 0x3eb2298000000000, 0x7d64530000000000, 0xfac8a60000000000,
1589 0xf5914c0200000000, 0xeb22980600000000, 0xd645300e00000000,
1590 0xac8a601e00000000, 0x5914c03e00000000, 0xb229807c00000000,
1591 0x645300fa00000000, 0xc8a601f400000000, 0x914c03ea00000000,
1592 0x229807d600000000, 0x45300fac00000000, 0x8a601f5800000000,
1593 0x14c03eb200000000, 0x29807d6400000000, 0x5300fac800000000,
1594 0xa601f59000000000, 0x4c03eb2200000000, 0x9807d64400000000,
1595 0x300fac8a00000000, 0x601f591400000000, 0xc03eb22800000000,
1596 0x807d645200000000, 0xfac8a600000000, 0x1f5914c00000000,
1601static const uint64_t CT_CT33R[33] = {
1602 0x00000000d6a221a1, 0x00000001ad444342, 0x000000015a888685,
1603 0x00000000b5110d0b, 0x000000016a221a16, 0x00000000d444342d,
1604 0x00000001a888685a, 0x000000015110d0b5, 0x00000000a221a16b,
1605 0x00000001444342d6, 0x00000000888685ad, 0x00000001110d0b5a,
1606 0x00000000221a16b5, 0x0000000044342d6a, 0x0000000088685ad4,
1607 0x0000000110d0b5a8, 0x0000000021a16b51, 0x000000004342d6a2,
1608 0x000000008685ad44, 0x000000010d0b5a88, 0x000000001a16b511,
1609 0x00000000342d6a22, 0x00000000685ad444, 0x00000000d0b5a888,
1610 0x00000001a16b5110, 0x0000000142d6a221, 0x0000000085ad4443,
1611 0x000000010b5a8886, 0x0000000016b5110d, 0x000000002d6a221a,
1612 0x000000005ad44434, 0x00000000b5a88868, 0x000000016b5110d0
1615static const uint64_t CT_CT31L[31] = {
1616 0x2c555d4e00000000, 0x58aaba9c00000000, 0xb155753800000000,
1617 0x62aaea7200000000, 0xc555d4e400000000, 0x8aaba9ca00000000,
1618 0x1557539600000000, 0x2aaea72c00000000, 0x555d4e5800000000,
1619 0xaaba9cb000000000, 0x5575396200000000, 0xaaea72c400000000,
1620 0x55d4e58a00000000, 0xaba9cb1400000000, 0x5753962a00000000,
1621 0xaea72c5400000000, 0x5d4e58aa00000000, 0xba9cb15400000000,
1622 0x753962aa00000000, 0xea72c55400000000, 0xd4e58aaa00000000,
1623 0xa9cb155600000000, 0x53962aae00000000, 0xa72c555c00000000,
1624 0x4e58aaba00000000, 0x9cb1557400000000, 0x3962aaea00000000,
1625 0x72c555d400000000, 0xe58aaba800000000, 0xcb15575200000000,
1630static const uint64_t GA_GA33R[33] = {
1631 0x00000001392bb7d6, 0x0000000072576fad, 0x00000000e4aedf5a,
1632 0x00000001c95dbeb4, 0x0000000192bb7d69, 0x000000012576fad3,
1633 0x000000004aedf5a7, 0x0000000095dbeb4e, 0x000000012bb7d69c,
1634 0x00000000576fad39, 0x00000000aedf5a72, 0x000000015dbeb4e4,
1635 0x00000000bb7d69c9, 0x0000000176fad392, 0x00000000edf5a725,
1636 0x00000001dbeb4e4a, 0x00000001b7d69c95, 0x000000016fad392b,
1637 0x00000000df5a7257, 0x00000001beb4e4ae, 0x000000017d69c95d,
1638 0x00000000fad392bb, 0x00000001f5a72576, 0x00000001eb4e4aed,
1639 0x00000001d69c95db, 0x00000001ad392bb7, 0x000000015a72576f,
1640 0x00000000b4e4aedf, 0x0000000169c95dbe, 0x00000000d392bb7d,
1641 0x00000001a72576fa, 0x000000014e4aedf5, 0x000000009c95dbeb
1644static const uint64_t GA_GA31L[31] = {
1645 0x4d9c9d2800000000, 0x9b393a5000000000, 0x367274a200000000,
1646 0x6ce4e94400000000, 0xd9c9d28800000000, 0xb393a51200000000,
1647 0x67274a2600000000, 0xce4e944c00000000, 0x9c9d289a00000000,
1648 0x393a513600000000, 0x7274a26c00000000, 0xe4e944d800000000,
1649 0xc9d289b200000000, 0x93a5136600000000, 0x274a26ce00000000,
1650 0x4e944d9c00000000, 0x9d289b3800000000, 0x3a51367200000000,
1651 0x74a26ce400000000, 0xe944d9c800000000, 0xd289b39200000000,
1652 0xa513672600000000, 0x4a26ce4e00000000, 0x944d9c9c00000000,
1653 0x289b393a00000000, 0x5136727400000000, 0xa26ce4e800000000,
1654 0x44d9c9d200000000, 0x89b393a400000000, 0x1367274a00000000,
1659static const uint64_t GA_C_33R[33] = {
1660 0x00000001c6e35043, 0x000000018dc6a087, 0x000000011b8d410f,
1661 0x00000000371a821f, 0x000000006e35043e, 0x00000000dc6a087c,
1662 0x00000001b8d410f8, 0x0000000171a821f1, 0x00000000e35043e3,
1663 0x00000001c6a087c6, 0x000000018d410f8d, 0x000000011a821f1b,
1664 0x0000000035043e37, 0x000000006a087c6e, 0x00000000d410f8dc,
1665 0x00000001a821f1b8, 0x000000015043e371, 0x00000000a087c6e3,
1666 0x00000001410f8dc6, 0x00000000821f1b8d, 0x00000001043e371a,
1667 0x00000000087c6e35, 0x0000000010f8dc6a, 0x0000000021f1b8d4,
1668 0x0000000043e371a8, 0x0000000087c6e350, 0x000000010f8dc6a0,
1669 0x000000001f1b8d41, 0x000000003e371a82, 0x000000007c6e3504,
1670 0x00000000f8dc6a08, 0x00000001f1b8d410, 0x00000001e371a821
1673static const uint64_t GA_C_31L[31] = {
1674 0xe06d72600000000, 0x1c0dae4c00000000, 0x381b5c9800000000,
1675 0x7036b93000000000, 0xe06d726000000000, 0xc0dae4c200000000,
1676 0x81b5c98600000000, 0x36b930e00000000, 0x6d7261c00000000,
1677 0xdae4c3800000000, 0x1b5c987000000000, 0x36b930e000000000,
1678 0x6d7261c000000000, 0xdae4c38000000000, 0xb5c9870200000000,
1679 0x6b930e0600000000, 0xd7261c0c00000000, 0xae4c381a00000000,
1680 0x5c98703600000000, 0xb930e06c00000000, 0x7261c0da00000000,
1681 0xe4c381b400000000, 0xc987036a00000000, 0x930e06d600000000,
1682 0x261c0dae00000000, 0x4c381b5c00000000, 0x987036b800000000,
1683 0x30e06d7200000000, 0x61c0dae400000000, 0xc381b5c800000000,
1688static const uint64_t GA_T_33R[33] = {
1689 0x00000000dea57b07, 0x00000001bd4af60e, 0x000000017a95ec1d,
1690 0x00000000f52bd83b, 0x00000001ea57b076, 0x00000001d4af60ed,
1691 0x00000001a95ec1db, 0x0000000152bd83b7, 0x00000000a57b076f,
1692 0x000000014af60ede, 0x0000000095ec1dbd, 0x000000012bd83b7a,
1693 0x0000000057b076f5, 0x00000000af60edea, 0x000000015ec1dbd4,
1694 0x00000000bd83b7a9, 0x000000017b076f52, 0x00000000f60edea5,
1695 0x00000001ec1dbd4a, 0x00000001d83b7a95, 0x00000001b076f52b,
1696 0x0000000160edea57, 0x00000000c1dbd4af, 0x0000000183b7a95e,
1697 0x00000001076f52bd, 0x000000000edea57b, 0x000000001dbd4af6,
1698 0x000000003b7a95ec, 0x0000000076f52bd8, 0x00000000edea57b0,
1699 0x00000001dbd4af60, 0x00000001b7a95ec1, 0x000000016f52bd83
1702static const uint64_t GA_T_31L[31] = {
1703 0x13a8fe800000000, 0x2751fd000000000, 0x4ea3fa000000000,
1704 0x9d47f4000000000, 0x13a8fe8000000000, 0x2751fd0000000000,
1705 0x4ea3fa0000000000, 0x9d47f40000000000, 0x3a8fe80200000000,
1706 0x751fd00400000000, 0xea3fa00800000000, 0xd47f401200000000,
1707 0xa8fe802600000000, 0x51fd004e00000000, 0xa3fa009c00000000,
1708 0x47f4013a00000000, 0x8fe8027400000000, 0x1fd004ea00000000,
1709 0x3fa009d400000000, 0x7f4013a800000000, 0xfe80275000000000,
1710 0xfd004ea200000000, 0xfa009d4600000000, 0xf4013a8e00000000,
1711 0xe802751e00000000, 0xd004ea3e00000000, 0xa009d47e00000000,
1712 0x4013a8fe00000000, 0x802751fc00000000, 0x4ea3fa00000000,
1716const uint64_t*
const BI_CT_MS_TAB_33R[ASCII_SIZE] = {
1717 XX_N_33R, GA_T_33R, XX_N_33R, GA_GA33R,
1718 GA_GA33R, GA_GA33R, XX_N_33R, GA_C_33R,
1719 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1720 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1721 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1722 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1723 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1724 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1725 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1726 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1727 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1728 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1729 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1730 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1731 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1732 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1733 XX_N_33R, CT_A_33R, XX_N_33R, CT_CT33R,
1734 XX_N_33R, XX_N_33R, XX_N_33R, CT_G_33R,
1735 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1736 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1737 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1738 CT_CT33R, CT_CT33R, XX_N_33R, XX_N_33R,
1739 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1740 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1741 XX_N_33R, CT_A_33R, XX_N_33R, CT_CT33R,
1742 XX_N_33R, XX_N_33R, XX_N_33R, CT_G_33R,
1743 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1744 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1745 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1746 CT_CT33R, CT_CT33R, XX_N_33R, XX_N_33R,
1747 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1748 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1749 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1750 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1751 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1752 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1753 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1754 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1755 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1756 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1757 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1758 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1759 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1760 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1761 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1762 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1763 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1764 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1765 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1766 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1767 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1768 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1769 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1770 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1771 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1772 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1773 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1774 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1775 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1776 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1777 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1778 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1779 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1780 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R
1783const uint64_t*
const BI_CT_MS_TAB_31L[ASCII_SIZE] = {
1784 XX_N_31L, GA_T_31L, XX_N_31L, GA_GA31L,
1785 GA_GA31L, GA_GA31L, XX_N_31L, GA_C_31L,
1786 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1787 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1788 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1789 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1790 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1791 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1792 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1793 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1794 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1795 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1796 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1797 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1798 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1799 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1800 XX_N_31L, CT_A_31L, XX_N_31L, CT_CT31L,
1801 XX_N_31L, XX_N_31L, XX_N_31L, CT_G_31L,
1802 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1803 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1804 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1805 CT_CT31L, CT_CT31L, XX_N_31L, XX_N_31L,
1806 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1807 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1808 XX_N_31L, CT_A_31L, XX_N_31L, CT_CT31L,
1809 XX_N_31L, XX_N_31L, XX_N_31L, CT_G_31L,
1810 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1811 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1812 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1813 CT_CT31L, CT_CT31L, XX_N_31L, XX_N_31L,
1814 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1815 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1816 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1817 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1818 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1819 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1820 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1821 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1822 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1823 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1824 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1825 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1826 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1827 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1828 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1829 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1830 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1831 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1832 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1833 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1834 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1835 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1836 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1837 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1838 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1839 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1840 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1841 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1842 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1843 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1844 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1845 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1846 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1847 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L
1850const uint64_t*
const BI_GA_MS_TAB_33R[ASCII_SIZE] = {
1851 XX_N_33R, CT_CT33R, XX_N_33R, CT_G_33R,
1852 CT_A_33R, CT_A_33R, XX_N_33R, CT_CT33R,
1853 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1854 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1855 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1856 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1857 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1858 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1859 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1860 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1861 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1862 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1863 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1864 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1865 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1866 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1867 XX_N_33R, GA_GA33R, XX_N_33R, GA_C_33R,
1868 XX_N_33R, XX_N_33R, XX_N_33R, GA_GA33R,
1869 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1870 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1871 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1872 GA_T_33R, GA_T_33R, XX_N_33R, XX_N_33R,
1873 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1874 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1875 XX_N_33R, GA_GA33R, XX_N_33R, GA_C_33R,
1876 XX_N_33R, XX_N_33R, XX_N_33R, GA_GA33R,
1877 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1878 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1879 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1880 GA_T_33R, GA_T_33R, XX_N_33R, XX_N_33R,
1881 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1882 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1883 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1884 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1885 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1886 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1887 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1888 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1889 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1890 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1891 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1892 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1893 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1894 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1895 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1896 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1897 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1898 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1899 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1900 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1901 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1902 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1903 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1904 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1905 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1906 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1907 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1908 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1909 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1910 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1911 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1912 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1913 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R,
1914 XX_N_33R, XX_N_33R, XX_N_33R, XX_N_33R
1917const uint64_t*
const BI_GA_MS_TAB_31L[ASCII_SIZE] = {
1918 XX_N_31L, CT_CT31L, XX_N_31L, CT_G_31L,
1919 CT_A_31L, CT_A_31L, XX_N_31L, CT_CT31L,
1920 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1921 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1922 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1923 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1924 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1925 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1926 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1927 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1928 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1929 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1930 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1931 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1932 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1933 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1934 XX_N_31L, GA_GA31L, XX_N_31L, GA_C_31L,
1935 XX_N_31L, XX_N_31L, XX_N_31L, GA_GA31L,
1936 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1937 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1938 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1939 GA_T_31L, GA_T_31L, XX_N_31L, XX_N_31L,
1940 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1941 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1942 XX_N_31L, GA_GA31L, XX_N_31L, GA_C_31L,
1943 XX_N_31L, XX_N_31L, XX_N_31L, GA_GA31L,
1944 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1945 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1946 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1947 GA_T_31L, GA_T_31L, XX_N_31L, XX_N_31L,
1948 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1949 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1950 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1951 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1952 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1953 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1954 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1955 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1956 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1957 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1958 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1959 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1960 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1961 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1962 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1963 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1964 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1965 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1966 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1967 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1968 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1969 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1970 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1971 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1972 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1973 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1974 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1975 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1976 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1977 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1978 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1979 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1980 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L,
1981 XX_N_31L, XX_N_31L, XX_N_31L, XX_N_31L
1984const uint8_t BI_CT_CONVERT_TAB[ASCII_SIZE] = {
1985 255, 255, 255, 255, 255, 255, 255, 255,
1986 255, 255, 255, 255, 255, 255, 255, 255,
1987 255, 255, 255, 255, 255, 255, 255, 255,
1988 255, 255, 255, 255, 255, 255, 255, 255,
1989 255, 255, 255, 255, 255, 255, 255, 255,
1990 255, 255, 255, 255, 255, 255, 255, 255,
1991 255, 255, 255, 255, 255, 255, 255, 255,
1992 255, 255, 255, 255, 255, 255, 255, 255,
1993 255, 0, 255, 3, 255, 255, 255, 2,
1994 255, 255, 255, 255, 255, 255, 255, 255,
1995 255, 255, 255, 255, 3, 3, 255, 255,
1996 255, 255, 255, 255, 255, 255, 255, 255,
1997 255, 0, 255, 3, 255, 255, 255, 2,
1998 255, 255, 255, 255, 255, 255, 255, 255,
1999 255, 255, 255, 255, 3, 3, 255, 255,
2000 255, 255, 255, 255, 255, 255, 255, 255,
2001 255, 255, 255, 255, 255, 255, 255, 255,
2002 255, 255, 255, 255, 255, 255, 255, 255,
2003 255, 255, 255, 255, 255, 255, 255, 255,
2004 255, 255, 255, 255, 255, 255, 255, 255,
2005 255, 255, 255, 255, 255, 255, 255, 255,
2006 255, 255, 255, 255, 255, 255, 255, 255,
2007 255, 255, 255, 255, 255, 255, 255, 255,
2008 255, 255, 255, 255, 255, 255, 255, 255,
2009 255, 255, 255, 255, 255, 255, 255, 255,
2010 255, 255, 255, 255, 255, 255, 255, 255,
2011 255, 255, 255, 255, 255, 255, 255, 255,
2012 255, 255, 255, 255, 255, 255, 255, 255,
2013 255, 255, 255, 255, 255, 255, 255, 255,
2014 255, 255, 255, 255, 255, 255, 255, 255,
2015 255, 255, 255, 255, 255, 255, 255, 255,
2016 255, 255, 255, 255, 255, 255, 255, 255
2019const uint8_t BI_CT_RC_CONVERT_TAB[ASCII_SIZE] = {
2020 255, 255, 255, 255, 255, 255, 255, 255,
2021 255, 255, 255, 255, 255, 255, 255, 255,
2022 255, 255, 255, 255, 255, 255, 255, 255,
2023 255, 255, 255, 255, 255, 255, 255, 255,
2024 255, 255, 255, 255, 255, 255, 255, 255,
2025 255, 255, 255, 255, 255, 255, 255, 255,
2026 255, 255, 255, 255, 255, 255, 255, 255,
2027 255, 255, 255, 255, 255, 255, 255, 255,
2028 255, 3, 255, 0, 255, 255, 255, 1,
2029 255, 255, 255, 255, 255, 255, 255, 255,
2030 255, 255, 255, 255, 0, 0, 255, 255,
2031 255, 255, 255, 255, 255, 255, 255, 255,
2032 255, 3, 255, 0, 255, 255, 255, 1,
2033 255, 255, 255, 255, 255, 255, 255, 255,
2034 255, 255, 255, 255, 0, 0, 255, 255,
2035 255, 255, 255, 255, 255, 255, 255, 255,
2036 255, 255, 255, 255, 255, 255, 255, 255,
2037 255, 255, 255, 255, 255, 255, 255, 255,
2038 255, 255, 255, 255, 255, 255, 255, 255,
2039 255, 255, 255, 255, 255, 255, 255, 255,
2040 255, 255, 255, 255, 255, 255, 255, 255,
2041 255, 255, 255, 255, 255, 255, 255, 255,
2042 255, 255, 255, 255, 255, 255, 255, 255,
2043 255, 255, 255, 255, 255, 255, 255, 255,
2044 255, 255, 255, 255, 255, 255, 255, 255,
2045 255, 255, 255, 255, 255, 255, 255, 255,
2046 255, 255, 255, 255, 255, 255, 255, 255,
2047 255, 255, 255, 255, 255, 255, 255, 255,
2048 255, 255, 255, 255, 255, 255, 255, 255,
2049 255, 255, 255, 255, 255, 255, 255, 255,
2050 255, 255, 255, 255, 255, 255, 255, 255,
2051 255, 255, 255, 255, 255, 255, 255, 255
2054const uint8_t BI_GA_CONVERT_TAB[ASCII_SIZE] = {
2055 255, 255, 255, 255, 255, 255, 255, 255,
2056 255, 255, 255, 255, 255, 255, 255, 255,
2057 255, 255, 255, 255, 255, 255, 255, 255,
2058 255, 255, 255, 255, 255, 255, 255, 255,
2059 255, 255, 255, 255, 255, 255, 255, 255,
2060 255, 255, 255, 255, 255, 255, 255, 255,
2061 255, 255, 255, 255, 255, 255, 255, 255,
2062 255, 255, 255, 255, 255, 255, 255, 255,
2063 255, 0, 255, 1, 255, 255, 255, 0,
2064 255, 255, 255, 255, 255, 255, 255, 255,
2065 255, 255, 255, 255, 3, 3, 255, 255,
2066 255, 255, 255, 255, 255, 255, 255, 255,
2067 255, 0, 255, 1, 255, 255, 255, 0,
2068 255, 255, 255, 255, 255, 255, 255, 255,
2069 255, 255, 255, 255, 3, 3, 255, 255,
2070 255, 255, 255, 255, 255, 255, 255, 255,
2071 255, 255, 255, 255, 255, 255, 255, 255,
2072 255, 255, 255, 255, 255, 255, 255, 255,
2073 255, 255, 255, 255, 255, 255, 255, 255,
2074 255, 255, 255, 255, 255, 255, 255, 255,
2075 255, 255, 255, 255, 255, 255, 255, 255,
2076 255, 255, 255, 255, 255, 255, 255, 255,
2077 255, 255, 255, 255, 255, 255, 255, 255,
2078 255, 255, 255, 255, 255, 255, 255, 255,
2079 255, 255, 255, 255, 255, 255, 255, 255,
2080 255, 255, 255, 255, 255, 255, 255, 255,
2081 255, 255, 255, 255, 255, 255, 255, 255,
2082 255, 255, 255, 255, 255, 255, 255, 255,
2083 255, 255, 255, 255, 255, 255, 255, 255,
2084 255, 255, 255, 255, 255, 255, 255, 255,
2085 255, 255, 255, 255, 255, 255, 255, 255,
2086 255, 255, 255, 255, 255, 255, 255, 255
2089const uint8_t BI_GA_RC_CONVERT_TAB[ASCII_SIZE] = {
2090 255, 255, 255, 255, 255, 255, 255, 255,
2091 255, 255, 255, 255, 255, 255, 255, 255,
2092 255, 255, 255, 255, 255, 255, 255, 255,
2093 255, 255, 255, 255, 255, 255, 255, 255,
2094 255, 255, 255, 255, 255, 255, 255, 255,
2095 255, 255, 255, 255, 255, 255, 255, 255,
2096 255, 255, 255, 255, 255, 255, 255, 255,
2097 255, 255, 255, 255, 255, 255, 255, 255,
2098 255, 3, 255, 2, 255, 255, 255, 3,
2099 255, 255, 255, 255, 255, 255, 255, 255,
2100 255, 255, 255, 255, 0, 0, 255, 255,
2101 255, 255, 255, 255, 255, 255, 255, 255,
2102 255, 3, 255, 2, 255, 255, 255, 3,
2103 255, 255, 255, 255, 255, 255, 255, 255,
2104 255, 255, 255, 255, 0, 0, 255, 255,
2105 255, 255, 255, 255, 255, 255, 255, 255,
2106 255, 255, 255, 255, 255, 255, 255, 255,
2107 255, 255, 255, 255, 255, 255, 255, 255,
2108 255, 255, 255, 255, 255, 255, 255, 255,
2109 255, 255, 255, 255, 255, 255, 255, 255,
2110 255, 255, 255, 255, 255, 255, 255, 255,
2111 255, 255, 255, 255, 255, 255, 255, 255,
2112 255, 255, 255, 255, 255, 255, 255, 255,
2113 255, 255, 255, 255, 255, 255, 255, 255,
2114 255, 255, 255, 255, 255, 255, 255, 255,
2115 255, 255, 255, 255, 255, 255, 255, 255,
2116 255, 255, 255, 255, 255, 255, 255, 255,
2117 255, 255, 255, 255, 255, 255, 255, 255,
2118 255, 255, 255, 255, 255, 255, 255, 255,
2119 255, 255, 255, 255, 255, 255, 255, 255,
2120 255, 255, 255, 255, 255, 255, 255, 255,
2121 255, 255, 255, 255, 255, 255, 255, 255
2124constexpr uint8_t BI_CONVERT_TAB[128] = {
2126 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2127 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2128 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0,
2129 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 3,
2130 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
2133constexpr uint8_t BI_RC_CONVERT_TAB[128] = {
2135 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2136 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2137 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,
2138 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 3, 0, 0, 0, 2,
2139 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
2143static const uint64_t CG_group1 = 0x85447b35f730b24eULL;
2144static const uint64_t CG_group2 = 0x1e7ec42ae67bf290ULL;
2145static const uint64_t CG_group3 = 0xe630f41524612363ULL;
2146static const uint64_t CG_group4 = 0x891759872e4a1a40ULL;
2147static const uint64_t CG_group5 = 0x10a9d125b4781d1bULL;
2148static const uint64_t CG_group6 = 0xe345fa6e0b3efe26ULL;
2149static const uint64_t CG_group7 = 0xed73b07d7795d703ULL;
2150static const uint64_t CG_group8 = 0xc05a70c787ddc030ULL;
2151static const uint64_t CG_group9 = 0xb3e7ea1d5f69e07dULL;
2154static const uint64_t CC_group1 = 0x35186b8fc962b995ULL;
2155static const uint64_t CC_group2 = 0xeeecbd3086db4364ULL;
2156static const uint64_t CC_group3 = 0x15dc1dfcf2d821d7ULL;
2157static const uint64_t CC_group4 = 0x501734bd0947b87dULL;
2158static const uint64_t CC_group5 = 0xda7b6ec0c3c8457aULL;
2161static const uint64_t CA_group1 = 0xd2e69a6245391840ULL;
2162static const uint64_t CA_group2 = 0xfcdf37536278deafULL;
2163static const uint64_t CA_group3 = 0x72e4656f024fd310ULL;
2164static const uint64_t CA_group4 = 0xdee651b2976fa1f8ULL;
2165static const uint64_t CA_group5 = 0xf3288907ec8cd8f0ULL;
2166static const uint64_t CA_group6 = 0x129d2554868dad85ULL;
2167static const uint64_t CA_group7 = 0x23f706d477652a44ULL;
2168static const uint64_t CA_group8 = 0x3fd2c4487b9f6d6cULL;
2169static const uint64_t CA_group9 = 0xa8a3d2ed1139ceeaULL;
2172static const uint64_t CT_group1 = 0x385ed2689c215294ULL;
2173static const uint64_t CT_group2 = 0x5997dfab383a421eULL;
2174static const uint64_t CT_group3 = 0x2c62c0516c643607ULL;
2175static const uint64_t CT_group4 = 0x5186a5a92af12d90ULL;
2176static const uint64_t CT_group5 = 0x34fd2f6305426fbeULL;
2177static const uint64_t CT_group6 = 0xfd1fccb21e12f0f6ULL;
2178static const uint64_t CT_group7 = 0xde1be1658d22c3a7ULL;
2179static const uint64_t CT_group8 = 0x669139b5a878cd6cULL;
2180static const uint64_t CT_group9 = 0x36f4413f12bacedcULL;
2182constexpr uint64_t CG_DIMER_TAB[45] = {
2183 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2184 0, CG_group4, CG_group2, CG_group8, CG_group2, 0, 0, 0, 0, 0,
2185 0, CG_group1, CG_group7, CG_group1, CG_group9, 0, 0, 0, 0, 0,
2186 0, CG_group4, CG_group2, CG_group6, CG_group2, 0, 0, 0, 0, 0,
2187 0, CG_group5, CG_group3, CG_group1, CG_group3
2190constexpr uint64_t CC_DIMER_TAB[45] = {
2191 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2192 0, CC_group2, CC_group3, CC_group2, CC_group3, 0, 0, 0, 0, 0,
2193 0, CC_group4, CC_group1, CC_group5, CC_group1, 0, 0, 0, 0, 0,
2194 0, CC_group2, CC_group3, CC_group2, CC_group3, 0, 0, 0, 0, 0,
2195 0, CC_group4, CC_group1, CC_group4, CC_group1
2198constexpr uint64_t CA_DIMER_TAB[45] = {
2199 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2200 0, CA_group3, CA_group2, CA_group7, CA_group2, 0, 0, 0, 0, 0,
2201 0, CA_group1, CA_group6, CA_group9, CA_group8, 0, 0, 0, 0, 0,
2202 0, CA_group3, CA_group2, CA_group5, CA_group2, 0, 0, 0, 0, 0,
2203 0, CA_group1, CA_group4, CA_group1, CA_group4
2206constexpr uint64_t CT_DIMER_TAB[45] = {
2207 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2208 0, CT_group2, CT_group3, CT_group2, CT_group3, 0, 0, 0, 0, 0,
2209 0, CT_group8, CT_group5, CT_group9, CT_group1, 0, 0, 0, 0, 0,
2210 0, CT_group2, CT_group3, CT_group4, CT_group3, 0, 0, 0, 0, 0,
2211 0, CT_group6, CT_group1, CT_group7, CT_group1
2215inline std::vector<uint64_t>
2216base_forward_bi_hash(
const char* seq,
2219 const uint64_t* DIMER_TAB)
2224 for (
unsigned i = 0; i < k; i += 2) {
2226 const char c1 = seq[i];
2227 const char c2 = seq[i + 1];
2228 const uint8_t a = BI_CONVERT_TAB[(
unsigned char)c1];
2229 const uint8_t b = BI_CONVERT_TAB[(
unsigned char)c2];
2230 const uint8_t loc = 10 * a + b;
2231 h0 ^= DIMER_TAB[loc];
2237 for (
unsigned i = 1; i < k + 1; i += 2) {
2239 const char c1 = seq[i];
2240 const char c2 = seq[i + 1];
2241 const uint8_t a = BI_CONVERT_TAB[(
unsigned char)c1];
2242 const uint8_t b = BI_CONVERT_TAB[(
unsigned char)c2];
2243 const uint8_t loc = 10 * a + b;
2244 h1 ^= DIMER_TAB[loc];
2251static const uint64_t CC_group1_33R[33] = {
2252 0x00000001c962b995, 0x0000000192c5732b, 0x00000001258ae657,
2253 0x000000004b15ccaf, 0x00000000962b995e, 0x000000012c5732bc,
2254 0x0000000058ae6579, 0x00000000b15ccaf2, 0x0000000162b995e4,
2255 0x00000000c5732bc9, 0x000000018ae65792, 0x0000000115ccaf25,
2256 0x000000002b995e4b, 0x000000005732bc96, 0x00000000ae65792c,
2257 0x000000015ccaf258, 0x00000000b995e4b1, 0x00000001732bc962,
2258 0x00000000e65792c5, 0x00000001ccaf258a, 0x00000001995e4b15,
2259 0x0000000132bc962b, 0x0000000065792c57, 0x00000000caf258ae,
2260 0x0000000195e4b15c, 0x000000012bc962b9, 0x000000005792c573,
2261 0x00000000af258ae6, 0x000000015e4b15cc, 0x00000000bc962b99,
2262 0x00000001792c5732, 0x00000000f258ae65, 0x00000001e4b15cca
2265static const uint64_t CC_group1_31L[31] = {
2266 0x35186b8e00000000, 0x6a30d71c00000000, 0xd461ae3800000000,
2267 0xa8c35c7200000000, 0x5186b8e600000000, 0xa30d71cc00000000,
2268 0x461ae39a00000000, 0x8c35c73400000000, 0x186b8e6a00000000,
2269 0x30d71cd400000000, 0x61ae39a800000000, 0xc35c735000000000,
2270 0x86b8e6a200000000, 0xd71cd4600000000, 0x1ae39a8c00000000,
2271 0x35c7351800000000, 0x6b8e6a3000000000, 0xd71cd46000000000,
2272 0xae39a8c200000000, 0x5c73518600000000, 0xb8e6a30c00000000,
2273 0x71cd461a00000000, 0xe39a8c3400000000, 0xc735186a00000000,
2274 0x8e6a30d600000000, 0x1cd461ae00000000, 0x39a8c35c00000000,
2275 0x735186b800000000, 0xe6a30d7000000000, 0xcd461ae200000000,
2280static const uint64_t CC_group2_33R[33] = {
2281 0x0000000086db4364, 0x000000010db686c8, 0x000000001b6d0d91,
2282 0x0000000036da1b22, 0x000000006db43644, 0x00000000db686c88,
2283 0x00000001b6d0d910, 0x000000016da1b221, 0x00000000db436443,
2284 0x00000001b686c886, 0x000000016d0d910d, 0x00000000da1b221b,
2285 0x00000001b4364436, 0x00000001686c886d, 0x00000000d0d910db,
2286 0x00000001a1b221b6, 0x000000014364436d, 0x0000000086c886db,
2287 0x000000010d910db6, 0x000000001b221b6d, 0x00000000364436da,
2288 0x000000006c886db4, 0x00000000d910db68, 0x00000001b221b6d0,
2289 0x0000000164436da1, 0x00000000c886db43, 0x00000001910db686,
2290 0x00000001221b6d0d, 0x000000004436da1b, 0x00000000886db436,
2291 0x0000000110db686c, 0x0000000021b6d0d9, 0x00000000436da1b2
2294static const uint64_t CC_group2_31L[31] = {
2295 0xeeecbd3000000000, 0xddd97a6200000000, 0xbbb2f4c600000000,
2296 0x7765e98e00000000, 0xeecbd31c00000000, 0xdd97a63a00000000,
2297 0xbb2f4c7600000000, 0x765e98ee00000000, 0xecbd31dc00000000,
2298 0xd97a63ba00000000, 0xb2f4c77600000000, 0x65e98eee00000000,
2299 0xcbd31ddc00000000, 0x97a63bba00000000, 0x2f4c777600000000,
2300 0x5e98eeec00000000, 0xbd31ddd800000000, 0x7a63bbb200000000,
2301 0xf4c7776400000000, 0xe98eeeca00000000, 0xd31ddd9600000000,
2302 0xa63bbb2e00000000, 0x4c77765e00000000, 0x98eeecbc00000000,
2303 0x31ddd97a00000000, 0x63bbb2f400000000, 0xc77765e800000000,
2304 0x8eeecbd200000000, 0x1ddd97a600000000, 0x3bbb2f4c00000000,
2309static const uint64_t CC_group3_33R[33] = {
2310 0x00000000f2d821d7, 0x00000001e5b043ae, 0x00000001cb60875d,
2311 0x0000000196c10ebb, 0x000000012d821d77, 0x000000005b043aef,
2312 0x00000000b60875de, 0x000000016c10ebbc, 0x00000000d821d779,
2313 0x00000001b043aef2, 0x0000000160875de5, 0x00000000c10ebbcb,
2314 0x00000001821d7796, 0x00000001043aef2d, 0x000000000875de5b,
2315 0x0000000010ebbcb6, 0x0000000021d7796c, 0x0000000043aef2d8,
2316 0x00000000875de5b0, 0x000000010ebbcb60, 0x000000001d7796c1,
2317 0x000000003aef2d82, 0x0000000075de5b04, 0x00000000ebbcb608,
2318 0x00000001d7796c10, 0x00000001aef2d821, 0x000000015de5b043,
2319 0x00000000bbcb6087, 0x000000017796c10e, 0x00000000ef2d821d,
2320 0x00000001de5b043a, 0x00000001bcb60875, 0x00000001796c10eb
2323static const uint64_t CC_group3_31L[31] = {
2324 0x15dc1dfc00000000, 0x2bb83bf800000000, 0x577077f000000000,
2325 0xaee0efe000000000, 0x5dc1dfc200000000, 0xbb83bf8400000000,
2326 0x77077f0a00000000, 0xee0efe1400000000, 0xdc1dfc2a00000000,
2327 0xb83bf85600000000, 0x7077f0ae00000000, 0xe0efe15c00000000,
2328 0xc1dfc2ba00000000, 0x83bf857600000000, 0x77f0aee00000000,
2329 0xefe15dc00000000, 0x1dfc2bb800000000, 0x3bf8577000000000,
2330 0x77f0aee000000000, 0xefe15dc000000000, 0xdfc2bb8200000000,
2331 0xbf85770600000000, 0x7f0aee0e00000000, 0xfe15dc1c00000000,
2332 0xfc2bb83a00000000, 0xf857707600000000, 0xf0aee0ee00000000,
2333 0xe15dc1de00000000, 0xc2bb83be00000000, 0x8577077e00000000,
2338static const uint64_t CC_group4_33R[33] = {
2339 0x000000010947b87d, 0x00000000128f70fb, 0x00000000251ee1f6,
2340 0x000000004a3dc3ec, 0x00000000947b87d8, 0x0000000128f70fb0,
2341 0x0000000051ee1f61, 0x00000000a3dc3ec2, 0x0000000147b87d84,
2342 0x000000008f70fb09, 0x000000011ee1f612, 0x000000003dc3ec25,
2343 0x000000007b87d84a, 0x00000000f70fb094, 0x00000001ee1f6128,
2344 0x00000001dc3ec251, 0x00000001b87d84a3, 0x0000000170fb0947,
2345 0x00000000e1f6128f, 0x00000001c3ec251e, 0x0000000187d84a3d,
2346 0x000000010fb0947b, 0x000000001f6128f7, 0x000000003ec251ee,
2347 0x000000007d84a3dc, 0x00000000fb0947b8, 0x00000001f6128f70,
2348 0x00000001ec251ee1, 0x00000001d84a3dc3, 0x00000001b0947b87,
2349 0x000000016128f70f, 0x00000000c251ee1f, 0x0000000184a3dc3e
2352static const uint64_t CC_group4_31L[31] = {
2353 0x501734bc00000000, 0xa02e697800000000, 0x405cd2f200000000,
2354 0x80b9a5e400000000, 0x1734bca00000000, 0x2e6979400000000,
2355 0x5cd2f2800000000, 0xb9a5e5000000000, 0x1734bca000000000,
2356 0x2e69794000000000, 0x5cd2f28000000000, 0xb9a5e50000000000,
2357 0x734bca0200000000, 0xe697940400000000, 0xcd2f280a00000000,
2358 0x9a5e501600000000, 0x34bca02e00000000, 0x6979405c00000000,
2359 0xd2f280b800000000, 0xa5e5017200000000, 0x4bca02e600000000,
2360 0x979405cc00000000, 0x2f280b9a00000000, 0x5e50173400000000,
2361 0xbca02e6800000000, 0x79405cd200000000, 0xf280b9a400000000,
2362 0xe501734a00000000, 0xca02e69600000000, 0x9405cd2e00000000,
2367static const uint64_t CC_group5_33R[33] = {
2368 0x00000000c3c8457a, 0x0000000187908af4, 0x000000010f2115e9,
2369 0x000000001e422bd3, 0x000000003c8457a6, 0x000000007908af4c,
2370 0x00000000f2115e98, 0x00000001e422bd30, 0x00000001c8457a61,
2371 0x00000001908af4c3, 0x000000012115e987, 0x00000000422bd30f,
2372 0x000000008457a61e, 0x0000000108af4c3c, 0x00000000115e9879,
2373 0x0000000022bd30f2, 0x00000000457a61e4, 0x000000008af4c3c8,
2374 0x0000000115e98790, 0x000000002bd30f21, 0x0000000057a61e42,
2375 0x00000000af4c3c84, 0x000000015e987908, 0x00000000bd30f211,
2376 0x000000017a61e422, 0x00000000f4c3c845, 0x00000001e987908a,
2377 0x00000001d30f2115, 0x00000001a61e422b, 0x000000014c3c8457,
2378 0x00000000987908af, 0x0000000130f2115e, 0x0000000061e422bd
2381static const uint64_t CC_group5_31L[31] = {
2382 0xda7b6ec000000000, 0xb4f6dd8200000000, 0x69edbb0600000000,
2383 0xd3db760c00000000, 0xa7b6ec1a00000000, 0x4f6dd83600000000,
2384 0x9edbb06c00000000, 0x3db760da00000000, 0x7b6ec1b400000000,
2385 0xf6dd836800000000, 0xedbb06d200000000, 0xdb760da600000000,
2386 0xb6ec1b4e00000000, 0x6dd8369e00000000, 0xdbb06d3c00000000,
2387 0xb760da7a00000000, 0x6ec1b4f600000000, 0xdd8369ec00000000,
2388 0xbb06d3da00000000, 0x760da7b600000000, 0xec1b4f6c00000000,
2389 0xd8369eda00000000, 0xb06d3db600000000, 0x60da7b6e00000000,
2390 0xc1b4f6dc00000000, 0x8369edba00000000, 0x6d3db7600000000,
2391 0xda7b6ec00000000, 0x1b4f6dd800000000, 0x369edbb000000000,
2396static const uint64_t CG_group1_33R[33] = {
2397 0x00000001f730b24e, 0x00000001ee61649d, 0x00000001dcc2c93b,
2398 0x00000001b9859277, 0x00000001730b24ef, 0x00000000e61649df,
2399 0x00000001cc2c93be, 0x000000019859277d, 0x0000000130b24efb,
2400 0x0000000061649df7, 0x00000000c2c93bee, 0x00000001859277dc,
2401 0x000000010b24efb9, 0x000000001649df73, 0x000000002c93bee6,
2402 0x0000000059277dcc, 0x00000000b24efb98, 0x00000001649df730,
2403 0x00000000c93bee61, 0x000000019277dcc2, 0x0000000124efb985,
2404 0x0000000049df730b, 0x0000000093bee616, 0x00000001277dcc2c,
2405 0x000000004efb9859, 0x000000009df730b2, 0x000000013bee6164,
2406 0x0000000077dcc2c9, 0x00000000efb98592, 0x00000001df730b24,
2407 0x00000001bee61649, 0x000000017dcc2c93, 0x00000000fb985927
2410static const uint64_t CG_group1_31L[31] = {
2411 0x85447b3400000000, 0xa88f66a00000000, 0x1511ecd400000000,
2412 0x2a23d9a800000000, 0x5447b35000000000, 0xa88f66a000000000,
2413 0x511ecd4200000000, 0xa23d9a8400000000, 0x447b350a00000000,
2414 0x88f66a1400000000, 0x11ecd42a00000000, 0x23d9a85400000000,
2415 0x47b350a800000000, 0x8f66a15000000000, 0x1ecd42a200000000,
2416 0x3d9a854400000000, 0x7b350a8800000000, 0xf66a151000000000,
2417 0xecd42a2200000000, 0xd9a8544600000000, 0xb350a88e00000000,
2418 0x66a1511e00000000, 0xcd42a23c00000000, 0x9a85447a00000000,
2419 0x350a88f600000000, 0x6a1511ec00000000, 0xd42a23d800000000,
2420 0xa85447b200000000, 0x50a88f6600000000, 0xa1511ecc00000000,
2425static const uint64_t CG_group2_33R[33] = {
2426 0x00000000e67bf290, 0x00000001ccf7e520, 0x0000000199efca41,
2427 0x0000000133df9483, 0x0000000067bf2907, 0x00000000cf7e520e,
2428 0x000000019efca41c, 0x000000013df94839, 0x000000007bf29073,
2429 0x00000000f7e520e6, 0x00000001efca41cc, 0x00000001df948399,
2430 0x00000001bf290733, 0x000000017e520e67, 0x00000000fca41ccf,
2431 0x00000001f948399e, 0x00000001f290733d, 0x00000001e520e67b,
2432 0x00000001ca41ccf7, 0x00000001948399ef, 0x00000001290733df,
2433 0x00000000520e67bf, 0x00000000a41ccf7e, 0x0000000148399efc,
2434 0x0000000090733df9, 0x0000000120e67bf2, 0x0000000041ccf7e5,
2435 0x000000008399efca, 0x000000010733df94, 0x000000000e67bf29,
2436 0x000000001ccf7e52, 0x00000000399efca4, 0x00000000733df948
2439static const uint64_t CG_group2_31L[31] = {
2440 0x1e7ec42a00000000, 0x3cfd885400000000, 0x79fb10a800000000,
2441 0xf3f6215000000000, 0xe7ec42a200000000, 0xcfd8854600000000,
2442 0x9fb10a8e00000000, 0x3f62151e00000000, 0x7ec42a3c00000000,
2443 0xfd88547800000000, 0xfb10a8f200000000, 0xf62151e600000000,
2444 0xec42a3ce00000000, 0xd885479e00000000, 0xb10a8f3e00000000,
2445 0x62151e7e00000000, 0xc42a3cfc00000000, 0x885479fa00000000,
2446 0x10a8f3f600000000, 0x2151e7ec00000000, 0x42a3cfd800000000,
2447 0x85479fb000000000, 0xa8f3f6200000000, 0x151e7ec400000000,
2448 0x2a3cfd8800000000, 0x5479fb1000000000, 0xa8f3f62000000000,
2449 0x51e7ec4200000000, 0xa3cfd88400000000, 0x479fb10a00000000,
2454static const uint64_t CG_group3_33R[33] = {
2455 0x0000000124612363, 0x0000000048c246c7, 0x0000000091848d8e,
2456 0x0000000123091b1c, 0x0000000046123639, 0x000000008c246c72,
2457 0x000000011848d8e4, 0x000000003091b1c9, 0x0000000061236392,
2458 0x00000000c246c724, 0x00000001848d8e48, 0x00000001091b1c91,
2459 0x0000000012363923, 0x00000000246c7246, 0x0000000048d8e48c,
2460 0x0000000091b1c918, 0x0000000123639230, 0x0000000046c72461,
2461 0x000000008d8e48c2, 0x000000011b1c9184, 0x0000000036392309,
2462 0x000000006c724612, 0x00000000d8e48c24, 0x00000001b1c91848,
2463 0x0000000163923091, 0x00000000c7246123, 0x000000018e48c246,
2464 0x000000011c91848d, 0x000000003923091b, 0x0000000072461236,
2465 0x00000000e48c246c, 0x00000001c91848d8, 0x00000001923091b1
2468static const uint64_t CG_group3_31L[31] = {
2469 0xe630f41400000000, 0xcc61e82a00000000, 0x98c3d05600000000,
2470 0x3187a0ae00000000, 0x630f415c00000000, 0xc61e82b800000000,
2471 0x8c3d057200000000, 0x187a0ae600000000, 0x30f415cc00000000,
2472 0x61e82b9800000000, 0xc3d0573000000000, 0x87a0ae6200000000,
2473 0xf415cc600000000, 0x1e82b98c00000000, 0x3d05731800000000,
2474 0x7a0ae63000000000, 0xf415cc6000000000, 0xe82b98c200000000,
2475 0xd057318600000000, 0xa0ae630e00000000, 0x415cc61e00000000,
2476 0x82b98c3c00000000, 0x573187a00000000, 0xae630f400000000,
2477 0x15cc61e800000000, 0x2b98c3d000000000, 0x573187a000000000,
2478 0xae630f4000000000, 0x5cc61e8200000000, 0xb98c3d0400000000,
2483static const uint64_t CG_group4_33R[33] = {
2484 0x000000012e4a1a40, 0x000000005c943481, 0x00000000b9286902,
2485 0x000000017250d204, 0x00000000e4a1a409, 0x00000001c9434812,
2486 0x0000000192869025, 0x00000001250d204b, 0x000000004a1a4097,
2487 0x000000009434812e, 0x000000012869025c, 0x0000000050d204b9,
2488 0x00000000a1a40972, 0x00000001434812e4, 0x00000000869025c9,
2489 0x000000010d204b92, 0x000000001a409725, 0x0000000034812e4a,
2490 0x0000000069025c94, 0x00000000d204b928, 0x00000001a4097250,
2491 0x000000014812e4a1, 0x000000009025c943, 0x00000001204b9286,
2492 0x000000004097250d, 0x00000000812e4a1a, 0x00000001025c9434,
2493 0x0000000004b92869, 0x00000000097250d2, 0x0000000012e4a1a4,
2494 0x0000000025c94348, 0x000000004b928690, 0x0000000097250d20
2497static const uint64_t CG_group4_31L[31] = {
2498 0x8917598600000000, 0x122eb30e00000000, 0x245d661c00000000,
2499 0x48bacc3800000000, 0x9175987000000000, 0x22eb30e200000000,
2500 0x45d661c400000000, 0x8bacc38800000000, 0x1759871200000000,
2501 0x2eb30e2400000000, 0x5d661c4800000000, 0xbacc389000000000,
2502 0x7598712200000000, 0xeb30e24400000000, 0xd661c48a00000000,
2503 0xacc3891600000000, 0x5987122e00000000, 0xb30e245c00000000,
2504 0x661c48ba00000000, 0xcc38917400000000, 0x987122ea00000000,
2505 0x30e245d600000000, 0x61c48bac00000000, 0xc389175800000000,
2506 0x87122eb200000000, 0xe245d6600000000, 0x1c48bacc00000000,
2507 0x3891759800000000, 0x7122eb3000000000, 0xe245d66000000000,
2512static const uint64_t CG_group5_33R[33] = {
2513 0x00000001b4781d1b, 0x0000000168f03a37, 0x00000000d1e0746f,
2514 0x00000001a3c0e8de, 0x000000014781d1bd, 0x000000008f03a37b,
2515 0x000000011e0746f6, 0x000000003c0e8ded, 0x00000000781d1bda,
2516 0x00000000f03a37b4, 0x00000001e0746f68, 0x00000001c0e8ded1,
2517 0x0000000181d1bda3, 0x0000000103a37b47, 0x000000000746f68f,
2518 0x000000000e8ded1e, 0x000000001d1bda3c, 0x000000003a37b478,
2519 0x00000000746f68f0, 0x00000000e8ded1e0, 0x00000001d1bda3c0,
2520 0x00000001a37b4781, 0x0000000146f68f03, 0x000000008ded1e07,
2521 0x000000011bda3c0e, 0x0000000037b4781d, 0x000000006f68f03a,
2522 0x00000000ded1e074, 0x00000001bda3c0e8, 0x000000017b4781d1,
2523 0x00000000f68f03a3, 0x00000001ed1e0746, 0x00000001da3c0e8d
2526static const uint64_t CG_group5_31L[31] = {
2527 0x10a9d12400000000, 0x2153a24800000000, 0x42a7449000000000,
2528 0x854e892000000000, 0xa9d124200000000, 0x153a248400000000,
2529 0x2a74490800000000, 0x54e8921000000000, 0xa9d1242000000000,
2530 0x53a2484200000000, 0xa744908400000000, 0x4e89210a00000000,
2531 0x9d12421400000000, 0x3a24842a00000000, 0x7449085400000000,
2532 0xe89210a800000000, 0xd124215200000000, 0xa24842a600000000,
2533 0x4490854e00000000, 0x89210a9c00000000, 0x1242153a00000000,
2534 0x24842a7400000000, 0x490854e800000000, 0x9210a9d000000000,
2535 0x242153a200000000, 0x4842a74400000000, 0x90854e8800000000,
2536 0x210a9d1200000000, 0x42153a2400000000, 0x842a744800000000,
2541static const uint64_t CG_group6_33R[33] = {
2542 0x000000000b3efe26, 0x00000000167dfc4c, 0x000000002cfbf898,
2543 0x0000000059f7f130, 0x00000000b3efe260, 0x0000000167dfc4c0,
2544 0x00000000cfbf8981, 0x000000019f7f1302, 0x000000013efe2605,
2545 0x000000007dfc4c0b, 0x00000000fbf89816, 0x00000001f7f1302c,
2546 0x00000001efe26059, 0x00000001dfc4c0b3, 0x00000001bf898167,
2547 0x000000017f1302cf, 0x00000000fe26059f, 0x00000001fc4c0b3e,
2548 0x00000001f898167d, 0x00000001f1302cfb, 0x00000001e26059f7,
2549 0x00000001c4c0b3ef, 0x00000001898167df, 0x000000011302cfbf,
2550 0x0000000026059f7f, 0x000000004c0b3efe, 0x0000000098167dfc,
2551 0x00000001302cfbf8, 0x000000006059f7f1, 0x00000000c0b3efe2,
2552 0x000000018167dfc4, 0x0000000102cfbf89, 0x00000000059f7f13
2555static const uint64_t CG_group6_31L[31] = {
2556 0xe345fa6e00000000, 0xc68bf4de00000000, 0x8d17e9be00000000,
2557 0x1a2fd37e00000000, 0x345fa6fc00000000, 0x68bf4df800000000,
2558 0xd17e9bf000000000, 0xa2fd37e200000000, 0x45fa6fc600000000,
2559 0x8bf4df8c00000000, 0x17e9bf1a00000000, 0x2fd37e3400000000,
2560 0x5fa6fc6800000000, 0xbf4df8d000000000, 0x7e9bf1a200000000,
2561 0xfd37e34400000000, 0xfa6fc68a00000000, 0xf4df8d1600000000,
2562 0xe9bf1a2e00000000, 0xd37e345e00000000, 0xa6fc68be00000000,
2563 0x4df8d17e00000000, 0x9bf1a2fc00000000, 0x37e345fa00000000,
2564 0x6fc68bf400000000, 0xdf8d17e800000000, 0xbf1a2fd200000000,
2565 0x7e345fa600000000, 0xfc68bf4c00000000, 0xf8d17e9a00000000,
2570static const uint64_t CG_group7_33R[33] = {
2571 0x000000017795d703, 0x00000000ef2bae07, 0x00000001de575c0e,
2572 0x00000001bcaeb81d, 0x00000001795d703b, 0x00000000f2bae077,
2573 0x00000001e575c0ee, 0x00000001caeb81dd, 0x0000000195d703bb,
2574 0x000000012bae0777, 0x00000000575c0eef, 0x00000000aeb81dde,
2575 0x000000015d703bbc, 0x00000000bae07779, 0x0000000175c0eef2,
2576 0x00000000eb81dde5, 0x00000001d703bbca, 0x00000001ae077795,
2577 0x000000015c0eef2b, 0x00000000b81dde57, 0x00000001703bbcae,
2578 0x00000000e077795d, 0x00000001c0eef2ba, 0x0000000181dde575,
2579 0x0000000103bbcaeb, 0x00000000077795d7, 0x000000000eef2bae,
2580 0x000000001dde575c, 0x000000003bbcaeb8, 0x0000000077795d70,
2581 0x00000000eef2bae0, 0x00000001dde575c0, 0x00000001bbcaeb81
2584static const uint64_t CG_group7_31L[31] = {
2585 0xed73b07c00000000, 0xdae760fa00000000, 0xb5cec1f600000000,
2586 0x6b9d83ee00000000, 0xd73b07dc00000000, 0xae760fba00000000,
2587 0x5cec1f7600000000, 0xb9d83eec00000000, 0x73b07dda00000000,
2588 0xe760fbb400000000, 0xcec1f76a00000000, 0x9d83eed600000000,
2589 0x3b07ddae00000000, 0x760fbb5c00000000, 0xec1f76b800000000,
2590 0xd83eed7200000000, 0xb07ddae600000000, 0x60fbb5ce00000000,
2591 0xc1f76b9c00000000, 0x83eed73a00000000, 0x7ddae7600000000,
2592 0xfbb5cec00000000, 0x1f76b9d800000000, 0x3eed73b000000000,
2593 0x7ddae76000000000, 0xfbb5cec000000000, 0xf76b9d8200000000,
2594 0xeed73b0600000000, 0xddae760e00000000, 0xbb5cec1e00000000,
2599static const uint64_t CG_group8_33R[33] = {
2600 0x0000000187ddc030, 0x000000010fbb8061, 0x000000001f7700c3,
2601 0x000000003eee0186, 0x000000007ddc030c, 0x00000000fbb80618,
2602 0x00000001f7700c30, 0x00000001eee01861, 0x00000001ddc030c3,
2603 0x00000001bb806187, 0x000000017700c30f, 0x00000000ee01861f,
2604 0x00000001dc030c3e, 0x00000001b806187d, 0x00000001700c30fb,
2605 0x00000000e01861f7, 0x00000001c030c3ee, 0x00000001806187dd,
2606 0x0000000100c30fbb, 0x0000000001861f77, 0x00000000030c3eee,
2607 0x0000000006187ddc, 0x000000000c30fbb8, 0x000000001861f770,
2608 0x0000000030c3eee0, 0x000000006187ddc0, 0x00000000c30fbb80,
2609 0x00000001861f7700, 0x000000010c3eee01, 0x00000000187ddc03,
2610 0x0000000030fbb806, 0x0000000061f7700c, 0x00000000c3eee018
2613static const uint64_t CG_group8_31L[31] = {
2614 0xc05a70c600000000, 0x80b4e18e00000000, 0x169c31e00000000,
2615 0x2d3863c00000000, 0x5a70c7800000000, 0xb4e18f000000000,
2616 0x169c31e000000000, 0x2d3863c000000000, 0x5a70c78000000000,
2617 0xb4e18f0000000000, 0x69c31e0200000000, 0xd3863c0400000000,
2618 0xa70c780a00000000, 0x4e18f01600000000, 0x9c31e02c00000000,
2619 0x3863c05a00000000, 0x70c780b400000000, 0xe18f016800000000,
2620 0xc31e02d200000000, 0x863c05a600000000, 0xc780b4e00000000,
2621 0x18f0169c00000000, 0x31e02d3800000000, 0x63c05a7000000000,
2622 0xc780b4e000000000, 0x8f0169c200000000, 0x1e02d38600000000,
2623 0x3c05a70c00000000, 0x780b4e1800000000, 0xf0169c3000000000,
2628static const uint64_t CG_group9_33R[33] = {
2629 0x000000015f69e07d, 0x00000000bed3c0fb, 0x000000017da781f6,
2630 0x00000000fb4f03ed, 0x00000001f69e07da, 0x00000001ed3c0fb5,
2631 0x00000001da781f6b, 0x00000001b4f03ed7, 0x0000000169e07daf,
2632 0x00000000d3c0fb5f, 0x00000001a781f6be, 0x000000014f03ed7d,
2633 0x000000009e07dafb, 0x000000013c0fb5f6, 0x00000000781f6bed,
2634 0x00000000f03ed7da, 0x00000001e07dafb4, 0x00000001c0fb5f69,
2635 0x0000000181f6bed3, 0x0000000103ed7da7, 0x0000000007dafb4f,
2636 0x000000000fb5f69e, 0x000000001f6bed3c, 0x000000003ed7da78,
2637 0x000000007dafb4f0, 0x00000000fb5f69e0, 0x00000001f6bed3c0,
2638 0x00000001ed7da781, 0x00000001dafb4f03, 0x00000001b5f69e07,
2639 0x000000016bed3c0f, 0x00000000d7da781f, 0x00000001afb4f03e
2642static const uint64_t CG_group9_31L[31] = {
2643 0xb3e7ea1c00000000, 0x67cfd43a00000000, 0xcf9fa87400000000,
2644 0x9f3f50ea00000000, 0x3e7ea1d600000000, 0x7cfd43ac00000000,
2645 0xf9fa875800000000, 0xf3f50eb200000000, 0xe7ea1d6600000000,
2646 0xcfd43ace00000000, 0x9fa8759e00000000, 0x3f50eb3e00000000,
2647 0x7ea1d67c00000000, 0xfd43acf800000000, 0xfa8759f200000000,
2648 0xf50eb3e600000000, 0xea1d67ce00000000, 0xd43acf9e00000000,
2649 0xa8759f3e00000000, 0x50eb3e7e00000000, 0xa1d67cfc00000000,
2650 0x43acf9fa00000000, 0x8759f3f400000000, 0xeb3e7ea00000000,
2651 0x1d67cfd400000000, 0x3acf9fa800000000, 0x759f3f5000000000,
2652 0xeb3e7ea000000000, 0xd67cfd4200000000, 0xacf9fa8600000000,
2657static const uint64_t CT_group1_33R[33] = {
2658 0x000000009c215294, 0x000000013842a528, 0x0000000070854a51,
2659 0x00000000e10a94a2, 0x00000001c2152944, 0x00000001842a5289,
2660 0x000000010854a513, 0x0000000010a94a27, 0x000000002152944e,
2661 0x0000000042a5289c, 0x00000000854a5138, 0x000000010a94a270,
2662 0x00000000152944e1, 0x000000002a5289c2, 0x0000000054a51384,
2663 0x00000000a94a2708, 0x0000000152944e10, 0x00000000a5289c21,
2664 0x000000014a513842, 0x0000000094a27085, 0x000000012944e10a,
2665 0x000000005289c215, 0x00000000a513842a, 0x000000014a270854,
2666 0x00000000944e10a9, 0x00000001289c2152, 0x00000000513842a5,
2667 0x00000000a270854a, 0x0000000144e10a94, 0x0000000089c21529,
2668 0x0000000113842a52, 0x00000000270854a5, 0x000000004e10a94a
2671static const uint64_t CT_group1_31L[31] = {
2672 0x385ed26800000000, 0x70bda4d000000000, 0xe17b49a000000000,
2673 0xc2f6934200000000, 0x85ed268600000000, 0xbda4d0e00000000,
2674 0x17b49a1c00000000, 0x2f69343800000000, 0x5ed2687000000000,
2675 0xbda4d0e000000000, 0x7b49a1c200000000, 0xf693438400000000,
2676 0xed26870a00000000, 0xda4d0e1600000000, 0xb49a1c2e00000000,
2677 0x6934385e00000000, 0xd26870bc00000000, 0xa4d0e17a00000000,
2678 0x49a1c2f600000000, 0x934385ec00000000, 0x26870bda00000000,
2679 0x4d0e17b400000000, 0x9a1c2f6800000000, 0x34385ed200000000,
2680 0x6870bda400000000, 0xd0e17b4800000000, 0xa1c2f69200000000,
2681 0x4385ed2600000000, 0x870bda4c00000000, 0xe17b49a00000000,
2686static const uint64_t CT_group2_33R[33] = {
2687 0x00000001383a421e, 0x000000007074843d, 0x00000000e0e9087a,
2688 0x00000001c1d210f4, 0x0000000183a421e9, 0x00000001074843d3,
2689 0x000000000e9087a7, 0x000000001d210f4e, 0x000000003a421e9c,
2690 0x0000000074843d38, 0x00000000e9087a70, 0x00000001d210f4e0,
2691 0x00000001a421e9c1, 0x000000014843d383, 0x000000009087a707,
2692 0x00000001210f4e0e, 0x00000000421e9c1d, 0x00000000843d383a,
2693 0x00000001087a7074, 0x0000000010f4e0e9, 0x0000000021e9c1d2,
2694 0x0000000043d383a4, 0x0000000087a70748, 0x000000010f4e0e90,
2695 0x000000001e9c1d21, 0x000000003d383a42, 0x000000007a707484,
2696 0x00000000f4e0e908, 0x00000001e9c1d210, 0x00000001d383a421,
2697 0x00000001a7074843, 0x000000014e0e9087, 0x000000009c1d210f
2700static const uint64_t CT_group2_31L[31] = {
2701 0x5997dfaa00000000, 0xb32fbf5400000000, 0x665f7eaa00000000,
2702 0xccbefd5400000000, 0x997dfaaa00000000, 0x32fbf55600000000,
2703 0x65f7eaac00000000, 0xcbefd55800000000, 0x97dfaab200000000,
2704 0x2fbf556600000000, 0x5f7eaacc00000000, 0xbefd559800000000,
2705 0x7dfaab3200000000, 0xfbf5566400000000, 0xf7eaacca00000000,
2706 0xefd5599600000000, 0xdfaab32e00000000, 0xbf55665e00000000,
2707 0x7eaaccbe00000000, 0xfd55997c00000000, 0xfaab32fa00000000,
2708 0xf55665f600000000, 0xeaaccbee00000000, 0xd55997de00000000,
2709 0xaab32fbe00000000, 0x55665f7e00000000, 0xaaccbefc00000000,
2710 0x55997dfa00000000, 0xab32fbf400000000, 0x5665f7ea00000000,
2715static const uint64_t CT_group3_33R[33] = {
2716 0x000000016c643607, 0x00000000d8c86c0f, 0x00000001b190d81e,
2717 0x000000016321b03d, 0x00000000c643607b, 0x000000018c86c0f6,
2718 0x00000001190d81ed, 0x00000000321b03db, 0x00000000643607b6,
2719 0x00000000c86c0f6c, 0x0000000190d81ed8, 0x0000000121b03db1,
2720 0x0000000043607b63, 0x0000000086c0f6c6, 0x000000010d81ed8c,
2721 0x000000001b03db19, 0x000000003607b632, 0x000000006c0f6c64,
2722 0x00000000d81ed8c8, 0x00000001b03db190, 0x00000001607b6321,
2723 0x00000000c0f6c643, 0x0000000181ed8c86, 0x0000000103db190d,
2724 0x0000000007b6321b, 0x000000000f6c6436, 0x000000001ed8c86c,
2725 0x000000003db190d8, 0x000000007b6321b0, 0x00000000f6c64360,
2726 0x00000001ed8c86c0, 0x00000001db190d81, 0x00000001b6321b03
2729static const uint64_t CT_group3_31L[31] = {
2730 0x2c62c05000000000, 0x58c580a000000000, 0xb18b014000000000,
2731 0x6316028200000000, 0xc62c050400000000, 0x8c580a0a00000000,
2732 0x18b0141600000000, 0x3160282c00000000, 0x62c0505800000000,
2733 0xc580a0b000000000, 0x8b01416200000000, 0x160282c600000000,
2734 0x2c05058c00000000, 0x580a0b1800000000, 0xb014163000000000,
2735 0x60282c6200000000, 0xc05058c400000000, 0x80a0b18a00000000,
2736 0x141631600000000, 0x282c62c00000000, 0x5058c5800000000,
2737 0xa0b18b000000000, 0x1416316000000000, 0x282c62c000000000,
2738 0x5058c58000000000, 0xa0b18b0000000000, 0x4163160200000000,
2739 0x82c62c0400000000, 0x58c580a00000000, 0xb18b01400000000,
2744static const uint64_t CT_group4_33R[33] = {
2745 0x000000012af12d90, 0x0000000055e25b21, 0x00000000abc4b642,
2746 0x0000000157896c84, 0x00000000af12d909, 0x000000015e25b212,
2747 0x00000000bc4b6425, 0x000000017896c84a, 0x00000000f12d9095,
2748 0x00000001e25b212a, 0x00000001c4b64255, 0x00000001896c84ab,
2749 0x0000000112d90957, 0x0000000025b212af, 0x000000004b64255e,
2750 0x0000000096c84abc, 0x000000012d909578, 0x000000005b212af1,
2751 0x00000000b64255e2, 0x000000016c84abc4, 0x00000000d9095789,
2752 0x00000001b212af12, 0x0000000164255e25, 0x00000000c84abc4b,
2753 0x0000000190957896, 0x00000001212af12d, 0x000000004255e25b,
2754 0x0000000084abc4b6, 0x000000010957896c, 0x0000000012af12d9,
2755 0x00000000255e25b2, 0x000000004abc4b64, 0x00000000957896c8
2758static const uint64_t CT_group4_31L[31] = {
2759 0x5186a5a800000000, 0xa30d4b5000000000, 0x461a96a200000000,
2760 0x8c352d4400000000, 0x186a5a8a00000000, 0x30d4b51400000000,
2761 0x61a96a2800000000, 0xc352d45000000000, 0x86a5a8a200000000,
2762 0xd4b514600000000, 0x1a96a28c00000000, 0x352d451800000000,
2763 0x6a5a8a3000000000, 0xd4b5146000000000, 0xa96a28c200000000,
2764 0x52d4518600000000, 0xa5a8a30c00000000, 0x4b51461a00000000,
2765 0x96a28c3400000000, 0x2d45186a00000000, 0x5a8a30d400000000,
2766 0xb51461a800000000, 0x6a28c35200000000, 0xd45186a400000000,
2767 0xa8a30d4a00000000, 0x51461a9600000000, 0xa28c352c00000000,
2768 0x45186a5a00000000, 0x8a30d4b400000000, 0x1461a96a00000000,
2773static const uint64_t CT_group5_33R[33] = {
2774 0x0000000105426fbe, 0x000000000a84df7d, 0x000000001509befa,
2775 0x000000002a137df4, 0x000000005426fbe8, 0x00000000a84df7d0,
2776 0x00000001509befa0, 0x00000000a137df41, 0x00000001426fbe82,
2777 0x0000000084df7d05, 0x0000000109befa0a, 0x00000000137df415,
2778 0x0000000026fbe82a, 0x000000004df7d054, 0x000000009befa0a8,
2779 0x0000000137df4150, 0x000000006fbe82a1, 0x00000000df7d0542,
2780 0x00000001befa0a84, 0x000000017df41509, 0x00000000fbe82a13,
2781 0x00000001f7d05426, 0x00000001efa0a84d, 0x00000001df41509b,
2782 0x00000001be82a137, 0x000000017d05426f, 0x00000000fa0a84df,
2783 0x00000001f41509be, 0x00000001e82a137d, 0x00000001d05426fb,
2784 0x00000001a0a84df7, 0x0000000141509bef, 0x0000000082a137df
2787static const uint64_t CT_group5_31L[31] = {
2788 0x34fd2f6200000000, 0x69fa5ec400000000, 0xd3f4bd8800000000,
2789 0xa7e97b1200000000, 0x4fd2f62600000000, 0x9fa5ec4c00000000,
2790 0x3f4bd89a00000000, 0x7e97b13400000000, 0xfd2f626800000000,
2791 0xfa5ec4d200000000, 0xf4bd89a600000000, 0xe97b134e00000000,
2792 0xd2f6269e00000000, 0xa5ec4d3e00000000, 0x4bd89a7e00000000,
2793 0x97b134fc00000000, 0x2f6269fa00000000, 0x5ec4d3f400000000,
2794 0xbd89a7e800000000, 0x7b134fd200000000, 0xf6269fa400000000,
2795 0xec4d3f4a00000000, 0xd89a7e9600000000, 0xb134fd2e00000000,
2796 0x6269fa5e00000000, 0xc4d3f4bc00000000, 0x89a7e97a00000000,
2797 0x134fd2f600000000, 0x269fa5ec00000000, 0x4d3f4bd800000000,
2802static const uint64_t CT_group6_33R[33] = {
2803 0x000000001e12f0f6, 0x000000003c25e1ec, 0x00000000784bc3d8,
2804 0x00000000f09787b0, 0x00000001e12f0f60, 0x00000001c25e1ec1,
2805 0x0000000184bc3d83, 0x0000000109787b07, 0x0000000012f0f60f,
2806 0x0000000025e1ec1e, 0x000000004bc3d83c, 0x000000009787b078,
2807 0x000000012f0f60f0, 0x000000005e1ec1e1, 0x00000000bc3d83c2,
2808 0x00000001787b0784, 0x00000000f0f60f09, 0x00000001e1ec1e12,
2809 0x00000001c3d83c25, 0x0000000187b0784b, 0x000000010f60f097,
2810 0x000000001ec1e12f, 0x000000003d83c25e, 0x000000007b0784bc,
2811 0x00000000f60f0978, 0x00000001ec1e12f0, 0x00000001d83c25e1,
2812 0x00000001b0784bc3, 0x0000000160f09787, 0x00000000c1e12f0f,
2813 0x0000000183c25e1e, 0x000000010784bc3d, 0x000000000f09787b
2816static const uint64_t CT_group6_31L[31] = {
2817 0xfd1fccb200000000, 0xfa3f996600000000, 0xf47f32ce00000000,
2818 0xe8fe659e00000000, 0xd1fccb3e00000000, 0xa3f9967e00000000,
2819 0x47f32cfe00000000, 0x8fe659fc00000000, 0x1fccb3fa00000000,
2820 0x3f9967f400000000, 0x7f32cfe800000000, 0xfe659fd000000000,
2821 0xfccb3fa200000000, 0xf9967f4600000000, 0xf32cfe8e00000000,
2822 0xe659fd1e00000000, 0xccb3fa3e00000000, 0x9967f47e00000000,
2823 0x32cfe8fe00000000, 0x659fd1fc00000000, 0xcb3fa3f800000000,
2824 0x967f47f200000000, 0x2cfe8fe600000000, 0x59fd1fcc00000000,
2825 0xb3fa3f9800000000, 0x67f47f3200000000, 0xcfe8fe6400000000,
2826 0x9fd1fcca00000000, 0x3fa3f99600000000, 0x7f47f32c00000000,
2831static const uint64_t CT_group7_33R[33] = {
2832 0x000000018d22c3a7, 0x000000011a45874f, 0x00000000348b0e9f,
2833 0x0000000069161d3e, 0x00000000d22c3a7c, 0x00000001a45874f8,
2834 0x0000000148b0e9f1, 0x000000009161d3e3, 0x0000000122c3a7c6,
2835 0x0000000045874f8d, 0x000000008b0e9f1a, 0x00000001161d3e34,
2836 0x000000002c3a7c69, 0x000000005874f8d2, 0x00000000b0e9f1a4,
2837 0x0000000161d3e348, 0x00000000c3a7c691, 0x00000001874f8d22,
2838 0x000000010e9f1a45, 0x000000001d3e348b, 0x000000003a7c6916,
2839 0x0000000074f8d22c, 0x00000000e9f1a458, 0x00000001d3e348b0,
2840 0x00000001a7c69161, 0x000000014f8d22c3, 0x000000009f1a4587,
2841 0x000000013e348b0e, 0x000000007c69161d, 0x00000000f8d22c3a,
2842 0x00000001f1a45874, 0x00000001e348b0e9, 0x00000001c69161d3
2845static const uint64_t CT_group7_31L[31] = {
2846 0xde1be16400000000, 0xbc37c2ca00000000, 0x786f859600000000,
2847 0xf0df0b2c00000000, 0xe1be165a00000000, 0xc37c2cb600000000,
2848 0x86f8596e00000000, 0xdf0b2de00000000, 0x1be165bc00000000,
2849 0x37c2cb7800000000, 0x6f8596f000000000, 0xdf0b2de000000000,
2850 0xbe165bc200000000, 0x7c2cb78600000000, 0xf8596f0c00000000,
2851 0xf0b2de1a00000000, 0xe165bc3600000000, 0xc2cb786e00000000,
2852 0x8596f0de00000000, 0xb2de1be00000000, 0x165bc37c00000000,
2853 0x2cb786f800000000, 0x596f0df000000000, 0xb2de1be000000000,
2854 0x65bc37c200000000, 0xcb786f8400000000, 0x96f0df0a00000000,
2855 0x2de1be1600000000, 0x5bc37c2c00000000, 0xb786f85800000000,
2860static const uint64_t CT_group8_33R[33] = {
2861 0x00000001a878cd6c, 0x0000000150f19ad9, 0x00000000a1e335b3,
2862 0x0000000143c66b66, 0x00000000878cd6cd, 0x000000010f19ad9a,
2863 0x000000001e335b35, 0x000000003c66b66a, 0x0000000078cd6cd4,
2864 0x00000000f19ad9a8, 0x00000001e335b350, 0x00000001c66b66a1,
2865 0x000000018cd6cd43, 0x0000000119ad9a87, 0x00000000335b350f,
2866 0x0000000066b66a1e, 0x00000000cd6cd43c, 0x000000019ad9a878,
2867 0x0000000135b350f1, 0x000000006b66a1e3, 0x00000000d6cd43c6,
2868 0x00000001ad9a878c, 0x000000015b350f19, 0x00000000b66a1e33,
2869 0x000000016cd43c66, 0x00000000d9a878cd, 0x00000001b350f19a,
2870 0x0000000166a1e335, 0x00000000cd43c66b, 0x000000019a878cd6,
2871 0x00000001350f19ad, 0x000000006a1e335b, 0x00000000d43c66b6
2874static const uint64_t CT_group8_31L[31] = {
2875 0x669139b400000000, 0xcd22736800000000, 0x9a44e6d200000000,
2876 0x3489cda600000000, 0x69139b4c00000000, 0xd227369800000000,
2877 0xa44e6d3200000000, 0x489cda6600000000, 0x9139b4cc00000000,
2878 0x2273699a00000000, 0x44e6d33400000000, 0x89cda66800000000,
2879 0x139b4cd200000000, 0x273699a400000000, 0x4e6d334800000000,
2880 0x9cda669000000000, 0x39b4cd2200000000, 0x73699a4400000000,
2881 0xe6d3348800000000, 0xcda6691200000000, 0x9b4cd22600000000,
2882 0x3699a44e00000000, 0x6d33489c00000000, 0xda66913800000000,
2883 0xb4cd227200000000, 0x699a44e600000000, 0xd33489cc00000000,
2884 0xa669139a00000000, 0x4cd2273600000000, 0x99a44e6c00000000,
2889static const uint64_t CT_group9_33R[33] = {
2890 0x0000000112bacedc, 0x0000000025759db9, 0x000000004aeb3b72,
2891 0x0000000095d676e4, 0x000000012bacedc8, 0x000000005759db91,
2892 0x00000000aeb3b722, 0x000000015d676e44, 0x00000000bacedc89,
2893 0x00000001759db912, 0x00000000eb3b7225, 0x00000001d676e44a,
2894 0x00000001acedc895, 0x0000000159db912b, 0x00000000b3b72257,
2895 0x00000001676e44ae, 0x00000000cedc895d, 0x000000019db912ba,
2896 0x000000013b722575, 0x0000000076e44aeb, 0x00000000edc895d6,
2897 0x00000001db912bac, 0x00000001b7225759, 0x000000016e44aeb3,
2898 0x00000000dc895d67, 0x00000001b912bace, 0x000000017225759d,
2899 0x00000000e44aeb3b, 0x00000001c895d676, 0x00000001912baced,
2900 0x00000001225759db, 0x0000000044aeb3b7, 0x00000000895d676e
2903static const uint64_t CT_group9_31L[31] = {
2904 0x36f4413e00000000, 0x6de8827c00000000, 0xdbd104f800000000,
2905 0xb7a209f200000000, 0x6f4413e600000000, 0xde8827cc00000000,
2906 0xbd104f9a00000000, 0x7a209f3600000000, 0xf4413e6c00000000,
2907 0xe8827cda00000000, 0xd104f9b600000000, 0xa209f36e00000000,
2908 0x4413e6de00000000, 0x8827cdbc00000000, 0x104f9b7a00000000,
2909 0x209f36f400000000, 0x413e6de800000000, 0x827cdbd000000000,
2910 0x4f9b7a200000000, 0x9f36f4400000000, 0x13e6de8800000000,
2911 0x27cdbd1000000000, 0x4f9b7a2000000000, 0x9f36f44000000000,
2912 0x3e6de88200000000, 0x7cdbd10400000000, 0xf9b7a20800000000,
2913 0xf36f441200000000, 0xe6de882600000000, 0xcdbd104e00000000,
2918static const uint64_t CA_group1_33R[33] = {
2919 0x0000000045391840, 0x000000008a723080, 0x0000000114e46100,
2920 0x0000000029c8c201, 0x0000000053918402, 0x00000000a7230804,
2921 0x000000014e461008, 0x000000009c8c2011, 0x0000000139184022,
2922 0x0000000072308045, 0x00000000e461008a, 0x00000001c8c20114,
2923 0x0000000191840229, 0x0000000123080453, 0x00000000461008a7,
2924 0x000000008c20114e, 0x000000011840229c, 0x0000000030804539,
2925 0x0000000061008a72, 0x00000000c20114e4, 0x00000001840229c8,
2926 0x0000000108045391, 0x000000001008a723, 0x0000000020114e46,
2927 0x0000000040229c8c, 0x0000000080453918, 0x00000001008a7230,
2928 0x000000000114e461, 0x000000000229c8c2, 0x0000000004539184,
2929 0x0000000008a72308, 0x00000000114e4610, 0x00000000229c8c20
2932static const uint64_t CA_group1_31L[31] = {
2933 0xd2e69a6200000000, 0xa5cd34c600000000, 0x4b9a698e00000000,
2934 0x9734d31c00000000, 0x2e69a63a00000000, 0x5cd34c7400000000,
2935 0xb9a698e800000000, 0x734d31d200000000, 0xe69a63a400000000,
2936 0xcd34c74a00000000, 0x9a698e9600000000, 0x34d31d2e00000000,
2937 0x69a63a5c00000000, 0xd34c74b800000000, 0xa698e97200000000,
2938 0x4d31d2e600000000, 0x9a63a5cc00000000, 0x34c74b9a00000000,
2939 0x698e973400000000, 0xd31d2e6800000000, 0xa63a5cd200000000,
2940 0x4c74b9a600000000, 0x98e9734c00000000, 0x31d2e69a00000000,
2941 0x63a5cd3400000000, 0xc74b9a6800000000, 0x8e9734d200000000,
2942 0x1d2e69a600000000, 0x3a5cd34c00000000, 0x74b9a69800000000,
2947static const uint64_t CA_group2_33R[33] = {
2948 0x000000016278deaf, 0x00000000c4f1bd5f, 0x0000000189e37abe,
2949 0x0000000113c6f57d, 0x00000000278deafb, 0x000000004f1bd5f6,
2950 0x000000009e37abec, 0x000000013c6f57d8, 0x0000000078deafb1,
2951 0x00000000f1bd5f62, 0x00000001e37abec4, 0x00000001c6f57d89,
2952 0x000000018deafb13, 0x000000011bd5f627, 0x0000000037abec4f,
2953 0x000000006f57d89e, 0x00000000deafb13c, 0x00000001bd5f6278,
2954 0x000000017abec4f1, 0x00000000f57d89e3, 0x00000001eafb13c6,
2955 0x00000001d5f6278d, 0x00000001abec4f1b, 0x0000000157d89e37,
2956 0x00000000afb13c6f, 0x000000015f6278de, 0x00000000bec4f1bd,
2957 0x000000017d89e37a, 0x00000000fb13c6f5, 0x00000001f6278dea,
2958 0x00000001ec4f1bd5, 0x00000001d89e37ab, 0x00000001b13c6f57
2961static const uint64_t CA_group2_31L[31] = {
2962 0xfcdf375200000000, 0xf9be6ea600000000, 0xf37cdd4e00000000,
2963 0xe6f9ba9e00000000, 0xcdf3753e00000000, 0x9be6ea7e00000000,
2964 0x37cdd4fe00000000, 0x6f9ba9fc00000000, 0xdf3753f800000000,
2965 0xbe6ea7f200000000, 0x7cdd4fe600000000, 0xf9ba9fcc00000000,
2966 0xf3753f9a00000000, 0xe6ea7f3600000000, 0xcdd4fe6e00000000,
2967 0x9ba9fcde00000000, 0x3753f9be00000000, 0x6ea7f37c00000000,
2968 0xdd4fe6f800000000, 0xba9fcdf200000000, 0x753f9be600000000,
2969 0xea7f37cc00000000, 0xd4fe6f9a00000000, 0xa9fcdf3600000000,
2970 0x53f9be6e00000000, 0xa7f37cdc00000000, 0x4fe6f9ba00000000,
2971 0x9fcdf37400000000, 0x3f9be6ea00000000, 0x7f37cdd400000000,
2976static const uint64_t CA_group3_33R[33] = {
2977 0x00000001024fd310, 0x00000000049fa621, 0x00000000093f4c42,
2978 0x00000000127e9884, 0x0000000024fd3108, 0x0000000049fa6210,
2979 0x0000000093f4c420, 0x0000000127e98840, 0x000000004fd31081,
2980 0x000000009fa62102, 0x000000013f4c4204, 0x000000007e988409,
2981 0x00000000fd310812, 0x00000001fa621024, 0x00000001f4c42049,
2982 0x00000001e9884093, 0x00000001d3108127, 0x00000001a621024f,
2983 0x000000014c42049f, 0x000000009884093f, 0x000000013108127e,
2984 0x00000000621024fd, 0x00000000c42049fa, 0x00000001884093f4,
2985 0x00000001108127e9, 0x0000000021024fd3, 0x0000000042049fa6,
2986 0x0000000084093f4c, 0x0000000108127e98, 0x000000001024fd31,
2987 0x000000002049fa62, 0x000000004093f4c4, 0x000000008127e988
2990static const uint64_t CA_group3_31L[31] = {
2991 0x72e4656e00000000, 0xe5c8cadc00000000, 0xcb9195ba00000000,
2992 0x97232b7600000000, 0x2e4656ee00000000, 0x5c8caddc00000000,
2993 0xb9195bb800000000, 0x7232b77200000000, 0xe4656ee400000000,
2994 0xc8caddca00000000, 0x9195bb9600000000, 0x232b772e00000000,
2995 0x4656ee5c00000000, 0x8caddcb800000000, 0x195bb97200000000,
2996 0x32b772e400000000, 0x656ee5c800000000, 0xcaddcb9000000000,
2997 0x95bb972200000000, 0x2b772e4600000000, 0x56ee5c8c00000000,
2998 0xaddcb91800000000, 0x5bb9723200000000, 0xb772e46400000000,
2999 0x6ee5c8ca00000000, 0xddcb919400000000, 0xbb97232a00000000,
3000 0x772e465600000000, 0xee5c8cac00000000, 0xdcb9195a00000000,
3005static const uint64_t CA_group4_33R[33] = {
3006 0x00000000976fa1f8, 0x000000012edf43f0, 0x000000005dbe87e1,
3007 0x00000000bb7d0fc2, 0x0000000176fa1f84, 0x00000000edf43f09,
3008 0x00000001dbe87e12, 0x00000001b7d0fc25, 0x000000016fa1f84b,
3009 0x00000000df43f097, 0x00000001be87e12e, 0x000000017d0fc25d,
3010 0x00000000fa1f84bb, 0x00000001f43f0976, 0x00000001e87e12ed,
3011 0x00000001d0fc25db, 0x00000001a1f84bb7, 0x0000000143f0976f,
3012 0x0000000087e12edf, 0x000000010fc25dbe, 0x000000001f84bb7d,
3013 0x000000003f0976fa, 0x000000007e12edf4, 0x00000000fc25dbe8,
3014 0x00000001f84bb7d0, 0x00000001f0976fa1, 0x00000001e12edf43,
3015 0x00000001c25dbe87, 0x0000000184bb7d0f, 0x000000010976fa1f,
3016 0x0000000012edf43f, 0x0000000025dbe87e, 0x000000004bb7d0fc
3019static const uint64_t CA_group4_31L[31] = {
3020 0xdee651b200000000, 0xbdcca36600000000, 0x7b9946ce00000000,
3021 0xf7328d9c00000000, 0xee651b3a00000000, 0xdcca367600000000,
3022 0xb9946cee00000000, 0x7328d9de00000000, 0xe651b3bc00000000,
3023 0xcca3677a00000000, 0x9946cef600000000, 0x328d9dee00000000,
3024 0x651b3bdc00000000, 0xca3677b800000000, 0x946cef7200000000,
3025 0x28d9dee600000000, 0x51b3bdcc00000000, 0xa3677b9800000000,
3026 0x46cef73200000000, 0x8d9dee6400000000, 0x1b3bdcca00000000,
3027 0x3677b99400000000, 0x6cef732800000000, 0xd9dee65000000000,
3028 0xb3bdcca200000000, 0x677b994600000000, 0xcef7328c00000000,
3029 0x9dee651a00000000, 0x3bdcca3600000000, 0x77b9946c00000000,
3034static const uint64_t CA_group5_33R[33] = {
3035 0x00000001ec8cd8f0, 0x00000001d919b1e1, 0x00000001b23363c3,
3036 0x000000016466c787, 0x00000000c8cd8f0f, 0x00000001919b1e1e,
3037 0x0000000123363c3d, 0x00000000466c787b, 0x000000008cd8f0f6,
3038 0x0000000119b1e1ec, 0x000000003363c3d9, 0x0000000066c787b2,
3039 0x00000000cd8f0f64, 0x000000019b1e1ec8, 0x00000001363c3d91,
3040 0x000000006c787b23, 0x00000000d8f0f646, 0x00000001b1e1ec8c,
3041 0x0000000163c3d919, 0x00000000c787b233, 0x000000018f0f6466,
3042 0x000000011e1ec8cd, 0x000000003c3d919b, 0x00000000787b2336,
3043 0x00000000f0f6466c, 0x00000001e1ec8cd8, 0x00000001c3d919b1,
3044 0x0000000187b23363, 0x000000010f6466c7, 0x000000001ec8cd8f,
3045 0x000000003d919b1e, 0x000000007b23363c, 0x00000000f6466c78
3048static const uint64_t CA_group5_31L[31] = {
3049 0xf328890600000000, 0xe651120e00000000, 0xcca2241e00000000,
3050 0x9944483e00000000, 0x3288907e00000000, 0x651120fc00000000,
3051 0xca2241f800000000, 0x944483f200000000, 0x288907e600000000,
3052 0x51120fcc00000000, 0xa2241f9800000000, 0x44483f3200000000,
3053 0x88907e6400000000, 0x1120fcca00000000, 0x2241f99400000000,
3054 0x4483f32800000000, 0x8907e65000000000, 0x120fcca200000000,
3055 0x241f994400000000, 0x483f328800000000, 0x907e651000000000,
3056 0x20fcca2200000000, 0x41f9944400000000, 0x83f3288800000000,
3057 0x7e6511200000000, 0xfcca22400000000, 0x1f99444800000000,
3058 0x3f32889000000000, 0x7e65112000000000, 0xfcca224000000000,
3063static const uint64_t CA_group6_33R[33] = {
3064 0x00000000868dad85, 0x000000010d1b5b0a, 0x000000001a36b615,
3065 0x00000000346d6c2a, 0x0000000068dad854, 0x00000000d1b5b0a8,
3066 0x00000001a36b6150, 0x0000000146d6c2a1, 0x000000008dad8543,
3067 0x000000011b5b0a86, 0x0000000036b6150d, 0x000000006d6c2a1a,
3068 0x00000000dad85434, 0x00000001b5b0a868, 0x000000016b6150d1,
3069 0x00000000d6c2a1a3, 0x00000001ad854346, 0x000000015b0a868d,
3070 0x00000000b6150d1b, 0x000000016c2a1a36, 0x00000000d854346d,
3071 0x00000001b0a868da, 0x000000016150d1b5, 0x00000000c2a1a36b,
3072 0x00000001854346d6, 0x000000010a868dad, 0x00000000150d1b5b,
3073 0x000000002a1a36b6, 0x0000000054346d6c, 0x00000000a868dad8,
3074 0x0000000150d1b5b0, 0x00000000a1a36b61, 0x000000014346d6c2
3077static const uint64_t CA_group6_31L[31] = {
3078 0x129d255400000000, 0x253a4aa800000000, 0x4a74955000000000,
3079 0x94e92aa000000000, 0x29d2554200000000, 0x53a4aa8400000000,
3080 0xa749550800000000, 0x4e92aa1200000000, 0x9d25542400000000,
3081 0x3a4aa84a00000000, 0x7495509400000000, 0xe92aa12800000000,
3082 0xd255425200000000, 0xa4aa84a600000000, 0x4955094e00000000,
3083 0x92aa129c00000000, 0x2554253a00000000, 0x4aa84a7400000000,
3084 0x955094e800000000, 0x2aa129d200000000, 0x554253a400000000,
3085 0xaa84a74800000000, 0x55094e9200000000, 0xaa129d2400000000,
3086 0x54253a4a00000000, 0xa84a749400000000, 0x5094e92a00000000,
3087 0xa129d25400000000, 0x4253a4aa00000000, 0x84a7495400000000,
3092static const uint64_t CA_group7_33R[33] = {
3093 0x0000000077652a44, 0x00000000eeca5488, 0x00000001dd94a910,
3094 0x00000001bb295221, 0x000000017652a443, 0x00000000eca54887,
3095 0x00000001d94a910e, 0x00000001b295221d, 0x00000001652a443b,
3096 0x00000000ca548877, 0x0000000194a910ee, 0x00000001295221dd,
3097 0x0000000052a443bb, 0x00000000a5488776, 0x000000014a910eec,
3098 0x0000000095221dd9, 0x000000012a443bb2, 0x0000000054887765,
3099 0x00000000a910eeca, 0x000000015221dd94, 0x00000000a443bb29,
3100 0x0000000148877652, 0x00000000910eeca5, 0x00000001221dd94a,
3101 0x00000000443bb295, 0x000000008877652a, 0x0000000110eeca54,
3102 0x0000000021dd94a9, 0x0000000043bb2952, 0x00000000877652a4,
3103 0x000000010eeca548, 0x000000001dd94a91, 0x000000003bb29522
3106static const uint64_t CA_group7_31L[31] = {
3107 0x23f706d400000000, 0x47ee0da800000000, 0x8fdc1b5000000000,
3108 0x1fb836a200000000, 0x3f706d4400000000, 0x7ee0da8800000000,
3109 0xfdc1b51000000000, 0xfb836a2200000000, 0xf706d44600000000,
3110 0xee0da88e00000000, 0xdc1b511e00000000, 0xb836a23e00000000,
3111 0x706d447e00000000, 0xe0da88fc00000000, 0xc1b511fa00000000,
3112 0x836a23f600000000, 0x6d447ee00000000, 0xda88fdc00000000,
3113 0x1b511fb800000000, 0x36a23f7000000000, 0x6d447ee000000000,
3114 0xda88fdc000000000, 0xb511fb8200000000, 0x6a23f70600000000,
3115 0xd447ee0c00000000, 0xa88fdc1a00000000, 0x511fb83600000000,
3116 0xa23f706c00000000, 0x447ee0da00000000, 0x88fdc1b400000000,
3121static const uint64_t CA_group8_33R[33] = {
3122 0x000000007b9f6d6c, 0x00000000f73edad8, 0x00000001ee7db5b0,
3123 0x00000001dcfb6b61, 0x00000001b9f6d6c3, 0x0000000173edad87,
3124 0x00000000e7db5b0f, 0x00000001cfb6b61e, 0x000000019f6d6c3d,
3125 0x000000013edad87b, 0x000000007db5b0f7, 0x00000000fb6b61ee,
3126 0x00000001f6d6c3dc, 0x00000001edad87b9, 0x00000001db5b0f73,
3127 0x00000001b6b61ee7, 0x000000016d6c3dcf, 0x00000000dad87b9f,
3128 0x00000001b5b0f73e, 0x000000016b61ee7d, 0x00000000d6c3dcfb,
3129 0x00000001ad87b9f6, 0x000000015b0f73ed, 0x00000000b61ee7db,
3130 0x000000016c3dcfb6, 0x00000000d87b9f6d, 0x00000001b0f73eda,
3131 0x0000000161ee7db5, 0x00000000c3dcfb6b, 0x0000000187b9f6d6,
3132 0x000000010f73edad, 0x000000001ee7db5b, 0x000000003dcfb6b6
3135static const uint64_t CA_group8_31L[31] = {
3136 0x3fd2c44800000000, 0x7fa5889000000000, 0xff4b112000000000,
3137 0xfe96224200000000, 0xfd2c448600000000, 0xfa58890e00000000,
3138 0xf4b1121e00000000, 0xe962243e00000000, 0xd2c4487e00000000,
3139 0xa58890fe00000000, 0x4b1121fe00000000, 0x962243fc00000000,
3140 0x2c4487fa00000000, 0x58890ff400000000, 0xb1121fe800000000,
3141 0x62243fd200000000, 0xc4487fa400000000, 0x8890ff4a00000000,
3142 0x1121fe9600000000, 0x2243fd2c00000000, 0x4487fa5800000000,
3143 0x890ff4b000000000, 0x121fe96200000000, 0x243fd2c400000000,
3144 0x487fa58800000000, 0x90ff4b1000000000, 0x21fe962200000000,
3145 0x43fd2c4400000000, 0x87fa588800000000, 0xff4b11200000000,
3150static const uint64_t CA_group9_33R[33] = {
3151 0x000000011139ceea, 0x0000000022739dd5, 0x0000000044e73baa,
3152 0x0000000089ce7754, 0x00000001139ceea8, 0x000000002739dd51,
3153 0x000000004e73baa2, 0x000000009ce77544, 0x0000000139ceea88,
3154 0x00000000739dd511, 0x00000000e73baa22, 0x00000001ce775444,
3155 0x000000019ceea889, 0x0000000139dd5113, 0x0000000073baa227,
3156 0x00000000e775444e, 0x00000001ceea889c, 0x000000019dd51139,
3157 0x000000013baa2273, 0x00000000775444e7, 0x00000000eea889ce,
3158 0x00000001dd51139c, 0x00000001baa22739, 0x0000000175444e73,
3159 0x00000000ea889ce7, 0x00000001d51139ce, 0x00000001aa22739d,
3160 0x000000015444e73b, 0x00000000a889ce77, 0x0000000151139cee,
3161 0x00000000a22739dd, 0x00000001444e73ba, 0x00000000889ce775
3164static const uint64_t CA_group9_31L[31] = {
3165 0xa8a3d2ec00000000, 0x5147a5da00000000, 0xa28f4bb400000000,
3166 0x451e976a00000000, 0x8a3d2ed400000000, 0x147a5daa00000000,
3167 0x28f4bb5400000000, 0x51e976a800000000, 0xa3d2ed5000000000,
3168 0x47a5daa200000000, 0x8f4bb54400000000, 0x1e976a8a00000000,
3169 0x3d2ed51400000000, 0x7a5daa2800000000, 0xf4bb545000000000,
3170 0xe976a8a200000000, 0xd2ed514600000000, 0xa5daa28e00000000,
3171 0x4bb5451e00000000, 0x976a8a3c00000000, 0x2ed5147a00000000,
3172 0x5daa28f400000000, 0xbb5451e800000000, 0x76a8a3d200000000,
3173 0xed5147a400000000, 0xdaa28f4a00000000, 0xb5451e9600000000,
3174 0x6a8a3d2e00000000, 0xd5147a5c00000000, 0xaa28f4ba00000000,
3178constexpr const uint64_t* MS_TAB_33R_CC[45] = {
3179 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
3180 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
3181 nullptr, CC_group2_33R, CC_group3_33R, CC_group2_33R, CC_group3_33R,
3182 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
3183 nullptr, CC_group4_33R, CC_group1_33R, CC_group5_33R, CC_group1_33R,
3184 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
3185 nullptr, CC_group2_33R, CC_group3_33R, CC_group2_33R, CC_group3_33R,
3186 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
3187 nullptr, CC_group4_33R, CC_group1_33R, CC_group4_33R, CC_group1_33R
3190constexpr const uint64_t* MS_TAB_31L_CC[45] = {
3191 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
3192 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
3193 nullptr, CC_group2_31L, CC_group3_31L, CC_group2_31L, CC_group3_31L,
3194 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
3195 nullptr, CC_group4_31L, CC_group1_31L, CC_group5_31L, CC_group1_31L,
3196 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
3197 nullptr, CC_group2_31L, CC_group3_31L, CC_group2_31L, CC_group3_31L,
3198 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
3199 nullptr, CC_group4_31L, CC_group1_31L, CC_group4_31L, CC_group1_31L
3203constexpr const uint64_t* MS_TAB_33R_CG[45] = {
3204 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
3205 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
3206 nullptr, CG_group4_33R, CG_group2_33R, CG_group8_33R, CG_group2_33R,
3207 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
3208 nullptr, CG_group1_33R, CG_group7_33R, CG_group1_33R, CG_group9_33R,
3209 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
3210 nullptr, CG_group4_33R, CG_group2_33R, CG_group6_33R, CG_group2_33R,
3211 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
3212 nullptr, CG_group5_33R, CG_group3_33R, CG_group1_33R, CG_group3_33R
3216constexpr const uint64_t* MS_TAB_31L_CG[45] = {
3217 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
3218 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
3219 nullptr, CG_group4_31L, CG_group2_31L, CG_group8_31L, CG_group2_31L,
3220 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
3221 nullptr, CG_group1_31L, CG_group7_31L, CG_group1_31L, CG_group9_31L,
3222 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
3223 nullptr, CG_group4_31L, CG_group2_31L, CG_group6_31L, CG_group2_31L,
3224 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
3225 nullptr, CG_group5_31L, CG_group3_31L, CG_group1_31L, CG_group3_31L
3229constexpr const uint64_t* MS_TAB_33R_CA[45] = {
3230 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
3231 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
3232 nullptr, CA_group3_33R, CA_group2_33R, CA_group7_33R, CA_group2_33R,
3233 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
3234 nullptr, CA_group1_33R, CA_group6_33R, CA_group9_33R, CA_group8_33R,
3235 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
3236 nullptr, CA_group3_33R, CA_group2_33R, CA_group5_33R, CA_group2_33R,
3237 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
3238 nullptr, CA_group1_33R, CA_group4_33R, CA_group1_33R, CA_group4_33R
3242constexpr const uint64_t* MS_TAB_31L_CA[45] = {
3243 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
3244 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
3245 nullptr, CA_group3_31L, CA_group2_31L, CA_group7_31L, CA_group2_31L,
3246 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
3247 nullptr, CA_group1_31L, CA_group6_31L, CA_group9_31L, CA_group8_31L,
3248 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
3249 nullptr, CA_group3_31L, CA_group2_31L, CA_group5_31L, CA_group2_31L,
3250 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
3251 nullptr, CA_group1_31L, CA_group4_31L, CA_group1_31L, CA_group4_31L
3255constexpr const uint64_t* MS_TAB_33R_CT[45] = {
3256 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
3257 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
3258 nullptr, CT_group2_33R, CT_group3_33R, CT_group2_33R, CT_group3_33R,
3259 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
3260 nullptr, CT_group8_33R, CT_group5_33R, CT_group9_33R, CT_group1_33R,
3261 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
3262 nullptr, CT_group2_33R, CT_group3_33R, CT_group4_33R, CT_group3_33R,
3263 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
3264 nullptr, CT_group6_33R, CT_group1_33R, CT_group7_33R, CT_group1_33R
3268constexpr const uint64_t* MS_TAB_31L_CT[45] = {
3269 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
3270 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
3271 nullptr, CT_group2_31L, CT_group3_31L, CT_group2_31L, CT_group3_31L,
3272 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
3273 nullptr, CT_group8_31L, CT_group5_31L, CT_group9_31L, CT_group1_31L,
3274 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
3275 nullptr, CT_group2_31L, CT_group3_31L, CT_group4_31L, CT_group3_31L,
3276 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
3277 nullptr, CT_group6_31L, CT_group1_31L, CT_group7_31L, CT_group1_31L
3281srol_bi_table(uint8_t out_idx,
3283 const uint64_t*
const* TAB_33R,
3284 const uint64_t*
const* TAB_31L)
3287 return (TAB_31L[out_idx][d < 31 ? d : d % 31] |
3288 TAB_33R[out_idx][d < 33 ? d : d % 33]);
3292next_forward_bi_hash(uint64_t fh_val,
3294 unsigned char char_out1,
3295 unsigned char char_out2,
3296 unsigned char char_in1,
3297 unsigned char char_in2,
3298 const uint64_t* DIMER_TAB,
3299 const uint64_t*
const* TAB_33R,
3300 const uint64_t*
const* TAB_31L)
3302 uint8_t out_idx = 10 * BI_CONVERT_TAB[char_out1] + BI_CONVERT_TAB[char_out2];
3303 uint8_t in_idx = 10 * BI_CONVERT_TAB[char_in1] + BI_CONVERT_TAB[char_in2];
3305 uint64_t h_val = srol(fh_val);
3307 h_val ^= srol_bi_table(out_idx, k, TAB_33R, TAB_31L);
3308 h_val ^= DIMER_TAB[in_idx];
3314prev_forward_bi_hash(uint64_t fh_val,
3316 unsigned char char_out1,
3317 unsigned char char_out2,
3318 unsigned char char_in1,
3319 unsigned char char_in2,
3320 const uint64_t* DIMER_TAB,
3321 const uint64_t*
const* TAB_33R,
3322 const uint64_t*
const* TAB_31L)
3324 uint8_t out_idx = 10 * BI_CONVERT_TAB[char_out1] + BI_CONVERT_TAB[char_out2];
3325 uint8_t in_idx = 10 * BI_CONVERT_TAB[char_in1] + BI_CONVERT_TAB[char_in2];
3327 uint64_t h_val = fh_val ^ srol_bi_table(in_idx, k, TAB_33R, TAB_31L);
3328 h_val ^= DIMER_TAB[out_idx];
3329 h_val = sror(h_val);
3334inline std::vector<uint64_t>
3335base_reverse_bi_hash(
const char* seq,
3338 const uint64_t* DIMER_TAB)
3344 for (
int i = (
int)k - 1; i >= 1; i -= 2) {
3346 const uint8_t a = BI_RC_CONVERT_TAB[(
unsigned char)seq[i]];
3347 const uint8_t b = BI_RC_CONVERT_TAB[(
unsigned char)seq[i - 1]];
3348 const uint8_t loc = 10 * a + b;
3349 h0 ^= DIMER_TAB[loc];
3355 for (
int i = (
int)k; i >= 2; i -= 2) {
3357 const uint8_t a = BI_RC_CONVERT_TAB[(
unsigned char)seq[i]];
3358 const uint8_t b = BI_RC_CONVERT_TAB[(
unsigned char)seq[i - 1]];
3359 const uint8_t loc = 10 * a + b;
3360 h1 ^= DIMER_TAB[loc];
3367next_reverse_bi_hash(uint64_t rh_val,
3369 unsigned char char_out1,
3370 unsigned char char_out2,
3371 unsigned char char_in1,
3372 unsigned char char_in2,
3373 const uint64_t* DIMER_TAB,
3374 const uint64_t*
const* TAB_33R,
3375 const uint64_t*
const* TAB_31L)
3378 10 * BI_RC_CONVERT_TAB[char_out2] + BI_RC_CONVERT_TAB[char_out1];
3380 10 * BI_RC_CONVERT_TAB[char_in2] + BI_RC_CONVERT_TAB[char_in1];
3381 uint64_t h_val = rh_val ^ srol_bi_table(in_idx, k, TAB_33R, TAB_31L);
3382 h_val ^= DIMER_TAB[out_idx];
3383 h_val = sror(h_val);
3388prev_reverse_bi_hash(uint64_t rh_val,
3390 unsigned char char_out1,
3391 unsigned char char_out2,
3392 unsigned char char_in1,
3393 unsigned char char_in2,
3394 const uint64_t* DIMER_TAB,
3395 const uint64_t*
const* TAB_33R,
3396 const uint64_t*
const* TAB_31L)
3399 10 * BI_RC_CONVERT_TAB[char_out2] + BI_RC_CONVERT_TAB[char_out1];
3401 10 * BI_RC_CONVERT_TAB[char_in2] + BI_RC_CONVERT_TAB[char_in1];
3402 uint64_t h_val = srol(rh_val);
3403 h_val ^= DIMER_TAB[in_idx];
3404 h_val ^= srol_bi_table(out_idx, k, TAB_33R, TAB_31L);