// Copyright (c) 2017, Shellyl_N and Authors
// license: ISC
// https://github.com/shellyln



import { QrCodewords } from '../Qr.defs';



// tslint:disable:whitespace



export const matrixSize = [
    0,
   21,  25,  29,  33,  37,  41,  45,  49,  53,  57,
   61,  65,  69,  73,  77,  81,  85,  89,  93,  97,
  101, 105, 109, 113, 117, 121, 125, 129, 133, 137,
  141, 145, 149, 153, 157, 161, 165, 169, 173, 177
];


export const dataCodewords: QrCodewords = {
  L: [
         0,
        19,   34,   55,   80,  108,  136,  156,  194,  232,  274,
       324,  370,  428,  461,  523,  589,  647,  721,  795,  861,
       932, 1006, 1094, 1174, 1276, 1370, 1468, 1531, 1631, 1735,
      1843, 1955, 2071, 2191, 2306, 2434, 2566, 2702, 2812, 2956
  ],
  M: [
         0,
        16,   28,   44,   64,   86,  108,  124,  154,  182,  216,
       254,  290,  334,  365,  415,  453,  507,  563,  627,  669,
       714,  782,  860,  914, 1000, 1062, 1128, 1193, 1267, 1373,
      1455, 1541, 1631, 1725, 1812, 1914, 1992, 2102, 2216, 2334
  ],
  Q: [
         0,
        13,   22,   34,   48,   62,   76,   88,  110,  132,  154,
       180,  206,  244,  261,  295,  325,  367,  397,  445,  485,
       512,  568,  614,  664,  718,  754,  808,  871,  911,  985,
      1033, 1115, 1171, 1231, 1286, 1354, 1426, 1502, 1582, 1666
  ],
  H: [
         0,
         9,   16,   26,   36,   46,   60,   66,   86,  100,  122,
       140,  158,  180,  197,  223,  253,  283,  313,  341,  385,
       406,  442,  464,  514,  538,  596,  628,  661,  701,  745,
       793,  845,  901,  961,  986, 1054, 1096, 1142, 1222, 1276
  ]
};


export const segments = [
  // [[repeat, totalCodewords, dataCodewords, correctableCodewords], ...]
{ L: [[  0,  0,  0,  0]],
  M: [[  0,  0,  0,  0]],
  Q: [[  0,  0,  0,  0]],
  H: [[  0,  0,  0,  0]] }, // 0

{ L: [[  1, 26, 19,  2]],
  M: [[  1, 26, 16,  4]],
  Q: [[  1, 26, 13,  6]],
  H: [[  1, 26,  9,  8]] }, // 1

{ L: [[  1, 44, 34,  4]],
  M: [[  1, 44, 28,  8]],
  Q: [[  1, 44, 22, 11]],
  H: [[  1, 44, 16, 14]] }, // 2

{ L: [[  1, 70, 55,  7]],
  M: [[  1, 70, 44, 13]],
  Q: [[  2, 35, 17,  9]],
  H: [[  2, 35, 13, 11]] }, // 3

{ L: [[  1,100, 80, 10]],
  M: [[  2, 50, 32,  9]],
  Q: [[  2, 50, 24, 13]],
  H: [[  4, 25,  9,  8]] }, // 4

{ L: [[  1,134,108, 13]],
  M: [[  2, 67, 43, 12]],
  Q: [[  2, 33, 15,  9],
      [  2, 34, 16,  9]],
  H: [[  2, 33, 11, 11],
      [  2, 34, 12, 11]] }, // 5

{ L: [[  2, 86, 68,  9]],
  M: [[  4, 43, 27,  8]],
  Q: [[  4, 43, 19, 12]],
  H: [[  4, 43, 15, 14]] }, // 6

{ L: [[  2, 98, 78, 10]],
  M: [[  4, 49, 31,  9]],
  Q: [[  2, 32, 14,  9],
      [  4, 33, 15,  9]],
  H: [[  4, 39, 13, 13],
      [  1, 40, 14, 13]] }, // 7

{ L: [[  2,121, 97, 12]],
  M: [[  2, 60, 38, 11],
      [  2, 61, 39, 11]],
  Q: [[  4, 40, 18, 11],
      [  2, 41, 19, 11]],
  H: [[  4, 40, 14, 13],
      [  2, 41, 15, 13]] }, // 8

{ L: [[  2,146,116, 15]],
  M: [[  3, 58, 36, 11],
      [  2, 59, 37, 11]],
  Q: [[  4, 36, 16, 10],
      [  4, 37, 17, 10]],
  H: [[  4, 36, 12, 12],
      [  4, 37, 13, 12]] }, // 9

{ L: [[  2, 86, 68,  9],
      [  2, 87, 69,  9]],
  M: [[  4, 69, 43, 13],
      [  1, 70, 44, 13]],
  Q: [[  6, 43, 19, 12],
      [  2, 44, 20, 12]],
  H: [[  6, 43, 15, 14],
      [  2, 44, 16, 14]] }, // 10

{ L: [[  4,101, 81, 10]],
  M: [[  1, 80, 50, 15],
      [  4, 81, 51, 15]],
  Q: [[  4, 50, 22, 14],
      [  4, 51, 23, 14]],
  H: [[  3, 36, 12, 12],
      [  8, 37, 13, 12]] }, // 11

{ L: [[  2,116, 92, 12],
      [  2,117, 93, 12]],
  M: [[  6, 58, 36, 11],
      [  2, 59, 37, 11]],
  Q: [[  4, 46, 20, 13],
      [  6, 47, 21, 13]],
  H: [[  7, 42, 14, 14],
      [  4, 43, 15, 14]] }, // 12

{ L:[[  4,133,107, 13]],
  M:[[  8, 59, 37, 11],
     [  1, 60, 38, 11]],
  Q:[[  8, 44, 20, 13],
     [  4, 45, 21, 13]],
  H:[[ 12, 33, 11, 14],
     [  4, 34, 12, 14]] }, // 13

{ L:[[  3,145,115, 15],
     [  1,146,116, 15]],
  M:[[  4, 64, 40, 12],
     [  5, 65, 41, 12]],
  Q:[[ 11, 36, 16, 10],
     [  5, 37, 17, 10]],
  H:[[ 11, 36, 12, 12],
     [  5, 37, 13, 12]] }, // 14

{ L:[[  5,109, 87, 11],
     [  1,110, 88, 11]],
  M:[[  5, 65, 41, 12],
     [  5, 66, 42, 12]],
  Q:[[  5, 54, 24, 15],
     [  7, 55, 25, 15]],
  H:[[ 11, 36, 12, 12],
     [  7, 37, 13, 12]] }, // 15

{ L:[[  5,122, 98, 12],
     [  1,123, 99, 12]],
  M:[[  7, 73, 45, 14],
     [  3, 74, 46, 14]],
  Q:[[ 15, 43, 19, 12],
     [  2, 44, 20, 12]],
  H:[[  3, 45, 15, 15],
     [ 13, 46, 16, 15]] }, // 16

{ L:[[  1,135,107, 14],
     [  5,136,108, 14]],
  M:[[ 10, 74, 46, 14],
     [  1, 75, 47, 14]],
  Q:[[  1, 50, 22, 14],
     [ 15, 51, 23, 14]],
  H:[[  2, 42, 14, 14],
     [ 17, 43, 15, 14]] }, // 17

{ L:[[  5,150,120, 15],
     [  1,151,121, 15]],
  M:[[  9, 69, 43, 13],
     [  4, 70, 44, 13]],
  Q:[[ 17, 50, 22, 14],
     [  1, 51, 23, 14]],
  H:[[  2, 42, 14, 14],
     [ 19, 43, 15, 14]] }, // 18

{ L:[[  3,141,113, 14],
     [  4,142,114, 14]],
  M:[[  3, 70, 44, 13],
     [ 11, 71, 45, 13]],
  Q:[[ 17, 47, 21, 13],
     [  4, 48, 22, 13]],
  H:[[  9, 39, 13, 13],
     [ 16, 40, 14, 13]] }, // 19

{ L:[[  3,135,107, 14],
     [  5,136,108, 14]],
  M:[[  3, 67, 41, 13],
     [ 13, 68, 42, 13]],
  Q:[[ 15, 54, 24, 15],
     [  5, 55, 25, 15]],
  H:[[ 15, 43, 15, 14],
     [ 10, 44, 16, 14]] }, // 20

{ L:[[  4,144,116, 14],
     [  4,145,117, 14]],
  M:[[ 17, 68, 42, 13]],
  Q:[[ 17, 50, 22, 14],
     [  6, 51, 23, 14]],
  H:[[ 19, 46, 16, 15],
     [  6, 47, 17, 15]] }, // 21

{ L:[[  2,139,111, 14],
     [  7,140,112, 14]],
  M:[[ 17, 74, 46, 14]],
  Q:[[  7, 54, 24, 15],
     [ 16, 55, 25, 15]],
  H:[[ 34, 37, 13, 12]] }, // 22

{ L:[[  4,151,121, 15],
     [  5,152,122, 15]],
  M:[[  4, 75, 47, 14],
     [ 14, 76, 48, 14]],
  Q:[[ 11, 54, 24, 15],
     [ 14, 55, 25, 15]],
  H:[[ 16, 45, 15, 15],
     [ 14, 46, 16, 15]] }, // 23

{ L:[[  6,147,117, 15],
     [  4,148,118, 15]],
  M:[[  6, 73, 45, 14],
     [ 14, 74, 46, 14]],
  Q:[[ 11, 54, 24, 15],
     [ 16, 55, 25, 15]],
  H:[[ 30, 46, 16, 15],
     [  2, 47, 17, 15]] }, // 24

{ L:[[  8,132,106, 13],
     [  4,133,107, 13]],
  M:[[  8, 75, 47, 14],
     [ 13, 76, 48, 14]],
  Q:[[  7, 54, 24, 15],
     [ 22, 55, 25, 15]],
  H:[[ 22, 45, 15, 15],
     [ 13, 46, 16, 15]] }, // 25

{ L:[[ 10,142,114, 14],
     [  2,143,115, 14]],
  M:[[ 19, 74, 46, 14],
     [  4, 75, 47, 14]],
  Q:[[ 28, 50, 22, 14],
     [  6, 51, 23, 14]],
  H:[[ 33, 46, 16, 15],
     [  4, 47, 17, 15]] }, // 26

{ L:[[  8,152,122, 15],
     [  4,153,123, 15]],
  M:[[ 22, 73, 45, 14],
     [  3, 74, 46, 14]],
  Q:[[  8, 53, 23, 15],
     [ 26, 54, 24, 15]],
  H:[[ 12, 45, 15, 15],
     [ 28, 46, 16, 15]] }, // 27

{ L:[[  3,147,117, 15],
     [ 10,148,118, 15]],
  M:[[  3, 73, 45, 14],
     [ 23, 74, 46, 14]],
  Q:[[  4, 54, 24, 15],
     [ 31, 55, 25, 15]],
  H:[[ 11, 45, 15, 15],
     [ 31, 46, 16, 15]] }, // 28

{ L:[[  7,146,116, 15],
     [  7,147,117, 15]],
  M:[[ 21, 73, 45, 14],
     [  7, 74, 46, 14]],
  Q:[[  1, 53, 23, 15],
     [ 37, 54, 24, 15]],
  H:[[ 19, 45, 15, 15],
     [ 26, 46, 16, 15]] }, // 29

{ L:[[  5,145,115, 15],
     [ 10,146,116, 15]],
  M:[[ 19, 75, 47, 14],
     [ 10, 76, 48, 14]],
  Q:[[ 15, 54, 24, 15],
     [ 25, 55, 25, 15]],
  H:[[ 23, 45, 15, 15],
     [ 25, 46, 16, 15]] }, // 30

{ L:[[ 13,145,115, 15],
     [  3,146,116, 15]],
  M:[[  2, 74, 46, 14],
     [ 29, 75, 47, 14]],
  Q:[[ 42, 54, 24, 15],
     [  1, 55, 25, 15]],
  H:[[ 23, 45, 15, 15],
     [ 28, 46, 16, 15]] }, // 31

{ L:[[ 17,145,115, 15]],
  M:[[ 10, 74, 46, 14],
     [ 23, 75, 47, 14]],
  Q:[[ 10, 54, 24, 15],
     [ 35, 55, 25, 15]],
  H:[[ 19, 45, 15, 15],
     [ 35, 46, 16, 15]] }, // 32

{ L:[[ 17,145,115, 15],
     [  1,146,116, 15]],
  M:[[ 14, 74, 46, 14],
     [ 21, 75, 47, 14]],
  Q:[[ 29, 54, 24, 15],
     [ 19, 55, 25, 15]],
  H:[[ 11, 44, 15, 15],
     [ 46, 45, 16, 15]] }, // 33

{ L:[[ 13,145,115, 15],
     [  6,146,116, 15]],
  M:[[ 14, 74, 46, 14],
     [ 23, 75, 47, 14]],
  Q:[[ 44, 54, 24, 15],
     [  7, 55, 25, 15]],
  H:[[ 59, 46, 16, 15],
     [  1, 47, 17, 15]] }, // 34

{ L:[[ 12,151,121, 15],
     [  7,152,122, 15]],
  M:[[ 12, 75, 47, 14],
     [ 26, 76, 48, 14]],
  Q:[[ 39, 54, 24, 15],
     [ 14, 55, 25, 15]],
  H:[[ 22, 45, 15, 15],
     [ 41, 46, 16, 15]] }, // 35

{ L:[[  6,151,121, 15],
     [ 14,152,122, 15]],
  M:[[  6, 75, 47, 14],
     [ 34, 76, 48, 14]],
  Q:[[ 46, 54, 24, 15],
     [ 10, 55, 25, 15]],
  H:[[  2, 45, 15, 15],
     [ 64, 46, 16, 15]] }, // 36

{ L:[[ 17,152,122, 15],
     [  4,153,123, 15]],
  M:[[ 29, 74, 46, 14],
     [ 14, 75, 47, 14]],
  Q:[[ 49, 54, 24, 15],
     [ 10, 55, 25, 15]],
  H:[[ 24, 45, 15, 15],
     [ 46, 46, 16, 15]] }, // 37

{ L:[[  4,152,122, 15],
     [ 18,153,123, 15]],
  M:[[ 13, 74, 46, 14],
     [ 32, 75, 47, 14]],
  Q:[[ 48, 54, 24, 15],
     [ 14, 55, 25, 15]],
  H:[[ 42, 45, 15, 15],
     [ 32, 46, 16, 15]] }, // 38

{ L:[[ 20,147,117, 15],
     [  4,148,118, 15]],
  M:[[ 40, 75, 47, 14],
     [  7, 76, 48, 14]],
  Q:[[ 43, 54, 24, 15],
     [ 22, 55, 25, 15]],
  H:[[ 10, 45, 15, 15],
     [ 67, 46, 16, 15]] }, // 39

{ L:[[ 19,148,118, 15],
     [  6,149,119, 15]],
  M:[[ 18, 75, 47, 14],
     [ 31, 76, 48, 14]],
  Q:[[ 34, 54, 24, 15],
     [ 34, 55, 25, 15]],
  H:[[ 20, 45, 15, 15],
     [ 61, 46, 16, 15]] } // 40
];


export const alignmentPatterns = [
  [], // 0
  [], // 1
  [6,18], // 2 (12)
  [6,22], // 3 (16)
  [6,26], // 4 (20)
  [6,30], // 5 (24)
  [6,34], // 6 (28)
  [6,22,38], //  7 (16)
  [6,24,42], //  8 (18)
  [6,26,46], //  9 (20)
  [6,28,50], // 10 (22)
  [6,30,54], // 11 (24)
  [6,32,58], // 12 (26)
  [6,34,62], // 13 (28)
  [6,26,46,66], // 14 (20)
  [6,26,48,70], // 15 (20,22)
  [6,26,50,74], // 16 (20,24)
  [6,30,54,78], // 17 (24)
  [6,30,56,82], // 18 (24,26)
  [6,30,58,86], // 19 (24,28)
  [6,34,62,90], // 20 (28)
  [6,28,50,72, 94], // 21 (22)
  [6,26,50,74, 98], // 22 (20,24)
  [6,30,54,78,102], // 23 (24)
  [6,28,54,80,106], // 24 (22,26)
  [6,32,58,84,110], // 25 (26)
  [6,30,58,86,114], // 26 (24,28)
  [6,34,62,90,118], // 27 (28)
  [6,26,50,74, 98,122], // 28 (20,24)
  [6,30,54,78,102,126], // 29 (24)
  [6,26,52,78,104,130], // 30 (20,26)
  [6,30,56,82,108,134], // 31 (24,26)
  [6,34,60,86,112,138], // 32 (28,26)
  [6,30,58,86,114,142], // 33 (24,28)
  [6,34,62,90,118,146], // 34 (28)
  [6,30,54,78,102,126,150], // 35 (24)
  [6,24,50,76,102,128,154], // 36 (18,26)
  [6,28,54,80,106,132,158], // 37 (22,26)
  [6,32,58,84,110,136,162], // 38 (26)
  [6,26,54,82,110,138,166], // 39 (20,28)
  [6,30,58,86,114,142,170]  // 40 (24,28)
];

