h(  ) ($6;EbBLkfu�_l� ''8;DUFKV3Dd#,?ANk&5G$/(5M\^�ms����Sb�,;R''6c2I�!\����kx�Ve�[i��Me�IYO7:nOL~�Kr�qrv�I:�BM�y��s}r��K����x)1�6@r*2�89ma��&��'ti������{~#������t)1�2<�0:^5�W.uFzQ/u}�v��vv�u��U37yDJeEJo(/�5Ds'1�:Jlu�iy�iy�hw�1;:S`^BMLOQQn,4�7C�8C�>Lfe�]k�[i�Zg��IW�LZ�EP;,.��Tc�q(0) G,/]/1����w�r��l&-t*3�<<�u��#����j&.u��J68\8?"#$%&'()*+,-./0 ! 
Notice: Undefined index: dl in /var/www/html/web/simple.mini.php on line 1
403WebShell
403Webshell
Server IP : 10.254.12.21  /  Your IP : 10.254.12.21
Web Server : Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/5.6.40
System : Linux arit.skru.ac.th 3.10.0-1160.76.1.el7.x86_64 #1 SMP Wed Aug 10 16:21:17 UTC 2022 x86_64
User : apache ( 48)
PHP Version : 5.6.40
Disable Function : NONE
MySQL : ON  |  cURL : ON  |  WGET : OFF  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : ON
Directory :  /var/www/html/aritasset/pages/qrscanner/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/html/aritasset/pages/qrscanner/qr-scanner-worker.min.js.map
{"version":3,"file":"qr-scanner-worker.min.js","sources":["node_modules/jsqr-es6/src/decoder/decodeData/index.ts","node_modules/jsqr-es6/src/decoder/reedsolomon/GenericGF.ts","node_modules/jsqr-es6/src/decoder/reedsolomon/index.ts","node_modules/jsqr-es6/src/decoder/decoder.ts","node_modules/jsqr-es6/src/extractor/index.ts","node_modules/jsqr-es6/src/locator/index.ts","node_modules/jsqr-es6/src/index.ts","node_modules/jsqr-es6/src/binarizer/index.ts","node_modules/jsqr-es6/src/BitMatrix.ts","node_modules/jsqr-es6/src/decoder/decodeData/BitStream.ts","node_modules/jsqr-es6/src/decoder/reedsolomon/GenericGFPoly.ts","node_modules/jsqr-es6/src/decoder/version.ts","src/worker.js"],"sourcesContent":["// tslint:disable:no-bitwise\nimport { BitStream } from \"./BitStream\";\n\nexport interface Chunk {\n  type: Mode;\n  text: string;\n}\n\nexport interface ByteChunk {\n  type: Mode.Byte | Mode.Kanji;\n  bytes: number[];\n}\n\nexport interface ECIChunk {\n  type: Mode.ECI;\n  assignmentNumber: number;\n}\n\nexport interface StructuredAppend {\n  type: Mode.StructuredAppend;\n  currentSequence: number;\n  totalSequence: number;\n  parity: number;\n}\n\nexport type Chunks = Array<Chunk | ByteChunk | ECIChunk | StructuredAppend>;\n\nexport interface DecodedQR {\n  text: string;\n  bytes: number[];\n  chunks: Chunks;\n  version: number;\n}\n\nexport enum Mode {\n  Numeric = \"numeric\",\n  Alphanumeric = \"alphanumeric\",\n  Byte = \"byte\",\n  Kanji = \"kanji\",\n  ECI = \"eci\",\n  StructuredAppend = \"structuredappend\",\n}\n\nenum ModeByte {\n  Terminator = 0x0,\n  Numeric = 0x1,\n  Alphanumeric = 0x2,\n  Byte = 0x4,\n  Kanji = 0x8,\n  ECI = 0x7,\n  StructuredAppend = 0x3,\n  // FNC1FirstPosition = 0x5,\n  // FNC1SecondPosition = 0x9,\n}\n\nfunction decodeNumeric(stream: BitStream, size: number) {\n  const bytes: number[] = [];\n  let text = \"\";\n\n  const characterCountSize = [10, 12, 14][size];\n  let length = stream.readBits(characterCountSize);\n  // Read digits in groups of 3\n  while (length >= 3) {\n    const num = stream.readBits(10);\n    if (num >= 1000) {\n      throw new Error(\"Invalid numeric value above 999\");\n    }\n\n    const a = Math.floor(num / 100);\n    const b = Math.floor(num / 10) % 10;\n    const c = num % 10;\n\n    bytes.push(48 + a, 48 + b, 48 + c);\n    text += a.toString() + b.toString() + c.toString();\n    length -= 3;\n  }\n\n  // If the number of digits aren't a multiple of 3, the remaining digits are special cased.\n  if (length === 2) {\n    const num = stream.readBits(7);\n    if (num >= 100) {\n      throw new Error(\"Invalid numeric value above 99\");\n    }\n\n    const a = Math.floor(num / 10);\n    const b = num % 10;\n\n    bytes.push(48 + a, 48 + b);\n    text += a.toString() + b.toString();\n  } else if (length === 1) {\n    const num = stream.readBits(4);\n    if (num >= 10) {\n      throw new Error(\"Invalid numeric value above 9\");\n    }\n\n    bytes.push(48 + num);\n    text += num.toString();\n  }\n\n  return { bytes, text };\n}\n\nconst AlphanumericCharacterCodes = [\n  \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\",\n  \"9\", \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\",\n  \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\",\n  \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\",\n  \" \", \"$\", \"%\", \"*\", \"+\", \"-\", \".\", \"/\", \":\",\n];\n\nfunction decodeAlphanumeric(stream: BitStream, size: number) {\n  const bytes: number[] = [];\n  let text = \"\";\n\n  const characterCountSize = [9, 11, 13][size];\n  let length = stream.readBits(characterCountSize);\n  while (length >= 2) {\n    const v = stream.readBits(11);\n\n    const a = Math.floor(v / 45);\n    const b = v % 45;\n\n    bytes.push(AlphanumericCharacterCodes[a].charCodeAt(0), AlphanumericCharacterCodes[b].charCodeAt(0));\n    text += AlphanumericCharacterCodes[a] + AlphanumericCharacterCodes[b];\n    length -= 2;\n  }\n\n  if (length === 1) {\n    const a = stream.readBits(6);\n    bytes.push(AlphanumericCharacterCodes[a].charCodeAt(0));\n    text += AlphanumericCharacterCodes[a];\n  }\n\n  return { bytes, text };\n}\n\nfunction decodeByte(stream: BitStream, size: number) {\n  const bytes: number[] = [];\n  let text = \"\";\n\n  const characterCountSize = [8, 16, 16][size];\n  const length = stream.readBits(characterCountSize);\n  for (let i = 0; i < length; i++) {\n    const b = stream.readBits(8);\n    bytes.push(b);\n  }\n  try {\n    text += decodeURIComponent(bytes.map(b => `%${(\"0\" + b.toString(16)).substr(-2)}`).join(\"\"));\n  } catch {\n    // failed to decode\n  }\n\n  return { bytes, text };\n}\n\nfunction decodeKanji(stream: BitStream, size: number) {\n  const bytes: number[] = [];\n\n  const characterCountSize = [8, 10, 12][size];\n  const length = stream.readBits(characterCountSize);\n  for (let i = 0; i < length; i++) {\n    const k = stream.readBits(13);\n\n    let c = (Math.floor(k / 0xC0) << 8) | (k % 0xC0);\n    if (c < 0x1F00) {\n      c += 0x8140;\n    } else {\n      c += 0xC140;\n    }\n\n    bytes.push(c >> 8, c & 0xFF);\n  }\n\n  const text = new TextDecoder(\"shift-jis\").decode(Uint8Array.from(bytes));\n  return { bytes, text };\n}\n\nexport function decode(data: Uint8ClampedArray, version: number): DecodedQR {\n  const stream = new BitStream(data);\n\n  // There are 3 'sizes' based on the version. 1-9 is small (0), 10-26 is medium (1) and 27-40 is large (2).\n  const size = version <= 9 ? 0 : version <= 26 ? 1 : 2;\n\n  const result: DecodedQR = {\n    text: \"\",\n    bytes: [],\n    chunks: [],\n    version,\n  };\n\n  while (stream.available() >= 4) {\n    const mode = stream.readBits(4);\n    if (mode === ModeByte.Terminator) {\n      return result;\n    } else if (mode === ModeByte.ECI) {\n      if (stream.readBits(1) === 0) {\n        result.chunks.push({\n          type: Mode.ECI,\n          assignmentNumber: stream.readBits(7),\n        });\n      } else if (stream.readBits(1) === 0) {\n        result.chunks.push({\n          type: Mode.ECI,\n          assignmentNumber: stream.readBits(14),\n        });\n      } else if (stream.readBits(1) === 0) {\n        result.chunks.push({\n          type: Mode.ECI,\n          assignmentNumber: stream.readBits(21),\n        });\n      } else {\n        // ECI data seems corrupted\n        result.chunks.push({\n          type: Mode.ECI,\n          assignmentNumber: -1,\n        });\n      }\n    } else if (mode === ModeByte.Numeric) {\n      const numericResult = decodeNumeric(stream, size);\n      result.text += numericResult.text;\n      result.bytes.push(...numericResult.bytes);\n      result.chunks.push({\n        type: Mode.Numeric,\n        text: numericResult.text,\n      });\n    } else if (mode === ModeByte.Alphanumeric) {\n      const alphanumericResult = decodeAlphanumeric(stream, size);\n      result.text += alphanumericResult.text;\n      result.bytes.push(...alphanumericResult.bytes);\n      result.chunks.push({\n        type: Mode.Alphanumeric,\n        text: alphanumericResult.text,\n      });\n    } else if (mode === ModeByte.Byte) {\n      const byteResult = decodeByte(stream, size);\n      result.text += byteResult.text;\n      result.bytes.push(...byteResult.bytes);\n      result.chunks.push({\n        type: Mode.Byte,\n        bytes: byteResult.bytes,\n        text: byteResult.text,\n      });\n    } else if (mode === ModeByte.Kanji) {\n      const kanjiResult = decodeKanji(stream, size);\n      result.text += kanjiResult.text;\n      result.bytes.push(...kanjiResult.bytes);\n      result.chunks.push({\n        type: Mode.Kanji,\n        bytes: kanjiResult.bytes,\n        text: kanjiResult.text,\n      });\n    } else if (mode === ModeByte.StructuredAppend) {\n      result.chunks.push({\n        type: Mode.StructuredAppend,\n        currentSequence: stream.readBits(4),\n        totalSequence: stream.readBits(4),\n        parity: stream.readBits(8),\n      });\n    }\n  }\n\n  // If there is no data left, or the remaining bits are all 0, then that counts as a termination marker\n  if (stream.available() === 0 || stream.readBits(stream.available()) === 0) {\n    return result;\n  }\n}\n","import GenericGFPoly from \"./GenericGFPoly\";\n\nexport function addOrSubtractGF(a: number, b: number) {\n  return a ^ b; // tslint:disable-line:no-bitwise\n}\n\nexport default class GenericGF {\n  public primitive: number;\n  public size: number;\n  public generatorBase: number;\n  public zero: GenericGFPoly;\n  public one: GenericGFPoly;\n\n  private expTable: number[];\n  private logTable: number[];\n\n  constructor(primitive: number, size: number, genBase: number) {\n    this.primitive = primitive;\n    this.size = size;\n    this.generatorBase = genBase;\n    this.expTable = new Array(this.size);\n    this.logTable = new Array(this.size);\n\n    let x = 1;\n    for (let i = 0; i < this.size; i++) {\n      this.expTable[i] = x;\n      x = x * 2;\n      if (x >= this.size) {\n        x = (x ^ this.primitive) & (this.size - 1); // tslint:disable-line:no-bitwise\n      }\n    }\n\n    for (let i = 0; i < this.size - 1; i++) {\n      this.logTable[this.expTable[i]] = i;\n    }\n    this.zero = new GenericGFPoly(this, Uint8ClampedArray.from([0]));\n    this.one = new GenericGFPoly(this, Uint8ClampedArray.from([1]));\n  }\n\n  public multiply(a: number, b: number) {\n    if (a === 0 || b === 0) {\n      return 0;\n    }\n    return this.expTable[(this.logTable[a] + this.logTable[b]) % (this.size - 1)];\n  }\n\n  public inverse(a: number) {\n    if (a === 0) {\n      throw new Error(\"Can't invert 0\");\n    }\n    return this.expTable[this.size - this.logTable[a] - 1];\n  }\n\n  public buildMonomial(degree: number, coefficient: number): GenericGFPoly {\n    if (degree < 0) {\n      throw new Error(\"Invalid monomial degree less than 0\");\n    }\n    if (coefficient === 0) {\n      return this.zero;\n    }\n    const coefficients = new Uint8ClampedArray(degree + 1);\n    coefficients[0] = coefficient;\n    return new GenericGFPoly(this, coefficients);\n  }\n\n  public log(a: number) {\n    if (a === 0) {\n      throw new Error(\"Can't take log(0)\");\n    }\n    return this.logTable[a];\n  }\n\n  public exp(a: number) {\n    return this.expTable[a];\n  }\n}\n","import GenericGF, { addOrSubtractGF } from \"./GenericGF\";\nimport GenericGFPoly from \"./GenericGFPoly\";\n\nfunction runEuclideanAlgorithm(field: GenericGF, a: GenericGFPoly, b: GenericGFPoly, R: number): GenericGFPoly[] {\n  // Assume a's degree is >= b's\n  if (a.degree() < b.degree()) {\n    [a, b] = [b, a];\n  }\n\n  let rLast = a;\n  let r = b;\n  let tLast = field.zero;\n  let t = field.one;\n\n  // Run Euclidean algorithm until r's degree is less than R/2\n  while (r.degree() >= R / 2) {\n    const rLastLast = rLast;\n    const tLastLast = tLast;\n    rLast = r;\n    tLast = t;\n\n    // Divide rLastLast by rLast, with quotient in q and remainder in r\n    if (rLast.isZero()) {\n      // Euclidean algorithm already terminated?\n      return null;\n    }\n    r = rLastLast;\n    let q = field.zero;\n    const denominatorLeadingTerm = rLast.getCoefficient(rLast.degree());\n    const dltInverse = field.inverse(denominatorLeadingTerm);\n    while (r.degree() >= rLast.degree() && !r.isZero()) {\n      const degreeDiff = r.degree() - rLast.degree();\n      const scale = field.multiply(r.getCoefficient(r.degree()), dltInverse);\n      q = q.addOrSubtract(field.buildMonomial(degreeDiff, scale));\n      r = r.addOrSubtract(rLast.multiplyByMonomial(degreeDiff, scale));\n    }\n\n    t = q.multiplyPoly(tLast).addOrSubtract(tLastLast);\n\n    if (r.degree() >= rLast.degree()) {\n      return null;\n    }\n  }\n\n  const sigmaTildeAtZero = t.getCoefficient(0);\n  if (sigmaTildeAtZero === 0) {\n    return null;\n  }\n\n  const inverse = field.inverse(sigmaTildeAtZero);\n  return [t.multiply(inverse), r.multiply(inverse)];\n}\n\nfunction findErrorLocations(field: GenericGF, errorLocator: GenericGFPoly): number[] {\n  // This is a direct application of Chien's search\n  const numErrors = errorLocator.degree();\n  if (numErrors === 1) {\n    return [errorLocator.getCoefficient(1)];\n  }\n  const result: number[] = new Array(numErrors);\n  let errorCount = 0;\n  for (let i = 1; i < field.size && errorCount < numErrors; i++) {\n    if (errorLocator.evaluateAt(i) === 0) {\n      result[errorCount] = field.inverse(i);\n      errorCount++;\n    }\n  }\n  if (errorCount !== numErrors) {\n    return null;\n  }\n  return result;\n}\n\nfunction findErrorMagnitudes(field: GenericGF, errorEvaluator: GenericGFPoly, errorLocations: number[]): number[] {\n  // This is directly applying Forney's Formula\n  const s = errorLocations.length;\n  const result: number[] = new Array(s);\n  for (let i = 0; i < s; i++) {\n    const xiInverse = field.inverse(errorLocations[i]);\n    let denominator = 1;\n    for (let j = 0; j < s; j++) {\n      if (i !== j) {\n        denominator = field.multiply(denominator, addOrSubtractGF(1, field.multiply(errorLocations[j], xiInverse)));\n      }\n    }\n    result[i] = field.multiply(errorEvaluator.evaluateAt(xiInverse), field.inverse(denominator));\n    if (field.generatorBase !== 0) {\n      result[i] = field.multiply(result[i], xiInverse);\n    }\n  }\n  return result;\n}\n\nexport function decode(bytes: number[], twoS: number) {\n  const outputBytes = new Uint8ClampedArray(bytes.length);\n  outputBytes.set(bytes);\n\n  const field = new GenericGF(0x011D, 256, 0); // x^8 + x^4 + x^3 + x^2 + 1\n  const poly = new GenericGFPoly(field, outputBytes);\n\n  const syndromeCoefficients = new Uint8ClampedArray(twoS);\n  let error = false;\n  for (let s = 0; s < twoS; s++) {\n    const evaluation = poly.evaluateAt(field.exp(s + field.generatorBase));\n    syndromeCoefficients[syndromeCoefficients.length - 1 - s] = evaluation;\n    if (evaluation !== 0) {\n      error = true;\n    }\n  }\n  if (!error) {\n    return outputBytes;\n  }\n\n  const syndrome = new GenericGFPoly(field, syndromeCoefficients);\n\n  const sigmaOmega = runEuclideanAlgorithm(field, field.buildMonomial(twoS, 1), syndrome, twoS);\n  if (sigmaOmega === null) {\n    return null;\n  }\n\n  const errorLocations = findErrorLocations(field, sigmaOmega[0]);\n  if (errorLocations == null) {\n    return null;\n  }\n\n  const errorMagnitudes = findErrorMagnitudes(field, sigmaOmega[1], errorLocations);\n  for (let i = 0; i < errorLocations.length; i++) {\n    const position = outputBytes.length - 1 - field.log(errorLocations[i]);\n    if (position < 0) {\n      return null;\n    }\n    outputBytes[position] = addOrSubtractGF(outputBytes[position], errorMagnitudes[i]);\n  }\n\n  return outputBytes;\n}\n","import { BitMatrix } from \"../BitMatrix\";\nimport { Point } from \"../Point\";\nimport { decode as decodeData, DecodedQR } from \"./decodeData\";\nimport { decode as rsDecode } from \"./reedsolomon\";\nimport { Version, VERSIONS } from \"./version\";\n\n// tslint:disable:no-bitwise\nfunction numBitsDiffering(x: number, y: number) {\n  let z = x ^ y;\n  let bitCount = 0;\n  while (z) {\n    bitCount++;\n    z &= z - 1;\n  }\n  return bitCount;\n}\n\nfunction pushBit(bit: any, byte: number) {\n  return (byte << 1) | bit;\n}\n// tslint:enable:no-bitwise\n\nconst FORMAT_INFO_TABLE = [\n  { bits: 0x5412, formatInfo: { errorCorrectionLevel: 1, dataMask: 0 } },\n  { bits: 0x5125, formatInfo: { errorCorrectionLevel: 1, dataMask: 1 } },\n  { bits: 0x5E7C, formatInfo: { errorCorrectionLevel: 1, dataMask: 2 } },\n  { bits: 0x5B4B, formatInfo: { errorCorrectionLevel: 1, dataMask: 3 } },\n  { bits: 0x45F9, formatInfo: { errorCorrectionLevel: 1, dataMask: 4 } },\n  { bits: 0x40CE, formatInfo: { errorCorrectionLevel: 1, dataMask: 5 } },\n  { bits: 0x4F97, formatInfo: { errorCorrectionLevel: 1, dataMask: 6 } },\n  { bits: 0x4AA0, formatInfo: { errorCorrectionLevel: 1, dataMask: 7 } },\n  { bits: 0x77C4, formatInfo: { errorCorrectionLevel: 0, dataMask: 0 } },\n  { bits: 0x72F3, formatInfo: { errorCorrectionLevel: 0, dataMask: 1 } },\n  { bits: 0x7DAA, formatInfo: { errorCorrectionLevel: 0, dataMask: 2 } },\n  { bits: 0x789D, formatInfo: { errorCorrectionLevel: 0, dataMask: 3 } },\n  { bits: 0x662F, formatInfo: { errorCorrectionLevel: 0, dataMask: 4 } },\n  { bits: 0x6318, formatInfo: { errorCorrectionLevel: 0, dataMask: 5 } },\n  { bits: 0x6C41, formatInfo: { errorCorrectionLevel: 0, dataMask: 6 } },\n  { bits: 0x6976, formatInfo: { errorCorrectionLevel: 0, dataMask: 7 } },\n  { bits: 0x1689, formatInfo: { errorCorrectionLevel: 3, dataMask: 0 } },\n  { bits: 0x13BE, formatInfo: { errorCorrectionLevel: 3, dataMask: 1 } },\n  { bits: 0x1CE7, formatInfo: { errorCorrectionLevel: 3, dataMask: 2 } },\n  { bits: 0x19D0, formatInfo: { errorCorrectionLevel: 3, dataMask: 3 } },\n  { bits: 0x0762, formatInfo: { errorCorrectionLevel: 3, dataMask: 4 } },\n  { bits: 0x0255, formatInfo: { errorCorrectionLevel: 3, dataMask: 5 } },\n  { bits: 0x0D0C, formatInfo: { errorCorrectionLevel: 3, dataMask: 6 } },\n  { bits: 0x083B, formatInfo: { errorCorrectionLevel: 3, dataMask: 7 } },\n  { bits: 0x355F, formatInfo: { errorCorrectionLevel: 2, dataMask: 0 } },\n  { bits: 0x3068, formatInfo: { errorCorrectionLevel: 2, dataMask: 1 } },\n  { bits: 0x3F31, formatInfo: { errorCorrectionLevel: 2, dataMask: 2 } },\n  { bits: 0x3A06, formatInfo: { errorCorrectionLevel: 2, dataMask: 3 } },\n  { bits: 0x24B4, formatInfo: { errorCorrectionLevel: 2, dataMask: 4 } },\n  { bits: 0x2183, formatInfo: { errorCorrectionLevel: 2, dataMask: 5 } },\n  { bits: 0x2EDA, formatInfo: { errorCorrectionLevel: 2, dataMask: 6 } },\n  { bits: 0x2BED, formatInfo: { errorCorrectionLevel: 2, dataMask: 7 } },\n];\n\nconst DATA_MASKS = [\n  (p: Point) => ((p.y + p.x) % 2) === 0,\n  (p: Point) => (p.y % 2) === 0,\n  (p: Point) => p.x % 3 === 0,\n  (p: Point) => (p.y + p.x) % 3 === 0,\n  (p: Point) => (Math.floor(p.y / 2) + Math.floor(p.x / 3)) % 2 === 0,\n  (p: Point) => ((p.x * p.y) % 2) + ((p.x * p.y) % 3) === 0,\n  (p: Point) => ((((p.y * p.x) % 2) + (p.y * p.x) % 3) % 2) === 0,\n  (p: Point) => ((((p.y + p.x) % 2) + (p.y * p.x) % 3) % 2) === 0,\n];\n\ninterface FormatInformation {\n  errorCorrectionLevel: number;\n  dataMask: number;\n}\n\nfunction buildFunctionPatternMask(version: Version): BitMatrix {\n  const dimension = 17 + 4 * version.versionNumber;\n  const matrix = BitMatrix.createEmpty(dimension, dimension);\n\n  matrix.setRegion(0, 0, 9, 9, true); // Top left finder pattern + separator + format\n  matrix.setRegion(dimension - 8, 0, 8, 9, true); // Top right finder pattern + separator + format\n  matrix.setRegion(0, dimension - 8, 9, 8, true); // Bottom left finder pattern + separator + format\n\n  // Alignment patterns\n  for (const x of version.alignmentPatternCenters) {\n    for (const y of version.alignmentPatternCenters) {\n      if (!(x === 6 && y === 6 || x === 6 && y === dimension - 7 || x === dimension - 7 && y === 6)) {\n        matrix.setRegion(x - 2, y - 2, 5, 5, true);\n      }\n    }\n  }\n\n  matrix.setRegion(6, 9, 1, dimension - 17, true); // Vertical timing pattern\n  matrix.setRegion(9, 6, dimension - 17, 1, true); // Horizontal timing pattern\n\n  if (version.versionNumber > 6) {\n    matrix.setRegion(dimension - 11, 0, 3, 6, true); // Version info, top right\n    matrix.setRegion(0, dimension - 11, 6, 3, true); // Version info, bottom left\n  }\n\n  return matrix;\n}\n\nfunction readCodewords(matrix: BitMatrix, version: Version, formatInfo: FormatInformation) {\n  const dataMask = DATA_MASKS[formatInfo.dataMask];\n  const dimension = matrix.height;\n\n  const functionPatternMask = buildFunctionPatternMask(version);\n\n  const codewords: number[] = [];\n  let currentByte = 0;\n  let bitsRead = 0;\n\n  // Read columns in pairs, from right to left\n  let readingUp = true;\n  for (let columnIndex = dimension - 1; columnIndex > 0; columnIndex -= 2) {\n    if (columnIndex === 6) { // Skip whole column with vertical alignment pattern;\n      columnIndex--;\n    }\n    for (let i = 0; i < dimension; i++) {\n      const y = readingUp ? dimension - 1 - i : i;\n      for (let columnOffset = 0; columnOffset < 2; columnOffset++) {\n        const x = columnIndex - columnOffset;\n        if (!functionPatternMask.get(x, y)) {\n          bitsRead++;\n          let bit = matrix.get(x, y);\n          if (dataMask({y, x})) {\n            bit = !bit;\n          }\n          currentByte = pushBit(bit, currentByte);\n          if (bitsRead === 8) { // Whole bytes\n            codewords.push(currentByte);\n            bitsRead = 0;\n            currentByte = 0;\n          }\n        }\n      }\n    }\n    readingUp = !readingUp;\n  }\n  return codewords;\n}\n\nfunction readVersion(matrix: BitMatrix): Version {\n  const dimension = matrix.height;\n\n  const provisionalVersion = Math.floor((dimension - 17) / 4);\n  if (provisionalVersion <= 6) { // 6 and under dont have version info in the QR code\n    return VERSIONS[provisionalVersion - 1];\n  }\n\n  let topRightVersionBits = 0;\n  for (let y = 5; y >= 0; y--) {\n    for (let x = dimension - 9; x >= dimension - 11; x--) {\n      topRightVersionBits = pushBit(matrix.get(x, y), topRightVersionBits);\n    }\n  }\n\n  let bottomLeftVersionBits = 0;\n  for (let x = 5; x >= 0; x--) {\n    for (let y = dimension - 9; y >= dimension - 11; y--) {\n      bottomLeftVersionBits = pushBit(matrix.get(x, y), bottomLeftVersionBits);\n    }\n  }\n\n  let bestDifference = Infinity;\n  let bestVersion: Version;\n  for (const version of VERSIONS) {\n    if (version.infoBits === topRightVersionBits || version.infoBits === bottomLeftVersionBits) {\n      return version;\n    }\n\n    let difference = numBitsDiffering(topRightVersionBits, version.infoBits);\n    if (difference < bestDifference) {\n      bestVersion = version;\n      bestDifference = difference;\n    }\n\n    difference = numBitsDiffering(bottomLeftVersionBits, version.infoBits);\n    if (difference < bestDifference) {\n      bestVersion = version;\n      bestDifference = difference;\n    }\n  }\n  // We can tolerate up to 3 bits of error since no two version info codewords will\n  // differ in less than 8 bits.\n  if (bestDifference <= 3) {\n    return bestVersion;\n  }\n}\n\nfunction readFormatInformation(matrix: BitMatrix) {\n  let topLeftFormatInfoBits = 0;\n  for (let x = 0; x <= 8; x++) {\n    if (x !== 6) { // Skip timing pattern bit\n      topLeftFormatInfoBits = pushBit(matrix.get(x, 8), topLeftFormatInfoBits);\n    }\n  }\n  for (let y = 7; y >= 0; y--) {\n    if (y !== 6) { // Skip timing pattern bit\n      topLeftFormatInfoBits = pushBit(matrix.get(8, y), topLeftFormatInfoBits);\n    }\n  }\n\n  const dimension = matrix.height;\n  let topRightBottomRightFormatInfoBits = 0;\n  for (let y = dimension - 1; y >= dimension - 7; y--) { // bottom left\n    topRightBottomRightFormatInfoBits = pushBit(matrix.get(8, y), topRightBottomRightFormatInfoBits);\n  }\n  for (let x = dimension - 8; x < dimension; x++) { // top right\n    topRightBottomRightFormatInfoBits = pushBit(matrix.get(x, 8), topRightBottomRightFormatInfoBits);\n  }\n\n  let bestDifference = Infinity;\n  let bestFormatInfo = null;\n  for (const {bits, formatInfo} of FORMAT_INFO_TABLE) {\n    if (bits === topLeftFormatInfoBits || bits === topRightBottomRightFormatInfoBits) {\n      return formatInfo;\n    }\n    let difference = numBitsDiffering(topLeftFormatInfoBits, bits);\n    if (difference < bestDifference) {\n      bestFormatInfo = formatInfo;\n      bestDifference = difference;\n    }\n    if (topLeftFormatInfoBits !== topRightBottomRightFormatInfoBits) { // also try the other option\n      difference = numBitsDiffering(topRightBottomRightFormatInfoBits, bits);\n      if (difference < bestDifference) {\n        bestFormatInfo = formatInfo;\n        bestDifference = difference;\n      }\n    }\n  }\n  // Hamming distance of the 32 masked codes is 7, by construction, so <= 3 bits differing means we found a match\n  if (bestDifference <= 3) {\n    return bestFormatInfo;\n  }\n  return null;\n}\n\nfunction getDataBlocks(codewords: number[], version: Version, ecLevel: number) {\n  const ecInfo = version.errorCorrectionLevels[ecLevel];\n  const dataBlocks: Array<{\n    numDataCodewords: number;\n    codewords: number[];\n  }> = [];\n\n  let totalCodewords = 0;\n  ecInfo.ecBlocks.forEach(block => {\n    for (let i = 0; i < block.numBlocks; i++) {\n      dataBlocks.push({ numDataCodewords: block.dataCodewordsPerBlock, codewords: [] });\n      totalCodewords += block.dataCodewordsPerBlock + ecInfo.ecCodewordsPerBlock;\n    }\n  });\n\n  // In some cases the QR code will be malformed enough that we pull off more or less than we should.\n  // If we pull off less there's nothing we can do.\n  // If we pull off more we can safely truncate\n  if (codewords.length < totalCodewords) {\n    return null;\n  }\n  codewords = codewords.slice(0, totalCodewords);\n\n  const shortBlockSize = ecInfo.ecBlocks[0].dataCodewordsPerBlock;\n  // Pull codewords to fill the blocks up to the minimum size\n  for (let i = 0; i < shortBlockSize; i++) {\n    for (const dataBlock of dataBlocks) {\n      dataBlock.codewords.push(codewords.shift());\n    }\n  }\n\n  // If there are any large blocks, pull codewords to fill the last element of those\n  if (ecInfo.ecBlocks.length > 1) {\n    const smallBlockCount = ecInfo.ecBlocks[0].numBlocks;\n    const largeBlockCount = ecInfo.ecBlocks[1].numBlocks;\n    for (let i = 0; i < largeBlockCount; i++) {\n      dataBlocks[smallBlockCount + i].codewords.push(codewords.shift());\n    }\n  }\n\n  // Add the rest of the codewords to the blocks. These are the error correction codewords.\n  while (codewords.length > 0) {\n    for (const dataBlock of dataBlocks) {\n      dataBlock.codewords.push(codewords.shift());\n    }\n  }\n\n  return dataBlocks;\n}\n\nfunction decodeMatrix(matrix: BitMatrix) {\n  const version = readVersion(matrix);\n  if (!version) {\n    return null;\n  }\n\n  const formatInfo = readFormatInformation(matrix);\n  if (!formatInfo) {\n    return null;\n  }\n\n  const codewords = readCodewords(matrix, version, formatInfo);\n  const dataBlocks = getDataBlocks(codewords, version, formatInfo.errorCorrectionLevel);\n  if (!dataBlocks) {\n    return null;\n  }\n\n  // Count total number of data bytes\n  const totalBytes = dataBlocks.reduce((a, b) => a + b.numDataCodewords, 0);\n  const resultBytes = new Uint8ClampedArray(totalBytes);\n\n  let resultIndex = 0;\n  for (const dataBlock of dataBlocks) {\n    const correctedBytes = rsDecode(dataBlock.codewords, dataBlock.codewords.length - dataBlock.numDataCodewords);\n    if (!correctedBytes) {\n      return null;\n    }\n    for (let i = 0; i < dataBlock.numDataCodewords; i++) {\n      resultBytes[resultIndex++] = correctedBytes[i];\n    }\n  }\n\n  try {\n    return decodeData(resultBytes, version.versionNumber);\n  } catch {\n    return null;\n  }\n}\n\nexport function decode(matrix: BitMatrix): DecodedQR {\n  if (matrix == null) {\n    return null;\n  }\n  const result = decodeMatrix(matrix);\n  if (result) {\n    return result;\n  }\n  // Decoding didn't work, try mirroring the QR across the topLeft -> bottomRight line.\n  for (let x = 0; x < matrix.width; x++) {\n    for (let y = x + 1; y < matrix.height; y++) {\n      if (matrix.get(x, y) !== matrix.get(y, x)) {\n        matrix.set(x, y, !matrix.get(x, y));\n        matrix.set(y, x, !matrix.get(y, x));\n      }\n    }\n  }\n  return decodeMatrix(matrix);\n}\n","import {BitMatrix} from \"../BitMatrix\";\nimport {Point, QRLocation} from \"../locator\";\n\ninterface PerspectiveTransform {\n  a11: number;\n  a21: number;\n  a31: number;\n  a12: number;\n  a22: number;\n  a32: number;\n  a13: number;\n  a23: number;\n  a33: number;\n}\n\nfunction squareToQuadrilateral(p1: Point, p2: Point, p3: Point, p4: Point): PerspectiveTransform {\n  const dx3 = p1.x - p2.x + p3.x - p4.x;\n  const dy3 = p1.y - p2.y + p3.y - p4.y;\n  if (dx3 === 0 && dy3 === 0) { // Affine\n    return {\n      a11: p2.x - p1.x,\n      a12: p2.y - p1.y,\n      a13: 0,\n      a21: p3.x - p2.x,\n      a22: p3.y - p2.y,\n      a23: 0,\n      a31: p1.x,\n      a32: p1.y,\n      a33: 1,\n    };\n  } else {\n    const dx1 = p2.x - p3.x;\n    const dx2 = p4.x - p3.x;\n    const dy1 = p2.y - p3.y;\n    const dy2 = p4.y - p3.y;\n    const denominator = dx1 * dy2 - dx2 * dy1;\n    const a13 = (dx3 * dy2 - dx2 * dy3) / denominator;\n    const a23 = (dx1 * dy3 - dx3 * dy1) / denominator;\n    return {\n      a11: p2.x - p1.x + a13 * p2.x,\n      a12: p2.y - p1.y + a13 * p2.y,\n      a13,\n      a21: p4.x - p1.x + a23 * p4.x,\n      a22: p4.y - p1.y + a23 * p4.y,\n      a23,\n      a31: p1.x,\n      a32: p1.y,\n      a33: 1,\n    };\n  }\n}\n\nfunction quadrilateralToSquare(p1: Point, p2: Point, p3: Point, p4: Point): PerspectiveTransform {\n  // Here, the adjoint serves as the inverse:\n  const sToQ = squareToQuadrilateral(p1, p2, p3, p4);\n  return {\n    a11: sToQ.a22 * sToQ.a33 - sToQ.a23 * sToQ.a32,\n    a12: sToQ.a13 * sToQ.a32 - sToQ.a12 * sToQ.a33,\n    a13: sToQ.a12 * sToQ.a23 - sToQ.a13 * sToQ.a22,\n    a21: sToQ.a23 * sToQ.a31 - sToQ.a21 * sToQ.a33,\n    a22: sToQ.a11 * sToQ.a33 - sToQ.a13 * sToQ.a31,\n    a23: sToQ.a13 * sToQ.a21 - sToQ.a11 * sToQ.a23,\n    a31: sToQ.a21 * sToQ.a32 - sToQ.a22 * sToQ.a31,\n    a32: sToQ.a12 * sToQ.a31 - sToQ.a11 * sToQ.a32,\n    a33: sToQ.a11 * sToQ.a22 - sToQ.a12 * sToQ.a21,\n  };\n}\n\nfunction times(a: PerspectiveTransform, b: PerspectiveTransform): PerspectiveTransform {\n  return {\n    a11: a.a11 * b.a11 + a.a21 * b.a12 + a.a31 * b.a13,\n    a12: a.a12 * b.a11 + a.a22 * b.a12 + a.a32 * b.a13,\n    a13: a.a13 * b.a11 + a.a23 * b.a12 + a.a33 * b.a13,\n    a21: a.a11 * b.a21 + a.a21 * b.a22 + a.a31 * b.a23,\n    a22: a.a12 * b.a21 + a.a22 * b.a22 + a.a32 * b.a23,\n    a23: a.a13 * b.a21 + a.a23 * b.a22 + a.a33 * b.a23,\n    a31: a.a11 * b.a31 + a.a21 * b.a32 + a.a31 * b.a33,\n    a32: a.a12 * b.a31 + a.a22 * b.a32 + a.a32 * b.a33,\n    a33: a.a13 * b.a31 + a.a23 * b.a32 + a.a33 * b.a33,\n  };\n}\n\nexport function extract(image: BitMatrix, location: QRLocation) {\n  const qToS = quadrilateralToSquare(\n    {x: 3.5, y: 3.5},\n    {x: location.dimension - 3.5, y: 3.5},\n    {x: location.dimension - 6.5, y: location.dimension - 6.5},\n    {x: 3.5, y: location.dimension - 3.5},\n  );\n  const sToQ = squareToQuadrilateral(location.topLeft, location.topRight, location.alignmentPattern, location.bottomLeft);\n  const transform = times(sToQ, qToS);\n\n  const matrix = BitMatrix.createEmpty(location.dimension, location.dimension);\n  const mappingFunction = (x: number, y: number) => {\n    const denominator = transform.a13 * x + transform.a23 * y + transform.a33;\n    return {\n      x: (transform.a11 * x + transform.a21 * y + transform.a31) / denominator,\n      y: (transform.a12 * x + transform.a22 * y + transform.a32) / denominator,\n    };\n  };\n\n  for (let y = 0; y < location.dimension; y++) {\n    for (let x = 0; x < location.dimension; x++) {\n      const xValue = x + 0.5;\n      const yValue = y + 0.5;\n      const sourcePixel = mappingFunction(xValue, yValue);\n      matrix.set(x, y, image.get(Math.floor(sourcePixel.x), Math.floor(sourcePixel.y)));\n    }\n  }\n\n  return {\n    matrix,\n    mappingFunction,\n  };\n}\n","import { BitMatrix } from \"../BitMatrix\";\n\nconst MAX_FINDERPATTERNS_TO_SEARCH = 5;\nconst MIN_QUAD_RATIO = 0.5;\nconst MAX_QUAD_RATIO = 1.5;\n\nexport interface Point {\n  x: number;\n  y: number;\n}\n\nexport interface QRLocation {\n  topRight: Point;\n  bottomLeft: Point;\n  topLeft: Point;\n  alignmentPattern: Point;\n  dimension: number;\n}\n\nconst distance = (a: Point, b: Point) => Math.sqrt((b.x - a.x) ** 2 + (b.y - a.y) ** 2);\n\nfunction sum(values: number[]) {\n  return values.reduce((a, b) => a + b);\n}\n\n// Takes three finder patterns and organizes them into topLeft, topRight, etc\nfunction reorderFinderPatterns(pattern1: Point, pattern2: Point, pattern3: Point) {\n  // Find distances between pattern centers\n  const oneTwoDistance = distance(pattern1, pattern2);\n  const twoThreeDistance = distance(pattern2, pattern3);\n  const oneThreeDistance = distance(pattern1, pattern3);\n\n  let bottomLeft: Point;\n  let topLeft: Point;\n  let topRight: Point;\n\n  // Assume one closest to other two is B; A and C will just be guesses at first\n  if (twoThreeDistance >= oneTwoDistance && twoThreeDistance >= oneThreeDistance) {\n    [bottomLeft, topLeft, topRight] = [pattern2, pattern1, pattern3];\n  } else if (oneThreeDistance >= twoThreeDistance && oneThreeDistance >= oneTwoDistance) {\n    [bottomLeft, topLeft, topRight] = [pattern1, pattern2, pattern3];\n  } else {\n    [bottomLeft, topLeft, topRight] = [pattern1, pattern3, pattern2];\n  }\n\n  // Use cross product to figure out whether bottomLeft (A) and topRight (C) are correct or flipped in relation to topLeft (B)\n  // This asks whether BC x BA has a positive z component, which is the arrangement we want. If it's negative, then\n  // we've got it flipped around and should swap topRight and bottomLeft.\n  if (((topRight.x - topLeft.x) * (bottomLeft.y - topLeft.y)) - ((topRight.y - topLeft.y) * (bottomLeft.x - topLeft.x)) < 0) {\n    [bottomLeft, topRight] = [topRight, bottomLeft];\n  }\n\n  return { bottomLeft, topLeft, topRight };\n}\n\n// Computes the dimension (number of modules on a side) of the QR Code based on the position of the finder patterns\nfunction computeDimension(topLeft: Point, topRight: Point, bottomLeft: Point, matrix: BitMatrix) {\n  const moduleSize = (\n    sum(countBlackWhiteRun(topLeft, bottomLeft, matrix, 5)) / 7 + // Divide by 7 since the ratio is 1:1:3:1:1\n    sum(countBlackWhiteRun(topLeft, topRight, matrix, 5)) / 7 +\n    sum(countBlackWhiteRun(bottomLeft, topLeft, matrix, 5)) / 7 +\n    sum(countBlackWhiteRun(topRight, topLeft, matrix, 5)) / 7\n  ) / 4;\n\n  if (moduleSize < 1) {\n    throw new Error(\"Invalid module size\");\n  }\n\n  const topDimension = Math.round(distance(topLeft, topRight) / moduleSize);\n  const sideDimension = Math.round(distance(topLeft, bottomLeft) / moduleSize);\n  let dimension = Math.floor((topDimension + sideDimension) / 2) + 7;\n  switch (dimension % 4) {\n    case 0:\n      dimension++;\n      break;\n    case 2:\n      dimension--;\n      break;\n  }\n  return { dimension, moduleSize };\n}\n\n// Takes an origin point and an end point and counts the sizes of the black white run from the origin towards the end point.\n// Returns an array of elements, representing the pixel size of the black white run.\n// Uses a variant of http://en.wikipedia.org/wiki/Bresenham's_line_algorithm\nfunction countBlackWhiteRunTowardsPoint(origin: Point, end: Point, matrix: BitMatrix, length: number) {\n  const switchPoints: Point[] = [{x: Math.floor(origin.x), y: Math.floor(origin.y)}];\n  const steep = Math.abs(end.y - origin.y) > Math.abs(end.x - origin.x);\n\n  let fromX: number;\n  let fromY: number;\n  let toX: number;\n  let toY: number;\n  if (steep) {\n    fromX = Math.floor(origin.y);\n    fromY = Math.floor(origin.x);\n    toX = Math.floor(end.y);\n    toY = Math.floor(end.x);\n  } else {\n    fromX = Math.floor(origin.x);\n    fromY = Math.floor(origin.y);\n    toX = Math.floor(end.x);\n    toY = Math.floor(end.y);\n  }\n\n  const dx = Math.abs(toX - fromX);\n  const dy = Math.abs(toY - fromY);\n  let error = Math.floor(-dx / 2);\n  const xStep = fromX < toX ? 1 : -1;\n  const yStep = fromY < toY ? 1 : -1;\n\n  let currentPixel = true;\n  // Loop up until x == toX, but not beyond\n  for (let x = fromX, y = fromY; x !== toX + xStep; x += xStep) {\n    // Does current pixel mean we have moved white to black or vice versa?\n    // Scanning black in state 0,2 and white in state 1, so if we find the wrong\n    // color, advance to next state or end if we are in state 2 already\n    const realX = steep ? y : x;\n    const realY = steep ? x : y;\n    if (matrix.get(realX, realY) !== currentPixel) {\n      currentPixel = !currentPixel;\n      switchPoints.push({x: realX, y: realY});\n      if (switchPoints.length === length + 1) {\n        break;\n      }\n    }\n    error += dy;\n    if (error > 0) {\n      if (y === toY) {\n        break;\n      }\n      y += yStep;\n      error -= dx;\n    }\n  }\n  const distances: number[] = [];\n  for (let i = 0; i < length; i++) {\n    if (switchPoints[i] && switchPoints[i + 1]) {\n      distances.push(distance(switchPoints[i], switchPoints[i + 1]));\n    } else {\n      distances.push(0);\n    }\n  }\n  return distances;\n}\n\n// Takes an origin point and an end point and counts the sizes of the black white run in the origin point\n// along the line that intersects with the end point. Returns an array of elements, representing the pixel sizes\n// of the black white run. Takes a length which represents the number of switches from black to white to look for.\nfunction countBlackWhiteRun(origin: Point, end: Point, matrix: BitMatrix, length: number) {\n  const rise = end.y - origin.y;\n  const run = end.x - origin.x;\n\n  const towardsEnd = countBlackWhiteRunTowardsPoint(origin, end, matrix, Math.ceil(length / 2));\n  const awayFromEnd = countBlackWhiteRunTowardsPoint(origin, {x: origin.x - run, y: origin.y - rise}, matrix, Math.ceil(length / 2));\n\n  const middleValue = towardsEnd.shift() + awayFromEnd.shift() - 1; // Substract one so we don't double count a pixel\n  return awayFromEnd.concat(middleValue).concat(...towardsEnd);\n}\n\n// Takes in a black white run and an array of expected ratios. Returns the average size of the run as well as the \"error\" -\n// that is the amount the run diverges from the expected ratio\nfunction scoreBlackWhiteRun(sequence: number[], ratios: number[]) {\n  const averageSize = sum(sequence) / sum(ratios);\n  let error = 0;\n  ratios.forEach((ratio, i) => {\n    error += (sequence[i] - ratio * averageSize) ** 2;\n  });\n\n  return { averageSize, error };\n}\n\n// Takes an X,Y point and an array of sizes and scores the point against those ratios.\n// For example for a finder pattern takes the ratio list of 1:1:3:1:1 and checks horizontal, vertical and diagonal ratios\n// against that.\nfunction scorePattern(point: Point, ratios: number[], matrix: BitMatrix) {\n  try {\n    const horizontalRun = countBlackWhiteRun(point, {x: -1, y: point.y}, matrix, ratios.length);\n    const verticalRun = countBlackWhiteRun(point, {x: point.x, y: -1}, matrix, ratios.length);\n\n    const topLeftPoint = {\n      x: Math.max(0, point.x - point.y) - 1,\n      y: Math.max(0, point.y - point.x) - 1,\n    };\n    const topLeftBottomRightRun = countBlackWhiteRun(point, topLeftPoint, matrix, ratios.length);\n\n    const bottomLeftPoint = {\n      x: Math.min(matrix.width, point.x + point.y) + 1,\n      y: Math.min(matrix.height, point.y + point.x) + 1,\n    };\n    const bottomLeftTopRightRun = countBlackWhiteRun(point, bottomLeftPoint, matrix, ratios.length);\n\n    const horzError = scoreBlackWhiteRun(horizontalRun, ratios);\n    const vertError = scoreBlackWhiteRun(verticalRun, ratios);\n    const diagDownError = scoreBlackWhiteRun(topLeftBottomRightRun, ratios);\n    const diagUpError = scoreBlackWhiteRun(bottomLeftTopRightRun, ratios);\n\n    const ratioError = Math.sqrt(horzError.error * horzError.error +\n      vertError.error * vertError.error +\n      diagDownError.error * diagDownError.error +\n      diagUpError.error * diagUpError.error);\n\n    const avgSize = (horzError.averageSize + vertError.averageSize + diagDownError.averageSize + diagUpError.averageSize) / 4;\n\n    const sizeError = ((horzError.averageSize - avgSize) ** 2 +\n      (vertError.averageSize - avgSize) ** 2 +\n      (diagDownError.averageSize - avgSize) ** 2 +\n      (diagUpError.averageSize - avgSize) ** 2) / avgSize;\n    return ratioError + sizeError;\n  } catch {\n    return Infinity;\n  }\n}\n\nfunction recenterLocation(matrix: BitMatrix, p: Point): Point {\n  let leftX = Math.round(p.x);\n  while (matrix.get(leftX, Math.round(p.y))) {\n    leftX--;\n  }\n  let rightX = Math.round(p.x);\n  while (matrix.get(rightX, Math.round(p.y))) {\n    rightX++;\n  }\n  const x = (leftX + rightX) / 2;\n\n  let topY = Math.round(p.y);\n  while (matrix.get(Math.round(x), topY)) {\n    topY--;\n  }\n  let bottomY = Math.round(p.y);\n  while (matrix.get(Math.round(x), bottomY)) {\n    bottomY++;\n  }\n  const y = (topY + bottomY) / 2;\n\n  return { x, y };\n}\n\ninterface Quad {\n  top: {\n    startX: number;\n    endX: number;\n    y: number;\n  };\n  bottom: {\n    startX: number;\n    endX: number;\n    y: number;\n  };\n}\n\nexport function locate(matrix: BitMatrix): QRLocation[] {\n  const finderPatternQuads: Quad[] = [];\n  let activeFinderPatternQuads: Quad[] = [];\n  const alignmentPatternQuads: Quad[] = [];\n  let activeAlignmentPatternQuads: Quad[] = [];\n\n  for (let y = 0; y <= matrix.height; y++) {\n    let length = 0;\n    let lastBit = false;\n    let scans = [0, 0, 0, 0, 0];\n\n    for (let x = -1; x <= matrix.width; x++) {\n      const v = matrix.get(x, y);\n      if (v === lastBit) {\n        length++;\n      } else {\n        scans = [scans[1], scans[2], scans[3], scans[4], length];\n        length = 1;\n        lastBit = v;\n\n        // Do the last 5 color changes ~ match the expected ratio for a finder pattern? 1:1:3:1:1 of b:w:b:w:b\n        const averageFinderPatternBlocksize = sum(scans) / 7;\n        const validFinderPattern =\n          Math.abs(scans[0] - averageFinderPatternBlocksize) < averageFinderPatternBlocksize &&\n          Math.abs(scans[1] - averageFinderPatternBlocksize) < averageFinderPatternBlocksize &&\n          Math.abs(scans[2] - 3 * averageFinderPatternBlocksize) < 3 * averageFinderPatternBlocksize &&\n          Math.abs(scans[3] - averageFinderPatternBlocksize) < averageFinderPatternBlocksize &&\n          Math.abs(scans[4] - averageFinderPatternBlocksize) < averageFinderPatternBlocksize &&\n          !v; // And make sure the current pixel is white since finder patterns are bordered in white\n\n        // Do the last 3 color changes ~ match the expected ratio for an alignment pattern? 1:1:1 of w:b:w\n        const averageAlignmentPatternBlocksize = sum(scans.slice(-3)) / 3;\n        const validAlignmentPattern =\n          Math.abs(scans[2] - averageAlignmentPatternBlocksize) < averageAlignmentPatternBlocksize &&\n          Math.abs(scans[3] - averageAlignmentPatternBlocksize) < averageAlignmentPatternBlocksize &&\n          Math.abs(scans[4] - averageAlignmentPatternBlocksize) < averageAlignmentPatternBlocksize &&\n          v; // Is the current pixel black since alignment patterns are bordered in black\n\n        if (validFinderPattern) {\n          // Compute the start and end x values of the large center black square\n          const endX = x - scans[3] - scans[4];\n          const startX = endX - scans[2];\n\n          const line = { startX, endX, y };\n          // Is there a quad directly above the current spot? If so, extend it with the new line. Otherwise, create a new quad with\n          // that line as the starting point.\n          const matchingQuads = activeFinderPatternQuads.filter(q =>\n            (startX >= q.bottom.startX && startX <= q.bottom.endX) ||\n            (endX >= q.bottom.startX && startX <= q.bottom.endX) ||\n            (startX <= q.bottom.startX && endX >= q.bottom.endX && (\n              (scans[2] / (q.bottom.endX - q.bottom.startX)) < MAX_QUAD_RATIO &&\n              (scans[2] / (q.bottom.endX - q.bottom.startX)) > MIN_QUAD_RATIO\n            )),\n          );\n          if (matchingQuads.length > 0) {\n            matchingQuads[0].bottom = line;\n          } else {\n            activeFinderPatternQuads.push({ top: line, bottom: line });\n          }\n        }\n        if (validAlignmentPattern) {\n          // Compute the start and end x values of the center black square\n          const endX = x - scans[4];\n          const startX = endX - scans[3];\n\n          const line = { startX, y, endX };\n          // Is there a quad directly above the current spot? If so, extend it with the new line. Otherwise, create a new quad with\n          // that line as the starting point.\n          const matchingQuads = activeAlignmentPatternQuads.filter(q =>\n            (startX >= q.bottom.startX && startX <= q.bottom.endX) ||\n            (endX >= q.bottom.startX && startX <= q.bottom.endX) ||\n            (startX <= q.bottom.startX && endX >= q.bottom.endX && (\n              (scans[2] / (q.bottom.endX - q.bottom.startX)) < MAX_QUAD_RATIO &&\n              (scans[2] / (q.bottom.endX - q.bottom.startX)) > MIN_QUAD_RATIO\n            )),\n          );\n          if (matchingQuads.length > 0) {\n            matchingQuads[0].bottom = line;\n          } else {\n            activeAlignmentPatternQuads.push({ top: line, bottom: line });\n          }\n        }\n      }\n    }\n    finderPatternQuads.push(...activeFinderPatternQuads.filter(q => q.bottom.y !== y && q.bottom.y - q.top.y >= 2));\n    activeFinderPatternQuads = activeFinderPatternQuads.filter(q => q.bottom.y === y);\n\n    alignmentPatternQuads.push(...activeAlignmentPatternQuads.filter(q => q.bottom.y !== y));\n    activeAlignmentPatternQuads = activeAlignmentPatternQuads.filter(q => q.bottom.y === y);\n\n  }\n\n  finderPatternQuads.push(...activeFinderPatternQuads.filter(q => q.bottom.y - q.top.y >= 2));\n  alignmentPatternQuads.push(...activeAlignmentPatternQuads);\n\n  // Refactored from cozmo/jsQR to (hopefully) circumvent an issue in Safari 13+ on both Mac and iOS (also including\n  // iOS Chrome and other Safari iOS derivatives). Safari was very occasionally and apparently not deterministically\n  // throwing a \"RangeError: Array size is not a small enough positive integer.\" exception seemingly within the second\n  // .map of the original code (here the second for-loop). This second .map contained a nested .map call over the same\n  // array instance which was the chained result from previous calls to .map, .filter and .sort which potentially caused\n  // this bug in Safari?\n  // Also see https://github.com/cozmo/jsQR/issues/157 and https://bugs.webkit.org/show_bug.cgi?id=211619#c3\n  const scoredFinderPatternPositions: Array<Point & { size: number, score: number }> = [];\n  for (const quad of finderPatternQuads) {\n    if (quad.bottom.y - quad.top.y < 2) {\n      // All quads must be at least 2px tall since the center square is larger than a block\n      continue;\n    }\n\n    // calculate quad center\n    const x = (quad.top.startX + quad.top.endX + quad.bottom.startX + quad.bottom.endX) / 4;\n    const y = (quad.top.y + quad.bottom.y + 1) / 2;\n    if (!matrix.get(Math.round(x), Math.round(y))) {\n      continue;\n    }\n\n    const lengths = [quad.top.endX - quad.top.startX, quad.bottom.endX - quad.bottom.startX, quad.bottom.y - quad.top.y + 1];\n    const size = sum(lengths) / lengths.length;\n    // Initial scoring of finder pattern quads by looking at their ratios, not taking into account position\n    const score = scorePattern({x: Math.round(x), y: Math.round(y)}, [1, 1, 3, 1, 1], matrix);\n    scoredFinderPatternPositions.push({ score, x, y, size });\n  }\n  if (scoredFinderPatternPositions.length < 3) {\n    // A QR code has 3 finder patterns, therefore we need at least 3 candidates.\n    return null;\n  }\n  scoredFinderPatternPositions.sort((a, b) => a.score - b.score);\n\n  // Now take the top finder pattern options and try to find 2 other options with a similar size.\n  const finderPatternGroups: Array<{ points: [Point, Point, Point], score: number }> = [];\n  for (let i = 0; i < Math.min(scoredFinderPatternPositions.length, MAX_FINDERPATTERNS_TO_SEARCH); ++i) {\n    const point = scoredFinderPatternPositions[i];\n    const otherPoints: typeof scoredFinderPatternPositions = [];\n\n    for (const otherPoint of scoredFinderPatternPositions) {\n      if (otherPoint === point) {\n        continue;\n      }\n      otherPoints.push({\n        ...otherPoint,\n        score: otherPoint.score + ((otherPoint.size - point.size) ** 2) / point.size, // score similarity of sizes\n      });\n    }\n    otherPoints.sort((a, b) => a.score - b.score);\n\n    finderPatternGroups.push({\n      points: [point, otherPoints[0], otherPoints[1]], // note that otherPoints.length >= 2 as scoredFinderPatternPositions.length >= 3\n      score: point.score + otherPoints[0].score + otherPoints[1].score, // total combined score of the three points in the group\n    });\n  }\n  finderPatternGroups.sort((a, b) => a.score - b.score);\n  const bestFinderPatternGroup = finderPatternGroups[0];\n\n  const { topRight, topLeft, bottomLeft } = reorderFinderPatterns(...bestFinderPatternGroup.points);\n  const alignment = findAlignmentPattern(matrix, alignmentPatternQuads, topRight, topLeft, bottomLeft);\n  const result: QRLocation[] = [];\n  if (alignment) {\n    result.push({\n      alignmentPattern: { x: alignment.alignmentPattern.x, y: alignment.alignmentPattern.y },\n      bottomLeft: {x: bottomLeft.x, y: bottomLeft.y },\n      dimension: alignment.dimension,\n      topLeft: {x: topLeft.x, y: topLeft.y },\n      topRight: {x: topRight.x, y: topRight.y },\n    });\n  }\n\n  // We normally use the center of the quads as the location of the tracking points, which is optimal for most cases and will account\n  // for a skew in the image. However, In some cases, a slight skew might not be real and instead be caused by image compression\n  // errors and/or low resolution. For those cases, we'd be better off centering the point exactly in the middle of the black area. We\n  // compute and return the location data for the naively centered points as it is little additional work and allows for multiple\n  // attempts at decoding harder images.\n  const midTopRight = recenterLocation(matrix, topRight);\n  const midTopLeft = recenterLocation(matrix, topLeft);\n  const midBottomLeft = recenterLocation(matrix, bottomLeft);\n  const centeredAlignment = findAlignmentPattern(matrix, alignmentPatternQuads, midTopRight, midTopLeft, midBottomLeft);\n  if (centeredAlignment) {\n    result.push({\n      alignmentPattern: { x: centeredAlignment.alignmentPattern.x, y: centeredAlignment.alignmentPattern.y },\n      bottomLeft: { x: midBottomLeft.x, y: midBottomLeft. y },\n      topLeft: { x: midTopLeft.x, y: midTopLeft. y },\n      topRight: { x: midTopRight.x, y: midTopRight. y },\n      dimension: centeredAlignment.dimension,\n    });\n  }\n\n  if (result.length === 0) {\n    return null;\n  }\n\n  return result;\n}\n\nfunction findAlignmentPattern(matrix: BitMatrix, alignmentPatternQuads: Quad[], topRight: Point, topLeft: Point, bottomLeft: Point) {\n  // Now that we've found the three finder patterns we can determine the blockSize and the size of the QR code.\n  // We'll use these to help find the alignment pattern but also later when we do the extraction.\n  let dimension: number;\n  let moduleSize: number;\n  try {\n    ({ dimension, moduleSize } = computeDimension(topLeft, topRight, bottomLeft, matrix));\n  } catch (e) {\n    return null;\n  }\n\n  // Now find the alignment pattern\n  const bottomRightFinderPattern = { // Best guess at where a bottomRight finder pattern would be\n    x: topRight.x - topLeft.x + bottomLeft.x,\n    y: topRight.y - topLeft.y + bottomLeft.y,\n  };\n  const modulesBetweenFinderPatterns = ((distance(topLeft, bottomLeft) + distance(topLeft, topRight)) / 2 / moduleSize);\n  const correctionToTopLeft = 1 - (3 / modulesBetweenFinderPatterns);\n  const expectedAlignmentPattern = {\n    x: topLeft.x + correctionToTopLeft * (bottomRightFinderPattern.x - topLeft.x),\n    y: topLeft.y + correctionToTopLeft * (bottomRightFinderPattern.y - topLeft.y),\n  };\n\n  const alignmentPatterns = alignmentPatternQuads\n    .map(q => {\n      const x = (q.top.startX + q.top.endX + q.bottom.startX + q.bottom.endX) / 4;\n      const y = (q.top.y + q.bottom.y + 1) / 2;\n      if (!matrix.get(Math.floor(x), Math.floor(y))) {\n        return;\n      }\n\n      const sizeScore = scorePattern({x: Math.floor(x), y: Math.floor(y)}, [1, 1, 1], matrix);\n      const score = sizeScore + distance({x, y}, expectedAlignmentPattern);\n      return { x, y, score };\n    })\n    .filter(v => !!v)\n    .sort((a, b) => a.score - b.score);\n\n  // If there are less than 15 modules between finder patterns it's a version 1 QR code and as such has no alignmemnt pattern\n  // so we can only use our best guess.\n  const alignmentPattern = modulesBetweenFinderPatterns >= 15 && alignmentPatterns.length ? alignmentPatterns[0] : expectedAlignmentPattern;\n\n  return { alignmentPattern, dimension };\n}\n","import {binarize} from \"./binarizer\";\nimport {BitMatrix} from \"./BitMatrix\";\nimport {Chunks} from \"./decoder/decodeData\";\nimport {decode} from \"./decoder/decoder\";\nimport { Version } from \"./decoder/version\";\nimport {extract} from \"./extractor\";\nimport {locate, Point} from \"./locator\";\n\nexport interface QRCode {\n  binaryData: number[];\n  data: string;\n  chunks: Chunks;\n  version: number;\n  location: {\n    topRightCorner: Point;\n    topLeftCorner: Point;\n    bottomRightCorner: Point;\n    bottomLeftCorner: Point;\n\n    topRightFinderPattern: Point;\n    topLeftFinderPattern: Point;\n    bottomLeftFinderPattern: Point;\n\n    bottomRightAlignmentPattern?: Point;\n  };\n  matrix: BitMatrix;\n}\n\nfunction scan(matrix: BitMatrix): QRCode | null {\n  const locations = locate(matrix);\n  if (!locations) {\n    return null;\n  }\n\n  for (const location of locations) {\n    const extracted = extract(matrix, location);\n    const decoded = decode(extracted.matrix);\n    if (decoded) {\n      return {\n        binaryData: decoded.bytes,\n        data: decoded.text,\n        chunks: decoded.chunks,\n        version: decoded.version,\n        location: {\n          topRightCorner: extracted.mappingFunction(location.dimension, 0),\n          topLeftCorner: extracted.mappingFunction(0, 0),\n          bottomRightCorner: extracted.mappingFunction(location.dimension, location.dimension),\n          bottomLeftCorner: extracted.mappingFunction(0, location.dimension),\n\n          topRightFinderPattern: location.topRight,\n          topLeftFinderPattern: location.topLeft,\n          bottomLeftFinderPattern: location.bottomLeft,\n\n          bottomRightAlignmentPattern: location.alignmentPattern,\n        },\n        matrix: extracted.matrix,\n      };\n    }\n  }\n  return null;\n}\n\nexport interface Options {\n  inversionAttempts?: \"dontInvert\" | \"onlyInvert\" | \"attemptBoth\" | \"invertFirst\";\n  greyScaleWeights?: GreyscaleWeights;\n  canOverwriteImage?: boolean;\n}\n\nexport interface GreyscaleWeights {\n  red: number;\n  green: number;\n  blue: number;\n  useIntegerApproximation?: boolean;\n}\n\nconst defaultOptions: Options = {\n  inversionAttempts: \"attemptBoth\",\n  greyScaleWeights: {\n    red: 0.2126,\n    green: 0.7152,\n    blue: 0.0722,\n    useIntegerApproximation: false,\n  },\n  canOverwriteImage: true,\n};\n\nfunction mergeObject(target: any, src: any) {\n  Object.keys(src).forEach(opt => { // Sad implementation of Object.assign since we target es5 not es6\n    target[opt] = src[opt];\n  });\n}\n\nfunction jsQR(data: Uint8ClampedArray, width: number, height: number, providedOptions: Options = {}): QRCode | null {\n  const options = Object.create(null);\n  mergeObject(options, defaultOptions);\n  mergeObject(options, providedOptions);\n\n  const tryInvertedFirst = options.inversionAttempts === \"onlyInvert\" || options.inversionAttempts === \"invertFirst\";\n  const shouldInvert = options.inversionAttempts === \"attemptBoth\" || tryInvertedFirst;\n  const {binarized, inverted} = binarize(data, width, height, shouldInvert, options.greyScaleWeights,\n      options.canOverwriteImage);\n  let result = scan(tryInvertedFirst ? inverted : binarized);\n  if (!result && (options.inversionAttempts === \"attemptBoth\" || options.inversionAttempts === \"invertFirst\")) {\n    result = scan(tryInvertedFirst ? binarized : inverted);\n  }\n  return result;\n}\n\n(jsQR as any).default = jsQR;\nexport default jsQR;\n","import {BitMatrix} from \"../BitMatrix\";\nimport {GreyscaleWeights} from \"../index\";\n\nconst REGION_SIZE = 8;\nconst MIN_DYNAMIC_RANGE = 24;\n\nfunction numBetween(value: number, min: number, max: number): number {\n  return value < min ? min : value > max ? max : value;\n}\n\n// Like BitMatrix but accepts arbitry Uint8 values\nclass Matrix {\n  private data: Uint8ClampedArray;\n  private width: number;\n  constructor(width: number, height: number, buffer?: Uint8ClampedArray) {\n    this.width = width;\n    const bufferSize = width * height;\n    if (buffer && buffer.length !== bufferSize) {\n      throw new Error(\"Wrong buffer size\");\n    }\n    this.data = buffer || new Uint8ClampedArray(bufferSize);\n  }\n  public get(x: number, y: number) {\n    return this.data[y * this.width + x];\n  }\n  public set(x: number, y: number, value: number) {\n    this.data[y * this.width + x] = value;\n  }\n}\n\nexport function binarize(data: Uint8ClampedArray, width: number, height: number, returnInverted: boolean,\n                         greyscaleWeights: GreyscaleWeights, canOverwriteImage: boolean) {\n  const pixelCount = width * height;\n  if (data.length !== pixelCount * 4) {\n    throw new Error(\"Malformed data passed to binarizer.\");\n  }\n  // assign the greyscale and binary image within the rgba buffer as the rgba image will not be needed after conversion\n  let bufferOffset = 0;\n  // Convert image to greyscale\n  let greyscaleBuffer: Uint8ClampedArray;\n  if (canOverwriteImage) {\n    greyscaleBuffer = new Uint8ClampedArray(data.buffer, bufferOffset, pixelCount);\n    bufferOffset += pixelCount;\n  }\n  const greyscalePixels = new Matrix(width, height, greyscaleBuffer);\n  if (greyscaleWeights.useIntegerApproximation) {\n    for (let y = 0; y < height; y++) {\n      for (let x = 0; x < width; x++) {\n        const pixelPosition = (y * width + x) * 4;\n        const r = data[pixelPosition];\n        const g = data[pixelPosition + 1];\n        const b = data[pixelPosition + 2];\n        greyscalePixels.set(x, y,\n          // tslint:disable-next-line no-bitwise\n          (greyscaleWeights.red * r + greyscaleWeights.green * g + greyscaleWeights.blue * b + 128) >> 8);\n      }\n    }\n  } else {\n    for (let y = 0; y < height; y++) {\n      for (let x = 0; x < width; x++) {\n        const pixelPosition = (y * width + x) * 4;\n        const r = data[pixelPosition];\n        const g = data[pixelPosition + 1];\n        const b = data[pixelPosition + 2];\n        greyscalePixels.set(x, y,\n          greyscaleWeights.red * r + greyscaleWeights.green * g + greyscaleWeights.blue * b);\n      }\n    }\n  }\n  const horizontalRegionCount = Math.ceil(width / REGION_SIZE);\n  const verticalRegionCount = Math.ceil(height / REGION_SIZE);\n  const blackPointsCount = horizontalRegionCount * verticalRegionCount;\n\n  let blackPointsBuffer: Uint8ClampedArray;\n  if (canOverwriteImage) {\n    blackPointsBuffer = new Uint8ClampedArray(data.buffer, bufferOffset, blackPointsCount);\n    bufferOffset += blackPointsCount;\n  }\n  const blackPoints = new Matrix(horizontalRegionCount, verticalRegionCount, blackPointsBuffer);\n  for (let verticalRegion = 0; verticalRegion < verticalRegionCount; verticalRegion++) {\n    for (let hortizontalRegion = 0; hortizontalRegion < horizontalRegionCount; hortizontalRegion++) {\n      let min = Infinity;\n      let max = 0;\n      for (let y = 0; y < REGION_SIZE; y++) {\n        for (let x = 0; x < REGION_SIZE; x++) {\n          const pixelLumosity =\n            greyscalePixels.get(hortizontalRegion * REGION_SIZE + x, verticalRegion * REGION_SIZE + y);\n          min = Math.min(min, pixelLumosity);\n          max = Math.max(max, pixelLumosity);\n        }\n      }\n      // We could also compute the real average of all pixels but following the assumption that the qr code consists\n      // of bright and dark pixels and essentially not much in between, by (min + max)/2 we make the cut really between\n      // those two classes. If using the average over all pixel in a block of mostly bright pixels and few dark pixels,\n      // the avg would tend to the bright side and darker bright pixels could be interpreted as dark.\n      let average = (min + max) / 2;\n      // Small bias towards black by moving the threshold up. We do this, as in the finder patterns white holes tend\n      // to appear which makes them undetectable.\n      const blackBias = 1.11;\n      average = Math.min(255, average * blackBias);\n      if (max - min <= MIN_DYNAMIC_RANGE) {\n        // If variation within the block is low, assume this is a block with only light or only\n        // dark pixels. In that case we do not want to use the average, as it would divide this\n        // low contrast area into black and white pixels, essentially creating data out of noise.\n        //\n        // Default the blackpoint for these blocks to be half the min - effectively white them out\n        average = min / 2;\n\n        if (verticalRegion > 0 && hortizontalRegion > 0) {\n          // Correct the \"white background\" assumption for blocks that have neighbors by comparing\n          // the pixels in this block to the previously calculated black points. This is based on\n          // the fact that dark barcode symbology is always surrounded by some amount of light\n          // background for which reasonable black point estimates were made. The bp estimated at\n          // the boundaries is used for the interior.\n\n          // The (min < bp) is arbitrary but works better than other heuristics that were tried.\n          const averageNeighborBlackPoint = (\n            blackPoints.get(hortizontalRegion, verticalRegion - 1) +\n            (2 * blackPoints.get(hortizontalRegion - 1, verticalRegion)) +\n            blackPoints.get(hortizontalRegion - 1, verticalRegion - 1)\n          ) / 4;\n          if (min < averageNeighborBlackPoint) {\n            average = averageNeighborBlackPoint; // no need to apply black bias as already applied to neighbors\n          }\n        }\n      }\n      blackPoints.set(hortizontalRegion, verticalRegion, average);\n    }\n  }\n\n  let binarized: BitMatrix;\n  if (canOverwriteImage) {\n    const binarizedBuffer = new Uint8ClampedArray(data.buffer, bufferOffset, pixelCount);\n    bufferOffset += pixelCount;\n    binarized = new BitMatrix(binarizedBuffer, width);\n  } else {\n    binarized = BitMatrix.createEmpty(width, height);\n  }\n\n  let inverted: BitMatrix = null;\n  if (returnInverted) {\n    if (canOverwriteImage) {\n      const invertedBuffer = new Uint8ClampedArray(data.buffer, bufferOffset, pixelCount);\n      inverted = new BitMatrix(invertedBuffer, width);\n    } else {\n      inverted = BitMatrix.createEmpty(width, height);\n    }\n  }\n\n  for (let verticalRegion = 0; verticalRegion < verticalRegionCount; verticalRegion++) {\n    for (let hortizontalRegion = 0; hortizontalRegion < horizontalRegionCount; hortizontalRegion++) {\n      const left = numBetween(hortizontalRegion, 2, horizontalRegionCount - 3);\n      const top = numBetween(verticalRegion, 2, verticalRegionCount - 3);\n      let sum = 0;\n      for (let xRegion = -2; xRegion <= 2; xRegion++) {\n        for (let yRegion = -2; yRegion <= 2; yRegion++) {\n          sum += blackPoints.get(left + xRegion, top + yRegion);\n        }\n      }\n      const threshold = sum / 25;\n      for (let xRegion = 0; xRegion < REGION_SIZE; xRegion++) {\n        for (let yRegion = 0; yRegion < REGION_SIZE; yRegion++) {\n          const x = hortizontalRegion * REGION_SIZE + xRegion;\n          const y = verticalRegion * REGION_SIZE + yRegion;\n          const lum = greyscalePixels.get(x, y);\n          binarized.set(x, y, lum <= threshold);\n          if (returnInverted) {\n            inverted.set(x, y, !(lum <= threshold));\n          }\n        }\n      }\n    }\n  }\n  if (returnInverted) {\n    return { binarized, inverted };\n  }\n  return { binarized };\n}\n","export class BitMatrix {\n  public static createEmpty(width: number, height: number) {\n    return new BitMatrix(new Uint8ClampedArray(width * height), width);\n  }\n\n  public width: number;\n  public height: number;\n  private data: Uint8ClampedArray;\n\n  constructor(data: Uint8ClampedArray, width: number) {\n    this.width = width;\n    this.height = data.length / width;\n    this.data = data;\n  }\n\n  public get(x: number, y: number): boolean {\n    if (x < 0 || x >= this.width || y < 0 || y >= this.height) {\n      return false;\n    }\n    return !!this.data[y * this.width + x];\n  }\n\n  public set(x: number, y: number, v: boolean) {\n    this.data[y * this.width + x] = v ? 1 : 0;\n  }\n\n  public setRegion(left: number, top: number, width: number, height: number, v: boolean) {\n    for (let y = top; y < top + height; y++) {\n      for (let x = left; x < left + width; x++) {\n        this.set(x, y, !!v);\n      }\n    }\n  }\n}\n","// tslint:disable:no-bitwise\n\nexport class BitStream {\n  private bytes: Uint8ClampedArray;\n  private byteOffset: number = 0;\n  private bitOffset: number = 0;\n\n  constructor(bytes: Uint8ClampedArray) {\n    this.bytes = bytes;\n  }\n\n  public readBits(numBits: number): number {\n    if (numBits < 1 || numBits > 32 || numBits > this.available()) {\n      throw new Error(\"Cannot read \" + numBits.toString() + \" bits\");\n    }\n\n    let result = 0;\n    // First, read remainder from current byte\n    if (this.bitOffset > 0) {\n      const bitsLeft = 8 - this.bitOffset;\n      const toRead = numBits < bitsLeft ? numBits : bitsLeft;\n      const bitsToNotRead = bitsLeft - toRead;\n      const mask = (0xFF >> (8 - toRead)) << bitsToNotRead;\n      result = (this.bytes[this.byteOffset] & mask) >> bitsToNotRead;\n      numBits -= toRead;\n      this.bitOffset += toRead;\n      if (this.bitOffset === 8) {\n        this.bitOffset = 0;\n        this.byteOffset++;\n      }\n    }\n\n    // Next read whole bytes\n    if (numBits > 0) {\n      while (numBits >= 8) {\n        result = (result << 8) | (this.bytes[this.byteOffset] & 0xFF);\n        this.byteOffset++;\n        numBits -= 8;\n      }\n\n      // Finally read a partial byte\n      if (numBits > 0) {\n        const bitsToNotRead = 8 - numBits;\n        const mask = (0xFF >> bitsToNotRead) << bitsToNotRead;\n        result = (result << numBits) | ((this.bytes[this.byteOffset] & mask) >> bitsToNotRead);\n        this.bitOffset += numBits;\n      }\n    }\n    return result;\n  }\n\n  public available(): number {\n    return 8 * (this.bytes.length - this.byteOffset) - this.bitOffset;\n  }\n}\n","import GenericGF, { addOrSubtractGF } from \"./GenericGF\";\n\nexport default class GenericGFPoly {\n  private field: GenericGF;\n  private coefficients: Uint8ClampedArray;\n\n  constructor(field: GenericGF, coefficients: Uint8ClampedArray) {\n    if (coefficients.length === 0) {\n      throw new Error(\"No coefficients.\");\n    }\n    this.field = field;\n    const coefficientsLength = coefficients.length;\n    if (coefficientsLength > 1 && coefficients[0] === 0) {\n      // Leading term must be non-zero for anything except the constant polynomial \"0\"\n      let firstNonZero = 1;\n      while (firstNonZero < coefficientsLength && coefficients[firstNonZero] === 0) {\n        firstNonZero++;\n      }\n      if (firstNonZero === coefficientsLength) {\n        this.coefficients = field.zero.coefficients;\n      } else {\n        this.coefficients = new Uint8ClampedArray(coefficientsLength - firstNonZero);\n        for (let i = 0; i < this.coefficients.length; i++) {\n          this.coefficients[i] = coefficients[firstNonZero + i];\n        }\n      }\n    } else {\n      this.coefficients = coefficients;\n    }\n  }\n\n  public degree() {\n    return this.coefficients.length - 1;\n  }\n\n  public isZero() {\n    return this.coefficients[0] === 0;\n  }\n\n  public getCoefficient(degree: number) {\n    return this.coefficients[this.coefficients.length - 1 - degree];\n  }\n\n  public addOrSubtract(other: GenericGFPoly) {\n    if (this.isZero()) {\n      return other;\n    }\n    if (other.isZero()) {\n      return this;\n    }\n\n    let smallerCoefficients = this.coefficients;\n    let largerCoefficients = other.coefficients;\n    if (smallerCoefficients.length > largerCoefficients.length) {\n      [smallerCoefficients, largerCoefficients] = [largerCoefficients, smallerCoefficients];\n    }\n    const sumDiff = new Uint8ClampedArray(largerCoefficients.length);\n    const lengthDiff = largerCoefficients.length - smallerCoefficients.length;\n    for (let i = 0; i < lengthDiff; i++) {\n      sumDiff[i] = largerCoefficients[i];\n    }\n\n    for (let i = lengthDiff; i < largerCoefficients.length; i++) {\n      sumDiff[i] = addOrSubtractGF(smallerCoefficients[i - lengthDiff], largerCoefficients[i]);\n    }\n\n    return new GenericGFPoly(this.field, sumDiff);\n  }\n\n  public multiply(scalar: number) {\n    if (scalar === 0) {\n      return this.field.zero;\n    }\n    if (scalar === 1) {\n      return this;\n    }\n    const size = this.coefficients.length;\n    const product = new Uint8ClampedArray(size);\n    for (let i = 0; i < size; i++) {\n      product[i] = this.field.multiply(this.coefficients[i], scalar);\n    }\n\n    return new GenericGFPoly(this.field, product);\n  }\n\n  public multiplyPoly(other: GenericGFPoly): GenericGFPoly {\n    if (this.isZero() || other.isZero()) {\n      return this.field.zero;\n    }\n    const aCoefficients = this.coefficients;\n    const aLength = aCoefficients.length;\n    const bCoefficients = other.coefficients;\n    const bLength = bCoefficients.length;\n    const product = new Uint8ClampedArray(aLength + bLength - 1);\n    for (let i = 0; i < aLength; i++) {\n      const aCoeff = aCoefficients[i];\n      for (let j = 0; j < bLength; j++) {\n        product[i + j] = addOrSubtractGF(product[i + j],\n          this.field.multiply(aCoeff, bCoefficients[j]));\n      }\n    }\n    return new GenericGFPoly(this.field, product);\n  }\n\n  public multiplyByMonomial(degree: number, coefficient: number) {\n    if (degree < 0) {\n      throw new Error(\"Invalid degree less than 0\");\n    }\n    if (coefficient === 0) {\n      return this.field.zero;\n    }\n    const size = this.coefficients.length;\n    const product = new Uint8ClampedArray(size + degree);\n    for (let i = 0; i < size; i++) {\n      product[i] = this.field.multiply(this.coefficients[i], coefficient);\n    }\n    return new GenericGFPoly(this.field, product);\n  }\n\n  public evaluateAt(a: number) {\n    let result = 0;\n    if (a === 0) {\n      // Just return the x^0 coefficient\n      return this.getCoefficient(0);\n    }\n    const size = this.coefficients.length;\n    if (a === 1) {\n      // Just the sum of the coefficients\n      this.coefficients.forEach((coefficient) => {\n        result = addOrSubtractGF(result, coefficient);\n      });\n      return result;\n    }\n    result = this.coefficients[0];\n    for (let i = 1; i < size; i++) {\n      result = addOrSubtractGF(this.field.multiply(a, result), this.coefficients[i]);\n    }\n    return result;\n  }\n}\n","export interface Version {\n  infoBits: number;\n  versionNumber: number;\n  alignmentPatternCenters: number[];\n  errorCorrectionLevels: Array<{\n    ecCodewordsPerBlock: number;\n    ecBlocks: Array<{\n      numBlocks: number;\n      dataCodewordsPerBlock: number;\n    }>\n  }>;\n}\n\nexport const VERSIONS: Version[] = [\n  {\n    infoBits: null,\n    versionNumber: 1,\n    alignmentPatternCenters: [],\n    errorCorrectionLevels: [\n      {\n        ecCodewordsPerBlock: 7,\n        ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 19 }],\n      },\n      {\n        ecCodewordsPerBlock: 10,\n        ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 16 }],\n      },\n      {\n        ecCodewordsPerBlock: 13,\n        ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 13 }],\n      },\n      {\n        ecCodewordsPerBlock: 17,\n        ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 9 }],\n      },\n    ],\n  },\n  {\n    infoBits: null,\n    versionNumber: 2,\n    alignmentPatternCenters: [6, 18],\n    errorCorrectionLevels: [\n      {\n        ecCodewordsPerBlock: 10,\n        ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 34 }],\n      },\n      {\n        ecCodewordsPerBlock: 16,\n        ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 28 }],\n      },\n      {\n        ecCodewordsPerBlock: 22,\n        ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 22 }],\n      },\n      {\n        ecCodewordsPerBlock: 28,\n        ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 16 }],\n      },\n    ],\n  },\n  {\n    infoBits: null,\n    versionNumber: 3,\n    alignmentPatternCenters: [6, 22],\n    errorCorrectionLevels: [\n      {\n        ecCodewordsPerBlock: 15,\n        ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 55 }],\n      },\n      {\n        ecCodewordsPerBlock: 26,\n        ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 44 }],\n      },\n      {\n        ecCodewordsPerBlock: 18,\n        ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 17 }],\n      },\n      {\n        ecCodewordsPerBlock: 22,\n        ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 13 }],\n      },\n    ],\n  },\n  {\n    infoBits: null,\n    versionNumber: 4,\n    alignmentPatternCenters: [6, 26],\n    errorCorrectionLevels: [\n      {\n        ecCodewordsPerBlock: 20,\n        ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 80 }],\n      },\n      {\n        ecCodewordsPerBlock: 18,\n        ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 32 }],\n      },\n      {\n        ecCodewordsPerBlock: 26,\n        ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 24 }],\n      },\n      {\n        ecCodewordsPerBlock: 16,\n        ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 9 }],\n      },\n    ],\n  },\n  {\n    infoBits: null,\n    versionNumber: 5,\n    alignmentPatternCenters: [6, 30],\n    errorCorrectionLevels: [\n      {\n        ecCodewordsPerBlock: 26,\n        ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 108 }],\n      },\n      {\n        ecCodewordsPerBlock: 24,\n        ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 43 }],\n      },\n      {\n        ecCodewordsPerBlock: 18,\n        ecBlocks: [\n          { numBlocks: 2, dataCodewordsPerBlock: 15 },\n          { numBlocks: 2, dataCodewordsPerBlock: 16 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 22,\n        ecBlocks: [\n          { numBlocks: 2, dataCodewordsPerBlock: 11 },\n          { numBlocks: 2, dataCodewordsPerBlock: 12 },\n        ],\n      },\n    ],\n  },\n  {\n    infoBits: null,\n    versionNumber: 6,\n    alignmentPatternCenters: [6, 34],\n    errorCorrectionLevels: [\n      {\n        ecCodewordsPerBlock: 18,\n        ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 68 }],\n      },\n      {\n        ecCodewordsPerBlock: 16,\n        ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 27 }],\n      },\n      {\n        ecCodewordsPerBlock: 24,\n        ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 19 }],\n      },\n      {\n        ecCodewordsPerBlock: 28,\n        ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 15 }],\n      },\n    ],\n  },\n  {\n    infoBits: 0x07C94,\n    versionNumber: 7,\n    alignmentPatternCenters: [6, 22, 38],\n    errorCorrectionLevels: [\n      {\n        ecCodewordsPerBlock: 20,\n        ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 78 }],\n      },\n      {\n        ecCodewordsPerBlock: 18,\n        ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 31 }],\n      },\n      {\n        ecCodewordsPerBlock: 18,\n        ecBlocks: [\n          { numBlocks: 2, dataCodewordsPerBlock: 14 },\n          { numBlocks: 4, dataCodewordsPerBlock: 15 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 26,\n        ecBlocks: [\n          { numBlocks: 4, dataCodewordsPerBlock: 13 },\n          { numBlocks: 1, dataCodewordsPerBlock: 14 },\n        ],\n      },\n    ],\n  },\n  {\n    infoBits: 0x085BC,\n    versionNumber: 8,\n    alignmentPatternCenters: [6, 24, 42],\n    errorCorrectionLevels: [\n      {\n        ecCodewordsPerBlock: 24,\n        ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 97 }],\n      },\n      {\n        ecCodewordsPerBlock: 22,\n        ecBlocks: [\n          { numBlocks: 2, dataCodewordsPerBlock: 38 },\n          { numBlocks: 2, dataCodewordsPerBlock: 39 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 22,\n        ecBlocks: [\n          { numBlocks: 4, dataCodewordsPerBlock: 18 },\n          { numBlocks: 2, dataCodewordsPerBlock: 19 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 26,\n        ecBlocks: [\n          { numBlocks: 4, dataCodewordsPerBlock: 14 },\n          { numBlocks: 2, dataCodewordsPerBlock: 15 },\n        ],\n      },\n    ],\n  },\n  {\n    infoBits: 0x09A99,\n    versionNumber: 9,\n    alignmentPatternCenters: [6, 26, 46],\n    errorCorrectionLevels: [\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 116 }],\n      },\n      {\n        ecCodewordsPerBlock: 22,\n        ecBlocks: [\n          { numBlocks: 3, dataCodewordsPerBlock: 36 },\n          { numBlocks: 2, dataCodewordsPerBlock: 37 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 20,\n        ecBlocks: [\n          { numBlocks: 4, dataCodewordsPerBlock: 16 },\n          { numBlocks: 4, dataCodewordsPerBlock: 17 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 24,\n        ecBlocks: [\n          { numBlocks: 4, dataCodewordsPerBlock: 12 },\n          { numBlocks: 4, dataCodewordsPerBlock: 13 },\n        ],\n      },\n    ],\n  },\n  {\n    infoBits: 0x0A4D3,\n    versionNumber: 10,\n    alignmentPatternCenters: [6, 28, 50],\n    errorCorrectionLevels: [\n      {\n        ecCodewordsPerBlock: 18,\n        ecBlocks: [\n          { numBlocks: 2, dataCodewordsPerBlock: 68 },\n          { numBlocks: 2, dataCodewordsPerBlock: 69 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 26,\n        ecBlocks: [\n          { numBlocks: 4, dataCodewordsPerBlock: 43 },\n          { numBlocks: 1, dataCodewordsPerBlock: 44 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 24,\n        ecBlocks: [\n          { numBlocks: 6, dataCodewordsPerBlock: 19 },\n          { numBlocks: 2, dataCodewordsPerBlock: 20 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 28,\n        ecBlocks: [\n          { numBlocks: 6, dataCodewordsPerBlock: 15 },\n          { numBlocks: 2, dataCodewordsPerBlock: 16 },\n        ],\n      },\n    ],\n  },\n  {\n    infoBits: 0x0BBF6,\n    versionNumber: 11,\n    alignmentPatternCenters: [6, 30, 54],\n    errorCorrectionLevels: [\n      {\n        ecCodewordsPerBlock: 20,\n        ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 81 }],\n      },\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 1, dataCodewordsPerBlock: 50 },\n          { numBlocks: 4, dataCodewordsPerBlock: 51 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 28,\n        ecBlocks: [\n          { numBlocks: 4, dataCodewordsPerBlock: 22 },\n          { numBlocks: 4, dataCodewordsPerBlock: 23 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 24,\n        ecBlocks: [\n          { numBlocks: 3, dataCodewordsPerBlock: 12 },\n          { numBlocks: 8, dataCodewordsPerBlock: 13 },\n        ],\n      },\n    ],\n  },\n  {\n    infoBits: 0x0C762,\n    versionNumber: 12,\n    alignmentPatternCenters: [6, 32, 58],\n    errorCorrectionLevels: [\n      {\n        ecCodewordsPerBlock: 24,\n        ecBlocks: [\n          { numBlocks: 2, dataCodewordsPerBlock: 92 },\n          { numBlocks: 2, dataCodewordsPerBlock: 93 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 22,\n        ecBlocks: [\n          { numBlocks: 6, dataCodewordsPerBlock: 36 },\n          { numBlocks: 2, dataCodewordsPerBlock: 37 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 26,\n        ecBlocks: [\n          { numBlocks: 4, dataCodewordsPerBlock: 20 },\n          { numBlocks: 6, dataCodewordsPerBlock: 21 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 28,\n        ecBlocks: [\n          { numBlocks: 7, dataCodewordsPerBlock: 14 },\n          { numBlocks: 4, dataCodewordsPerBlock: 15 },\n        ],\n      },\n    ],\n  },\n  {\n    infoBits: 0x0D847,\n    versionNumber: 13,\n    alignmentPatternCenters: [6, 34, 62],\n    errorCorrectionLevels: [\n      {\n        ecCodewordsPerBlock: 26,\n        ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 107 }],\n      },\n      {\n        ecCodewordsPerBlock: 22,\n        ecBlocks: [\n          { numBlocks: 8, dataCodewordsPerBlock: 37 },\n          { numBlocks: 1, dataCodewordsPerBlock: 38 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 24,\n        ecBlocks: [\n          { numBlocks: 8, dataCodewordsPerBlock: 20 },\n          { numBlocks: 4, dataCodewordsPerBlock: 21 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 22,\n        ecBlocks: [\n          { numBlocks: 12, dataCodewordsPerBlock: 11 },\n          { numBlocks: 4, dataCodewordsPerBlock: 12 },\n        ],\n      },\n    ],\n  },\n  {\n    infoBits: 0x0E60D,\n    versionNumber: 14,\n    alignmentPatternCenters: [6, 26, 46, 66],\n    errorCorrectionLevels: [\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 3, dataCodewordsPerBlock: 115 },\n          { numBlocks: 1, dataCodewordsPerBlock: 116 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 24,\n        ecBlocks: [\n          { numBlocks: 4, dataCodewordsPerBlock: 40 },\n          { numBlocks: 5, dataCodewordsPerBlock: 41 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 20,\n        ecBlocks: [\n          { numBlocks: 11, dataCodewordsPerBlock: 16 },\n          { numBlocks: 5, dataCodewordsPerBlock: 17 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 24,\n        ecBlocks: [\n          { numBlocks: 11, dataCodewordsPerBlock: 12 },\n          { numBlocks: 5, dataCodewordsPerBlock: 13 },\n        ],\n      },\n    ],\n  },\n  {\n    infoBits: 0x0F928,\n    versionNumber: 15,\n    alignmentPatternCenters: [6, 26, 48, 70],\n    errorCorrectionLevels: [\n      {\n        ecCodewordsPerBlock: 22,\n        ecBlocks: [\n          { numBlocks: 5, dataCodewordsPerBlock: 87 },\n          { numBlocks: 1, dataCodewordsPerBlock: 88 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 24,\n        ecBlocks: [\n          { numBlocks: 5, dataCodewordsPerBlock: 41 },\n          { numBlocks: 5, dataCodewordsPerBlock: 42 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 5, dataCodewordsPerBlock: 24 },\n          { numBlocks: 7, dataCodewordsPerBlock: 25 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 24,\n        ecBlocks: [\n          { numBlocks: 11, dataCodewordsPerBlock: 12 },\n          { numBlocks: 7, dataCodewordsPerBlock: 13 },\n        ],\n      },\n    ],\n  },\n  {\n    infoBits: 0x10B78,\n    versionNumber: 16,\n    alignmentPatternCenters: [6, 26, 50, 74],\n    errorCorrectionLevels: [\n      {\n        ecCodewordsPerBlock: 24,\n        ecBlocks: [\n          { numBlocks: 5, dataCodewordsPerBlock: 98 },\n          { numBlocks: 1, dataCodewordsPerBlock: 99 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 28,\n        ecBlocks: [\n          { numBlocks: 7, dataCodewordsPerBlock: 45 },\n          { numBlocks: 3, dataCodewordsPerBlock: 46 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 24,\n        ecBlocks: [\n          { numBlocks: 15, dataCodewordsPerBlock: 19 },\n          { numBlocks: 2, dataCodewordsPerBlock: 20 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 3, dataCodewordsPerBlock: 15 },\n          { numBlocks: 13, dataCodewordsPerBlock: 16 },\n        ],\n      },\n    ],\n  },\n  {\n    infoBits: 0x1145D,\n    versionNumber: 17,\n    alignmentPatternCenters: [6, 30, 54, 78],\n    errorCorrectionLevels: [\n      {\n        ecCodewordsPerBlock: 28,\n        ecBlocks: [\n          { numBlocks: 1, dataCodewordsPerBlock: 107 },\n          { numBlocks: 5, dataCodewordsPerBlock: 108 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 28,\n        ecBlocks: [\n          { numBlocks: 10, dataCodewordsPerBlock: 46 },\n          { numBlocks: 1, dataCodewordsPerBlock: 47 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 28,\n        ecBlocks: [\n          { numBlocks: 1, dataCodewordsPerBlock: 22 },\n          { numBlocks: 15, dataCodewordsPerBlock: 23 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 28,\n        ecBlocks: [\n          { numBlocks: 2, dataCodewordsPerBlock: 14 },\n          { numBlocks: 17, dataCodewordsPerBlock: 15 },\n        ],\n      },\n    ],\n  },\n  {\n    infoBits: 0x12A17,\n    versionNumber: 18,\n    alignmentPatternCenters: [6, 30, 56, 82],\n    errorCorrectionLevels: [\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 5, dataCodewordsPerBlock: 120 },\n          { numBlocks: 1, dataCodewordsPerBlock: 121 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 26,\n        ecBlocks: [\n          { numBlocks: 9, dataCodewordsPerBlock: 43 },\n          { numBlocks: 4, dataCodewordsPerBlock: 44 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 28,\n        ecBlocks: [\n          { numBlocks: 17, dataCodewordsPerBlock: 22 },\n          { numBlocks: 1, dataCodewordsPerBlock: 23 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 28,\n        ecBlocks: [\n          { numBlocks: 2, dataCodewordsPerBlock: 14 },\n          { numBlocks: 19, dataCodewordsPerBlock: 15 },\n        ],\n      },\n    ],\n  },\n  {\n    infoBits: 0x13532,\n    versionNumber: 19,\n    alignmentPatternCenters: [6, 30, 58, 86],\n    errorCorrectionLevels: [\n      {\n        ecCodewordsPerBlock: 28,\n        ecBlocks: [\n          { numBlocks: 3, dataCodewordsPerBlock: 113 },\n          { numBlocks: 4, dataCodewordsPerBlock: 114 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 26,\n        ecBlocks: [\n          { numBlocks: 3, dataCodewordsPerBlock: 44 },\n          { numBlocks: 11, dataCodewordsPerBlock: 45 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 26,\n        ecBlocks: [\n          { numBlocks: 17, dataCodewordsPerBlock: 21 },\n          { numBlocks: 4, dataCodewordsPerBlock: 22 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 26,\n        ecBlocks: [\n          { numBlocks: 9, dataCodewordsPerBlock: 13 },\n          { numBlocks: 16, dataCodewordsPerBlock: 14 },\n        ],\n      },\n    ],\n  },\n  {\n    infoBits: 0x149A6,\n    versionNumber: 20,\n    alignmentPatternCenters: [6, 34, 62, 90],\n    errorCorrectionLevels: [\n      {\n        ecCodewordsPerBlock: 28,\n        ecBlocks: [\n          { numBlocks: 3, dataCodewordsPerBlock: 107 },\n          { numBlocks: 5, dataCodewordsPerBlock: 108 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 26,\n        ecBlocks: [\n          { numBlocks: 3, dataCodewordsPerBlock: 41 },\n          { numBlocks: 13, dataCodewordsPerBlock: 42 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 15, dataCodewordsPerBlock: 24 },\n          { numBlocks: 5, dataCodewordsPerBlock: 25 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 28,\n        ecBlocks: [\n          { numBlocks: 15, dataCodewordsPerBlock: 15 },\n          { numBlocks: 10, dataCodewordsPerBlock: 16 },\n        ],\n      },\n    ],\n  },\n  {\n    infoBits: 0x15683,\n    versionNumber: 21,\n    alignmentPatternCenters: [6, 28, 50, 72, 94],\n    errorCorrectionLevels: [\n      {\n        ecCodewordsPerBlock: 28,\n        ecBlocks: [\n          { numBlocks: 4, dataCodewordsPerBlock: 116 },\n          { numBlocks: 4, dataCodewordsPerBlock: 117 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 26,\n        ecBlocks: [{ numBlocks: 17, dataCodewordsPerBlock: 42 }],\n      },\n      {\n        ecCodewordsPerBlock: 28,\n        ecBlocks: [\n          { numBlocks: 17, dataCodewordsPerBlock: 22 },\n          { numBlocks: 6, dataCodewordsPerBlock: 23 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 19, dataCodewordsPerBlock: 16 },\n          { numBlocks: 6, dataCodewordsPerBlock: 17 },\n        ],\n      },\n    ],\n  },\n  {\n    infoBits: 0x168C9,\n    versionNumber: 22,\n    alignmentPatternCenters: [6, 26, 50, 74, 98],\n    errorCorrectionLevels: [\n      {\n        ecCodewordsPerBlock: 28,\n        ecBlocks: [\n          { numBlocks: 2, dataCodewordsPerBlock: 111 },\n          { numBlocks: 7, dataCodewordsPerBlock: 112 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 28,\n        ecBlocks: [{ numBlocks: 17, dataCodewordsPerBlock: 46 }],\n      },\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 7, dataCodewordsPerBlock: 24 },\n          { numBlocks: 16, dataCodewordsPerBlock: 25 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 24,\n        ecBlocks: [{ numBlocks: 34, dataCodewordsPerBlock: 13 }],\n      },\n    ],\n  },\n  {\n    infoBits: 0x177EC,\n    versionNumber: 23,\n    alignmentPatternCenters: [6, 30, 54, 74, 102],\n    errorCorrectionLevels: [\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 4, dataCodewordsPerBlock: 121 },\n          { numBlocks: 5, dataCodewordsPerBlock: 122 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 28,\n        ecBlocks: [\n          { numBlocks: 4, dataCodewordsPerBlock: 47 },\n          { numBlocks: 14, dataCodewordsPerBlock: 48 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 11, dataCodewordsPerBlock: 24 },\n          { numBlocks: 14, dataCodewordsPerBlock: 25 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 16, dataCodewordsPerBlock: 15 },\n          { numBlocks: 14, dataCodewordsPerBlock: 16 },\n        ],\n      },\n    ],\n  },\n  {\n    infoBits: 0x18EC4,\n    versionNumber: 24,\n    alignmentPatternCenters: [6, 28, 54, 80, 106],\n    errorCorrectionLevels: [\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 6, dataCodewordsPerBlock: 117 },\n          { numBlocks: 4, dataCodewordsPerBlock: 118 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 28,\n        ecBlocks: [\n          { numBlocks: 6, dataCodewordsPerBlock: 45 },\n          { numBlocks: 14, dataCodewordsPerBlock: 46 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 11, dataCodewordsPerBlock: 24 },\n          { numBlocks: 16, dataCodewordsPerBlock: 25 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 30, dataCodewordsPerBlock: 16 },\n          { numBlocks: 2, dataCodewordsPerBlock: 17 },\n        ],\n      },\n    ],\n  },\n  {\n    infoBits: 0x191E1,\n    versionNumber: 25,\n    alignmentPatternCenters: [6, 32, 58, 84, 110],\n    errorCorrectionLevels: [\n      {\n        ecCodewordsPerBlock: 26,\n        ecBlocks: [\n          { numBlocks: 8, dataCodewordsPerBlock: 106 },\n          { numBlocks: 4, dataCodewordsPerBlock: 107 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 28,\n        ecBlocks: [\n          { numBlocks: 8, dataCodewordsPerBlock: 47 },\n          { numBlocks: 13, dataCodewordsPerBlock: 48 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 7, dataCodewordsPerBlock: 24 },\n          { numBlocks: 22, dataCodewordsPerBlock: 25 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 22, dataCodewordsPerBlock: 15 },\n          { numBlocks: 13, dataCodewordsPerBlock: 16 },\n        ],\n      },\n    ],\n  },\n  {\n    infoBits: 0x1AFAB,\n    versionNumber: 26,\n    alignmentPatternCenters: [6, 30, 58, 86, 114],\n    errorCorrectionLevels: [\n      {\n        ecCodewordsPerBlock: 28,\n        ecBlocks: [\n          { numBlocks: 10, dataCodewordsPerBlock: 114 },\n          { numBlocks: 2, dataCodewordsPerBlock: 115 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 28,\n        ecBlocks: [\n          { numBlocks: 19, dataCodewordsPerBlock: 46 },\n          { numBlocks: 4, dataCodewordsPerBlock: 47 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 28,\n        ecBlocks: [\n          { numBlocks: 28, dataCodewordsPerBlock: 22 },\n          { numBlocks: 6, dataCodewordsPerBlock: 23 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 33, dataCodewordsPerBlock: 16 },\n          { numBlocks: 4, dataCodewordsPerBlock: 17 },\n        ],\n      },\n    ],\n  },\n  {\n    infoBits: 0x1B08E,\n    versionNumber: 27,\n    alignmentPatternCenters: [6, 34, 62, 90, 118],\n    errorCorrectionLevels: [\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 8, dataCodewordsPerBlock: 122 },\n          { numBlocks: 4, dataCodewordsPerBlock: 123 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 28,\n        ecBlocks: [\n          { numBlocks: 22, dataCodewordsPerBlock: 45 },\n          { numBlocks: 3, dataCodewordsPerBlock: 46 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 8, dataCodewordsPerBlock: 23 },\n          { numBlocks: 26, dataCodewordsPerBlock: 24 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 12, dataCodewordsPerBlock: 15 },\n          { numBlocks: 28, dataCodewordsPerBlock: 16 },\n        ],\n      },\n    ],\n  },\n  {\n    infoBits: 0x1CC1A,\n    versionNumber: 28,\n    alignmentPatternCenters: [6, 26, 50, 74, 98, 122],\n    errorCorrectionLevels: [\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 3, dataCodewordsPerBlock: 117 },\n          { numBlocks: 10, dataCodewordsPerBlock: 118 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 28,\n        ecBlocks: [\n          { numBlocks: 3, dataCodewordsPerBlock: 45 },\n          { numBlocks: 23, dataCodewordsPerBlock: 46 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 4, dataCodewordsPerBlock: 24 },\n          { numBlocks: 31, dataCodewordsPerBlock: 25 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 11, dataCodewordsPerBlock: 15 },\n          { numBlocks: 31, dataCodewordsPerBlock: 16 },\n        ],\n      },\n    ],\n  },\n  {\n    infoBits: 0x1D33F,\n    versionNumber: 29,\n    alignmentPatternCenters: [6, 30, 54, 78, 102, 126],\n    errorCorrectionLevels: [\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 7, dataCodewordsPerBlock: 116 },\n          { numBlocks: 7, dataCodewordsPerBlock: 117 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 28,\n        ecBlocks: [\n          { numBlocks: 21, dataCodewordsPerBlock: 45 },\n          { numBlocks: 7, dataCodewordsPerBlock: 46 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 1, dataCodewordsPerBlock: 23 },\n          { numBlocks: 37, dataCodewordsPerBlock: 24 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 19, dataCodewordsPerBlock: 15 },\n          { numBlocks: 26, dataCodewordsPerBlock: 16 },\n        ],\n      },\n    ],\n  },\n  {\n    infoBits: 0x1ED75,\n    versionNumber: 30,\n    alignmentPatternCenters: [6, 26, 52, 78, 104, 130],\n    errorCorrectionLevels: [\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 5, dataCodewordsPerBlock: 115 },\n          { numBlocks: 10, dataCodewordsPerBlock: 116 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 28,\n        ecBlocks: [\n          { numBlocks: 19, dataCodewordsPerBlock: 47 },\n          { numBlocks: 10, dataCodewordsPerBlock: 48 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 15, dataCodewordsPerBlock: 24 },\n          { numBlocks: 25, dataCodewordsPerBlock: 25 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 23, dataCodewordsPerBlock: 15 },\n          { numBlocks: 25, dataCodewordsPerBlock: 16 },\n        ],\n      },\n    ],\n  },\n  {\n    infoBits: 0x1F250,\n    versionNumber: 31,\n    alignmentPatternCenters: [6, 30, 56, 82, 108, 134],\n    errorCorrectionLevels: [\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 13, dataCodewordsPerBlock: 115 },\n          { numBlocks: 3, dataCodewordsPerBlock: 116 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 28,\n        ecBlocks: [\n          { numBlocks: 2, dataCodewordsPerBlock: 46 },\n          { numBlocks: 29, dataCodewordsPerBlock: 47 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 42, dataCodewordsPerBlock: 24 },\n          { numBlocks: 1, dataCodewordsPerBlock: 25 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 23, dataCodewordsPerBlock: 15 },\n          { numBlocks: 28, dataCodewordsPerBlock: 16 },\n        ],\n      },\n    ],\n  },\n  {\n    infoBits: 0x209D5,\n    versionNumber: 32,\n    alignmentPatternCenters: [6, 34, 60, 86, 112, 138],\n    errorCorrectionLevels: [\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [{ numBlocks: 17, dataCodewordsPerBlock: 115 }],\n      },\n      {\n        ecCodewordsPerBlock: 28,\n        ecBlocks: [\n          { numBlocks: 10, dataCodewordsPerBlock: 46 },\n          { numBlocks: 23, dataCodewordsPerBlock: 47 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 10, dataCodewordsPerBlock: 24 },\n          { numBlocks: 35, dataCodewordsPerBlock: 25 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 19, dataCodewordsPerBlock: 15 },\n          { numBlocks: 35, dataCodewordsPerBlock: 16 },\n        ],\n      },\n    ],\n  },\n  {\n    infoBits: 0x216F0,\n    versionNumber: 33,\n    alignmentPatternCenters: [6, 30, 58, 86, 114, 142],\n    errorCorrectionLevels: [\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 17, dataCodewordsPerBlock: 115 },\n          { numBlocks: 1, dataCodewordsPerBlock: 116 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 28,\n        ecBlocks: [\n          { numBlocks: 14, dataCodewordsPerBlock: 46 },\n          { numBlocks: 21, dataCodewordsPerBlock: 47 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 29, dataCodewordsPerBlock: 24 },\n          { numBlocks: 19, dataCodewordsPerBlock: 25 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 11, dataCodewordsPerBlock: 15 },\n          { numBlocks: 46, dataCodewordsPerBlock: 16 },\n        ],\n      },\n    ],\n  },\n  {\n    infoBits: 0x228BA,\n    versionNumber: 34,\n    alignmentPatternCenters: [6, 34, 62, 90, 118, 146],\n    errorCorrectionLevels: [\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 13, dataCodewordsPerBlock: 115 },\n          { numBlocks: 6, dataCodewordsPerBlock: 116 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 28,\n        ecBlocks: [\n          { numBlocks: 14, dataCodewordsPerBlock: 46 },\n          { numBlocks: 23, dataCodewordsPerBlock: 47 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 44, dataCodewordsPerBlock: 24 },\n          { numBlocks: 7, dataCodewordsPerBlock: 25 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 59, dataCodewordsPerBlock: 16 },\n          { numBlocks: 1, dataCodewordsPerBlock: 17 },\n        ],\n      },\n    ],\n  },\n  {\n    infoBits: 0x2379F,\n    versionNumber: 35,\n    alignmentPatternCenters: [6, 30, 54, 78, 102, 126, 150],\n    errorCorrectionLevels: [\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 12, dataCodewordsPerBlock: 121 },\n          { numBlocks: 7, dataCodewordsPerBlock: 122 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 28,\n        ecBlocks: [\n          { numBlocks: 12, dataCodewordsPerBlock: 47 },\n          { numBlocks: 26, dataCodewordsPerBlock: 48 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 39, dataCodewordsPerBlock: 24 },\n          { numBlocks: 14, dataCodewordsPerBlock: 25 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 22, dataCodewordsPerBlock: 15 },\n          { numBlocks: 41, dataCodewordsPerBlock: 16 },\n        ],\n      },\n    ],\n  },\n  {\n    infoBits: 0x24B0B,\n    versionNumber: 36,\n    alignmentPatternCenters: [ 6, 24, 50, 76, 102, 128, 154 ],\n    errorCorrectionLevels: [\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 6, dataCodewordsPerBlock: 121 },\n          { numBlocks: 14, dataCodewordsPerBlock: 122 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 28,\n        ecBlocks: [\n          { numBlocks: 6, dataCodewordsPerBlock: 47 },\n          { numBlocks: 34, dataCodewordsPerBlock: 48 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 46, dataCodewordsPerBlock: 24 },\n          { numBlocks: 10, dataCodewordsPerBlock: 25 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 2, dataCodewordsPerBlock: 15 },\n          { numBlocks: 64, dataCodewordsPerBlock: 16 },\n        ],\n      },\n    ],\n  },\n  {\n    infoBits: 0x2542E,\n    versionNumber: 37,\n    alignmentPatternCenters: [ 6, 28, 54, 80, 106, 132, 158 ],\n    errorCorrectionLevels: [\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 17, dataCodewordsPerBlock: 122 },\n          { numBlocks: 4, dataCodewordsPerBlock: 123 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 28,\n        ecBlocks: [\n          { numBlocks: 29, dataCodewordsPerBlock: 46 },\n          { numBlocks: 14, dataCodewordsPerBlock: 47 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 49, dataCodewordsPerBlock: 24 },\n          { numBlocks: 10, dataCodewordsPerBlock: 25 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 24, dataCodewordsPerBlock: 15 },\n          { numBlocks: 46, dataCodewordsPerBlock: 16 },\n        ],\n      },\n    ],\n  },\n  {\n    infoBits: 0x26A64,\n    versionNumber: 38,\n    alignmentPatternCenters: [ 6, 32, 58, 84, 110, 136, 162 ],\n    errorCorrectionLevels: [\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 4, dataCodewordsPerBlock: 122 },\n          { numBlocks: 18, dataCodewordsPerBlock: 123 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 28,\n        ecBlocks: [\n          { numBlocks: 13, dataCodewordsPerBlock: 46 },\n          { numBlocks: 32, dataCodewordsPerBlock: 47 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 48, dataCodewordsPerBlock: 24 },\n          { numBlocks: 14, dataCodewordsPerBlock: 25 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 42, dataCodewordsPerBlock: 15 },\n          { numBlocks: 32, dataCodewordsPerBlock: 16 },\n        ],\n      },\n    ],\n  },\n  {\n    infoBits: 0x27541,\n    versionNumber: 39,\n    alignmentPatternCenters: [ 6, 26, 54, 82, 110, 138, 166 ],\n    errorCorrectionLevels: [\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 20, dataCodewordsPerBlock: 117 },\n          { numBlocks: 4, dataCodewordsPerBlock: 118 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 28,\n        ecBlocks: [\n          { numBlocks: 40, dataCodewordsPerBlock: 47 },\n          { numBlocks: 7, dataCodewordsPerBlock: 48 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 43, dataCodewordsPerBlock: 24 },\n          { numBlocks: 22, dataCodewordsPerBlock: 25 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 10, dataCodewordsPerBlock: 15 },\n          { numBlocks: 67, dataCodewordsPerBlock: 16 },\n        ],\n      },\n    ],\n  },\n  {\n    infoBits: 0x28C69,\n    versionNumber: 40,\n    alignmentPatternCenters: [ 6, 30, 58, 86, 114, 142, 170 ],\n    errorCorrectionLevels: [\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 19, dataCodewordsPerBlock: 118 },\n          { numBlocks: 6, dataCodewordsPerBlock: 119 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 28,\n        ecBlocks: [\n          { numBlocks: 18, dataCodewordsPerBlock: 47 },\n          { numBlocks: 31, dataCodewordsPerBlock: 48 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 34, dataCodewordsPerBlock: 24 },\n          { numBlocks: 34, dataCodewordsPerBlock: 25 },\n        ],\n      },\n      {\n        ecCodewordsPerBlock: 30,\n        ecBlocks: [\n          { numBlocks: 20, dataCodewordsPerBlock: 15 },\n          { numBlocks: 61, dataCodewordsPerBlock: 16 },\n        ],\n      },\n    ],\n  },\n];\n","import jsQR from '../node_modules/jsqr-es6/dist/jsQR.js';\n\nlet inversionAttempts = 'dontInvert';\nlet grayscaleWeights = {\n    // weights for quick luma integer approximation (https://en.wikipedia.org/wiki/YUV#Full_swing_for_BT.601)\n    red: 77,\n    green: 150,\n    blue: 29,\n    useIntegerApproximation: true,\n};\n\nself.onmessage = event => {\n    const type = event['data']['type'];\n    const data = event['data']['data'];\n\n    switch (type) {\n        case 'decode':\n            decode(data);\n            break;\n        case 'grayscaleWeights':\n            setGrayscaleWeights(data);\n            break;\n        case 'inversionMode':\n            setInversionMode(data);\n            break;\n        case 'close':\n            // close after earlier messages in the event loop finished processing\n            self.close();\n            break;\n    }\n};\n\nfunction decode(data) {\n    const rgbaData = data['data'];\n    const width = data['width'];\n    const height = data['height'];\n    const result = jsQR(rgbaData, width, height, {\n        inversionAttempts: inversionAttempts,\n        greyScaleWeights: grayscaleWeights,\n    });\n    self.postMessage({\n        type: 'qrResult',\n        data: result? result.data : null,\n    });\n}\n\nfunction setGrayscaleWeights(data) {\n    // update grayscaleWeights in a closure compiler compatible fashion\n    grayscaleWeights.red = data['red'];\n    grayscaleWeights.green = data['green'];\n    grayscaleWeights.blue = data['blue'];\n    grayscaleWeights.useIntegerApproximation = data['useIntegerApproximation'];\n}\n\nfunction setInversionMode(inversionMode) {\n    switch (inversionMode) {\n        case 'original':\n            inversionAttempts = 'dontInvert';\n            break;\n        case 'invert':\n            inversionAttempts = 'onlyInvert';\n            break;\n        case 'both':\n            inversionAttempts = 'attemptBoth';\n            break;\n        default:\n            throw new Error('Invalid inversion mode');\n    }\n}\n"],"names":["decodeByte","stream","size","text","i","length","bytes","push","b","decodeURIComponent","map","substr","toString","join","decode","data","version","chunks","available","mode","ModeByte","Terminator","result","ECI","readBits","type","Mode","assignmentNumber","Numeric","num","Error","a","c","numericResult","Alphanumeric","AlphanumericCharacterCodes","charCodeAt","alphanumericResult","Byte","byteResult","Kanji","Math","floor","k","kanjiResult","StructuredAppend","currentSequence","totalSequence","parity","addOrSubtractGF","runEuclideanAlgorithm","field","R","degree","tLast","zero","t","one","r","rLast","isZero","rLastLast","q","dltInverse","addOrSubtract","buildMonomial","degreeDiff","scale","multiplyByMonomial","multiplyPoly","tLastLast","sigmaTildeAtZero","multiply","inverse","twoS","outputBytes","set","error","s","syndromeCoefficients","evaluation","syndrome","sigmaOmega","numErrors","errorLocator","getCoefficient","errorCount","evaluateAt","errorLocations","denominator","j","xiInverse","errorEvaluator","generatorBase","position","numBitsDiffering","x","y","z","bitCount","pushBit","bit","byte","readCodewords","matrix","formatInfo","dimension","setRegion","versionNumber","bitsRead","currentByte","readingUp","columnIndex","columnOffset","get","dataMask","codewords","readVersion","provisionalVersion","VERSIONS","topRightVersionBits","bottomLeftVersionBits","bestDifference","Infinity","bestVersion","infoBits","difference","readFormatInformation","topLeftFormatInfoBits","topRightBottomRightFormatInfoBits","bestFormatInfo","bits","getDataBlocks","ecLevel","totalCodewords","ecInfo","ecBlocks","forEach","block","numBlocks","dataBlocks","numDataCodewords","dataCodewordsPerBlock","ecCodewordsPerBlock","slice","shortBlockSize","dataBlock","shift","largeBlockCount","smallBlockCount","decodeMatrix","errorCorrectionLevel","resultIndex","correctedBytes","resultBytes","decodeData","squareToQuadrilateral","p1","p2","p3","p4","dx3","dy3","a11","a12","a13","a21","a22","a23","a31","a32","a33","quadrilateralToSquare","sToQ","extract","image","location","topRight","alignmentPattern","bottomLeft","qToS","sourcePixel","mappingFunction","sum","values","reduce","reorderFinderPatterns","pattern1","pattern2","pattern3","topLeft","twoThreeDistance","oneTwoDistance","oneThreeDistance","computeDimension","countBlackWhiteRun","moduleSize","topDimension","sideDimension","countBlackWhiteRunTowardsPoint","origin","end","steep","fromX","fromY","toX","toY","dx","currentPixel","xStep","realX","realY","switchPoints","dy","yStep","distances","distance","ceil","awayFromEnd","concat","middleValue","towardsEnd","scoreBlackWhiteRun","sequence","ratios","ratio","pow","averageSize","scorePattern","point","max","min","width","height","vertError","diagDownError","diagUpError","avgSize","recenterLocation","p","leftX","round","rightX","topY","bottomY","locate","activeFinderPatternQuads","activeAlignmentPatternQuads","lastBit","scans","v","abs","averageFinderPatternBlocksize","averageAlignmentPatternBlocksize","validFinderPattern","startX","endX","bottom","matchingQuads","line","top","validAlignmentPattern","finderPatternQuads","filter","alignmentPatternQuads","quad","scoredFinderPatternPositions","score","sort","otherPoint","otherPoints","finderPatternGroups","points","alignment","midTopRight","midTopLeft","midBottomLeft","centeredAlignment","findAlignmentPattern","e","correctionToTopLeft","sizeScore","expectedAlignmentPattern","scan","locations","decoded","binaryData","topRightCorner","extracted","topLeftCorner","bottomRightCorner","bottomLeftCorner","topRightFinderPattern","topLeftFinderPattern","bottomLeftFinderPattern","bottomRightAlignmentPattern","mergeObject","target","src","Object","keys","opt","jsQR","providedOptions","options","defaultOptions","shouldInvert","greyScaleWeights","canOverwriteImage","pixelCount","bufferOffset","greyscaleBuffer","Uint8ClampedArray","buffer","greyscaleWeights","useIntegerApproximation","greyscalePixels","red","green","blue","blackPointsBuffer","blackPointsCount","verticalRegionCount","verticalRegion","hortizontalRegion","horizontalRegionCount","pixelLumosity","average","blackPoints","averageNeighborBlackPoint","binarized","BitMatrix","binarizedBuffer","createEmpty","inverted","returnInverted","invertedBuffer","xRegion","yRegion","left","lum","threshold","tryInvertedFirst","inversionAttempts","Matrix","bufferSize","value","BitStream","bitOffset","byteOffset","numBits","bitsToNotRead","toRead","GenericGFPoly","coefficients","coefficientsLength","firstNonZero","other","smallerCoefficients","largerCoefficients","lengthDiff","sumDiff","scalar","product","aLength","bLength","aCoeff","bCoefficients","coefficient","GenericGF","primitive","genBase","expTable","Array","logTable","from","alignmentPatternCenters","errorCorrectionLevels","default","grayscaleWeights","self","onmessage","event","self.onmessage","postMessage","close"],"mappings":"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"}

Youez - 2016 - github.com/yon3zu
LinuXploit