{"version":3,"sources":["../node_modules/base64-js/index.js","../node_modules/brorand/index.js","../node_modules/bn.js/lib/bn.js"],"names":["exports","byteLength","b64","lens","getLens","validLen","placeHoldersLen","toByteArray","tmp","i","arr","Arr","_byteLength","curByte","len","revLookup","charCodeAt","fromByteArray","uint8","length","extraBytes","parts","maxChunkLength","len2","push","encodeChunk","lookup","join","Uint8Array","Array","code","Error","indexOf","start","end","num","output","r","Rand","rand","this","module","generate","prototype","_rand","n","getBytes","res","getByte","self","crypto","getRandomValues","msCrypto","window","require","randomBytes","e","assert","val","msg","inherits","ctor","superCtor","super_","TempCtor","constructor","BN","number","base","endian","isBN","negative","words","red","_init","Buffer","wordSize","parseHex4Bits","string","index","c","parseHexByte","lowerBound","parseBase","str","mul","b","Math","min","move","dest","src","isArray","max","left","right","cmp","_initNumber","_initArray","toString","replace","_parseHex","_parseBase","toArray","ceil","j","w","off","_strip","limbLen","limbPow","total","mod","word","imuln","_iaddn","pow","copy","_move","clone","_expand","size","_normSign","Symbol","for","inspect","zeros","groupSizes","groupBases","padding","out","carry","groupSize","groupBase","isZero","modrn","idivn","toNumber","ret","toJSON","toBuffer","toArrayLike","smallMulTo","a","lo","k","ncarry","rword","maxJ","ArrayType","reqLength","allocUnsafe","allocate","_toArrayLikeLE","position","shift","_toArrayLikeBE","clz32","_countBits","t","_zeroBits","bitLength","hi","zeroBits","toTwos","width","abs","inotn","iaddn","fromTwos","testn","notn","ineg","isNeg","neg","iuor","ior","or","uor","iuand","iand","and","uand","iuxor","ixor","xor","uxor","bytesNeeded","bitsLeft","setn","bit","wbit","iadd","isub","add","sub","comb10MulTo","mid","o","a0","al0","ah0","a1","al1","ah1","a2","al2","ah2","a3","al3","ah3","a4","al4","ah4","a5","al5","ah5","a6","al6","ah6","a7","al7","ah7","a8","al8","ah8","a9","al9","ah9","b0","bl0","bh0","b1","bl1","bh1","b2","bl2","bh2","b3","bl3","bh3","b4","bl4","bh4","b5","bl5","bh5","b6","bl6","bh6","b7","bl7","bh7","b8","bl8","bh8","b9","bl9","bh9","w0","imul","w1","w2","w3","w4","w5","w6","w7","w8","w9","w10","w11","w12","w13","w14","w15","w16","w17","w18","bigMulTo","hncarry","jumboMulTo","FFTM","x","y","mulTo","makeRBT","N","l","revBin","rb","permute","rbt","rws","iws","rtws","itws","transform","s","rtwdf","cos","PI","itwdf","sin","p","rtwdf_","itwdf_","re","ie","ro","io","rx","guessLen13b","m","odd","conjugate","normalize13b","ws","round","convert13b","stub","ph","mulp","_","rwst","iwst","nrws","nrwst","niwst","rmws","mulf","isNegNum","muln","sqr","isqr","toBitArray","q","iushln","bits","carryMask","newCarry","ishln","iushrn","hint","extended","h","mask","maskedWords","ishrn","shln","ushln","shrn","ushrn","imaskn","maskn","isubn","addn","subn","iabs","_ishlnsubmul","_wordDiv","mode","bhi","diff","qj","div","divmod","positive","divn","umod","divRound","dm","half","r2","andln","acc","modn","egcd","A","B","C","D","g","isEven","yp","xp","im","isOdd","jm","gcd","_invmp","x1","x2","delta","cmpn","invm","bincn","ucmp","gtn","gt","gten","gte","ltn","lt","lten","lte","eqn","eq","Red","toRed","ctx","convertTo","_forceRed","fromRed","convertFrom","forceRed","redAdd","redIAdd","redSub","redISub","redShl","shl","redMul","_verify2","redIMul","redSqr","_verify1","redISqr","redSqrt","sqrt","redInvm","redNeg","redPow","primes","k256","p224","p192","p25519","MPrime","name","_tmp","K256","call","P224","P192","P25519","prime","_prime","Mont","imod","rinv","minv","ireduce","rlen","split","imulK","undefined","strip","input","outLen","prev","next","mod3","one","nOne","lpow","z","inv","wnd","current","currentLen","mont","u"],"mappings":"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","file":"static/js/main~62ab6885.351b6585.chunk.js","sourcesContent":["'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i]\n  revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n  var len = b64.length\n\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // Trim off extra bytes after placeholder bytes are found\n  // See: https://github.com/beatgammit/base64-js/issues/42\n  var validLen = b64.indexOf('=')\n  if (validLen === -1) validLen = len\n\n  var placeHoldersLen = validLen === len\n    ? 0\n    : 4 - (validLen % 4)\n\n  return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n  var tmp\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n\n  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n  var curByte = 0\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  var len = placeHoldersLen > 0\n    ? validLen - 4\n    : validLen\n\n  var i\n  for (i = 0; i < len; i += 4) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 18) |\n      (revLookup[b64.charCodeAt(i + 1)] << 12) |\n      (revLookup[b64.charCodeAt(i + 2)] << 6) |\n      revLookup[b64.charCodeAt(i + 3)]\n    arr[curByte++] = (tmp >> 16) & 0xFF\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 2) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 2) |\n      (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 1) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 10) |\n      (revLookup[b64.charCodeAt(i + 1)] << 4) |\n      (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] +\n    lookup[num >> 12 & 0x3F] +\n    lookup[num >> 6 & 0x3F] +\n    lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp\n  var output = []\n  for (var i = start; i < end; i += 3) {\n    tmp =\n      ((uint8[i] << 16) & 0xFF0000) +\n      ((uint8[i + 1] << 8) & 0xFF00) +\n      (uint8[i + 2] & 0xFF)\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n  var parts = []\n  var maxChunkLength = 16383 // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 2] +\n      lookup[(tmp << 4) & 0x3F] +\n      '=='\n    )\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 10] +\n      lookup[(tmp >> 4) & 0x3F] +\n      lookup[(tmp << 2) & 0x3F] +\n      '='\n    )\n  }\n\n  return parts.join('')\n}\n","var r;\n\nmodule.exports = function rand(len) {\n  if (!r)\n    r = new Rand(null);\n\n  return r.generate(len);\n};\n\nfunction Rand(rand) {\n  this.rand = rand;\n}\nmodule.exports.Rand = Rand;\n\nRand.prototype.generate = function generate(len) {\n  return this._rand(len);\n};\n\n// Emulate crypto API using randy\nRand.prototype._rand = function _rand(n) {\n  if (this.rand.getBytes)\n    return this.rand.getBytes(n);\n\n  var res = new Uint8Array(n);\n  for (var i = 0; i < res.length; i++)\n    res[i] = this.rand.getByte();\n  return res;\n};\n\nif (typeof self === 'object') {\n  if (self.crypto && self.crypto.getRandomValues) {\n    // Modern browsers\n    Rand.prototype._rand = function _rand(n) {\n      var arr = new Uint8Array(n);\n      self.crypto.getRandomValues(arr);\n      return arr;\n    };\n  } else if (self.msCrypto && self.msCrypto.getRandomValues) {\n    // IE\n    Rand.prototype._rand = function _rand(n) {\n      var arr = new Uint8Array(n);\n      self.msCrypto.getRandomValues(arr);\n      return arr;\n    };\n\n  // Safari's WebWorkers do not have `crypto`\n  } else if (typeof window === 'object') {\n    // Old junk\n    Rand.prototype._rand = function() {\n      throw new Error('Not implemented yet');\n    };\n  }\n} else {\n  // Node.js or Web worker with no crypto support\n  try {\n    var crypto = require('crypto');\n    if (typeof crypto.randomBytes !== 'function')\n      throw new Error('Not supported');\n\n    Rand.prototype._rand = function _rand(n) {\n      return crypto.randomBytes(n);\n    };\n  } catch (e) {\n  }\n}\n","(function (module, exports) {\n  'use strict';\n\n  // Utils\n  function assert (val, msg) {\n    if (!val) throw new Error(msg || 'Assertion failed');\n  }\n\n  // Could use `inherits` module, but don't want to move from single file\n  // architecture yet.\n  function inherits (ctor, superCtor) {\n    ctor.super_ = superCtor;\n    var TempCtor = function () {};\n    TempCtor.prototype = superCtor.prototype;\n    ctor.prototype = new TempCtor();\n    ctor.prototype.constructor = ctor;\n  }\n\n  // BN\n\n  function BN (number, base, endian) {\n    if (BN.isBN(number)) {\n      return number;\n    }\n\n    this.negative = 0;\n    this.words = null;\n    this.length = 0;\n\n    // Reduction context\n    this.red = null;\n\n    if (number !== null) {\n      if (base === 'le' || base === 'be') {\n        endian = base;\n        base = 10;\n      }\n\n      this._init(number || 0, base || 10, endian || 'be');\n    }\n  }\n  if (typeof module === 'object') {\n    module.exports = BN;\n  } else {\n    exports.BN = BN;\n  }\n\n  BN.BN = BN;\n  BN.wordSize = 26;\n\n  var Buffer;\n  try {\n    if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n      Buffer = window.Buffer;\n    } else {\n      Buffer = require('buffer').Buffer;\n    }\n  } catch (e) {\n  }\n\n  BN.isBN = function isBN (num) {\n    if (num instanceof BN) {\n      return true;\n    }\n\n    return num !== null && typeof num === 'object' &&\n      num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n  };\n\n  BN.max = function max (left, right) {\n    if (left.cmp(right) > 0) return left;\n    return right;\n  };\n\n  BN.min = function min (left, right) {\n    if (left.cmp(right) < 0) return left;\n    return right;\n  };\n\n  BN.prototype._init = function init (number, base, endian) {\n    if (typeof number === 'number') {\n      return this._initNumber(number, base, endian);\n    }\n\n    if (typeof number === 'object') {\n      return this._initArray(number, base, endian);\n    }\n\n    if (base === 'hex') {\n      base = 16;\n    }\n    assert(base === (base | 0) && base >= 2 && base <= 36);\n\n    number = number.toString().replace(/\\s+/g, '');\n    var start = 0;\n    if (number[0] === '-') {\n      start++;\n      this.negative = 1;\n    }\n\n    if (start < number.length) {\n      if (base === 16) {\n        this._parseHex(number, start, endian);\n      } else {\n        this._parseBase(number, base, start);\n        if (endian === 'le') {\n          this._initArray(this.toArray(), base, endian);\n        }\n      }\n    }\n  };\n\n  BN.prototype._initNumber = function _initNumber (number, base, endian) {\n    if (number < 0) {\n      this.negative = 1;\n      number = -number;\n    }\n    if (number < 0x4000000) {\n      this.words = [number & 0x3ffffff];\n      this.length = 1;\n    } else if (number < 0x10000000000000) {\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff\n      ];\n      this.length = 2;\n    } else {\n      assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff,\n        1\n      ];\n      this.length = 3;\n    }\n\n    if (endian !== 'le') return;\n\n    // Reverse the bytes\n    this._initArray(this.toArray(), base, endian);\n  };\n\n  BN.prototype._initArray = function _initArray (number, base, endian) {\n    // Perhaps a Uint8Array\n    assert(typeof number.length === 'number');\n    if (number.length <= 0) {\n      this.words = [0];\n      this.length = 1;\n      return this;\n    }\n\n    this.length = Math.ceil(number.length / 3);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    var j, w;\n    var off = 0;\n    if (endian === 'be') {\n      for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n        w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    } else if (endian === 'le') {\n      for (i = 0, j = 0; i < number.length; i += 3) {\n        w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    }\n    return this._strip();\n  };\n\n  function parseHex4Bits (string, index) {\n    var c = string.charCodeAt(index);\n    // '0' - '9'\n    if (c >= 48 && c <= 57) {\n      return c - 48;\n    // 'A' - 'F'\n    } else if (c >= 65 && c <= 70) {\n      return c - 55;\n    // 'a' - 'f'\n    } else if (c >= 97 && c <= 102) {\n      return c - 87;\n    } else {\n      assert(false, 'Invalid character in ' + string);\n    }\n  }\n\n  function parseHexByte (string, lowerBound, index) {\n    var r = parseHex4Bits(string, index);\n    if (index - 1 >= lowerBound) {\n      r |= parseHex4Bits(string, index - 1) << 4;\n    }\n    return r;\n  }\n\n  BN.prototype._parseHex = function _parseHex (number, start, endian) {\n    // Create possibly bigger array to ensure that it fits the number\n    this.length = Math.ceil((number.length - start) / 6);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    // 24-bits chunks\n    var off = 0;\n    var j = 0;\n\n    var w;\n    if (endian === 'be') {\n      for (i = number.length - 1; i >= start; i -= 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    } else {\n      var parseLength = number.length - start;\n      for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    }\n\n    this._strip();\n  };\n\n  function parseBase (str, start, end, mul) {\n    var r = 0;\n    var b = 0;\n    var len = Math.min(str.length, end);\n    for (var i = start; i < len; i++) {\n      var c = str.charCodeAt(i) - 48;\n\n      r *= mul;\n\n      // 'a'\n      if (c >= 49) {\n        b = c - 49 + 0xa;\n\n      // 'A'\n      } else if (c >= 17) {\n        b = c - 17 + 0xa;\n\n      // '0' - '9'\n      } else {\n        b = c;\n      }\n      assert(c >= 0 && b < mul, 'Invalid character');\n      r += b;\n    }\n    return r;\n  }\n\n  BN.prototype._parseBase = function _parseBase (number, base, start) {\n    // Initialize as zero\n    this.words = [0];\n    this.length = 1;\n\n    // Find length of limb in base\n    for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n      limbLen++;\n    }\n    limbLen--;\n    limbPow = (limbPow / base) | 0;\n\n    var total = number.length - start;\n    var mod = total % limbLen;\n    var end = Math.min(total, total - mod) + start;\n\n    var word = 0;\n    for (var i = start; i < end; i += limbLen) {\n      word = parseBase(number, i, i + limbLen, base);\n\n      this.imuln(limbPow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    if (mod !== 0) {\n      var pow = 1;\n      word = parseBase(number, i, number.length, base);\n\n      for (i = 0; i < mod; i++) {\n        pow *= base;\n      }\n\n      this.imuln(pow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    this._strip();\n  };\n\n  BN.prototype.copy = function copy (dest) {\n    dest.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      dest.words[i] = this.words[i];\n    }\n    dest.length = this.length;\n    dest.negative = this.negative;\n    dest.red = this.red;\n  };\n\n  function move (dest, src) {\n    dest.words = src.words;\n    dest.length = src.length;\n    dest.negative = src.negative;\n    dest.red = src.red;\n  }\n\n  BN.prototype._move = function _move (dest) {\n    move(dest, this);\n  };\n\n  BN.prototype.clone = function clone () {\n    var r = new BN(null);\n    this.copy(r);\n    return r;\n  };\n\n  BN.prototype._expand = function _expand (size) {\n    while (this.length < size) {\n      this.words[this.length++] = 0;\n    }\n    return this;\n  };\n\n  // Remove leading `0` from `this`\n  BN.prototype._strip = function strip () {\n    while (this.length > 1 && this.words[this.length - 1] === 0) {\n      this.length--;\n    }\n    return this._normSign();\n  };\n\n  BN.prototype._normSign = function _normSign () {\n    // -0 = 0\n    if (this.length === 1 && this.words[0] === 0) {\n      this.negative = 0;\n    }\n    return this;\n  };\n\n  // Check Symbol.for because not everywhere where Symbol defined\n  // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility\n  if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') {\n    try {\n      BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect;\n    } catch (e) {\n      BN.prototype.inspect = inspect;\n    }\n  } else {\n    BN.prototype.inspect = inspect;\n  }\n\n  function inspect () {\n    return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n  }\n\n  /*\n\n  var zeros = [];\n  var groupSizes = [];\n  var groupBases = [];\n\n  var s = '';\n  var i = -1;\n  while (++i < BN.wordSize) {\n    zeros[i] = s;\n    s += '0';\n  }\n  groupSizes[0] = 0;\n  groupSizes[1] = 0;\n  groupBases[0] = 0;\n  groupBases[1] = 0;\n  var base = 2 - 1;\n  while (++base < 36 + 1) {\n    var groupSize = 0;\n    var groupBase = 1;\n    while (groupBase < (1 << BN.wordSize) / base) {\n      groupBase *= base;\n      groupSize += 1;\n    }\n    groupSizes[base] = groupSize;\n    groupBases[base] = groupBase;\n  }\n\n  */\n\n  var zeros = [\n    '',\n    '0',\n    '00',\n    '000',\n    '0000',\n    '00000',\n    '000000',\n    '0000000',\n    '00000000',\n    '000000000',\n    '0000000000',\n    '00000000000',\n    '000000000000',\n    '0000000000000',\n    '00000000000000',\n    '000000000000000',\n    '0000000000000000',\n    '00000000000000000',\n    '000000000000000000',\n    '0000000000000000000',\n    '00000000000000000000',\n    '000000000000000000000',\n    '0000000000000000000000',\n    '00000000000000000000000',\n    '000000000000000000000000',\n    '0000000000000000000000000'\n  ];\n\n  var groupSizes = [\n    0, 0,\n    25, 16, 12, 11, 10, 9, 8,\n    8, 7, 7, 7, 7, 6, 6,\n    6, 6, 6, 6, 6, 5, 5,\n    5, 5, 5, 5, 5, 5, 5,\n    5, 5, 5, 5, 5, 5, 5\n  ];\n\n  var groupBases = [\n    0, 0,\n    33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n    43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n    16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n    6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n    24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n  ];\n\n  BN.prototype.toString = function toString (base, padding) {\n    base = base || 10;\n    padding = padding | 0 || 1;\n\n    var out;\n    if (base === 16 || base === 'hex') {\n      out = '';\n      var off = 0;\n      var carry = 0;\n      for (var i = 0; i < this.length; i++) {\n        var w = this.words[i];\n        var word = (((w << off) | carry) & 0xffffff).toString(16);\n        carry = (w >>> (24 - off)) & 0xffffff;\n        off += 2;\n        if (off >= 26) {\n          off -= 26;\n          i--;\n        }\n        if (carry !== 0 || i !== this.length - 1) {\n          out = zeros[6 - word.length] + word + out;\n        } else {\n          out = word + out;\n        }\n      }\n      if (carry !== 0) {\n        out = carry.toString(16) + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    if (base === (base | 0) && base >= 2 && base <= 36) {\n      // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n      var groupSize = groupSizes[base];\n      // var groupBase = Math.pow(base, groupSize);\n      var groupBase = groupBases[base];\n      out = '';\n      var c = this.clone();\n      c.negative = 0;\n      while (!c.isZero()) {\n        var r = c.modrn(groupBase).toString(base);\n        c = c.idivn(groupBase);\n\n        if (!c.isZero()) {\n          out = zeros[groupSize - r.length] + r + out;\n        } else {\n          out = r + out;\n        }\n      }\n      if (this.isZero()) {\n        out = '0' + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    assert(false, 'Base should be between 2 and 36');\n  };\n\n  BN.prototype.toNumber = function toNumber () {\n    var ret = this.words[0];\n    if (this.length === 2) {\n      ret += this.words[1] * 0x4000000;\n    } else if (this.length === 3 && this.words[2] === 0x01) {\n      // NOTE: at this stage it is known that the top bit is set\n      ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n    } else if (this.length > 2) {\n      assert(false, 'Number can only safely store up to 53 bits');\n    }\n    return (this.negative !== 0) ? -ret : ret;\n  };\n\n  BN.prototype.toJSON = function toJSON () {\n    return this.toString(16, 2);\n  };\n\n  if (Buffer) {\n    BN.prototype.toBuffer = function toBuffer (endian, length) {\n      return this.toArrayLike(Buffer, endian, length);\n    };\n  }\n\n  BN.prototype.toArray = function toArray (endian, length) {\n    return this.toArrayLike(Array, endian, length);\n  };\n\n  var allocate = function allocate (ArrayType, size) {\n    if (ArrayType.allocUnsafe) {\n      return ArrayType.allocUnsafe(size);\n    }\n    return new ArrayType(size);\n  };\n\n  BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n    this._strip();\n\n    var byteLength = this.byteLength();\n    var reqLength = length || Math.max(1, byteLength);\n    assert(byteLength <= reqLength, 'byte array longer than desired length');\n    assert(reqLength > 0, 'Requested array length <= 0');\n\n    var res = allocate(ArrayType, reqLength);\n    var postfix = endian === 'le' ? 'LE' : 'BE';\n    this['_toArrayLike' + postfix](res, byteLength);\n    return res;\n  };\n\n  BN.prototype._toArrayLikeLE = function _toArrayLikeLE (res, byteLength) {\n    var position = 0;\n    var carry = 0;\n\n    for (var i = 0, shift = 0; i < this.length; i++) {\n      var word = (this.words[i] << shift) | carry;\n\n      res[position++] = word & 0xff;\n      if (position < res.length) {\n        res[position++] = (word >> 8) & 0xff;\n      }\n      if (position < res.length) {\n        res[position++] = (word >> 16) & 0xff;\n      }\n\n      if (shift === 6) {\n        if (position < res.length) {\n          res[position++] = (word >> 24) & 0xff;\n        }\n        carry = 0;\n        shift = 0;\n      } else {\n        carry = word >>> 24;\n        shift += 2;\n      }\n    }\n\n    if (position < res.length) {\n      res[position++] = carry;\n\n      while (position < res.length) {\n        res[position++] = 0;\n      }\n    }\n  };\n\n  BN.prototype._toArrayLikeBE = function _toArrayLikeBE (res, byteLength) {\n    var position = res.length - 1;\n    var carry = 0;\n\n    for (var i = 0, shift = 0; i < this.length; i++) {\n      var word = (this.words[i] << shift) | carry;\n\n      res[position--] = word & 0xff;\n      if (position >= 0) {\n        res[position--] = (word >> 8) & 0xff;\n      }\n      if (position >= 0) {\n        res[position--] = (word >> 16) & 0xff;\n      }\n\n      if (shift === 6) {\n        if (position >= 0) {\n          res[position--] = (word >> 24) & 0xff;\n        }\n        carry = 0;\n        shift = 0;\n      } else {\n        carry = word >>> 24;\n        shift += 2;\n      }\n    }\n\n    if (position >= 0) {\n      res[position--] = carry;\n\n      while (position >= 0) {\n        res[position--] = 0;\n      }\n    }\n  };\n\n  if (Math.clz32) {\n    BN.prototype._countBits = function _countBits (w) {\n      return 32 - Math.clz32(w);\n    };\n  } else {\n    BN.prototype._countBits = function _countBits (w) {\n      var t = w;\n      var r = 0;\n      if (t >= 0x1000) {\n        r += 13;\n        t >>>= 13;\n      }\n      if (t >= 0x40) {\n        r += 7;\n        t >>>= 7;\n      }\n      if (t >= 0x8) {\n        r += 4;\n        t >>>= 4;\n      }\n      if (t >= 0x02) {\n        r += 2;\n        t >>>= 2;\n      }\n      return r + t;\n    };\n  }\n\n  BN.prototype._zeroBits = function _zeroBits (w) {\n    // Short-cut\n    if (w === 0) return 26;\n\n    var t = w;\n    var r = 0;\n    if ((t & 0x1fff) === 0) {\n      r += 13;\n      t >>>= 13;\n    }\n    if ((t & 0x7f) === 0) {\n      r += 7;\n      t >>>= 7;\n    }\n    if ((t & 0xf) === 0) {\n      r += 4;\n      t >>>= 4;\n    }\n    if ((t & 0x3) === 0) {\n      r += 2;\n      t >>>= 2;\n    }\n    if ((t & 0x1) === 0) {\n      r++;\n    }\n    return r;\n  };\n\n  // Return number of used bits in a BN\n  BN.prototype.bitLength = function bitLength () {\n    var w = this.words[this.length - 1];\n    var hi = this._countBits(w);\n    return (this.length - 1) * 26 + hi;\n  };\n\n  function toBitArray (num) {\n    var w = new Array(num.bitLength());\n\n    for (var bit = 0; bit < w.length; bit++) {\n      var off = (bit / 26) | 0;\n      var wbit = bit % 26;\n\n      w[bit] = (num.words[off] >>> wbit) & 0x01;\n    }\n\n    return w;\n  }\n\n  // Number of trailing zero bits\n  BN.prototype.zeroBits = function zeroBits () {\n    if (this.isZero()) return 0;\n\n    var r = 0;\n    for (var i = 0; i < this.length; i++) {\n      var b = this._zeroBits(this.words[i]);\n      r += b;\n      if (b !== 26) break;\n    }\n    return r;\n  };\n\n  BN.prototype.byteLength = function byteLength () {\n    return Math.ceil(this.bitLength() / 8);\n  };\n\n  BN.prototype.toTwos = function toTwos (width) {\n    if (this.negative !== 0) {\n      return this.abs().inotn(width).iaddn(1);\n    }\n    return this.clone();\n  };\n\n  BN.prototype.fromTwos = function fromTwos (width) {\n    if (this.testn(width - 1)) {\n      return this.notn(width).iaddn(1).ineg();\n    }\n    return this.clone();\n  };\n\n  BN.prototype.isNeg = function isNeg () {\n    return this.negative !== 0;\n  };\n\n  // Return negative clone of `this`\n  BN.prototype.neg = function neg () {\n    return this.clone().ineg();\n  };\n\n  BN.prototype.ineg = function ineg () {\n    if (!this.isZero()) {\n      this.negative ^= 1;\n    }\n\n    return this;\n  };\n\n  // Or `num` with `this` in-place\n  BN.prototype.iuor = function iuor (num) {\n    while (this.length < num.length) {\n      this.words[this.length++] = 0;\n    }\n\n    for (var i = 0; i < num.length; i++) {\n      this.words[i] = this.words[i] | num.words[i];\n    }\n\n    return this._strip();\n  };\n\n  BN.prototype.ior = function ior (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuor(num);\n  };\n\n  // Or `num` with `this`\n  BN.prototype.or = function or (num) {\n    if (this.length > num.length) return this.clone().ior(num);\n    return num.clone().ior(this);\n  };\n\n  BN.prototype.uor = function uor (num) {\n    if (this.length > num.length) return this.clone().iuor(num);\n    return num.clone().iuor(this);\n  };\n\n  // And `num` with `this` in-place\n  BN.prototype.iuand = function iuand (num) {\n    // b = min-length(num, this)\n    var b;\n    if (this.length > num.length) {\n      b = num;\n    } else {\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = this.words[i] & num.words[i];\n    }\n\n    this.length = b.length;\n\n    return this._strip();\n  };\n\n  BN.prototype.iand = function iand (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuand(num);\n  };\n\n  // And `num` with `this`\n  BN.prototype.and = function and (num) {\n    if (this.length > num.length) return this.clone().iand(num);\n    return num.clone().iand(this);\n  };\n\n  BN.prototype.uand = function uand (num) {\n    if (this.length > num.length) return this.clone().iuand(num);\n    return num.clone().iuand(this);\n  };\n\n  // Xor `num` with `this` in-place\n  BN.prototype.iuxor = function iuxor (num) {\n    // a.length > b.length\n    var a;\n    var b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = a.words[i] ^ b.words[i];\n    }\n\n    if (this !== a) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = a.length;\n\n    return this._strip();\n  };\n\n  BN.prototype.ixor = function ixor (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuxor(num);\n  };\n\n  // Xor `num` with `this`\n  BN.prototype.xor = function xor (num) {\n    if (this.length > num.length) return this.clone().ixor(num);\n    return num.clone().ixor(this);\n  };\n\n  BN.prototype.uxor = function uxor (num) {\n    if (this.length > num.length) return this.clone().iuxor(num);\n    return num.clone().iuxor(this);\n  };\n\n  // Not ``this`` with ``width`` bitwidth\n  BN.prototype.inotn = function inotn (width) {\n    assert(typeof width === 'number' && width >= 0);\n\n    var bytesNeeded = Math.ceil(width / 26) | 0;\n    var bitsLeft = width % 26;\n\n    // Extend the buffer with leading zeroes\n    this._expand(bytesNeeded);\n\n    if (bitsLeft > 0) {\n      bytesNeeded--;\n    }\n\n    // Handle complete words\n    for (var i = 0; i < bytesNeeded; i++) {\n      this.words[i] = ~this.words[i] & 0x3ffffff;\n    }\n\n    // Handle the residue\n    if (bitsLeft > 0) {\n      this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n    }\n\n    // And remove leading zeroes\n    return this._strip();\n  };\n\n  BN.prototype.notn = function notn (width) {\n    return this.clone().inotn(width);\n  };\n\n  // Set `bit` of `this`\n  BN.prototype.setn = function setn (bit, val) {\n    assert(typeof bit === 'number' && bit >= 0);\n\n    var off = (bit / 26) | 0;\n    var wbit = bit % 26;\n\n    this._expand(off + 1);\n\n    if (val) {\n      this.words[off] = this.words[off] | (1 << wbit);\n    } else {\n      this.words[off] = this.words[off] & ~(1 << wbit);\n    }\n\n    return this._strip();\n  };\n\n  // Add `num` to `this` in-place\n  BN.prototype.iadd = function iadd (num) {\n    var r;\n\n    // negative + positive\n    if (this.negative !== 0 && num.negative === 0) {\n      this.negative = 0;\n      r = this.isub(num);\n      this.negative ^= 1;\n      return this._normSign();\n\n    // positive + negative\n    } else if (this.negative === 0 && num.negative !== 0) {\n      num.negative = 0;\n      r = this.isub(num);\n      num.negative = 1;\n      return r._normSign();\n    }\n\n    // a.length > b.length\n    var a, b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n\n    this.length = a.length;\n    if (carry !== 0) {\n      this.words[this.length] = carry;\n      this.length++;\n    // Copy the rest of the words\n    } else if (a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    return this;\n  };\n\n  // Add `num` to `this`\n  BN.prototype.add = function add (num) {\n    var res;\n    if (num.negative !== 0 && this.negative === 0) {\n      num.negative = 0;\n      res = this.sub(num);\n      num.negative ^= 1;\n      return res;\n    } else if (num.negative === 0 && this.negative !== 0) {\n      this.negative = 0;\n      res = num.sub(this);\n      this.negative = 1;\n      return res;\n    }\n\n    if (this.length > num.length) return this.clone().iadd(num);\n\n    return num.clone().iadd(this);\n  };\n\n  // Subtract `num` from `this` in-place\n  BN.prototype.isub = function isub (num) {\n    // this - (-num) = this + num\n    if (num.negative !== 0) {\n      num.negative = 0;\n      var r = this.iadd(num);\n      num.negative = 1;\n      return r._normSign();\n\n    // -this - num = -(this + num)\n    } else if (this.negative !== 0) {\n      this.negative = 0;\n      this.iadd(num);\n      this.negative = 1;\n      return this._normSign();\n    }\n\n    // At this point both numbers are positive\n    var cmp = this.cmp(num);\n\n    // Optimization - zeroify\n    if (cmp === 0) {\n      this.negative = 0;\n      this.length = 1;\n      this.words[0] = 0;\n      return this;\n    }\n\n    // a > b\n    var a, b;\n    if (cmp > 0) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n\n    // Copy rest of the words\n    if (carry === 0 && i < a.length && a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = Math.max(this.length, i);\n\n    if (a !== this) {\n      this.negative = 1;\n    }\n\n    return this._strip();\n  };\n\n  // Subtract `num` from `this`\n  BN.prototype.sub = function sub (num) {\n    return this.clone().isub(num);\n  };\n\n  function smallMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    var len = (self.length + num.length) | 0;\n    out.length = len;\n    len = (len - 1) | 0;\n\n    // Peel one iteration (compiler can't do it, because of code complexity)\n    var a = self.words[0] | 0;\n    var b = num.words[0] | 0;\n    var r = a * b;\n\n    var lo = r & 0x3ffffff;\n    var carry = (r / 0x4000000) | 0;\n    out.words[0] = lo;\n\n    for (var k = 1; k < len; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = carry >>> 26;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = (k - j) | 0;\n        a = self.words[i] | 0;\n        b = num.words[j] | 0;\n        r = a * b + rword;\n        ncarry += (r / 0x4000000) | 0;\n        rword = r & 0x3ffffff;\n      }\n      out.words[k] = rword | 0;\n      carry = ncarry | 0;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry | 0;\n    } else {\n      out.length--;\n    }\n\n    return out._strip();\n  }\n\n  // TODO(indutny): it may be reasonable to omit it for users who don't need\n  // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n  // multiplication (like elliptic secp256k1).\n  var comb10MulTo = function comb10MulTo (self, num, out) {\n    var a = self.words;\n    var b = num.words;\n    var o = out.words;\n    var c = 0;\n    var lo;\n    var mid;\n    var hi;\n    var a0 = a[0] | 0;\n    var al0 = a0 & 0x1fff;\n    var ah0 = a0 >>> 13;\n    var a1 = a[1] | 0;\n    var al1 = a1 & 0x1fff;\n    var ah1 = a1 >>> 13;\n    var a2 = a[2] | 0;\n    var al2 = a2 & 0x1fff;\n    var ah2 = a2 >>> 13;\n    var a3 = a[3] | 0;\n    var al3 = a3 & 0x1fff;\n    var ah3 = a3 >>> 13;\n    var a4 = a[4] | 0;\n    var al4 = a4 & 0x1fff;\n    var ah4 = a4 >>> 13;\n    var a5 = a[5] | 0;\n    var al5 = a5 & 0x1fff;\n    var ah5 = a5 >>> 13;\n    var a6 = a[6] | 0;\n    var al6 = a6 & 0x1fff;\n    var ah6 = a6 >>> 13;\n    var a7 = a[7] | 0;\n    var al7 = a7 & 0x1fff;\n    var ah7 = a7 >>> 13;\n    var a8 = a[8] | 0;\n    var al8 = a8 & 0x1fff;\n    var ah8 = a8 >>> 13;\n    var a9 = a[9] | 0;\n    var al9 = a9 & 0x1fff;\n    var ah9 = a9 >>> 13;\n    var b0 = b[0] | 0;\n    var bl0 = b0 & 0x1fff;\n    var bh0 = b0 >>> 13;\n    var b1 = b[1] | 0;\n    var bl1 = b1 & 0x1fff;\n    var bh1 = b1 >>> 13;\n    var b2 = b[2] | 0;\n    var bl2 = b2 & 0x1fff;\n    var bh2 = b2 >>> 13;\n    var b3 = b[3] | 0;\n    var bl3 = b3 & 0x1fff;\n    var bh3 = b3 >>> 13;\n    var b4 = b[4] | 0;\n    var bl4 = b4 & 0x1fff;\n    var bh4 = b4 >>> 13;\n    var b5 = b[5] | 0;\n    var bl5 = b5 & 0x1fff;\n    var bh5 = b5 >>> 13;\n    var b6 = b[6] | 0;\n    var bl6 = b6 & 0x1fff;\n    var bh6 = b6 >>> 13;\n    var b7 = b[7] | 0;\n    var bl7 = b7 & 0x1fff;\n    var bh7 = b7 >>> 13;\n    var b8 = b[8] | 0;\n    var bl8 = b8 & 0x1fff;\n    var bh8 = b8 >>> 13;\n    var b9 = b[9] | 0;\n    var bl9 = b9 & 0x1fff;\n    var bh9 = b9 >>> 13;\n\n    out.negative = self.negative ^ num.negative;\n    out.length = 19;\n    /* k = 0 */\n    lo = Math.imul(al0, bl0);\n    mid = Math.imul(al0, bh0);\n    mid = (mid + Math.imul(ah0, bl0)) | 0;\n    hi = Math.imul(ah0, bh0);\n    var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n    w0 &= 0x3ffffff;\n    /* k = 1 */\n    lo = Math.imul(al1, bl0);\n    mid = Math.imul(al1, bh0);\n    mid = (mid + Math.imul(ah1, bl0)) | 0;\n    hi = Math.imul(ah1, bh0);\n    lo = (lo + Math.imul(al0, bl1)) | 0;\n    mid = (mid + Math.imul(al0, bh1)) | 0;\n    mid = (mid + Math.imul(ah0, bl1)) | 0;\n    hi = (hi + Math.imul(ah0, bh1)) | 0;\n    var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n    w1 &= 0x3ffffff;\n    /* k = 2 */\n    lo = Math.imul(al2, bl0);\n    mid = Math.imul(al2, bh0);\n    mid = (mid + Math.imul(ah2, bl0)) | 0;\n    hi = Math.imul(ah2, bh0);\n    lo = (lo + Math.imul(al1, bl1)) | 0;\n    mid = (mid + Math.imul(al1, bh1)) | 0;\n    mid = (mid + Math.imul(ah1, bl1)) | 0;\n    hi = (hi + Math.imul(ah1, bh1)) | 0;\n    lo = (lo + Math.imul(al0, bl2)) | 0;\n    mid = (mid + Math.imul(al0, bh2)) | 0;\n    mid = (mid + Math.imul(ah0, bl2)) | 0;\n    hi = (hi + Math.imul(ah0, bh2)) | 0;\n    var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n    w2 &= 0x3ffffff;\n    /* k = 3 */\n    lo = Math.imul(al3, bl0);\n    mid = Math.imul(al3, bh0);\n    mid = (mid + Math.imul(ah3, bl0)) | 0;\n    hi = Math.imul(ah3, bh0);\n    lo = (lo + Math.imul(al2, bl1)) | 0;\n    mid = (mid + Math.imul(al2, bh1)) | 0;\n    mid = (mid + Math.imul(ah2, bl1)) | 0;\n    hi = (hi + Math.imul(ah2, bh1)) | 0;\n    lo = (lo + Math.imul(al1, bl2)) | 0;\n    mid = (mid + Math.imul(al1, bh2)) | 0;\n    mid = (mid + Math.imul(ah1, bl2)) | 0;\n    hi = (hi + Math.imul(ah1, bh2)) | 0;\n    lo = (lo + Math.imul(al0, bl3)) | 0;\n    mid = (mid + Math.imul(al0, bh3)) | 0;\n    mid = (mid + Math.imul(ah0, bl3)) | 0;\n    hi = (hi + Math.imul(ah0, bh3)) | 0;\n    var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n    w3 &= 0x3ffffff;\n    /* k = 4 */\n    lo = Math.imul(al4, bl0);\n    mid = Math.imul(al4, bh0);\n    mid = (mid + Math.imul(ah4, bl0)) | 0;\n    hi = Math.imul(ah4, bh0);\n    lo = (lo + Math.imul(al3, bl1)) | 0;\n    mid = (mid + Math.imul(al3, bh1)) | 0;\n    mid = (mid + Math.imul(ah3, bl1)) | 0;\n    hi = (hi + Math.imul(ah3, bh1)) | 0;\n    lo = (lo + Math.imul(al2, bl2)) | 0;\n    mid = (mid + Math.imul(al2, bh2)) | 0;\n    mid = (mid + Math.imul(ah2, bl2)) | 0;\n    hi = (hi + Math.imul(ah2, bh2)) | 0;\n    lo = (lo + Math.imul(al1, bl3)) | 0;\n    mid = (mid + Math.imul(al1, bh3)) | 0;\n    mid = (mid + Math.imul(ah1, bl3)) | 0;\n    hi = (hi + Math.imul(ah1, bh3)) | 0;\n    lo = (lo + Math.imul(al0, bl4)) | 0;\n    mid = (mid + Math.imul(al0, bh4)) | 0;\n    mid = (mid + Math.imul(ah0, bl4)) | 0;\n    hi = (hi + Math.imul(ah0, bh4)) | 0;\n    var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n    w4 &= 0x3ffffff;\n    /* k = 5 */\n    lo = Math.imul(al5, bl0);\n    mid = Math.imul(al5, bh0);\n    mid = (mid + Math.imul(ah5, bl0)) | 0;\n    hi = Math.imul(ah5, bh0);\n    lo = (lo + Math.imul(al4, bl1)) | 0;\n    mid = (mid + Math.imul(al4, bh1)) | 0;\n    mid = (mid + Math.imul(ah4, bl1)) | 0;\n    hi = (hi + Math.imul(ah4, bh1)) | 0;\n    lo = (lo + Math.imul(al3, bl2)) | 0;\n    mid = (mid + Math.imul(al3, bh2)) | 0;\n    mid = (mid + Math.imul(ah3, bl2)) | 0;\n    hi = (hi + Math.imul(ah3, bh2)) | 0;\n    lo = (lo + Math.imul(al2, bl3)) | 0;\n    mid = (mid + Math.imul(al2, bh3)) | 0;\n    mid = (mid + Math.imul(ah2, bl3)) | 0;\n    hi = (hi + Math.imul(ah2, bh3)) | 0;\n    lo = (lo + Math.imul(al1, bl4)) | 0;\n    mid = (mid + Math.imul(al1, bh4)) | 0;\n    mid = (mid + Math.imul(ah1, bl4)) | 0;\n    hi = (hi + Math.imul(ah1, bh4)) | 0;\n    lo = (lo + Math.imul(al0, bl5)) | 0;\n    mid = (mid + Math.imul(al0, bh5)) | 0;\n    mid = (mid + Math.imul(ah0, bl5)) | 0;\n    hi = (hi + Math.imul(ah0, bh5)) | 0;\n    var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n    w5 &= 0x3ffffff;\n    /* k = 6 */\n    lo = Math.imul(al6, bl0);\n    mid = Math.imul(al6, bh0);\n    mid = (mid + Math.imul(ah6, bl0)) | 0;\n    hi = Math.imul(ah6, bh0);\n    lo = (lo + Math.imul(al5, bl1)) | 0;\n    mid = (mid + Math.imul(al5, bh1)) | 0;\n    mid = (mid + Math.imul(ah5, bl1)) | 0;\n    hi = (hi + Math.imul(ah5, bh1)) | 0;\n    lo = (lo + Math.imul(al4, bl2)) | 0;\n    mid = (mid + Math.imul(al4, bh2)) | 0;\n    mid = (mid + Math.imul(ah4, bl2)) | 0;\n    hi = (hi + Math.imul(ah4, bh2)) | 0;\n    lo = (lo + Math.imul(al3, bl3)) | 0;\n    mid = (mid + Math.imul(al3, bh3)) | 0;\n    mid = (mid + Math.imul(ah3, bl3)) | 0;\n    hi = (hi + Math.imul(ah3, bh3)) | 0;\n    lo = (lo + Math.imul(al2, bl4)) | 0;\n    mid = (mid + Math.imul(al2, bh4)) | 0;\n    mid = (mid + Math.imul(ah2, bl4)) | 0;\n    hi = (hi + Math.imul(ah2, bh4)) | 0;\n    lo = (lo + Math.imul(al1, bl5)) | 0;\n    mid = (mid + Math.imul(al1, bh5)) | 0;\n    mid = (mid + Math.imul(ah1, bl5)) | 0;\n    hi = (hi + Math.imul(ah1, bh5)) | 0;\n    lo = (lo + Math.imul(al0, bl6)) | 0;\n    mid = (mid + Math.imul(al0, bh6)) | 0;\n    mid = (mid + Math.imul(ah0, bl6)) | 0;\n    hi = (hi + Math.imul(ah0, bh6)) | 0;\n    var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n    w6 &= 0x3ffffff;\n    /* k = 7 */\n    lo = Math.imul(al7, bl0);\n    mid = Math.imul(al7, bh0);\n    mid = (mid + Math.imul(ah7, bl0)) | 0;\n    hi = Math.imul(ah7, bh0);\n    lo = (lo + Math.imul(al6, bl1)) | 0;\n    mid = (mid + Math.imul(al6, bh1)) | 0;\n    mid = (mid + Math.imul(ah6, bl1)) | 0;\n    hi = (hi + Math.imul(ah6, bh1)) | 0;\n    lo = (lo + Math.imul(al5, bl2)) | 0;\n    mid = (mid + Math.imul(al5, bh2)) | 0;\n    mid = (mid + Math.imul(ah5, bl2)) | 0;\n    hi = (hi + Math.imul(ah5, bh2)) | 0;\n    lo = (lo + Math.imul(al4, bl3)) | 0;\n    mid = (mid + Math.imul(al4, bh3)) | 0;\n    mid = (mid + Math.imul(ah4, bl3)) | 0;\n    hi = (hi + Math.imul(ah4, bh3)) | 0;\n    lo = (lo + Math.imul(al3, bl4)) | 0;\n    mid = (mid + Math.imul(al3, bh4)) | 0;\n    mid = (mid + Math.imul(ah3, bl4)) | 0;\n    hi = (hi + Math.imul(ah3, bh4)) | 0;\n    lo = (lo + Math.imul(al2, bl5)) | 0;\n    mid = (mid + Math.imul(al2, bh5)) | 0;\n    mid = (mid + Math.imul(ah2, bl5)) | 0;\n    hi = (hi + Math.imul(ah2, bh5)) | 0;\n    lo = (lo + Math.imul(al1, bl6)) | 0;\n    mid = (mid + Math.imul(al1, bh6)) | 0;\n    mid = (mid + Math.imul(ah1, bl6)) | 0;\n    hi = (hi + Math.imul(ah1, bh6)) | 0;\n    lo = (lo + Math.imul(al0, bl7)) | 0;\n    mid = (mid + Math.imul(al0, bh7)) | 0;\n    mid = (mid + Math.imul(ah0, bl7)) | 0;\n    hi = (hi + Math.imul(ah0, bh7)) | 0;\n    var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n    w7 &= 0x3ffffff;\n    /* k = 8 */\n    lo = Math.imul(al8, bl0);\n    mid = Math.imul(al8, bh0);\n    mid = (mid + Math.imul(ah8, bl0)) | 0;\n    hi = Math.imul(ah8, bh0);\n    lo = (lo + Math.imul(al7, bl1)) | 0;\n    mid = (mid + Math.imul(al7, bh1)) | 0;\n    mid = (mid + Math.imul(ah7, bl1)) | 0;\n    hi = (hi + Math.imul(ah7, bh1)) | 0;\n    lo = (lo + Math.imul(al6, bl2)) | 0;\n    mid = (mid + Math.imul(al6, bh2)) | 0;\n    mid = (mid + Math.imul(ah6, bl2)) | 0;\n    hi = (hi + Math.imul(ah6, bh2)) | 0;\n    lo = (lo + Math.imul(al5, bl3)) | 0;\n    mid = (mid + Math.imul(al5, bh3)) | 0;\n    mid = (mid + Math.imul(ah5, bl3)) | 0;\n    hi = (hi + Math.imul(ah5, bh3)) | 0;\n    lo = (lo + Math.imul(al4, bl4)) | 0;\n    mid = (mid + Math.imul(al4, bh4)) | 0;\n    mid = (mid + Math.imul(ah4, bl4)) | 0;\n    hi = (hi + Math.imul(ah4, bh4)) | 0;\n    lo = (lo + Math.imul(al3, bl5)) | 0;\n    mid = (mid + Math.imul(al3, bh5)) | 0;\n    mid = (mid + Math.imul(ah3, bl5)) | 0;\n    hi = (hi + Math.imul(ah3, bh5)) | 0;\n    lo = (lo + Math.imul(al2, bl6)) | 0;\n    mid = (mid + Math.imul(al2, bh6)) | 0;\n    mid = (mid + Math.imul(ah2, bl6)) | 0;\n    hi = (hi + Math.imul(ah2, bh6)) | 0;\n    lo = (lo + Math.imul(al1, bl7)) | 0;\n    mid = (mid + Math.imul(al1, bh7)) | 0;\n    mid = (mid + Math.imul(ah1, bl7)) | 0;\n    hi = (hi + Math.imul(ah1, bh7)) | 0;\n    lo = (lo + Math.imul(al0, bl8)) | 0;\n    mid = (mid + Math.imul(al0, bh8)) | 0;\n    mid = (mid + Math.imul(ah0, bl8)) | 0;\n    hi = (hi + Math.imul(ah0, bh8)) | 0;\n    var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n    w8 &= 0x3ffffff;\n    /* k = 9 */\n    lo = Math.imul(al9, bl0);\n    mid = Math.imul(al9, bh0);\n    mid = (mid + Math.imul(ah9, bl0)) | 0;\n    hi = Math.imul(ah9, bh0);\n    lo = (lo + Math.imul(al8, bl1)) | 0;\n    mid = (mid + Math.imul(al8, bh1)) | 0;\n    mid = (mid + Math.imul(ah8, bl1)) | 0;\n    hi = (hi + Math.imul(ah8, bh1)) | 0;\n    lo = (lo + Math.imul(al7, bl2)) | 0;\n    mid = (mid + Math.imul(al7, bh2)) | 0;\n    mid = (mid + Math.imul(ah7, bl2)) | 0;\n    hi = (hi + Math.imul(ah7, bh2)) | 0;\n    lo = (lo + Math.imul(al6, bl3)) | 0;\n    mid = (mid + Math.imul(al6, bh3)) | 0;\n    mid = (mid + Math.imul(ah6, bl3)) | 0;\n    hi = (hi + Math.imul(ah6, bh3)) | 0;\n    lo = (lo + Math.imul(al5, bl4)) | 0;\n    mid = (mid + Math.imul(al5, bh4)) | 0;\n    mid = (mid + Math.imul(ah5, bl4)) | 0;\n    hi = (hi + Math.imul(ah5, bh4)) | 0;\n    lo = (lo + Math.imul(al4, bl5)) | 0;\n    mid = (mid + Math.imul(al4, bh5)) | 0;\n    mid = (mid + Math.imul(ah4, bl5)) | 0;\n    hi = (hi + Math.imul(ah4, bh5)) | 0;\n    lo = (lo + Math.imul(al3, bl6)) | 0;\n    mid = (mid + Math.imul(al3, bh6)) | 0;\n    mid = (mid + Math.imul(ah3, bl6)) | 0;\n    hi = (hi + Math.imul(ah3, bh6)) | 0;\n    lo = (lo + Math.imul(al2, bl7)) | 0;\n    mid = (mid + Math.imul(al2, bh7)) | 0;\n    mid = (mid + Math.imul(ah2, bl7)) | 0;\n    hi = (hi + Math.imul(ah2, bh7)) | 0;\n    lo = (lo + Math.imul(al1, bl8)) | 0;\n    mid = (mid + Math.imul(al1, bh8)) | 0;\n    mid = (mid + Math.imul(ah1, bl8)) | 0;\n    hi = (hi + Math.imul(ah1, bh8)) | 0;\n    lo = (lo + Math.imul(al0, bl9)) | 0;\n    mid = (mid + Math.imul(al0, bh9)) | 0;\n    mid = (mid + Math.imul(ah0, bl9)) | 0;\n    hi = (hi + Math.imul(ah0, bh9)) | 0;\n    var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n    w9 &= 0x3ffffff;\n    /* k = 10 */\n    lo = Math.imul(al9, bl1);\n    mid = Math.imul(al9, bh1);\n    mid = (mid + Math.imul(ah9, bl1)) | 0;\n    hi = Math.imul(ah9, bh1);\n    lo = (lo + Math.imul(al8, bl2)) | 0;\n    mid = (mid + Math.imul(al8, bh2)) | 0;\n    mid = (mid + Math.imul(ah8, bl2)) | 0;\n    hi = (hi + Math.imul(ah8, bh2)) | 0;\n    lo = (lo + Math.imul(al7, bl3)) | 0;\n    mid = (mid + Math.imul(al7, bh3)) | 0;\n    mid = (mid + Math.imul(ah7, bl3)) | 0;\n    hi = (hi + Math.imul(ah7, bh3)) | 0;\n    lo = (lo + Math.imul(al6, bl4)) | 0;\n    mid = (mid + Math.imul(al6, bh4)) | 0;\n    mid = (mid + Math.imul(ah6, bl4)) | 0;\n    hi = (hi + Math.imul(ah6, bh4)) | 0;\n    lo = (lo + Math.imul(al5, bl5)) | 0;\n    mid = (mid + Math.imul(al5, bh5)) | 0;\n    mid = (mid + Math.imul(ah5, bl5)) | 0;\n    hi = (hi + Math.imul(ah5, bh5)) | 0;\n    lo = (lo + Math.imul(al4, bl6)) | 0;\n    mid = (mid + Math.imul(al4, bh6)) | 0;\n    mid = (mid + Math.imul(ah4, bl6)) | 0;\n    hi = (hi + Math.imul(ah4, bh6)) | 0;\n    lo = (lo + Math.imul(al3, bl7)) | 0;\n    mid = (mid + Math.imul(al3, bh7)) | 0;\n    mid = (mid + Math.imul(ah3, bl7)) | 0;\n    hi = (hi + Math.imul(ah3, bh7)) | 0;\n    lo = (lo + Math.imul(al2, bl8)) | 0;\n    mid = (mid + Math.imul(al2, bh8)) | 0;\n    mid = (mid + Math.imul(ah2, bl8)) | 0;\n    hi = (hi + Math.imul(ah2, bh8)) | 0;\n    lo = (lo + Math.imul(al1, bl9)) | 0;\n    mid = (mid + Math.imul(al1, bh9)) | 0;\n    mid = (mid + Math.imul(ah1, bl9)) | 0;\n    hi = (hi + Math.imul(ah1, bh9)) | 0;\n    var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n    w10 &= 0x3ffffff;\n    /* k = 11 */\n    lo = Math.imul(al9, bl2);\n    mid = Math.imul(al9, bh2);\n    mid = (mid + Math.imul(ah9, bl2)) | 0;\n    hi = Math.imul(ah9, bh2);\n    lo = (lo + Math.imul(al8, bl3)) | 0;\n    mid = (mid + Math.imul(al8, bh3)) | 0;\n    mid = (mid + Math.imul(ah8, bl3)) | 0;\n    hi = (hi + Math.imul(ah8, bh3)) | 0;\n    lo = (lo + Math.imul(al7, bl4)) | 0;\n    mid = (mid + Math.imul(al7, bh4)) | 0;\n    mid = (mid + Math.imul(ah7, bl4)) | 0;\n    hi = (hi + Math.imul(ah7, bh4)) | 0;\n    lo = (lo + Math.imul(al6, bl5)) | 0;\n    mid = (mid + Math.imul(al6, bh5)) | 0;\n    mid = (mid + Math.imul(ah6, bl5)) | 0;\n    hi = (hi + Math.imul(ah6, bh5)) | 0;\n    lo = (lo + Math.imul(al5, bl6)) | 0;\n    mid = (mid + Math.imul(al5, bh6)) | 0;\n    mid = (mid + Math.imul(ah5, bl6)) | 0;\n    hi = (hi + Math.imul(ah5, bh6)) | 0;\n    lo = (lo + Math.imul(al4, bl7)) | 0;\n    mid = (mid + Math.imul(al4, bh7)) | 0;\n    mid = (mid + Math.imul(ah4, bl7)) | 0;\n    hi = (hi + Math.imul(ah4, bh7)) | 0;\n    lo = (lo + Math.imul(al3, bl8)) | 0;\n    mid = (mid + Math.imul(al3, bh8)) | 0;\n    mid = (mid + Math.imul(ah3, bl8)) | 0;\n    hi = (hi + Math.imul(ah3, bh8)) | 0;\n    lo = (lo + Math.imul(al2, bl9)) | 0;\n    mid = (mid + Math.imul(al2, bh9)) | 0;\n    mid = (mid + Math.imul(ah2, bl9)) | 0;\n    hi = (hi + Math.imul(ah2, bh9)) | 0;\n    var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n    w11 &= 0x3ffffff;\n    /* k = 12 */\n    lo = Math.imul(al9, bl3);\n    mid = Math.imul(al9, bh3);\n    mid = (mid + Math.imul(ah9, bl3)) | 0;\n    hi = Math.imul(ah9, bh3);\n    lo = (lo + Math.imul(al8, bl4)) | 0;\n    mid = (mid + Math.imul(al8, bh4)) | 0;\n    mid = (mid + Math.imul(ah8, bl4)) | 0;\n    hi = (hi + Math.imul(ah8, bh4)) | 0;\n    lo = (lo + Math.imul(al7, bl5)) | 0;\n    mid = (mid + Math.imul(al7, bh5)) | 0;\n    mid = (mid + Math.imul(ah7, bl5)) | 0;\n    hi = (hi + Math.imul(ah7, bh5)) | 0;\n    lo = (lo + Math.imul(al6, bl6)) | 0;\n    mid = (mid + Math.imul(al6, bh6)) | 0;\n    mid = (mid + Math.imul(ah6, bl6)) | 0;\n    hi = (hi + Math.imul(ah6, bh6)) | 0;\n    lo = (lo + Math.imul(al5, bl7)) | 0;\n    mid = (mid + Math.imul(al5, bh7)) | 0;\n    mid = (mid + Math.imul(ah5, bl7)) | 0;\n    hi = (hi + Math.imul(ah5, bh7)) | 0;\n    lo = (lo + Math.imul(al4, bl8)) | 0;\n    mid = (mid + Math.imul(al4, bh8)) | 0;\n    mid = (mid + Math.imul(ah4, bl8)) | 0;\n    hi = (hi + Math.imul(ah4, bh8)) | 0;\n    lo = (lo + Math.imul(al3, bl9)) | 0;\n    mid = (mid + Math.imul(al3, bh9)) | 0;\n    mid = (mid + Math.imul(ah3, bl9)) | 0;\n    hi = (hi + Math.imul(ah3, bh9)) | 0;\n    var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n    w12 &= 0x3ffffff;\n    /* k = 13 */\n    lo = Math.imul(al9, bl4);\n    mid = Math.imul(al9, bh4);\n    mid = (mid + Math.imul(ah9, bl4)) | 0;\n    hi = Math.imul(ah9, bh4);\n    lo = (lo + Math.imul(al8, bl5)) | 0;\n    mid = (mid + Math.imul(al8, bh5)) | 0;\n    mid = (mid + Math.imul(ah8, bl5)) | 0;\n    hi = (hi + Math.imul(ah8, bh5)) | 0;\n    lo = (lo + Math.imul(al7, bl6)) | 0;\n    mid = (mid + Math.imul(al7, bh6)) | 0;\n    mid = (mid + Math.imul(ah7, bl6)) | 0;\n    hi = (hi + Math.imul(ah7, bh6)) | 0;\n    lo = (lo + Math.imul(al6, bl7)) | 0;\n    mid = (mid + Math.imul(al6, bh7)) | 0;\n    mid = (mid + Math.imul(ah6, bl7)) | 0;\n    hi = (hi + Math.imul(ah6, bh7)) | 0;\n    lo = (lo + Math.imul(al5, bl8)) | 0;\n    mid = (mid + Math.imul(al5, bh8)) | 0;\n    mid = (mid + Math.imul(ah5, bl8)) | 0;\n    hi = (hi + Math.imul(ah5, bh8)) | 0;\n    lo = (lo + Math.imul(al4, bl9)) | 0;\n    mid = (mid + Math.imul(al4, bh9)) | 0;\n    mid = (mid + Math.imul(ah4, bl9)) | 0;\n    hi = (hi + Math.imul(ah4, bh9)) | 0;\n    var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n    w13 &= 0x3ffffff;\n    /* k = 14 */\n    lo = Math.imul(al9, bl5);\n    mid = Math.imul(al9, bh5);\n    mid = (mid + Math.imul(ah9, bl5)) | 0;\n    hi = Math.imul(ah9, bh5);\n    lo = (lo + Math.imul(al8, bl6)) | 0;\n    mid = (mid + Math.imul(al8, bh6)) | 0;\n    mid = (mid + Math.imul(ah8, bl6)) | 0;\n    hi = (hi + Math.imul(ah8, bh6)) | 0;\n    lo = (lo + Math.imul(al7, bl7)) | 0;\n    mid = (mid + Math.imul(al7, bh7)) | 0;\n    mid = (mid + Math.imul(ah7, bl7)) | 0;\n    hi = (hi + Math.imul(ah7, bh7)) | 0;\n    lo = (lo + Math.imul(al6, bl8)) | 0;\n    mid = (mid + Math.imul(al6, bh8)) | 0;\n    mid = (mid + Math.imul(ah6, bl8)) | 0;\n    hi = (hi + Math.imul(ah6, bh8)) | 0;\n    lo = (lo + Math.imul(al5, bl9)) | 0;\n    mid = (mid + Math.imul(al5, bh9)) | 0;\n    mid = (mid + Math.imul(ah5, bl9)) | 0;\n    hi = (hi + Math.imul(ah5, bh9)) | 0;\n    var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n    w14 &= 0x3ffffff;\n    /* k = 15 */\n    lo = Math.imul(al9, bl6);\n    mid = Math.imul(al9, bh6);\n    mid = (mid + Math.imul(ah9, bl6)) | 0;\n    hi = Math.imul(ah9, bh6);\n    lo = (lo + Math.imul(al8, bl7)) | 0;\n    mid = (mid + Math.imul(al8, bh7)) | 0;\n    mid = (mid + Math.imul(ah8, bl7)) | 0;\n    hi = (hi + Math.imul(ah8, bh7)) | 0;\n    lo = (lo + Math.imul(al7, bl8)) | 0;\n    mid = (mid + Math.imul(al7, bh8)) | 0;\n    mid = (mid + Math.imul(ah7, bl8)) | 0;\n    hi = (hi + Math.imul(ah7, bh8)) | 0;\n    lo = (lo + Math.imul(al6, bl9)) | 0;\n    mid = (mid + Math.imul(al6, bh9)) | 0;\n    mid = (mid + Math.imul(ah6, bl9)) | 0;\n    hi = (hi + Math.imul(ah6, bh9)) | 0;\n    var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n    w15 &= 0x3ffffff;\n    /* k = 16 */\n    lo = Math.imul(al9, bl7);\n    mid = Math.imul(al9, bh7);\n    mid = (mid + Math.imul(ah9, bl7)) | 0;\n    hi = Math.imul(ah9, bh7);\n    lo = (lo + Math.imul(al8, bl8)) | 0;\n    mid = (mid + Math.imul(al8, bh8)) | 0;\n    mid = (mid + Math.imul(ah8, bl8)) | 0;\n    hi = (hi + Math.imul(ah8, bh8)) | 0;\n    lo = (lo + Math.imul(al7, bl9)) | 0;\n    mid = (mid + Math.imul(al7, bh9)) | 0;\n    mid = (mid + Math.imul(ah7, bl9)) | 0;\n    hi = (hi + Math.imul(ah7, bh9)) | 0;\n    var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n    w16 &= 0x3ffffff;\n    /* k = 17 */\n    lo = Math.imul(al9, bl8);\n    mid = Math.imul(al9, bh8);\n    mid = (mid + Math.imul(ah9, bl8)) | 0;\n    hi = Math.imul(ah9, bh8);\n    lo = (lo + Math.imul(al8, bl9)) | 0;\n    mid = (mid + Math.imul(al8, bh9)) | 0;\n    mid = (mid + Math.imul(ah8, bl9)) | 0;\n    hi = (hi + Math.imul(ah8, bh9)) | 0;\n    var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n    w17 &= 0x3ffffff;\n    /* k = 18 */\n    lo = Math.imul(al9, bl9);\n    mid = Math.imul(al9, bh9);\n    mid = (mid + Math.imul(ah9, bl9)) | 0;\n    hi = Math.imul(ah9, bh9);\n    var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n    w18 &= 0x3ffffff;\n    o[0] = w0;\n    o[1] = w1;\n    o[2] = w2;\n    o[3] = w3;\n    o[4] = w4;\n    o[5] = w5;\n    o[6] = w6;\n    o[7] = w7;\n    o[8] = w8;\n    o[9] = w9;\n    o[10] = w10;\n    o[11] = w11;\n    o[12] = w12;\n    o[13] = w13;\n    o[14] = w14;\n    o[15] = w15;\n    o[16] = w16;\n    o[17] = w17;\n    o[18] = w18;\n    if (c !== 0) {\n      o[19] = c;\n      out.length++;\n    }\n    return out;\n  };\n\n  // Polyfill comb\n  if (!Math.imul) {\n    comb10MulTo = smallMulTo;\n  }\n\n  function bigMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    out.length = self.length + num.length;\n\n    var carry = 0;\n    var hncarry = 0;\n    for (var k = 0; k < out.length - 1; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = hncarry;\n      hncarry = 0;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = k - j;\n        var a = self.words[i] | 0;\n        var b = num.words[j] | 0;\n        var r = a * b;\n\n        var lo = r & 0x3ffffff;\n        ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n        lo = (lo + rword) | 0;\n        rword = lo & 0x3ffffff;\n        ncarry = (ncarry + (lo >>> 26)) | 0;\n\n        hncarry += ncarry >>> 26;\n        ncarry &= 0x3ffffff;\n      }\n      out.words[k] = rword;\n      carry = ncarry;\n      ncarry = hncarry;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry;\n    } else {\n      out.length--;\n    }\n\n    return out._strip();\n  }\n\n  function jumboMulTo (self, num, out) {\n    // Temporary disable, see https://github.com/indutny/bn.js/issues/211\n    // var fftm = new FFTM();\n    // return fftm.mulp(self, num, out);\n    return bigMulTo(self, num, out);\n  }\n\n  BN.prototype.mulTo = function mulTo (num, out) {\n    var res;\n    var len = this.length + num.length;\n    if (this.length === 10 && num.length === 10) {\n      res = comb10MulTo(this, num, out);\n    } else if (len < 63) {\n      res = smallMulTo(this, num, out);\n    } else if (len < 1024) {\n      res = bigMulTo(this, num, out);\n    } else {\n      res = jumboMulTo(this, num, out);\n    }\n\n    return res;\n  };\n\n  // Cooley-Tukey algorithm for FFT\n  // slightly revisited to rely on looping instead of recursion\n\n  function FFTM (x, y) {\n    this.x = x;\n    this.y = y;\n  }\n\n  FFTM.prototype.makeRBT = function makeRBT (N) {\n    var t = new Array(N);\n    var l = BN.prototype._countBits(N) - 1;\n    for (var i = 0; i < N; i++) {\n      t[i] = this.revBin(i, l, N);\n    }\n\n    return t;\n  };\n\n  // Returns binary-reversed representation of `x`\n  FFTM.prototype.revBin = function revBin (x, l, N) {\n    if (x === 0 || x === N - 1) return x;\n\n    var rb = 0;\n    for (var i = 0; i < l; i++) {\n      rb |= (x & 1) << (l - i - 1);\n      x >>= 1;\n    }\n\n    return rb;\n  };\n\n  // Performs \"tweedling\" phase, therefore 'emulating'\n  // behaviour of the recursive algorithm\n  FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n    for (var i = 0; i < N; i++) {\n      rtws[i] = rws[rbt[i]];\n      itws[i] = iws[rbt[i]];\n    }\n  };\n\n  FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n    this.permute(rbt, rws, iws, rtws, itws, N);\n\n    for (var s = 1; s < N; s <<= 1) {\n      var l = s << 1;\n\n      var rtwdf = Math.cos(2 * Math.PI / l);\n      var itwdf = Math.sin(2 * Math.PI / l);\n\n      for (var p = 0; p < N; p += l) {\n        var rtwdf_ = rtwdf;\n        var itwdf_ = itwdf;\n\n        for (var j = 0; j < s; j++) {\n          var re = rtws[p + j];\n          var ie = itws[p + j];\n\n          var ro = rtws[p + j + s];\n          var io = itws[p + j + s];\n\n          var rx = rtwdf_ * ro - itwdf_ * io;\n\n          io = rtwdf_ * io + itwdf_ * ro;\n          ro = rx;\n\n          rtws[p + j] = re + ro;\n          itws[p + j] = ie + io;\n\n          rtws[p + j + s] = re - ro;\n          itws[p + j + s] = ie - io;\n\n          /* jshint maxdepth : false */\n          if (j !== l) {\n            rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n            itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n            rtwdf_ = rx;\n          }\n        }\n      }\n    }\n  };\n\n  FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n    var N = Math.max(m, n) | 1;\n    var odd = N & 1;\n    var i = 0;\n    for (N = N / 2 | 0; N; N = N >>> 1) {\n      i++;\n    }\n\n    return 1 << i + 1 + odd;\n  };\n\n  FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n    if (N <= 1) return;\n\n    for (var i = 0; i < N / 2; i++) {\n      var t = rws[i];\n\n      rws[i] = rws[N - i - 1];\n      rws[N - i - 1] = t;\n\n      t = iws[i];\n\n      iws[i] = -iws[N - i - 1];\n      iws[N - i - 1] = -t;\n    }\n  };\n\n  FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n    var carry = 0;\n    for (var i = 0; i < N / 2; i++) {\n      var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n        Math.round(ws[2 * i] / N) +\n        carry;\n\n      ws[i] = w & 0x3ffffff;\n\n      if (w < 0x4000000) {\n        carry = 0;\n      } else {\n        carry = w / 0x4000000 | 0;\n      }\n    }\n\n    return ws;\n  };\n\n  FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n    var carry = 0;\n    for (var i = 0; i < len; i++) {\n      carry = carry + (ws[i] | 0);\n\n      rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n      rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n    }\n\n    // Pad with zeroes\n    for (i = 2 * len; i < N; ++i) {\n      rws[i] = 0;\n    }\n\n    assert(carry === 0);\n    assert((carry & ~0x1fff) === 0);\n  };\n\n  FFTM.prototype.stub = function stub (N) {\n    var ph = new Array(N);\n    for (var i = 0; i < N; i++) {\n      ph[i] = 0;\n    }\n\n    return ph;\n  };\n\n  FFTM.prototype.mulp = function mulp (x, y, out) {\n    var N = 2 * this.guessLen13b(x.length, y.length);\n\n    var rbt = this.makeRBT(N);\n\n    var _ = this.stub(N);\n\n    var rws = new Array(N);\n    var rwst = new Array(N);\n    var iwst = new Array(N);\n\n    var nrws = new Array(N);\n    var nrwst = new Array(N);\n    var niwst = new Array(N);\n\n    var rmws = out.words;\n    rmws.length = N;\n\n    this.convert13b(x.words, x.length, rws, N);\n    this.convert13b(y.words, y.length, nrws, N);\n\n    this.transform(rws, _, rwst, iwst, N, rbt);\n    this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n    for (var i = 0; i < N; i++) {\n      var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n      iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n      rwst[i] = rx;\n    }\n\n    this.conjugate(rwst, iwst, N);\n    this.transform(rwst, iwst, rmws, _, N, rbt);\n    this.conjugate(rmws, _, N);\n    this.normalize13b(rmws, N);\n\n    out.negative = x.negative ^ y.negative;\n    out.length = x.length + y.length;\n    return out._strip();\n  };\n\n  // Multiply `this` by `num`\n  BN.prototype.mul = function mul (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return this.mulTo(num, out);\n  };\n\n  // Multiply employing FFT\n  BN.prototype.mulf = function mulf (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return jumboMulTo(this, num, out);\n  };\n\n  // In-place Multiplication\n  BN.prototype.imul = function imul (num) {\n    return this.clone().mulTo(num, this);\n  };\n\n  BN.prototype.imuln = function imuln (num) {\n    var isNegNum = num < 0;\n    if (isNegNum) num = -num;\n\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n\n    // Carry\n    var carry = 0;\n    for (var i = 0; i < this.length; i++) {\n      var w = (this.words[i] | 0) * num;\n      var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n      carry >>= 26;\n      carry += (w / 0x4000000) | 0;\n      // NOTE: lo is 27bit maximum\n      carry += lo >>> 26;\n      this.words[i] = lo & 0x3ffffff;\n    }\n\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n\n    return isNegNum ? this.ineg() : this;\n  };\n\n  BN.prototype.muln = function muln (num) {\n    return this.clone().imuln(num);\n  };\n\n  // `this` * `this`\n  BN.prototype.sqr = function sqr () {\n    return this.mul(this);\n  };\n\n  // `this` * `this` in-place\n  BN.prototype.isqr = function isqr () {\n    return this.imul(this.clone());\n  };\n\n  // Math.pow(`this`, `num`)\n  BN.prototype.pow = function pow (num) {\n    var w = toBitArray(num);\n    if (w.length === 0) return new BN(1);\n\n    // Skip leading zeroes\n    var res = this;\n    for (var i = 0; i < w.length; i++, res = res.sqr()) {\n      if (w[i] !== 0) break;\n    }\n\n    if (++i < w.length) {\n      for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n        if (w[i] === 0) continue;\n\n        res = res.mul(q);\n      }\n    }\n\n    return res;\n  };\n\n  // Shift-left in-place\n  BN.prototype.iushln = function iushln (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n    var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n    var i;\n\n    if (r !== 0) {\n      var carry = 0;\n\n      for (i = 0; i < this.length; i++) {\n        var newCarry = this.words[i] & carryMask;\n        var c = ((this.words[i] | 0) - newCarry) << r;\n        this.words[i] = c | carry;\n        carry = newCarry >>> (26 - r);\n      }\n\n      if (carry) {\n        this.words[i] = carry;\n        this.length++;\n      }\n    }\n\n    if (s !== 0) {\n      for (i = this.length - 1; i >= 0; i--) {\n        this.words[i + s] = this.words[i];\n      }\n\n      for (i = 0; i < s; i++) {\n        this.words[i] = 0;\n      }\n\n      this.length += s;\n    }\n\n    return this._strip();\n  };\n\n  BN.prototype.ishln = function ishln (bits) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushln(bits);\n  };\n\n  // Shift-right in-place\n  // NOTE: `hint` is a lowest bit before trailing zeroes\n  // NOTE: if `extended` is present - it will be filled with destroyed bits\n  BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var h;\n    if (hint) {\n      h = (hint - (hint % 26)) / 26;\n    } else {\n      h = 0;\n    }\n\n    var r = bits % 26;\n    var s = Math.min((bits - r) / 26, this.length);\n    var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n    var maskedWords = extended;\n\n    h -= s;\n    h = Math.max(0, h);\n\n    // Extended mode, copy masked part\n    if (maskedWords) {\n      for (var i = 0; i < s; i++) {\n        maskedWords.words[i] = this.words[i];\n      }\n      maskedWords.length = s;\n    }\n\n    if (s === 0) {\n      // No-op, we should not move anything at all\n    } else if (this.length > s) {\n      this.length -= s;\n      for (i = 0; i < this.length; i++) {\n        this.words[i] = this.words[i + s];\n      }\n    } else {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    var carry = 0;\n    for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n      var word = this.words[i] | 0;\n      this.words[i] = (carry << (26 - r)) | (word >>> r);\n      carry = word & mask;\n    }\n\n    // Push carried bits as a mask\n    if (maskedWords && carry !== 0) {\n      maskedWords.words[maskedWords.length++] = carry;\n    }\n\n    if (this.length === 0) {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    return this._strip();\n  };\n\n  BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushrn(bits, hint, extended);\n  };\n\n  // Shift-left\n  BN.prototype.shln = function shln (bits) {\n    return this.clone().ishln(bits);\n  };\n\n  BN.prototype.ushln = function ushln (bits) {\n    return this.clone().iushln(bits);\n  };\n\n  // Shift-right\n  BN.prototype.shrn = function shrn (bits) {\n    return this.clone().ishrn(bits);\n  };\n\n  BN.prototype.ushrn = function ushrn (bits) {\n    return this.clone().iushrn(bits);\n  };\n\n  // Test if n bit is set\n  BN.prototype.testn = function testn (bit) {\n    assert(typeof bit === 'number' && bit >= 0);\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) return false;\n\n    // Check bit and return\n    var w = this.words[s];\n\n    return !!(w & q);\n  };\n\n  // Return only lowers bits of number (in-place)\n  BN.prototype.imaskn = function imaskn (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n\n    assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n    if (this.length <= s) {\n      return this;\n    }\n\n    if (r !== 0) {\n      s++;\n    }\n    this.length = Math.min(s, this.length);\n\n    if (r !== 0) {\n      var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n      this.words[this.length - 1] &= mask;\n    }\n\n    return this._strip();\n  };\n\n  // Return only lowers bits of number\n  BN.prototype.maskn = function maskn (bits) {\n    return this.clone().imaskn(bits);\n  };\n\n  // Add plain number `num` to `this`\n  BN.prototype.iaddn = function iaddn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.isubn(-num);\n\n    // Possible sign change\n    if (this.negative !== 0) {\n      if (this.length === 1 && (this.words[0] | 0) <= num) {\n        this.words[0] = num - (this.words[0] | 0);\n        this.negative = 0;\n        return this;\n      }\n\n      this.negative = 0;\n      this.isubn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    // Add without checks\n    return this._iaddn(num);\n  };\n\n  BN.prototype._iaddn = function _iaddn (num) {\n    this.words[0] += num;\n\n    // Carry\n    for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n      this.words[i] -= 0x4000000;\n      if (i === this.length - 1) {\n        this.words[i + 1] = 1;\n      } else {\n        this.words[i + 1]++;\n      }\n    }\n    this.length = Math.max(this.length, i + 1);\n\n    return this;\n  };\n\n  // Subtract plain number `num` from `this`\n  BN.prototype.isubn = function isubn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.iaddn(-num);\n\n    if (this.negative !== 0) {\n      this.negative = 0;\n      this.iaddn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    this.words[0] -= num;\n\n    if (this.length === 1 && this.words[0] < 0) {\n      this.words[0] = -this.words[0];\n      this.negative = 1;\n    } else {\n      // Carry\n      for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n        this.words[i] += 0x4000000;\n        this.words[i + 1] -= 1;\n      }\n    }\n\n    return this._strip();\n  };\n\n  BN.prototype.addn = function addn (num) {\n    return this.clone().iaddn(num);\n  };\n\n  BN.prototype.subn = function subn (num) {\n    return this.clone().isubn(num);\n  };\n\n  BN.prototype.iabs = function iabs () {\n    this.negative = 0;\n\n    return this;\n  };\n\n  BN.prototype.abs = function abs () {\n    return this.clone().iabs();\n  };\n\n  BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n    var len = num.length + shift;\n    var i;\n\n    this._expand(len);\n\n    var w;\n    var carry = 0;\n    for (i = 0; i < num.length; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      var right = (num.words[i] | 0) * mul;\n      w -= right & 0x3ffffff;\n      carry = (w >> 26) - ((right / 0x4000000) | 0);\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n    for (; i < this.length - shift; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      carry = w >> 26;\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n\n    if (carry === 0) return this._strip();\n\n    // Subtraction overflow\n    assert(carry === -1);\n    carry = 0;\n    for (i = 0; i < this.length; i++) {\n      w = -(this.words[i] | 0) + carry;\n      carry = w >> 26;\n      this.words[i] = w & 0x3ffffff;\n    }\n    this.negative = 1;\n\n    return this._strip();\n  };\n\n  BN.prototype._wordDiv = function _wordDiv (num, mode) {\n    var shift = this.length - num.length;\n\n    var a = this.clone();\n    var b = num;\n\n    // Normalize\n    var bhi = b.words[b.length - 1] | 0;\n    var bhiBits = this._countBits(bhi);\n    shift = 26 - bhiBits;\n    if (shift !== 0) {\n      b = b.ushln(shift);\n      a.iushln(shift);\n      bhi = b.words[b.length - 1] | 0;\n    }\n\n    // Initialize quotient\n    var m = a.length - b.length;\n    var q;\n\n    if (mode !== 'mod') {\n      q = new BN(null);\n      q.length = m + 1;\n      q.words = new Array(q.length);\n      for (var i = 0; i < q.length; i++) {\n        q.words[i] = 0;\n      }\n    }\n\n    var diff = a.clone()._ishlnsubmul(b, 1, m);\n    if (diff.negative === 0) {\n      a = diff;\n      if (q) {\n        q.words[m] = 1;\n      }\n    }\n\n    for (var j = m - 1; j >= 0; j--) {\n      var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n        (a.words[b.length + j - 1] | 0);\n\n      // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n      // (0x7ffffff)\n      qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n      a._ishlnsubmul(b, qj, j);\n      while (a.negative !== 0) {\n        qj--;\n        a.negative = 0;\n        a._ishlnsubmul(b, 1, j);\n        if (!a.isZero()) {\n          a.negative ^= 1;\n        }\n      }\n      if (q) {\n        q.words[j] = qj;\n      }\n    }\n    if (q) {\n      q._strip();\n    }\n    a._strip();\n\n    // Denormalize\n    if (mode !== 'div' && shift !== 0) {\n      a.iushrn(shift);\n    }\n\n    return {\n      div: q || null,\n      mod: a\n    };\n  };\n\n  // NOTE: 1) `mode` can be set to `mod` to request mod only,\n  //       to `div` to request div only, or be absent to\n  //       request both div & mod\n  //       2) `positive` is true if unsigned mod is requested\n  BN.prototype.divmod = function divmod (num, mode, positive) {\n    assert(!num.isZero());\n\n    if (this.isZero()) {\n      return {\n        div: new BN(0),\n        mod: new BN(0)\n      };\n    }\n\n    var div, mod, res;\n    if (this.negative !== 0 && num.negative === 0) {\n      res = this.neg().divmod(num, mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.iadd(num);\n        }\n      }\n\n      return {\n        div: div,\n        mod: mod\n      };\n    }\n\n    if (this.negative === 0 && num.negative !== 0) {\n      res = this.divmod(num.neg(), mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      return {\n        div: div,\n        mod: res.mod\n      };\n    }\n\n    if ((this.negative & num.negative) !== 0) {\n      res = this.neg().divmod(num.neg(), mode);\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.isub(num);\n        }\n      }\n\n      return {\n        div: res.div,\n        mod: mod\n      };\n    }\n\n    // Both numbers are positive at this point\n\n    // Strip both numbers to approximate shift value\n    if (num.length > this.length || this.cmp(num) < 0) {\n      return {\n        div: new BN(0),\n        mod: this\n      };\n    }\n\n    // Very short reduction\n    if (num.length === 1) {\n      if (mode === 'div') {\n        return {\n          div: this.divn(num.words[0]),\n          mod: null\n        };\n      }\n\n      if (mode === 'mod') {\n        return {\n          div: null,\n          mod: new BN(this.modrn(num.words[0]))\n        };\n      }\n\n      return {\n        div: this.divn(num.words[0]),\n        mod: new BN(this.modrn(num.words[0]))\n      };\n    }\n\n    return this._wordDiv(num, mode);\n  };\n\n  // Find `this` / `num`\n  BN.prototype.div = function div (num) {\n    return this.divmod(num, 'div', false).div;\n  };\n\n  // Find `this` % `num`\n  BN.prototype.mod = function mod (num) {\n    return this.divmod(num, 'mod', false).mod;\n  };\n\n  BN.prototype.umod = function umod (num) {\n    return this.divmod(num, 'mod', true).mod;\n  };\n\n  // Find Round(`this` / `num`)\n  BN.prototype.divRound = function divRound (num) {\n    var dm = this.divmod(num);\n\n    // Fast case - exact division\n    if (dm.mod.isZero()) return dm.div;\n\n    var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n    var half = num.ushrn(1);\n    var r2 = num.andln(1);\n    var cmp = mod.cmp(half);\n\n    // Round down\n    if (cmp < 0 || (r2 === 1 && cmp === 0)) return dm.div;\n\n    // Round up\n    return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n  };\n\n  BN.prototype.modrn = function modrn (num) {\n    var isNegNum = num < 0;\n    if (isNegNum) num = -num;\n\n    assert(num <= 0x3ffffff);\n    var p = (1 << 26) % num;\n\n    var acc = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      acc = (p * acc + (this.words[i] | 0)) % num;\n    }\n\n    return isNegNum ? -acc : acc;\n  };\n\n  // WARNING: DEPRECATED\n  BN.prototype.modn = function modn (num) {\n    return this.modrn(num);\n  };\n\n  // In-place division by number\n  BN.prototype.idivn = function idivn (num) {\n    var isNegNum = num < 0;\n    if (isNegNum) num = -num;\n\n    assert(num <= 0x3ffffff);\n\n    var carry = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var w = (this.words[i] | 0) + carry * 0x4000000;\n      this.words[i] = (w / num) | 0;\n      carry = w % num;\n    }\n\n    this._strip();\n    return isNegNum ? this.ineg() : this;\n  };\n\n  BN.prototype.divn = function divn (num) {\n    return this.clone().idivn(num);\n  };\n\n  BN.prototype.egcd = function egcd (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var x = this;\n    var y = p.clone();\n\n    if (x.negative !== 0) {\n      x = x.umod(p);\n    } else {\n      x = x.clone();\n    }\n\n    // A * x + B * y = x\n    var A = new BN(1);\n    var B = new BN(0);\n\n    // C * x + D * y = y\n    var C = new BN(0);\n    var D = new BN(1);\n\n    var g = 0;\n\n    while (x.isEven() && y.isEven()) {\n      x.iushrn(1);\n      y.iushrn(1);\n      ++g;\n    }\n\n    var yp = y.clone();\n    var xp = x.clone();\n\n    while (!x.isZero()) {\n      for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        x.iushrn(i);\n        while (i-- > 0) {\n          if (A.isOdd() || B.isOdd()) {\n            A.iadd(yp);\n            B.isub(xp);\n          }\n\n          A.iushrn(1);\n          B.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        y.iushrn(j);\n        while (j-- > 0) {\n          if (C.isOdd() || D.isOdd()) {\n            C.iadd(yp);\n            D.isub(xp);\n          }\n\n          C.iushrn(1);\n          D.iushrn(1);\n        }\n      }\n\n      if (x.cmp(y) >= 0) {\n        x.isub(y);\n        A.isub(C);\n        B.isub(D);\n      } else {\n        y.isub(x);\n        C.isub(A);\n        D.isub(B);\n      }\n    }\n\n    return {\n      a: C,\n      b: D,\n      gcd: y.iushln(g)\n    };\n  };\n\n  // This is reduced incarnation of the binary EEA\n  // above, designated to invert members of the\n  // _prime_ fields F(p) at a maximal speed\n  BN.prototype._invmp = function _invmp (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var a = this;\n    var b = p.clone();\n\n    if (a.negative !== 0) {\n      a = a.umod(p);\n    } else {\n      a = a.clone();\n    }\n\n    var x1 = new BN(1);\n    var x2 = new BN(0);\n\n    var delta = b.clone();\n\n    while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n      for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        a.iushrn(i);\n        while (i-- > 0) {\n          if (x1.isOdd()) {\n            x1.iadd(delta);\n          }\n\n          x1.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        b.iushrn(j);\n        while (j-- > 0) {\n          if (x2.isOdd()) {\n            x2.iadd(delta);\n          }\n\n          x2.iushrn(1);\n        }\n      }\n\n      if (a.cmp(b) >= 0) {\n        a.isub(b);\n        x1.isub(x2);\n      } else {\n        b.isub(a);\n        x2.isub(x1);\n      }\n    }\n\n    var res;\n    if (a.cmpn(1) === 0) {\n      res = x1;\n    } else {\n      res = x2;\n    }\n\n    if (res.cmpn(0) < 0) {\n      res.iadd(p);\n    }\n\n    return res;\n  };\n\n  BN.prototype.gcd = function gcd (num) {\n    if (this.isZero()) return num.abs();\n    if (num.isZero()) return this.abs();\n\n    var a = this.clone();\n    var b = num.clone();\n    a.negative = 0;\n    b.negative = 0;\n\n    // Remove common factor of two\n    for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n      a.iushrn(1);\n      b.iushrn(1);\n    }\n\n    do {\n      while (a.isEven()) {\n        a.iushrn(1);\n      }\n      while (b.isEven()) {\n        b.iushrn(1);\n      }\n\n      var r = a.cmp(b);\n      if (r < 0) {\n        // Swap `a` and `b` to make `a` always bigger than `b`\n        var t = a;\n        a = b;\n        b = t;\n      } else if (r === 0 || b.cmpn(1) === 0) {\n        break;\n      }\n\n      a.isub(b);\n    } while (true);\n\n    return b.iushln(shift);\n  };\n\n  // Invert number in the field F(num)\n  BN.prototype.invm = function invm (num) {\n    return this.egcd(num).a.umod(num);\n  };\n\n  BN.prototype.isEven = function isEven () {\n    return (this.words[0] & 1) === 0;\n  };\n\n  BN.prototype.isOdd = function isOdd () {\n    return (this.words[0] & 1) === 1;\n  };\n\n  // And first word and num\n  BN.prototype.andln = function andln (num) {\n    return this.words[0] & num;\n  };\n\n  // Increment at the bit position in-line\n  BN.prototype.bincn = function bincn (bit) {\n    assert(typeof bit === 'number');\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) {\n      this._expand(s + 1);\n      this.words[s] |= q;\n      return this;\n    }\n\n    // Add bit and propagate, if needed\n    var carry = q;\n    for (var i = s; carry !== 0 && i < this.length; i++) {\n      var w = this.words[i] | 0;\n      w += carry;\n      carry = w >>> 26;\n      w &= 0x3ffffff;\n      this.words[i] = w;\n    }\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n    return this;\n  };\n\n  BN.prototype.isZero = function isZero () {\n    return this.length === 1 && this.words[0] === 0;\n  };\n\n  BN.prototype.cmpn = function cmpn (num) {\n    var negative = num < 0;\n\n    if (this.negative !== 0 && !negative) return -1;\n    if (this.negative === 0 && negative) return 1;\n\n    this._strip();\n\n    var res;\n    if (this.length > 1) {\n      res = 1;\n    } else {\n      if (negative) {\n        num = -num;\n      }\n\n      assert(num <= 0x3ffffff, 'Number is too big');\n\n      var w = this.words[0] | 0;\n      res = w === num ? 0 : w < num ? -1 : 1;\n    }\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Compare two numbers and return:\n  // 1 - if `this` > `num`\n  // 0 - if `this` == `num`\n  // -1 - if `this` < `num`\n  BN.prototype.cmp = function cmp (num) {\n    if (this.negative !== 0 && num.negative === 0) return -1;\n    if (this.negative === 0 && num.negative !== 0) return 1;\n\n    var res = this.ucmp(num);\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Unsigned comparison\n  BN.prototype.ucmp = function ucmp (num) {\n    // At this point both numbers have the same sign\n    if (this.length > num.length) return 1;\n    if (this.length < num.length) return -1;\n\n    var res = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var a = this.words[i] | 0;\n      var b = num.words[i] | 0;\n\n      if (a === b) continue;\n      if (a < b) {\n        res = -1;\n      } else if (a > b) {\n        res = 1;\n      }\n      break;\n    }\n    return res;\n  };\n\n  BN.prototype.gtn = function gtn (num) {\n    return this.cmpn(num) === 1;\n  };\n\n  BN.prototype.gt = function gt (num) {\n    return this.cmp(num) === 1;\n  };\n\n  BN.prototype.gten = function gten (num) {\n    return this.cmpn(num) >= 0;\n  };\n\n  BN.prototype.gte = function gte (num) {\n    return this.cmp(num) >= 0;\n  };\n\n  BN.prototype.ltn = function ltn (num) {\n    return this.cmpn(num) === -1;\n  };\n\n  BN.prototype.lt = function lt (num) {\n    return this.cmp(num) === -1;\n  };\n\n  BN.prototype.lten = function lten (num) {\n    return this.cmpn(num) <= 0;\n  };\n\n  BN.prototype.lte = function lte (num) {\n    return this.cmp(num) <= 0;\n  };\n\n  BN.prototype.eqn = function eqn (num) {\n    return this.cmpn(num) === 0;\n  };\n\n  BN.prototype.eq = function eq (num) {\n    return this.cmp(num) === 0;\n  };\n\n  //\n  // A reduce context, could be using montgomery or something better, depending\n  // on the `m` itself.\n  //\n  BN.red = function red (num) {\n    return new Red(num);\n  };\n\n  BN.prototype.toRed = function toRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    assert(this.negative === 0, 'red works only with positives');\n    return ctx.convertTo(this)._forceRed(ctx);\n  };\n\n  BN.prototype.fromRed = function fromRed () {\n    assert(this.red, 'fromRed works only with numbers in reduction context');\n    return this.red.convertFrom(this);\n  };\n\n  BN.prototype._forceRed = function _forceRed (ctx) {\n    this.red = ctx;\n    return this;\n  };\n\n  BN.prototype.forceRed = function forceRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    return this._forceRed(ctx);\n  };\n\n  BN.prototype.redAdd = function redAdd (num) {\n    assert(this.red, 'redAdd works only with red numbers');\n    return this.red.add(this, num);\n  };\n\n  BN.prototype.redIAdd = function redIAdd (num) {\n    assert(this.red, 'redIAdd works only with red numbers');\n    return this.red.iadd(this, num);\n  };\n\n  BN.prototype.redSub = function redSub (num) {\n    assert(this.red, 'redSub works only with red numbers');\n    return this.red.sub(this, num);\n  };\n\n  BN.prototype.redISub = function redISub (num) {\n    assert(this.red, 'redISub works only with red numbers');\n    return this.red.isub(this, num);\n  };\n\n  BN.prototype.redShl = function redShl (num) {\n    assert(this.red, 'redShl works only with red numbers');\n    return this.red.shl(this, num);\n  };\n\n  BN.prototype.redMul = function redMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.mul(this, num);\n  };\n\n  BN.prototype.redIMul = function redIMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.imul(this, num);\n  };\n\n  BN.prototype.redSqr = function redSqr () {\n    assert(this.red, 'redSqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqr(this);\n  };\n\n  BN.prototype.redISqr = function redISqr () {\n    assert(this.red, 'redISqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.isqr(this);\n  };\n\n  // Square root over p\n  BN.prototype.redSqrt = function redSqrt () {\n    assert(this.red, 'redSqrt works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqrt(this);\n  };\n\n  BN.prototype.redInvm = function redInvm () {\n    assert(this.red, 'redInvm works only with red numbers');\n    this.red._verify1(this);\n    return this.red.invm(this);\n  };\n\n  // Return negative clone of `this` % `red modulo`\n  BN.prototype.redNeg = function redNeg () {\n    assert(this.red, 'redNeg works only with red numbers');\n    this.red._verify1(this);\n    return this.red.neg(this);\n  };\n\n  BN.prototype.redPow = function redPow (num) {\n    assert(this.red && !num.red, 'redPow(normalNum)');\n    this.red._verify1(this);\n    return this.red.pow(this, num);\n  };\n\n  // Prime numbers with efficient reduction\n  var primes = {\n    k256: null,\n    p224: null,\n    p192: null,\n    p25519: null\n  };\n\n  // Pseudo-Mersenne prime\n  function MPrime (name, p) {\n    // P = 2 ^ N - K\n    this.name = name;\n    this.p = new BN(p, 16);\n    this.n = this.p.bitLength();\n    this.k = new BN(1).iushln(this.n).isub(this.p);\n\n    this.tmp = this._tmp();\n  }\n\n  MPrime.prototype._tmp = function _tmp () {\n    var tmp = new BN(null);\n    tmp.words = new Array(Math.ceil(this.n / 13));\n    return tmp;\n  };\n\n  MPrime.prototype.ireduce = function ireduce (num) {\n    // Assumes that `num` is less than `P^2`\n    // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n    var r = num;\n    var rlen;\n\n    do {\n      this.split(r, this.tmp);\n      r = this.imulK(r);\n      r = r.iadd(this.tmp);\n      rlen = r.bitLength();\n    } while (rlen > this.n);\n\n    var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n    if (cmp === 0) {\n      r.words[0] = 0;\n      r.length = 1;\n    } else if (cmp > 0) {\n      r.isub(this.p);\n    } else {\n      if (r.strip !== undefined) {\n        // r is a BN v4 instance\n        r.strip();\n      } else {\n        // r is a BN v5 instance\n        r._strip();\n      }\n    }\n\n    return r;\n  };\n\n  MPrime.prototype.split = function split (input, out) {\n    input.iushrn(this.n, 0, out);\n  };\n\n  MPrime.prototype.imulK = function imulK (num) {\n    return num.imul(this.k);\n  };\n\n  function K256 () {\n    MPrime.call(\n      this,\n      'k256',\n      'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n  }\n  inherits(K256, MPrime);\n\n  K256.prototype.split = function split (input, output) {\n    // 256 = 9 * 26 + 22\n    var mask = 0x3fffff;\n\n    var outLen = Math.min(input.length, 9);\n    for (var i = 0; i < outLen; i++) {\n      output.words[i] = input.words[i];\n    }\n    output.length = outLen;\n\n    if (input.length <= 9) {\n      input.words[0] = 0;\n      input.length = 1;\n      return;\n    }\n\n    // Shift by 9 limbs\n    var prev = input.words[9];\n    output.words[output.length++] = prev & mask;\n\n    for (i = 10; i < input.length; i++) {\n      var next = input.words[i] | 0;\n      input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n      prev = next;\n    }\n    prev >>>= 22;\n    input.words[i - 10] = prev;\n    if (prev === 0 && input.length > 10) {\n      input.length -= 10;\n    } else {\n      input.length -= 9;\n    }\n  };\n\n  K256.prototype.imulK = function imulK (num) {\n    // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n    num.words[num.length] = 0;\n    num.words[num.length + 1] = 0;\n    num.length += 2;\n\n    // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n    var lo = 0;\n    for (var i = 0; i < num.length; i++) {\n      var w = num.words[i] | 0;\n      lo += w * 0x3d1;\n      num.words[i] = lo & 0x3ffffff;\n      lo = w * 0x40 + ((lo / 0x4000000) | 0);\n    }\n\n    // Fast length reduction\n    if (num.words[num.length - 1] === 0) {\n      num.length--;\n      if (num.words[num.length - 1] === 0) {\n        num.length--;\n      }\n    }\n    return num;\n  };\n\n  function P224 () {\n    MPrime.call(\n      this,\n      'p224',\n      'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n  }\n  inherits(P224, MPrime);\n\n  function P192 () {\n    MPrime.call(\n      this,\n      'p192',\n      'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n  }\n  inherits(P192, MPrime);\n\n  function P25519 () {\n    // 2 ^ 255 - 19\n    MPrime.call(\n      this,\n      '25519',\n      '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n  }\n  inherits(P25519, MPrime);\n\n  P25519.prototype.imulK = function imulK (num) {\n    // K = 0x13\n    var carry = 0;\n    for (var i = 0; i < num.length; i++) {\n      var hi = (num.words[i] | 0) * 0x13 + carry;\n      var lo = hi & 0x3ffffff;\n      hi >>>= 26;\n\n      num.words[i] = lo;\n      carry = hi;\n    }\n    if (carry !== 0) {\n      num.words[num.length++] = carry;\n    }\n    return num;\n  };\n\n  // Exported mostly for testing purposes, use plain name instead\n  BN._prime = function prime (name) {\n    // Cached version of prime\n    if (primes[name]) return primes[name];\n\n    var prime;\n    if (name === 'k256') {\n      prime = new K256();\n    } else if (name === 'p224') {\n      prime = new P224();\n    } else if (name === 'p192') {\n      prime = new P192();\n    } else if (name === 'p25519') {\n      prime = new P25519();\n    } else {\n      throw new Error('Unknown prime ' + name);\n    }\n    primes[name] = prime;\n\n    return prime;\n  };\n\n  //\n  // Base reduction engine\n  //\n  function Red (m) {\n    if (typeof m === 'string') {\n      var prime = BN._prime(m);\n      this.m = prime.p;\n      this.prime = prime;\n    } else {\n      assert(m.gtn(1), 'modulus must be greater than 1');\n      this.m = m;\n      this.prime = null;\n    }\n  }\n\n  Red.prototype._verify1 = function _verify1 (a) {\n    assert(a.negative === 0, 'red works only with positives');\n    assert(a.red, 'red works only with red numbers');\n  };\n\n  Red.prototype._verify2 = function _verify2 (a, b) {\n    assert((a.negative | b.negative) === 0, 'red works only with positives');\n    assert(a.red && a.red === b.red,\n      'red works only with red numbers');\n  };\n\n  Red.prototype.imod = function imod (a) {\n    if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n\n    move(a, a.umod(this.m)._forceRed(this));\n    return a;\n  };\n\n  Red.prototype.neg = function neg (a) {\n    if (a.isZero()) {\n      return a.clone();\n    }\n\n    return this.m.sub(a)._forceRed(this);\n  };\n\n  Red.prototype.add = function add (a, b) {\n    this._verify2(a, b);\n\n    var res = a.add(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.iadd = function iadd (a, b) {\n    this._verify2(a, b);\n\n    var res = a.iadd(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.sub = function sub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.sub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.isub = function isub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.isub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.shl = function shl (a, num) {\n    this._verify1(a);\n    return this.imod(a.ushln(num));\n  };\n\n  Red.prototype.imul = function imul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.imul(b));\n  };\n\n  Red.prototype.mul = function mul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.mul(b));\n  };\n\n  Red.prototype.isqr = function isqr (a) {\n    return this.imul(a, a.clone());\n  };\n\n  Red.prototype.sqr = function sqr (a) {\n    return this.mul(a, a);\n  };\n\n  Red.prototype.sqrt = function sqrt (a) {\n    if (a.isZero()) return a.clone();\n\n    var mod3 = this.m.andln(3);\n    assert(mod3 % 2 === 1);\n\n    // Fast case\n    if (mod3 === 3) {\n      var pow = this.m.add(new BN(1)).iushrn(2);\n      return this.pow(a, pow);\n    }\n\n    // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n    //\n    // Find Q and S, that Q * 2 ^ S = (P - 1)\n    var q = this.m.subn(1);\n    var s = 0;\n    while (!q.isZero() && q.andln(1) === 0) {\n      s++;\n      q.iushrn(1);\n    }\n    assert(!q.isZero());\n\n    var one = new BN(1).toRed(this);\n    var nOne = one.redNeg();\n\n    // Find quadratic non-residue\n    // NOTE: Max is such because of generalized Riemann hypothesis.\n    var lpow = this.m.subn(1).iushrn(1);\n    var z = this.m.bitLength();\n    z = new BN(2 * z * z).toRed(this);\n\n    while (this.pow(z, lpow).cmp(nOne) !== 0) {\n      z.redIAdd(nOne);\n    }\n\n    var c = this.pow(z, q);\n    var r = this.pow(a, q.addn(1).iushrn(1));\n    var t = this.pow(a, q);\n    var m = s;\n    while (t.cmp(one) !== 0) {\n      var tmp = t;\n      for (var i = 0; tmp.cmp(one) !== 0; i++) {\n        tmp = tmp.redSqr();\n      }\n      assert(i < m);\n      var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n      r = r.redMul(b);\n      c = b.redSqr();\n      t = t.redMul(c);\n      m = i;\n    }\n\n    return r;\n  };\n\n  Red.prototype.invm = function invm (a) {\n    var inv = a._invmp(this.m);\n    if (inv.negative !== 0) {\n      inv.negative = 0;\n      return this.imod(inv).redNeg();\n    } else {\n      return this.imod(inv);\n    }\n  };\n\n  Red.prototype.pow = function pow (a, num) {\n    if (num.isZero()) return new BN(1).toRed(this);\n    if (num.cmpn(1) === 0) return a.clone();\n\n    var windowSize = 4;\n    var wnd = new Array(1 << windowSize);\n    wnd[0] = new BN(1).toRed(this);\n    wnd[1] = a;\n    for (var i = 2; i < wnd.length; i++) {\n      wnd[i] = this.mul(wnd[i - 1], a);\n    }\n\n    var res = wnd[0];\n    var current = 0;\n    var currentLen = 0;\n    var start = num.bitLength() % 26;\n    if (start === 0) {\n      start = 26;\n    }\n\n    for (i = num.length - 1; i >= 0; i--) {\n      var word = num.words[i];\n      for (var j = start - 1; j >= 0; j--) {\n        var bit = (word >> j) & 1;\n        if (res !== wnd[0]) {\n          res = this.sqr(res);\n        }\n\n        if (bit === 0 && current === 0) {\n          currentLen = 0;\n          continue;\n        }\n\n        current <<= 1;\n        current |= bit;\n        currentLen++;\n        if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n        res = this.mul(res, wnd[current]);\n        currentLen = 0;\n        current = 0;\n      }\n      start = 26;\n    }\n\n    return res;\n  };\n\n  Red.prototype.convertTo = function convertTo (num) {\n    var r = num.umod(this.m);\n\n    return r === num ? r.clone() : r;\n  };\n\n  Red.prototype.convertFrom = function convertFrom (num) {\n    var res = num.clone();\n    res.red = null;\n    return res;\n  };\n\n  //\n  // Montgomery method engine\n  //\n\n  BN.mont = function mont (num) {\n    return new Mont(num);\n  };\n\n  function Mont (m) {\n    Red.call(this, m);\n\n    this.shift = this.m.bitLength();\n    if (this.shift % 26 !== 0) {\n      this.shift += 26 - (this.shift % 26);\n    }\n\n    this.r = new BN(1).iushln(this.shift);\n    this.r2 = this.imod(this.r.sqr());\n    this.rinv = this.r._invmp(this.m);\n\n    this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n    this.minv = this.minv.umod(this.r);\n    this.minv = this.r.sub(this.minv);\n  }\n  inherits(Mont, Red);\n\n  Mont.prototype.convertTo = function convertTo (num) {\n    return this.imod(num.ushln(this.shift));\n  };\n\n  Mont.prototype.convertFrom = function convertFrom (num) {\n    var r = this.imod(num.mul(this.rinv));\n    r.red = null;\n    return r;\n  };\n\n  Mont.prototype.imul = function imul (a, b) {\n    if (a.isZero() || b.isZero()) {\n      a.words[0] = 0;\n      a.length = 1;\n      return a;\n    }\n\n    var t = a.imul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.mul = function mul (a, b) {\n    if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n    var t = a.mul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.invm = function invm (a) {\n    // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n    var res = this.imod(a._invmp(this.m).mul(this.r2));\n    return res._forceRed(this);\n  };\n})(typeof module === 'undefined' || module, this);\n"],"sourceRoot":""}