{"version":3,"sources":["../node_modules/des.js/lib/des.js","../node_modules/des.js/lib/des/cbc.js","../node_modules/des.js/lib/des/ede.js","../node_modules/diffie-hellman/browser.js","../node_modules/diffie-hellman/lib/dh.js","../node_modules/ecdsa-sig-formatter/src/ecdsa-sig-formatter.js","../node_modules/ecdsa-sig-formatter/src/param-bytes-for-alg.js","../node_modules/des.js/lib/des/cipher.js","../node_modules/des.js/lib/des/utils.js","../node_modules/des.js/lib/des/des.js","../node_modules/diffie-hellman/lib/generatePrime.js","../node_modules/diffie-hellman/node_modules/bn.js/lib/bn.js","../node_modules/dom-helpers/esm/removeClass.js","../node_modules/dom-helpers/esm/addClass.js","../node_modules/dom-helpers/esm/hasClass.js"],"names":["exports","utils","require","Cipher","DES","CBC","EDE","assert","inherits","proto","CBCState","iv","equal","length","this","Array","i","instantiate","Base","options","call","_cbcInit","keys","Object","key","prototype","create","state","_cbcState","_update","inp","inOff","out","outOff","superProto","constructor","super_","type","blockSize","EDEState","k1","slice","k2","k3","ciphers","_edeState","module","_pad","_unpad","generatePrime","primes","DH","ENCODINGS","DiffieHellmanGroup","createDiffieHellmanGroup","getDiffieHellman","mod","prime","Buffer","gen","createDiffieHellman","DiffieHellman","enc","generator","genc","isBuffer","undefined","BN","millerRabin","TWENTYFOUR","ELEVEN","TEN","THREE","SEVEN","randomBytes","setPublicKey","pub","_pub","setPrivateKey","priv","_priv","primeCache","malleable","setGenerator","__prime","_prime","mont","_primeLen","_primeCode","formatReturnValue","bn","buf","toArray","toString","defineProperty","enumerable","get","hex","join","rem","error","isEven","simpleSieve","fermatTest","test","shrn","cmp","checkPrime","__gen","generateKeys","_gen","toRed","redPow","fromRed","getPublicKey","computeSecret","other","secret","getPrime","front","fill","concat","getPrivateKey","getGenerator","getParamBytesForAlg","MAX_OCTET","signatureAsBuffer","signature","from","TypeError","countPadding","start","stop","padding","derToJose","alg","paramBytes","maxEncodedParamLength","inputLength","offset","TAG_SEQ","Error","seqLength","TAG_INT","rLength","rOffset","sLength","sOffset","rPadding","sPadding","dst","allocUnsafe","copy","Math","max","o","replace","joseToDer","signatureBytes","rsBytes","shortLength","getParamSize","keySize","paramBytesForAlg","ES256","ES384","ES512","_init","buffer","bufferOff","update","data","_updateDecrypt","_updateEncrypt","_buffer","off","min","_flushBuffer","inputOff","outputOff","count","ceil","final","first","last","_finalEncrypt","_finalDecrypt","readUInt32BE","bytes","writeUInt32BE","value","ip","inL","inR","outL","outR","j","rip","pc1","r28shl","num","shift","pc2table","pc2","len","expand","r","sTable","substitute","permuteTable","permute","padSplit","size","group","str","push","DESState","tmp","_desState","deriveKeys","shiftTable","kL","kR","l","_encrypt","_decrypt","pad","lStart","rStart","keyL","keyR","s","t","findPrime","ONE","TWO","FIVE","FOUR","_getPrimes","res","k","sqrt","p","modn","cmpn","red","subn","bits","n2","bitLength","ishrn","iadd","testn","val","msg","ctor","superCtor","TempCtor","number","base","endian","isBN","negative","words","wordSize","window","e","parseHex4Bits","string","index","c","charCodeAt","parseHexByte","lowerBound","parseBase","end","mul","isArray","left","right","_initNumber","_initArray","_parseHex","_parseBase","w","strip","limbLen","limbPow","total","word","imuln","_iaddn","pow","dest","clone","_expand","_normSign","inspect","zeros","groupSizes","groupBases","smallMulTo","self","a","b","lo","carry","ncarry","rword","maxJ","groupSize","groupBase","isZero","idivn","toNumber","ret","toJSON","toBuffer","toArrayLike","ArrayType","byteLength","reqLength","littleEndian","q","andln","iushrn","clz32","_countBits","_zeroBits","hi","zeroBits","toTwos","width","abs","inotn","iaddn","fromTwos","notn","ineg","isNeg","neg","iuor","ior","or","uor","iuand","iand","and","uand","iuxor","ixor","xor","uxor","bytesNeeded","bitsLeft","setn","bit","wbit","isub","add","sub","comb10MulTo","mid","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","jumboMulTo","FFTM","mulp","x","y","mulTo","hncarry","bigMulTo","makeRBT","N","revBin","rb","rbt","rws","iws","rtws","itws","transform","rtwdf","cos","PI","itwdf","sin","rtwdf_","itwdf_","re","ie","ro","io","rx","guessLen13b","n","m","odd","conjugate","normalize13b","ws","round","convert13b","stub","ph","_","rwst","iwst","nrws","nrwst","niwst","rmws","mulf","muln","sqr","isqr","toBitArray","iushln","carryMask","newCarry","ishln","hint","extended","h","mask","maskedWords","shln","ushln","ushrn","imaskn","maskn","isubn","addn","iabs","_ishlnsubmul","_wordDiv","mode","bhi","diff","qj","div","divmod","positive","divn","umod","divRound","dm","half","r2","acc","egcd","A","B","C","D","g","yp","xp","im","isOdd","jm","gcd","_invmp","x1","x2","delta","invm","bincn","ucmp","gtn","gt","gten","gte","ltn","lt","lten","lte","eqn","eq","Red","ctx","convertTo","_forceRed","convertFrom","forceRed","redAdd","redIAdd","redSub","redISub","redShl","shl","redMul","_verify2","redIMul","redSqr","_verify1","redISqr","redSqrt","redInvm","redNeg","k256","p224","p192","p25519","MPrime","name","_tmp","K256","P224","P192","P25519","Mont","imod","rinv","minv","ireduce","rlen","split","imulK","_strip","input","output","outLen","prev","next","mod3","one","nOne","lpow","z","inv","wnd","current","currentLen","u","replaceClassName","origClass","classToRemove","RegExp","removeClass","element","className","classList","remove","setAttribute","baseVal","addClass","contains","indexOf","hasClass"],"mappings":"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","file":"static/js/main~b5906859.dceec0e9.chunk.js","sourcesContent":["'use strict';\n\nexports.utils = require('./des/utils');\nexports.Cipher = require('./des/cipher');\nexports.DES = require('./des/des');\nexports.CBC = require('./des/cbc');\nexports.EDE = require('./des/ede');\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar proto = {};\n\nfunction CBCState(iv) {\n assert.equal(iv.length, 8, 'Invalid IV length');\n\n this.iv = new Array(8);\n for (var i = 0; i < this.iv.length; i++)\n this.iv[i] = iv[i];\n}\n\nfunction instantiate(Base) {\n function CBC(options) {\n Base.call(this, options);\n this._cbcInit();\n }\n inherits(CBC, Base);\n\n var keys = Object.keys(proto);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n CBC.prototype[key] = proto[key];\n }\n\n CBC.create = function create(options) {\n return new CBC(options);\n };\n\n return CBC;\n}\n\nexports.instantiate = instantiate;\n\nproto._cbcInit = function _cbcInit() {\n var state = new CBCState(this.options.iv);\n this._cbcState = state;\n};\n\nproto._update = function _update(inp, inOff, out, outOff) {\n var state = this._cbcState;\n var superProto = this.constructor.super_.prototype;\n\n var iv = state.iv;\n if (this.type === 'encrypt') {\n for (var i = 0; i < this.blockSize; i++)\n iv[i] ^= inp[inOff + i];\n\n superProto._update.call(this, iv, 0, out, outOff);\n\n for (var i = 0; i < this.blockSize; i++)\n iv[i] = out[outOff + i];\n } else {\n superProto._update.call(this, inp, inOff, out, outOff);\n\n for (var i = 0; i < this.blockSize; i++)\n out[outOff + i] ^= iv[i];\n\n for (var i = 0; i < this.blockSize; i++)\n iv[i] = inp[inOff + i];\n }\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar Cipher = require('./cipher');\nvar DES = require('./des');\n\nfunction EDEState(type, key) {\n assert.equal(key.length, 24, 'Invalid key length');\n\n var k1 = key.slice(0, 8);\n var k2 = key.slice(8, 16);\n var k3 = key.slice(16, 24);\n\n if (type === 'encrypt') {\n this.ciphers = [\n DES.create({ type: 'encrypt', key: k1 }),\n DES.create({ type: 'decrypt', key: k2 }),\n DES.create({ type: 'encrypt', key: k3 })\n ];\n } else {\n this.ciphers = [\n DES.create({ type: 'decrypt', key: k3 }),\n DES.create({ type: 'encrypt', key: k2 }),\n DES.create({ type: 'decrypt', key: k1 })\n ];\n }\n}\n\nfunction EDE(options) {\n Cipher.call(this, options);\n\n var state = new EDEState(this.type, this.options.key);\n this._edeState = state;\n}\ninherits(EDE, Cipher);\n\nmodule.exports = EDE;\n\nEDE.create = function create(options) {\n return new EDE(options);\n};\n\nEDE.prototype._update = function _update(inp, inOff, out, outOff) {\n var state = this._edeState;\n\n state.ciphers[0]._update(inp, inOff, out, outOff);\n state.ciphers[1]._update(out, outOff, out, outOff);\n state.ciphers[2]._update(out, outOff, out, outOff);\n};\n\nEDE.prototype._pad = DES.prototype._pad;\nEDE.prototype._unpad = DES.prototype._unpad;\n","var generatePrime = require('./lib/generatePrime')\nvar primes = require('./lib/primes.json')\n\nvar DH = require('./lib/dh')\n\nfunction getDiffieHellman (mod) {\n var prime = new Buffer(primes[mod].prime, 'hex')\n var gen = new Buffer(primes[mod].gen, 'hex')\n\n return new DH(prime, gen)\n}\n\nvar ENCODINGS = {\n 'binary': true, 'hex': true, 'base64': true\n}\n\nfunction createDiffieHellman (prime, enc, generator, genc) {\n if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) {\n return createDiffieHellman(prime, 'binary', enc, generator)\n }\n\n enc = enc || 'binary'\n genc = genc || 'binary'\n generator = generator || new Buffer([2])\n\n if (!Buffer.isBuffer(generator)) {\n generator = new Buffer(generator, genc)\n }\n\n if (typeof prime === 'number') {\n return new DH(generatePrime(prime, generator), generator, true)\n }\n\n if (!Buffer.isBuffer(prime)) {\n prime = new Buffer(prime, enc)\n }\n\n return new DH(prime, generator, true)\n}\n\nexports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman\nexports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman\n","var BN = require('bn.js');\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar TWENTYFOUR = new BN(24);\nvar ELEVEN = new BN(11);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar primes = require('./generatePrime');\nvar randomBytes = require('randombytes');\nmodule.exports = DH;\n\nfunction setPublicKey(pub, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(pub)) {\n pub = new Buffer(pub, enc);\n }\n this._pub = new BN(pub);\n return this;\n}\n\nfunction setPrivateKey(priv, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(priv)) {\n priv = new Buffer(priv, enc);\n }\n this._priv = new BN(priv);\n return this;\n}\n\nvar primeCache = {};\nfunction checkPrime(prime, generator) {\n var gen = generator.toString('hex');\n var hex = [gen, prime.toString(16)].join('_');\n if (hex in primeCache) {\n return primeCache[hex];\n }\n var error = 0;\n\n if (prime.isEven() ||\n !primes.simpleSieve ||\n !primes.fermatTest(prime) ||\n !millerRabin.test(prime)) {\n //not a prime so +1\n error += 1;\n\n if (gen === '02' || gen === '05') {\n // we'd be able to check the generator\n // it would fail so +8\n error += 8;\n } else {\n //we wouldn't be able to test the generator\n // so +4\n error += 4;\n }\n primeCache[hex] = error;\n return error;\n }\n if (!millerRabin.test(prime.shrn(1))) {\n //not a safe prime\n error += 2;\n }\n var rem;\n switch (gen) {\n case '02':\n if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {\n // unsuidable generator\n error += 8;\n }\n break;\n case '05':\n rem = prime.mod(TEN);\n if (rem.cmp(THREE) && rem.cmp(SEVEN)) {\n // prime mod 10 needs to equal 3 or 7\n error += 8;\n }\n break;\n default:\n error += 4;\n }\n primeCache[hex] = error;\n return error;\n}\n\nfunction DH(prime, generator, malleable) {\n this.setGenerator(generator);\n this.__prime = new BN(prime);\n this._prime = BN.mont(this.__prime);\n this._primeLen = prime.length;\n this._pub = undefined;\n this._priv = undefined;\n this._primeCode = undefined;\n if (malleable) {\n this.setPublicKey = setPublicKey;\n this.setPrivateKey = setPrivateKey;\n } else {\n this._primeCode = 8;\n }\n}\nObject.defineProperty(DH.prototype, 'verifyError', {\n enumerable: true,\n get: function () {\n if (typeof this._primeCode !== 'number') {\n this._primeCode = checkPrime(this.__prime, this.__gen);\n }\n return this._primeCode;\n }\n});\nDH.prototype.generateKeys = function () {\n if (!this._priv) {\n this._priv = new BN(randomBytes(this._primeLen));\n }\n this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();\n return this.getPublicKey();\n};\n\nDH.prototype.computeSecret = function (other) {\n other = new BN(other);\n other = other.toRed(this._prime);\n var secret = other.redPow(this._priv).fromRed();\n var out = new Buffer(secret.toArray());\n var prime = this.getPrime();\n if (out.length < prime.length) {\n var front = new Buffer(prime.length - out.length);\n front.fill(0);\n out = Buffer.concat([front, out]);\n }\n return out;\n};\n\nDH.prototype.getPublicKey = function getPublicKey(enc) {\n return formatReturnValue(this._pub, enc);\n};\n\nDH.prototype.getPrivateKey = function getPrivateKey(enc) {\n return formatReturnValue(this._priv, enc);\n};\n\nDH.prototype.getPrime = function (enc) {\n return formatReturnValue(this.__prime, enc);\n};\n\nDH.prototype.getGenerator = function (enc) {\n return formatReturnValue(this._gen, enc);\n};\n\nDH.prototype.setGenerator = function (gen, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(gen)) {\n gen = new Buffer(gen, enc);\n }\n this.__gen = gen;\n this._gen = new BN(gen);\n return this;\n};\n\nfunction formatReturnValue(bn, enc) {\n var buf = new Buffer(bn.toArray());\n if (!enc) {\n return buf;\n } else {\n return buf.toString(enc);\n }\n}\n","'use strict';\n\nvar Buffer = require('safe-buffer').Buffer;\n\nvar getParamBytesForAlg = require('./param-bytes-for-alg');\n\nvar MAX_OCTET = 0x80,\n\tCLASS_UNIVERSAL = 0,\n\tPRIMITIVE_BIT = 0x20,\n\tTAG_SEQ = 0x10,\n\tTAG_INT = 0x02,\n\tENCODED_TAG_SEQ = (TAG_SEQ | PRIMITIVE_BIT) | (CLASS_UNIVERSAL << 6),\n\tENCODED_TAG_INT = TAG_INT | (CLASS_UNIVERSAL << 6);\n\nfunction base64Url(base64) {\n\treturn base64\n\t\t.replace(/=/g, '')\n\t\t.replace(/\\+/g, '-')\n\t\t.replace(/\\//g, '_');\n}\n\nfunction signatureAsBuffer(signature) {\n\tif (Buffer.isBuffer(signature)) {\n\t\treturn signature;\n\t} else if ('string' === typeof signature) {\n\t\treturn Buffer.from(signature, 'base64');\n\t}\n\n\tthrow new TypeError('ECDSA signature must be a Base64 string or a Buffer');\n}\n\nfunction derToJose(signature, alg) {\n\tsignature = signatureAsBuffer(signature);\n\tvar paramBytes = getParamBytesForAlg(alg);\n\n\t// the DER encoded param should at most be the param size, plus a padding\n\t// zero, since due to being a signed integer\n\tvar maxEncodedParamLength = paramBytes + 1;\n\n\tvar inputLength = signature.length;\n\n\tvar offset = 0;\n\tif (signature[offset++] !== ENCODED_TAG_SEQ) {\n\t\tthrow new Error('Could not find expected \"seq\"');\n\t}\n\n\tvar seqLength = signature[offset++];\n\tif (seqLength === (MAX_OCTET | 1)) {\n\t\tseqLength = signature[offset++];\n\t}\n\n\tif (inputLength - offset < seqLength) {\n\t\tthrow new Error('\"seq\" specified length of \"' + seqLength + '\", only \"' + (inputLength - offset) + '\" remaining');\n\t}\n\n\tif (signature[offset++] !== ENCODED_TAG_INT) {\n\t\tthrow new Error('Could not find expected \"int\" for \"r\"');\n\t}\n\n\tvar rLength = signature[offset++];\n\n\tif (inputLength - offset - 2 < rLength) {\n\t\tthrow new Error('\"r\" specified length of \"' + rLength + '\", only \"' + (inputLength - offset - 2) + '\" available');\n\t}\n\n\tif (maxEncodedParamLength < rLength) {\n\t\tthrow new Error('\"r\" specified length of \"' + rLength + '\", max of \"' + maxEncodedParamLength + '\" is acceptable');\n\t}\n\n\tvar rOffset = offset;\n\toffset += rLength;\n\n\tif (signature[offset++] !== ENCODED_TAG_INT) {\n\t\tthrow new Error('Could not find expected \"int\" for \"s\"');\n\t}\n\n\tvar sLength = signature[offset++];\n\n\tif (inputLength - offset !== sLength) {\n\t\tthrow new Error('\"s\" specified length of \"' + sLength + '\", expected \"' + (inputLength - offset) + '\"');\n\t}\n\n\tif (maxEncodedParamLength < sLength) {\n\t\tthrow new Error('\"s\" specified length of \"' + sLength + '\", max of \"' + maxEncodedParamLength + '\" is acceptable');\n\t}\n\n\tvar sOffset = offset;\n\toffset += sLength;\n\n\tif (offset !== inputLength) {\n\t\tthrow new Error('Expected to consume entire buffer, but \"' + (inputLength - offset) + '\" bytes remain');\n\t}\n\n\tvar rPadding = paramBytes - rLength,\n\t\tsPadding = paramBytes - sLength;\n\n\tvar dst = Buffer.allocUnsafe(rPadding + rLength + sPadding + sLength);\n\n\tfor (offset = 0; offset < rPadding; ++offset) {\n\t\tdst[offset] = 0;\n\t}\n\tsignature.copy(dst, offset, rOffset + Math.max(-rPadding, 0), rOffset + rLength);\n\n\toffset = paramBytes;\n\n\tfor (var o = offset; offset < o + sPadding; ++offset) {\n\t\tdst[offset] = 0;\n\t}\n\tsignature.copy(dst, offset, sOffset + Math.max(-sPadding, 0), sOffset + sLength);\n\n\tdst = dst.toString('base64');\n\tdst = base64Url(dst);\n\n\treturn dst;\n}\n\nfunction countPadding(buf, start, stop) {\n\tvar padding = 0;\n\twhile (start + padding < stop && buf[start + padding] === 0) {\n\t\t++padding;\n\t}\n\n\tvar needsSign = buf[start + padding] >= MAX_OCTET;\n\tif (needsSign) {\n\t\t--padding;\n\t}\n\n\treturn padding;\n}\n\nfunction joseToDer(signature, alg) {\n\tsignature = signatureAsBuffer(signature);\n\tvar paramBytes = getParamBytesForAlg(alg);\n\n\tvar signatureBytes = signature.length;\n\tif (signatureBytes !== paramBytes * 2) {\n\t\tthrow new TypeError('\"' + alg + '\" signatures must be \"' + paramBytes * 2 + '\" bytes, saw \"' + signatureBytes + '\"');\n\t}\n\n\tvar rPadding = countPadding(signature, 0, paramBytes);\n\tvar sPadding = countPadding(signature, paramBytes, signature.length);\n\tvar rLength = paramBytes - rPadding;\n\tvar sLength = paramBytes - sPadding;\n\n\tvar rsBytes = 1 + 1 + rLength + 1 + 1 + sLength;\n\n\tvar shortLength = rsBytes < MAX_OCTET;\n\n\tvar dst = Buffer.allocUnsafe((shortLength ? 2 : 3) + rsBytes);\n\n\tvar offset = 0;\n\tdst[offset++] = ENCODED_TAG_SEQ;\n\tif (shortLength) {\n\t\t// Bit 8 has value \"0\"\n\t\t// bits 7-1 give the length.\n\t\tdst[offset++] = rsBytes;\n\t} else {\n\t\t// Bit 8 of first octet has value \"1\"\n\t\t// bits 7-1 give the number of additional length octets.\n\t\tdst[offset++] = MAX_OCTET\t| 1;\n\t\t// length, base 256\n\t\tdst[offset++] = rsBytes & 0xff;\n\t}\n\tdst[offset++] = ENCODED_TAG_INT;\n\tdst[offset++] = rLength;\n\tif (rPadding < 0) {\n\t\tdst[offset++] = 0;\n\t\toffset += signature.copy(dst, offset, 0, paramBytes);\n\t} else {\n\t\toffset += signature.copy(dst, offset, rPadding, paramBytes);\n\t}\n\tdst[offset++] = ENCODED_TAG_INT;\n\tdst[offset++] = sLength;\n\tif (sPadding < 0) {\n\t\tdst[offset++] = 0;\n\t\tsignature.copy(dst, offset, paramBytes);\n\t} else {\n\t\tsignature.copy(dst, offset, paramBytes + sPadding);\n\t}\n\n\treturn dst;\n}\n\nmodule.exports = {\n\tderToJose: derToJose,\n\tjoseToDer: joseToDer\n};\n","'use strict';\n\nfunction getParamSize(keySize) {\n\tvar result = ((keySize / 8) | 0) + (keySize % 8 === 0 ? 0 : 1);\n\treturn result;\n}\n\nvar paramBytesForAlg = {\n\tES256: getParamSize(256),\n\tES384: getParamSize(384),\n\tES512: getParamSize(521)\n};\n\nfunction getParamBytesForAlg(alg) {\n\tvar paramBytes = paramBytesForAlg[alg];\n\tif (paramBytes) {\n\t\treturn paramBytes;\n\t}\n\n\tthrow new Error('Unknown algorithm \"' + alg + '\"');\n}\n\nmodule.exports = getParamBytesForAlg;\n","'use strict';\n\nvar assert = require('minimalistic-assert');\n\nfunction Cipher(options) {\n this.options = options;\n\n this.type = this.options.type;\n this.blockSize = 8;\n this._init();\n\n this.buffer = new Array(this.blockSize);\n this.bufferOff = 0;\n}\nmodule.exports = Cipher;\n\nCipher.prototype._init = function _init() {\n // Might be overrided\n};\n\nCipher.prototype.update = function update(data) {\n if (data.length === 0)\n return [];\n\n if (this.type === 'decrypt')\n return this._updateDecrypt(data);\n else\n return this._updateEncrypt(data);\n};\n\nCipher.prototype._buffer = function _buffer(data, off) {\n // Append data to buffer\n var min = Math.min(this.buffer.length - this.bufferOff, data.length - off);\n for (var i = 0; i < min; i++)\n this.buffer[this.bufferOff + i] = data[off + i];\n this.bufferOff += min;\n\n // Shift next\n return min;\n};\n\nCipher.prototype._flushBuffer = function _flushBuffer(out, off) {\n this._update(this.buffer, 0, out, off);\n this.bufferOff = 0;\n return this.blockSize;\n};\n\nCipher.prototype._updateEncrypt = function _updateEncrypt(data) {\n var inputOff = 0;\n var outputOff = 0;\n\n var count = ((this.bufferOff + data.length) / this.blockSize) | 0;\n var out = new Array(count * this.blockSize);\n\n if (this.bufferOff !== 0) {\n inputOff += this._buffer(data, inputOff);\n\n if (this.bufferOff === this.buffer.length)\n outputOff += this._flushBuffer(out, outputOff);\n }\n\n // Write blocks\n var max = data.length - ((data.length - inputOff) % this.blockSize);\n for (; inputOff < max; inputOff += this.blockSize) {\n this._update(data, inputOff, out, outputOff);\n outputOff += this.blockSize;\n }\n\n // Queue rest\n for (; inputOff < data.length; inputOff++, this.bufferOff++)\n this.buffer[this.bufferOff] = data[inputOff];\n\n return out;\n};\n\nCipher.prototype._updateDecrypt = function _updateDecrypt(data) {\n var inputOff = 0;\n var outputOff = 0;\n\n var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1;\n var out = new Array(count * this.blockSize);\n\n // TODO(indutny): optimize it, this is far from optimal\n for (; count > 0; count--) {\n inputOff += this._buffer(data, inputOff);\n outputOff += this._flushBuffer(out, outputOff);\n }\n\n // Buffer rest of the input\n inputOff += this._buffer(data, inputOff);\n\n return out;\n};\n\nCipher.prototype.final = function final(buffer) {\n var first;\n if (buffer)\n first = this.update(buffer);\n\n var last;\n if (this.type === 'encrypt')\n last = this._finalEncrypt();\n else\n last = this._finalDecrypt();\n\n if (first)\n return first.concat(last);\n else\n return last;\n};\n\nCipher.prototype._pad = function _pad(buffer, off) {\n if (off === 0)\n return false;\n\n while (off < buffer.length)\n buffer[off++] = 0;\n\n return true;\n};\n\nCipher.prototype._finalEncrypt = function _finalEncrypt() {\n if (!this._pad(this.buffer, this.bufferOff))\n return [];\n\n var out = new Array(this.blockSize);\n this._update(this.buffer, 0, out, 0);\n return out;\n};\n\nCipher.prototype._unpad = function _unpad(buffer) {\n return buffer;\n};\n\nCipher.prototype._finalDecrypt = function _finalDecrypt() {\n assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt');\n var out = new Array(this.blockSize);\n this._flushBuffer(out, 0);\n\n return this._unpad(out);\n};\n","'use strict';\n\nexports.readUInt32BE = function readUInt32BE(bytes, off) {\n var res = (bytes[0 + off] << 24) |\n (bytes[1 + off] << 16) |\n (bytes[2 + off] << 8) |\n bytes[3 + off];\n return res >>> 0;\n};\n\nexports.writeUInt32BE = function writeUInt32BE(bytes, value, off) {\n bytes[0 + off] = value >>> 24;\n bytes[1 + off] = (value >>> 16) & 0xff;\n bytes[2 + off] = (value >>> 8) & 0xff;\n bytes[3 + off] = value & 0xff;\n};\n\nexports.ip = function ip(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n for (var i = 6; i >= 0; i -= 2) {\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >>> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inL >>> (j + i)) & 1;\n }\n }\n\n for (var i = 6; i >= 0; i -= 2) {\n for (var j = 1; j <= 25; j += 8) {\n outR <<= 1;\n outR |= (inR >>> (j + i)) & 1;\n }\n for (var j = 1; j <= 25; j += 8) {\n outR <<= 1;\n outR |= (inL >>> (j + i)) & 1;\n }\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.rip = function rip(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n for (var i = 0; i < 4; i++) {\n for (var j = 24; j >= 0; j -= 8) {\n outL <<= 1;\n outL |= (inR >>> (j + i)) & 1;\n outL <<= 1;\n outL |= (inL >>> (j + i)) & 1;\n }\n }\n for (var i = 4; i < 8; i++) {\n for (var j = 24; j >= 0; j -= 8) {\n outR <<= 1;\n outR |= (inR >>> (j + i)) & 1;\n outR <<= 1;\n outR |= (inL >>> (j + i)) & 1;\n }\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.pc1 = function pc1(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n // 7, 15, 23, 31, 39, 47, 55, 63\n // 6, 14, 22, 30, 39, 47, 55, 63\n // 5, 13, 21, 29, 39, 47, 55, 63\n // 4, 12, 20, 28\n for (var i = 7; i >= 5; i--) {\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inL >> (j + i)) & 1;\n }\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >> (j + i)) & 1;\n }\n\n // 1, 9, 17, 25, 33, 41, 49, 57\n // 2, 10, 18, 26, 34, 42, 50, 58\n // 3, 11, 19, 27, 35, 43, 51, 59\n // 36, 44, 52, 60\n for (var i = 1; i <= 3; i++) {\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inR >> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inL >> (j + i)) & 1;\n }\n }\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inL >> (j + i)) & 1;\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.r28shl = function r28shl(num, shift) {\n return ((num << shift) & 0xfffffff) | (num >>> (28 - shift));\n};\n\nvar pc2table = [\n // inL => outL\n 14, 11, 17, 4, 27, 23, 25, 0,\n 13, 22, 7, 18, 5, 9, 16, 24,\n 2, 20, 12, 21, 1, 8, 15, 26,\n\n // inR => outR\n 15, 4, 25, 19, 9, 1, 26, 16,\n 5, 11, 23, 8, 12, 7, 17, 0,\n 22, 3, 10, 14, 6, 20, 27, 24\n];\n\nexports.pc2 = function pc2(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n var len = pc2table.length >>> 1;\n for (var i = 0; i < len; i++) {\n outL <<= 1;\n outL |= (inL >>> pc2table[i]) & 0x1;\n }\n for (var i = len; i < pc2table.length; i++) {\n outR <<= 1;\n outR |= (inR >>> pc2table[i]) & 0x1;\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.expand = function expand(r, out, off) {\n var outL = 0;\n var outR = 0;\n\n outL = ((r & 1) << 5) | (r >>> 27);\n for (var i = 23; i >= 15; i -= 4) {\n outL <<= 6;\n outL |= (r >>> i) & 0x3f;\n }\n for (var i = 11; i >= 3; i -= 4) {\n outR |= (r >>> i) & 0x3f;\n outR <<= 6;\n }\n outR |= ((r & 0x1f) << 1) | (r >>> 31);\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nvar sTable = [\n 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,\n 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,\n 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7,\n 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13,\n\n 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14,\n 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5,\n 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2,\n 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9,\n\n 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10,\n 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1,\n 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7,\n 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12,\n\n 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3,\n 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9,\n 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8,\n 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14,\n\n 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1,\n 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6,\n 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13,\n 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3,\n\n 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5,\n 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8,\n 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10,\n 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13,\n\n 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10,\n 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6,\n 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7,\n 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12,\n\n 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4,\n 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2,\n 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13,\n 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11\n];\n\nexports.substitute = function substitute(inL, inR) {\n var out = 0;\n for (var i = 0; i < 4; i++) {\n var b = (inL >>> (18 - i * 6)) & 0x3f;\n var sb = sTable[i * 0x40 + b];\n\n out <<= 4;\n out |= sb;\n }\n for (var i = 0; i < 4; i++) {\n var b = (inR >>> (18 - i * 6)) & 0x3f;\n var sb = sTable[4 * 0x40 + i * 0x40 + b];\n\n out <<= 4;\n out |= sb;\n }\n return out >>> 0;\n};\n\nvar permuteTable = [\n 16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22,\n 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7\n];\n\nexports.permute = function permute(num) {\n var out = 0;\n for (var i = 0; i < permuteTable.length; i++) {\n out <<= 1;\n out |= (num >>> permuteTable[i]) & 0x1;\n }\n return out >>> 0;\n};\n\nexports.padSplit = function padSplit(num, size, group) {\n var str = num.toString(2);\n while (str.length < size)\n str = '0' + str;\n\n var out = [];\n for (var i = 0; i < size; i += group)\n out.push(str.slice(i, i + group));\n return out.join(' ');\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar utils = require('./utils');\nvar Cipher = require('./cipher');\n\nfunction DESState() {\n this.tmp = new Array(2);\n this.keys = null;\n}\n\nfunction DES(options) {\n Cipher.call(this, options);\n\n var state = new DESState();\n this._desState = state;\n\n this.deriveKeys(state, options.key);\n}\ninherits(DES, Cipher);\nmodule.exports = DES;\n\nDES.create = function create(options) {\n return new DES(options);\n};\n\nvar shiftTable = [\n 1, 1, 2, 2, 2, 2, 2, 2,\n 1, 2, 2, 2, 2, 2, 2, 1\n];\n\nDES.prototype.deriveKeys = function deriveKeys(state, key) {\n state.keys = new Array(16 * 2);\n\n assert.equal(key.length, this.blockSize, 'Invalid key length');\n\n var kL = utils.readUInt32BE(key, 0);\n var kR = utils.readUInt32BE(key, 4);\n\n utils.pc1(kL, kR, state.tmp, 0);\n kL = state.tmp[0];\n kR = state.tmp[1];\n for (var i = 0; i < state.keys.length; i += 2) {\n var shift = shiftTable[i >>> 1];\n kL = utils.r28shl(kL, shift);\n kR = utils.r28shl(kR, shift);\n utils.pc2(kL, kR, state.keys, i);\n }\n};\n\nDES.prototype._update = function _update(inp, inOff, out, outOff) {\n var state = this._desState;\n\n var l = utils.readUInt32BE(inp, inOff);\n var r = utils.readUInt32BE(inp, inOff + 4);\n\n // Initial Permutation\n utils.ip(l, r, state.tmp, 0);\n l = state.tmp[0];\n r = state.tmp[1];\n\n if (this.type === 'encrypt')\n this._encrypt(state, l, r, state.tmp, 0);\n else\n this._decrypt(state, l, r, state.tmp, 0);\n\n l = state.tmp[0];\n r = state.tmp[1];\n\n utils.writeUInt32BE(out, l, outOff);\n utils.writeUInt32BE(out, r, outOff + 4);\n};\n\nDES.prototype._pad = function _pad(buffer, off) {\n var value = buffer.length - off;\n for (var i = off; i < buffer.length; i++)\n buffer[i] = value;\n\n return true;\n};\n\nDES.prototype._unpad = function _unpad(buffer) {\n var pad = buffer[buffer.length - 1];\n for (var i = buffer.length - pad; i < buffer.length; i++)\n assert.equal(buffer[i], pad);\n\n return buffer.slice(0, buffer.length - pad);\n};\n\nDES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) {\n var l = lStart;\n var r = rStart;\n\n // Apply f() x16 times\n for (var i = 0; i < state.keys.length; i += 2) {\n var keyL = state.keys[i];\n var keyR = state.keys[i + 1];\n\n // f(r, k)\n utils.expand(r, state.tmp, 0);\n\n keyL ^= state.tmp[0];\n keyR ^= state.tmp[1];\n var s = utils.substitute(keyL, keyR);\n var f = utils.permute(s);\n\n var t = r;\n r = (l ^ f) >>> 0;\n l = t;\n }\n\n // Reverse Initial Permutation\n utils.rip(r, l, out, off);\n};\n\nDES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) {\n var l = rStart;\n var r = lStart;\n\n // Apply f() x16 times\n for (var i = state.keys.length - 2; i >= 0; i -= 2) {\n var keyL = state.keys[i];\n var keyR = state.keys[i + 1];\n\n // f(r, k)\n utils.expand(l, state.tmp, 0);\n\n keyL ^= state.tmp[0];\n keyR ^= state.tmp[1];\n var s = utils.substitute(keyL, keyR);\n var f = utils.permute(s);\n\n var t = l;\n l = (r ^ f) >>> 0;\n r = t;\n }\n\n // Reverse Initial Permutation\n utils.rip(l, r, out, off);\n};\n","var randomBytes = require('randombytes');\nmodule.exports = findPrime;\nfindPrime.simpleSieve = simpleSieve;\nfindPrime.fermatTest = fermatTest;\nvar BN = require('bn.js');\nvar TWENTYFOUR = new BN(24);\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar ONE = new BN(1);\nvar TWO = new BN(2);\nvar FIVE = new BN(5);\nvar SIXTEEN = new BN(16);\nvar EIGHT = new BN(8);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar ELEVEN = new BN(11);\nvar FOUR = new BN(4);\nvar TWELVE = new BN(12);\nvar primes = null;\n\nfunction _getPrimes() {\n if (primes !== null)\n return primes;\n\n var limit = 0x100000;\n var res = [];\n res[0] = 2;\n for (var i = 1, k = 3; k < limit; k += 2) {\n var sqrt = Math.ceil(Math.sqrt(k));\n for (var j = 0; j < i && res[j] <= sqrt; j++)\n if (k % res[j] === 0)\n break;\n\n if (i !== j && res[j] <= sqrt)\n continue;\n\n res[i++] = k;\n }\n primes = res;\n return res;\n}\n\nfunction simpleSieve(p) {\n var primes = _getPrimes();\n\n for (var i = 0; i < primes.length; i++)\n if (p.modn(primes[i]) === 0) {\n if (p.cmpn(primes[i]) === 0) {\n return true;\n } else {\n return false;\n }\n }\n\n return true;\n}\n\nfunction fermatTest(p) {\n var red = BN.mont(p);\n return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;\n}\n\nfunction findPrime(bits, gen) {\n if (bits < 16) {\n // this is what openssl does\n if (gen === 2 || gen === 5) {\n return new BN([0x8c, 0x7b]);\n } else {\n return new BN([0x8c, 0x27]);\n }\n }\n gen = new BN(gen);\n\n var num, n2;\n\n while (true) {\n num = new BN(randomBytes(Math.ceil(bits / 8)));\n while (num.bitLength() > bits) {\n num.ishrn(1);\n }\n if (num.isEven()) {\n num.iadd(ONE);\n }\n if (!num.testn(1)) {\n num.iadd(TWO);\n }\n if (!gen.cmp(TWO)) {\n while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {\n num.iadd(FOUR);\n }\n } else if (!gen.cmp(FIVE)) {\n while (num.mod(TEN).cmp(THREE)) {\n num.iadd(FOUR);\n }\n }\n n2 = num.shrn(1);\n if (simpleSieve(n2) && simpleSieve(num) &&\n fermatTest(n2) && fermatTest(num) &&\n millerRabin.test(n2) && millerRabin.test(num)) {\n return num;\n }\n }\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 // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\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 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 r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\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 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 BN.prototype.inspect = function inspect () {\n return (this.red ? '';\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 if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\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.modn(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);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\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 this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\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] & (1 << wbit)) >>> wbit;\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 var fftm = new FFTM();\n return fftm.mulp(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 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 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.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(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.modn = function modn (num) {\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 acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\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 return this.strip();\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 BN v4 instance\n r.strip();\n } else {\n // r is 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 return a.umod(this.m)._forceRed(this);\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","function replaceClassName(origClass, classToRemove) {\n return origClass.replace(new RegExp(\"(^|\\\\s)\" + classToRemove + \"(?:\\\\s|$)\", 'g'), '$1').replace(/\\s+/g, ' ').replace(/^\\s*|\\s*$/g, '');\n}\n/**\n * Removes a CSS class from a given element.\n * \n * @param element the element\n * @param className the CSS class name\n */\n\n\nexport default function removeClass(element, className) {\n if (element.classList) {\n element.classList.remove(className);\n } else if (typeof element.className === 'string') {\n element.className = replaceClassName(element.className, className);\n } else {\n element.setAttribute('class', replaceClassName(element.className && element.className.baseVal || '', className));\n }\n}","import hasClass from './hasClass';\n/**\n * Adds a CSS class to a given element.\n * \n * @param element the element\n * @param className the CSS class name\n */\n\nexport default function addClass(element, className) {\n if (element.classList) element.classList.add(className);else if (!hasClass(element, className)) if (typeof element.className === 'string') element.className = element.className + \" \" + className;else element.setAttribute('class', (element.className && element.className.baseVal || '') + \" \" + className);\n}","/**\n * Checks if a given element has a CSS class.\n * \n * @param element the element\n * @param className the CSS class name\n */\nexport default function hasClass(element, className) {\n if (element.classList) return !!className && element.classList.contains(className);\n return (\" \" + (element.className.baseVal || element.className) + \" \").indexOf(\" \" + className + \" \") !== -1;\n}"],"sourceRoot":""}