{"version":3,"sources":["webpack:///./node_modules/diffie-hellman/browser.js","webpack:///./node_modules/public-encrypt/node_modules/bn.js/lib/bn.js","webpack:///./node_modules/browserify-aes/modes/ecb.js","webpack:///./node_modules/des.js/lib/des/cipher.js","webpack:///./node_modules/asn1.js/lib/asn1/constants/index.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/state.js","webpack:///./node_modules/hash-base/node_modules/safe-buffer/index.js","webpack:///./node_modules/hash.js/lib/hash/sha/224.js","webpack:///./node_modules/sha.js/sha.js","webpack:///./node_modules/readable-stream/duplex-browser.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/_stream_transform.js","webpack:///./node_modules/browserify-aes/streamCipher.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/_stream_passthrough.js","webpack:///./node_modules/browserify-des/modes.js","webpack:///./node_modules/elliptic/lib/elliptic/curves.js","webpack:///./node_modules/des.js/lib/des/cbc.js","webpack:///./node_modules/public-encrypt/privateDecrypt.js","webpack:///./node_modules/browserify-sign/algos.js","webpack:///./node_modules/randombytes/browser.js","webpack:///./node_modules/hash.js/lib/hash/sha/1.js","webpack:///./node_modules/des.js/lib/des.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/_stream_writable.js","webpack:///./node_modules/create-hmac/browser.js","webpack:///./node_modules/crypto-browserify/index.js","webpack:///./node_modules/browserify-des/index.js","webpack:///./node_modules/des.js/lib/des/ede.js","webpack:///./node_modules/pbkdf2/lib/async.js","webpack:///./node_modules/asn1.js/lib/asn1/decoders/index.js","webpack:///./node_modules/hash.js/lib/hash/hmac.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/buffer_list.js","webpack:///./node_modules/readable-stream/lib/_stream_transform.js","webpack:///./node_modules/parse-asn1/index.js","webpack:///./node_modules/readable-stream/writable-browser.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/short.js","webpack:///./node_modules/elliptic/lib/elliptic.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/readable-browser.js","webpack:///./node_modules/asn1.js/lib/asn1/encoders/index.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/readable-browser.js","webpack:///./node_modules/browserify-aes/modes/cfb.js","webpack:///./node_modules/asn1.js/lib/asn1/encoders/der.js","webpack:///./node_modules/create-ecdh/node_modules/bn.js/lib/bn.js","webpack:///./node_modules/elliptic/lib/elliptic/eddsa/key.js","webpack:///./node_modules/bn.js/lib/bn.js","webpack:///./node_modules/browserify-sign/node_modules/safe-buffer/index.js","webpack:///./node_modules/browserify-aes/aes.js","webpack:///./node_modules/core-util-is/lib/util.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/edwards.js","webpack:///./node_modules/browserify-aes/ghash.js","webpack:///./node_modules/inherits/inherits_browser.js","webpack:///./node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js","webpack:///./node_modules/parse-asn1/asn1.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/index.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/async_iterator.js","webpack:///./node_modules/asn1.js/lib/asn1/base/index.js","webpack:///./node_modules/browserify-aes/decrypter.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/_stream_readable.js","webpack:///./node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/end-of-stream.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/Parser.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/Hub.js","webpack:///./node_modules/elliptic/lib/elliptic/eddsa/signature.js","webpack:///./node_modules/readable-stream/lib/internal/streams/destroy.js","webpack:///./node_modules/diffie-hellman/node_modules/bn.js/lib/bn.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/destroy.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_writable.js","webpack:///./node_modules/amazon-cognito-identity-js/es/AuthenticationDetails.js","webpack:///./node_modules/amazon-cognito-identity-js/es/utils/WordArray.js","webpack:///./node_modules/amazon-cognito-identity-js/es/BigInteger.js","webpack:///./node_modules/amazon-cognito-identity-js/es/AuthenticationHelper.js","webpack:///./node_modules/amazon-cognito-identity-js/es/CognitoJwtToken.js","webpack:///./node_modules/amazon-cognito-identity-js/es/CognitoAccessToken.js","webpack:///./node_modules/amazon-cognito-identity-js/es/CognitoIdToken.js","webpack:///./node_modules/amazon-cognito-identity-js/es/CognitoRefreshToken.js","webpack:///./node_modules/amazon-cognito-identity-js/es/CognitoUserSession.js","webpack:///./node_modules/amazon-cognito-identity-js/es/DateHelper.js","webpack:///./node_modules/amazon-cognito-identity-js/es/CognitoUserAttribute.js","webpack:///./node_modules/amazon-cognito-identity-js/es/StorageHelper.js","webpack:///./node_modules/amazon-cognito-identity-js/es/CognitoUser.js","webpack:///./node_modules/amazon-cognito-identity-js/es/UserAgent.js","webpack:///./node_modules/amazon-cognito-identity-js/es/Client.js","webpack:///./node_modules/amazon-cognito-identity-js/es/CognitoUserPool.js","webpack:///./node_modules/amazon-cognito-identity-js/es/CookieStorage.js","webpack:///./node_modules/parse-asn1/fixProc.js","webpack:///./node_modules/des.js/lib/des/des.js","webpack:///./node_modules/sha.js/sha512.js","webpack:///./node_modules/browserify-aes/modes/ofb.js","webpack:///./node_modules/browserify-aes/modes/cfb1.js","webpack:///./node_modules/public-encrypt/withPublic.js","webpack:///./node_modules/diffie-hellman/lib/dh.js","webpack:///./node_modules/parse-asn1/certificate.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/async_iterator.js","webpack:///./node_modules/diffie-hellman/lib/generatePrime.js","webpack:///./node_modules/hash.js/lib/hash/sha.js","webpack:///./node_modules/create-hash/md5.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack:///./node_modules/readable-stream/lib/internal/streams/BufferList.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_duplex.js","webpack:///./node_modules/des.js/lib/des/utils.js","webpack:///./node_modules/@aws-amplify/auth/lib-esm/common/AuthErrorStrings.js","webpack:///./node_modules/asn1.js/lib/asn1/base/buffer.js","webpack:///./node_modules/browserify-aes/modes/cfb8.js","webpack:///./node_modules/cipher-base/index.js","webpack:///./node_modules/public-encrypt/browser.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/mont.js","webpack:///./node_modules/sha.js/index.js","webpack:///./node_modules/hmac-drbg/lib/hmac-drbg.js","webpack:///./node_modules/browserify-aes/modes/ctr.js","webpack:///./node_modules/hash.js/lib/hash/sha/256.js","webpack:///./node_modules/browserify-sign/browser/sign.js","webpack:///./node_modules/sha.js/sha224.js","webpack:///./node_modules/randomfill/browser.js","webpack:///./node_modules/minimalistic-crypto-utils/lib/utils.js","webpack:///./node_modules/readable-stream/lib/_stream_passthrough.js","webpack:///./node_modules/miller-rabin/lib/mr.js","webpack:///./node_modules/@aws-amplify/ui-components/dist/esm-es5/auth-types-78df304e.js","webpack:///./node_modules/pbkdf2/lib/precondition.js","webpack:///./node_modules/string_decoder/lib/string_decoder.js","webpack:///./node_modules/hash.js/lib/hash.js","webpack:///./node_modules/sha.js/sha1.js","webpack:///./node_modules/asn1.js/lib/asn1.js","webpack:///./node_modules/elliptic/node_modules/bn.js/lib/bn.js","webpack:///./node_modules/browserify-aes/authCipher.js","webpack:///./node_modules/asn1.js/lib/asn1/base/node.js","webpack:///./node_modules/public-encrypt/xor.js","webpack:///./node_modules/asn1.js/lib/asn1/encoders/pem.js","webpack:///./node_modules/safe-buffer/index.js","webpack:///./node_modules/browserify-aes/encrypter.js","webpack:///./node_modules/asn1.js/lib/asn1/constants/der.js","webpack:///./node_modules/hash.js/lib/hash/sha/384.js","webpack:///./node_modules/pbkdf2/lib/to-buffer.js","webpack:///./node_modules/buffer-xor/index.js","webpack:///./node_modules/asn1.js/lib/asn1/decoders/pem.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/destroy.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/from-browser.js","webpack:///./node_modules/hash-base/index.js","webpack:///./node_modules/elliptic/lib/elliptic/eddsa/index.js","webpack:///./node_modules/browserify-cipher/browser.js","webpack:///./node_modules/process-nextick-args/index.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/buffer_list.js","webpack:///./node_modules/browserify-sign/browser/verify.js","webpack:///./node_modules/create-hash/browser.js","webpack:///./node_modules/@aws-amplify/auth/lib-esm/types/Auth.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_passthrough.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/errors-browser.js","webpack:///./node_modules/pbkdf2/lib/default-encoding.js","webpack:///./node_modules/pbkdf2/browser.js","webpack:///./node_modules/sha.js/sha256.js","webpack:///./node_modules/browserify-rsa/node_modules/bn.js/lib/bn.js","webpack:///./node_modules/browserify-rsa/index.js","webpack:///./node_modules/hash.js/lib/hash/sha/common.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/pipeline.js","webpack:///./node_modules/public-encrypt/publicEncrypt.js","webpack:///./node_modules/readable-stream/lib/_stream_readable.js","webpack:///./node_modules/evp_bytestokey/index.js","webpack:///./node_modules/readable-stream/lib/_stream_duplex.js","webpack:///./node_modules/hash.js/lib/hash/sha/512.js","webpack:///./node_modules/ripemd160/index.js","webpack:///./node_modules/sha.js/hash.js","webpack:///./node_modules/browserify-sign/browser/index.js","webpack:///./node_modules/elliptic/lib/elliptic/ec/signature.js","webpack:///./node_modules/util-deprecate/browser.js","webpack:///./node_modules/sha.js/sha384.js","webpack:///./node_modules/elliptic/lib/elliptic/ec/index.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/state.js","webpack:///./node_modules/browserify-aes/modes/index.js","webpack:///./node_modules/elliptic/lib/elliptic/ec/key.js","webpack:///./node_modules/hash.js/lib/hash/ripemd.js","webpack:///./node_modules/asn1.js/node_modules/bn.js/lib/bn.js","webpack:///./node_modules/browserify-aes/incr32.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/UniversalStorage/index.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/Util/StringUtils.js","webpack:///./node_modules/@aws-amplify/auth/lib-esm/OAuth/urlOpener.js","webpack:///./node_modules/@aws-amplify/auth/lib-esm/OAuth/oauthStorage.js","webpack:///./node_modules/@aws-amplify/auth/lib-esm/OAuth/OAuth.js","webpack:///./node_modules/@aws-amplify/auth/lib-esm/urlListener.js","webpack:///./node_modules/@aws-amplify/auth/lib-esm/Errors.js","webpack:///./node_modules/@aws-amplify/auth/lib-esm/Auth.js","webpack:///./node_modules/browserify-aes/modes/cbc.js","webpack:///./node_modules/readable-stream/passthrough.js","webpack:///./node_modules/hash.js/lib/hash/utils.js","webpack:///./node_modules/safer-buffer/safer.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_readable.js","webpack:///./node_modules/asn1.js/lib/asn1/decoders/der.js","webpack:///./node_modules/miller-rabin/node_modules/bn.js/lib/bn.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/errors-browser.js","webpack:///./node_modules/readable-stream/transform.js","webpack:///./node_modules/asn1.js/lib/asn1/base/reporter.js","webpack:///./node_modules/create-hmac/legacy.js","webpack:///./node_modules/stream-browserify/index.js","webpack:///./node_modules/minimalistic-assert/index.js","webpack:///./node_modules/readable-stream/lib/_stream_writable.js","webpack:///./node_modules/pbkdf2/lib/sync-browser.js","webpack:///./node_modules/create-ecdh/browser.js","webpack:///./node_modules/readable-stream/readable-browser.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/_stream_duplex.js","webpack:///./node_modules/amazon-cognito-identity-js/es/utils/cryptoSecureRandomInt.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/base.js","webpack:///./node_modules/hash.js/lib/hash/common.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/end-of-stream.js","webpack:///./node_modules/asn1.js/lib/asn1/api.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_transform.js","webpack:///./node_modules/elliptic/lib/elliptic/utils.js","webpack:///./node_modules/public-encrypt/mgf.js","webpack:///./node_modules/md5.js/index.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/from-browser.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/pipeline.js","webpack:///./node_modules/browserify-aes/browser.js","webpack:///./node_modules/brorand/index.js"],"names":["primes","DH","getDiffieHellman","mod","prime","Buffer","gen","ENCODINGS","createDiffieHellman","enc","generator","genc","isBuffer","undefined","generatePrime","exports","DiffieHellmanGroup","createDiffieHellmanGroup","DiffieHellman","assert","val","msg","Error","inherits","ctor","superCtor","super_","TempCtor","prototype","constructor","BN","number","base","endian","isBN","this","negative","words","length","red","_init","module","wordSize","e","parseHex","str","start","end","r","len","Math","min","i","c","charCodeAt","parseBase","mul","num","Array","isArray","max","left","right","cmp","_initNumber","_initArray","toString","replace","_parseHex","_parseBase","strip","toArray","ceil","j","w","off","limbLen","limbPow","total","word","imuln","_iaddn","pow","copy","dest","clone","_expand","size","_normSign","inspect","zeros","groupSizes","groupBases","toBitArray","bitLength","bit","wbit","smallMulTo","self","out","a","b","lo","carry","k","ncarry","rword","maxJ","padding","groupSize","groupBase","isZero","modn","idivn","toNumber","ret","toJSON","toBuffer","toArrayLike","ArrayType","byteLength","reqLength","littleEndian","res","q","andln","iushrn","clz32","_countBits","t","_zeroBits","hi","zeroBits","toTwos","width","abs","inotn","iaddn","fromTwos","testn","notn","ineg","isNeg","neg","iuor","ior","or","uor","iuand","iand","and","uand","iuxor","ixor","xor","uxor","bytesNeeded","bitsLeft","setn","iadd","isub","add","sub","comb10MulTo","mid","o","a0","al0","ah0","a1","al1","ah1","a2","al2","ah2","a3","al3","ah3","a4","al4","ah4","a5","al5","ah5","a6","al6","ah6","a7","al7","ah7","a8","al8","ah8","a9","al9","ah9","b0","bl0","bh0","b1","bl1","bh1","b2","bl2","bh2","b3","bl3","bh3","b4","bl4","bh4","b5","bl5","bh5","b6","bl6","bh6","b7","bl7","bh7","b8","bl8","bh8","b9","bl9","bh9","imul","w0","w1","w2","w3","w4","w5","w6","w7","w8","w9","w10","w11","w12","w13","w14","w15","w16","w17","w18","bigMulTo","hncarry","jumboMulTo","fftm","FFTM","mulp","x","y","mulTo","makeRBT","N","l","revBin","rb","permute","rbt","rws","iws","rtws","itws","transform","s","rtwdf","cos","PI","itwdf","sin","p","rtwdf_","itwdf_","re","ie","ro","io","rx","guessLen13b","n","m","odd","conjugate","normalize13b","ws","round","convert13b","stub","ph","_","rwst","iwst","nrws","nrwst","niwst","rmws","mulf","muln","sqr","isqr","iushln","bits","carryMask","newCarry","ishln","hint","extended","h","mask","maskedWords","ishrn","shln","ushln","shrn","ushrn","imaskn","maskn","isubn","addn","subn","iabs","_ishlnsubmul","shift","_wordDiv","mode","bhi","bhiBits","diff","qj","div","divmod","positive","divn","umod","divRound","dm","half","r2","acc","egcd","A","B","C","D","g","isEven","yp","xp","im","isOdd","jm","gcd","_invmp","x1","x2","delta","cmpn","invm","bincn","ucmp","gtn","gt","gten","gte","ltn","lt","lten","lte","eqn","eq","Red","toRed","ctx","convertTo","_forceRed","fromRed","convertFrom","forceRed","redAdd","redIAdd","redSub","redISub","redShl","shl","redMul","_verify2","redIMul","redSqr","_verify1","redISqr","redSqrt","sqrt","redInvm","redNeg","redPow","k256","p224","p192","p25519","MPrime","name","tmp","_tmp","K256","call","P224","P192","P25519","_prime","Mont","imod","rinv","minv","ireduce","rlen","split","imulK","_strip","input","output","outLen","prev","next","mod3","one","nOne","lpow","z","inv","windowSize","wnd","current","currentLen","mont","u","encrypt","block","_cipher","encryptBlock","decrypt","decryptBlock","Cipher","options","type","blockSize","buffer","bufferOff","update","data","_updateDecrypt","_updateEncrypt","_buffer","_flushBuffer","_update","inputOff","outputOff","count","final","first","last","_finalEncrypt","_finalDecrypt","concat","_pad","_unpad","equal","constants","_reverse","map","Object","keys","forEach","key","value","der","ERR_INVALID_OPT_VALUE","codes","highWaterMarkFrom","isDuplex","duplexKey","highWaterMark","getHighWaterMark","state","hwm","isFinite","floor","objectMode","copyProps","src","dst","SafeBuffer","arg","encodingOrOffset","from","alloc","allocUnsafe","allocUnsafeSlow","create","TypeError","fill","encoding","buf","SlowBuffer","utils","SHA256","SHA224","outSize","hmacStrength","padLength","_digest","toHex32","slice","split32","Hash","K","W","Sha","init","_w","rotl5","rotl30","ft","d","_a","_b","_c","_d","_e","M","readInt32BE","_hash","H","writeInt32BE","Transform","_require$codes","ERR_METHOD_NOT_IMPLEMENTED","ERR_MULTIPLE_CALLBACK","ERR_TRANSFORM_ALREADY_TRANSFORMING","ERR_TRANSFORM_WITH_LENGTH_0","Duplex","afterTransform","er","ts","_transformState","transforming","cb","writecb","emit","writechunk","push","rs","_readableState","reading","needReadable","_read","bind","needTransform","writeencoding","sync","_transform","flush","_flush","on","prefinish","_this","destroyed","done","stream","_writableState","chunk","_write","_destroy","err","err2","aes","StreamCipher","iv","AES","_prev","_cache","_secCache","_decrypt","_mode","_final","scrub","PassThrough","des","des3","pre","curves","hash","curve","PresetCurve","short","edwards","validate","isInfinity","defineCurve","defineProperty","configurable","enumerable","get","sha256","gRed","sha384","sha512","beta","lambda","basis","proto","CBCState","instantiate","Base","CBC","_cbcInit","_cbcState","inp","inOff","outOff","superProto","parseKeys","mgf","crt","createHash","withPublic","oaep","modulus","iHash","digest","hLen","maskedSeed","maskedDb","seed","db","compare","pkcs1","reverse","p1","status","ps","dif","privateKey","zBuffer","MAX_BYTES","MAX_UINT32","oldBrowser","crypto","global","msCrypto","randomBytes","RangeError","bytes","generated","getRandomValues","process","nextTick","common","shaCommon","rotl32","sum32","sum32_5","ft_1","BlockHash","sha1_K","SHA1","DES","EDE","CorkedRequest","entry","finish","onCorkedFinish","Writable","WritableState","internalUtil","deprecate","Stream","OurUint8Array","Uint8Array","_uint8ArrayToBuffer","_isUint8Array","obj","realHasInstance","destroyImpl","_require","ERR_INVALID_ARG_TYPE","ERR_STREAM_CANNOT_PIPE","ERR_STREAM_DESTROYED","ERR_STREAM_NULL_VALUES","ERR_STREAM_WRITE_AFTER_END","ERR_UNKNOWN_ENCODING","errorOrDestroy","nop","writableObjectMode","finalCalled","needDrain","ending","ended","finished","noDecode","decodeStrings","defaultEncoding","writing","corked","bufferProcessing","onwrite","writelen","bufferedRequest","lastBufferedRequest","pendingcb","prefinished","errorEmitted","emitClose","autoDestroy","bufferedRequestCount","corkedRequestsFree","writable","write","writev","_writev","destroy","writeAfterEnd","validChunk","decodeChunk","writeOrBuffer","isBuf","newChunk","callback","doWrite","onwriteError","finishMaybe","onwriteStateUpdate","needFinish","clearBuffer","afterWrite","onwriteDrain","holder","allBuffers","callFinal","need","rState","endEmitted","endWritable","once","corkReq","getBuffer","Symbol","hasInstance","Function","object","pipe","cork","uncork","setDefaultEncoding","toLowerCase","indexOf","set","_undestroy","undestroy","Legacy","md5","RIPEMD160","sha","ZEROS","Hmac","alg","blocksize","_alg","_key","ipad","_ipad","opad","_opad","rng","pseudoRandomBytes","prng","createHmac","algos","algoKeys","hashes","getHashes","pbkdf2","pbkdf2Sync","createCipher","Cipheriv","createCipheriv","Decipher","createDecipher","Decipheriv","createDecipheriv","getCiphers","listCiphers","dh","sign","createSign","Sign","createVerify","Verify","createECDH","publicEncrypt","privateEncrypt","publicDecrypt","privateDecrypt","rf","randomFill","randomFillSync","createCredentials","join","CipherBase","modes","opts","modeName","_des","EDEState","k1","k2","k3","ciphers","_edeState","ZERO_BUF","checkParameters","subtle","toBrowser","sha1","checks","checkNative","algo","browser","Promise","resolve","importKey","deriveBits","prom","browserPbkdf2","then","catch","password","salt","iterations","resolvePromise","promise","keylen","resp","decoders","pem","inner","outer","ownKeys","enumerableOnly","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","apply","_objectSpread","target","arguments","source","_defineProperty","getOwnPropertyDescriptors","defineProperties","_classCallCheck","instance","Constructor","_defineProperties","props","descriptor","_createClass","protoProps","staticProps","_require2","custom","copyBuffer","offset","BufferList","head","tail","v","hasStrings","_getString","_getBuffer","nb","depth","customInspect","util","_this2","asn1","aesid","fixProc","compat","passphrase","subtype","ndata","stripped","tag","certificate","decode","tbsCertificate","subjectPublicKeyInfo","PublicKey","algorithm","RSAPublicKey","subjectPublicKey","subjectPrivateKey","params","pub_key","DSAparam","EncryptedPrivateKey","PrivateKey","RSAPrivateKey","ECPrivateKey","priv_key","DSAPrivateKey","parameters","kde","kdeparams","iters","parseInt","cipher","cipherText","signature","ShortCurve","conf","tinv","two","zeroA","threeA","endo","_getEndomorphism","_endoWnafT1","_endoWnafT2","Point","isRed","BasePoint","inf","JPoint","zOne","betas","_getEndoRoots","lambdas","vec","_getEndoBasis","ntinv","l1","l2","prevR","aprxSqrt","y1","y2","len1","len2","_endoSplit","v1","v2","c1","c2","p2","q1","q2","pointFromX","zero","point","ax","rhs","_endoWnafMulAdd","points","coeffs","jacobianResult","npoints","ncoeffs","_getBeta","_wnafMulAdd","pointFromJSON","fromJSON","precomputed","endoMul","naf","doubles","step","JSON","parse","obj2point","dbl","nx","ny","ys1","dyinv","getX","getY","_hasDoubles","_fixedNafMul","_wnafMul","mulAdd","jmulAdd","_precompute","negate","toJ","jpoint","toP","zinv","zinv2","ay","pz2","z2","u1","u2","s1","s2","h2","h3","nz","mixedAdd","dblp","jx","jy","jz","jz4","jyd","jx2","jyd2","jyd4","t1","t2","dny","_zeroDbl","_threeDbl","_dbl","xx","yy","yyyy","yyyy8","f","c8","gamma","alpha","beta4","beta8","ggamma8","jy2","jxd4","jyd8","trpl","zz","mm","ee","yyu4","kbase","z3","pz3","eqXToP","zs","xc","redN","elliptic","version","rand","ec","eddsa","Readable","pipeline","encoders","encryptStart","Node","DEREncoder","entity","tree","DERNode","body","parent","encodeTag","primitive","cls","reporter","tagByName","hasOwnProperty","error","tagClassByName","encode","_encode","_encodeComposite","content","encodedTag","header","_createEncoderBuffer","lenOctets","_encodeStr","unused","writeUInt16BE","_isNumstr","_isPrintstr","test","_encodeObjid","id","values","relative","stringify","splice","ident","objid","_encodeTime","time","date","Date","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","_encodeNull","_encodeInt","numArray","unshift","_encodeBool","_use","_getEncoder","_skipDefault","dataBuffer","_baseState","defaultBuffer","_encodeValue","parseBytes","cachedProperty","KeyPair","_secret","secret","isPoint","pub","_pub","_pubBytes","fromPublic","fromSecret","encodePoint","decodePoint","priv","lastIx","encodingLength","decodeInt","privBytes","message","verify","sig","getSecret","getPublic","pubBytes","move","_move","for","modrn","allocate","postfix","_toArrayLikeLE","position","_toArrayLikeBE","isNegNum","asUInt32Array","readUInt32BE","scrubVec","cryptBlock","keySchedule","SUB_MIX","SBOX","nRounds","t0","t3","SUB_MIX0","SUB_MIX1","SUB_MIX2","SUB_MIX3","s0","s3","ksRow","RCON","G","INV_SBOX","INV_SUB_MIX","xi","sx","x4","x8","_reset","keySize","keyWords","ksRows","invKeySchedule","ik","ksR","tt","_nRounds","_keySchedule","_invKeySchedule","encryptBlockRaw","writeUInt32BE","m1","objectToString","isBoolean","isNull","isNullOrUndefined","isNumber","isString","isSymbol","isUndefined","isRegExp","isObject","isDate","isError","isFunction","isPrimitive","EdwardsCurve","twisted","mOneA","dd","oneC","_mulA","_mulC","lhs","pointFromY","normalize","_extDbl","nt","_projDbl","_extAdd","_projAdd","zi","other","ZEROES","fromArray","GHASH","cache","ghash","_multiply","lsbVi","Vi","Zi","abl","bl","define","seq","int","use","AlgorithmIdentifier","bitstr","null_","optional","PrivateKeyInfo","octstr","EncryptedPrivateKeyInfo","explicit","ECParameters","choice","namedCurve","_Object$setPrototypeO","kLastResolve","kLastReject","kError","kEnded","kLastPromise","kHandlePromise","kStream","createIterResult","readAndResolve","iter","read","onReadable","wrapForNext","lastPromise","reject","AsyncIteratorPrototype","getPrototypeOf","ReadableStreamAsyncIteratorPrototype","setPrototypeOf","asyncIterator","createReadableStreamAsyncIterator","_Object$create","iterator","code","Reporter","DecoderBuffer","EncoderBuffer","AuthCipher","MODES","ebtk","Splitter","_last","_autopadding","unpad","padded","suite","config","thing","setAutoPadding","setTo","autoPadding","ReadableState","EventEmitter","EElistenerCount","emitter","listeners","debug","debugUtil","debuglog","StringDecoder","ERR_STREAM_PUSH_AFTER_EOF","ERR_STREAM_UNSHIFT_AFTER_END_EVENT","kProxyEvents","prependListener","event","fn","_events","readableObjectMode","pipes","pipesCount","flowing","emittedReadable","readableListening","resumeScheduled","paused","awaitDrain","readingMore","decoder","readable","readableAddChunk","addToFront","skipChunkCheck","onEofChunk","chunkInvalid","addChunk","maybeReadMore","emitReadable","isPaused","setEncoding","clear","MAX_HWM","computeNewHighWaterMark","howMuchToRead","emitReadable_","flow","maybeReadMore_","pipeOnDrain","updateReadableListening","listenerCount","resume","nReadingNextTick","resume_","fromList","consume","endReadable","endReadableNT","wState","xs","nOrig","doRead","pipeOpts","doEnd","stdout","stderr","endFn","onend","unpipe","onunpipe","unpipeInfo","hasUnpiped","cleanup","ondrain","cleanedUp","removeListener","onclose","onfinish","onerror","ondata","pause","dests","index","ev","addListener","removeAllListeners","wrap","method","_fromList","iterable","ERR_STREAM_PREMATURE_CLOSE","called","_len","args","noop","isRequest","setHeader","abort","eos","onlegacyfinish","writableEnded","readableEnded","onrequest","req","logger","parseMobileHubConfig","storageConfig","amplifyConfig","Analytics","AWSPinpoint","appId","region","Auth","userPoolId","userPoolWebClientId","identityPoolId","identityPoolRegion","mandatorySignIn","AWSS3","bucket","dangerouslyConnectToHttpEndpointForTesting","Storage","assign","Parser","parseMobilehubConfig","__assign","__read","ar","__spread","AMPLIFY_SYMBOL","isLegacyCallback","onHubCapsule","HubClass","patterns","protectedChannels","remove","channel","listener","RegExp","pattern_1","find","pattern","warn","dispatch","payload","ampSymbol","hasAccess","capsule","patternInfo","_toListeners","listen","listenerName","payloadStr_1","match","groups","dispatchingCapsule","Hub","Signature","R","S","_R","_S","_Rencoded","Rencoded","_Sencoded","Sencoded","encodeInt","toBytes","toHex","toUpperCase","pna","readableDestroyed","writableDestroyed","emitErrorNT","emitCloseNT","emitErrorAndCloseNT","AuthenticationDetails","_ref","ValidationData","Username","Password","AuthParameters","ClientMetadata","validationData","authParameters","clientMetadata","username","_proto","getUsername","getPassword","getValidationData","getAuthParameters","getClientMetadata","hexStringify","wordArray","sigBytes","hexChars","bite","dbits","WordArray","random","nBytes","cryptoSecureRandomInt","BigInteger","fromString","nbi","canary","j_lm","am1","am2","xl","xh","am3","inBrowser","navigator","appName","am","DB","DM","DV","BI_FP","FV","F1","F2","rr","vv","BI_RM","BI_RC","int2char","charAt","intAt","bnpCopyTo","bnpFromInt","nbv","fromInt","bnpFromString","mi","sh","clamp","ZERO","subTo","bnpClamp","bnToString","km","bnNegate","bnAbs","bnCompareTo","nbits","bnBitLength","bnpDLShiftTo","bnpDRShiftTo","bnpLShiftTo","bs","cbs","bm","ds","bnpRShiftTo","bnpSubTo","bnpMultiplyTo","bnpSquareTo","bnpDivRemTo","pm","pt","copyTo","ms","nsh","lShiftTo","ys","y0","yt","d1","d2","dlShiftTo","compareTo","ONE","qd","drShiftTo","rShiftTo","bnMod","divRemTo","bnpInvDigit","bnEquals","bnpAddTo","bnAdd","addTo","bnSubtract","bnMultiply","multiplyTo","bnDivide","Montgomery","mp","invDigit","mpl","mph","um","mt2","montConvert","montRevert","reduce","montReduce","u0","montSqrTo","squareTo","montMulTo","bnModPow","convert","g2","sqrTo","is1","result","revert","equals","subtract","multiply","divide","modPow","initN","newPasswordRequiredChallengeUserAttributePrefix","AuthenticationHelper","PoolName","hexHash","smallAValue","generateRandomSmallA","getLargeAValue","infoBits","poolName","getSmallAValue","largeAValue","calculateA","hexRandom","randomBigInt","smallABigInt","generateRandomString","getRandomPassword","randomPassword","getSaltDevices","SaltToHashDevices","getVerifierDevices","verifierDevices","generateHashDevice","deviceGroupKey","combinedString","hashedString","padHex","verifierDevicesNotPadded","_this3","calculateU","UHexHash","finalU","lib","hashHex","hexStr","computehkdf","ikm","infoBitsWordArray","String","fromCharCode","ikmWordArray","saltWordArray","prk","hmac","getPasswordAuthenticationKey","serverBValue","_this4","UValue","usernamePassword","usernamePasswordHash","xValue","calculateS","sValue","hkdf","_this5","gModPowXN","intValue2","getNewPasswordRequiredChallengeUserAttributePrefix","bigInt","hashStr","CognitoJwtToken","token","jwtToken","decodePayload","getJwtToken","getExpiration","exp","getIssuedAt","iat","_inheritsLoose","subClass","superClass","__proto__","CognitoAccessToken","_CognitoJwtToken","_temp","AccessToken","CognitoIdToken","IdToken","CognitoRefreshToken","RefreshToken","getToken","CognitoUserSession","ClockDrift","idToken","refreshToken","accessToken","clockDrift","calculateClockDrift","getIdToken","getRefreshToken","getAccessToken","getClockDrift","now","isValid","adjusted","monthNames","weekNames","DateHelper","getNowString","weekDay","getUTCDay","month","day","hours","minutes","seconds","year","dateNow","CognitoUserAttribute","Name","Value","getValue","setValue","getName","setName","dataMemory","MemoryStorage","setItem","getItem","removeItem","StorageHelper","storageWindow","window","localStorage","exception","getStorage","isBrowser","userAgent","CognitoUser","Pool","pool","Session","client","signInUserSession","authenticationFlowType","storage","keyPrefix","getClientId","userDataKey","setSignInUserSession","clearCachedUserData","cacheTokens","getSignInUserSession","getAuthenticationFlowType","setAuthenticationFlowType","initiateAuth","authDetails","USERNAME","clientMetaData","jsonReq","AuthFlow","ClientId","getUserContextData","UserContextData","request","onFailure","challengeName","ChallengeName","challengeParameters","ChallengeParameters","customChallenge","getCognitoUserSession","AuthenticationResult","onSuccess","authenticateUser","authenticateUserPlainUsernamePassword","authenticateUserDefaultAuth","authenticationHelper","getUserPoolId","dateHelper","deviceKey","DEVICE_KEY","errOnAValue","aValue","SRP_A","CHALLENGE_NAME","USER_ID_FOR_SRP","SRP_B","SALT","getCachedDeviceKeyAndPassword","errOnHkdf","SECRET_BLOCK","signatureString","challengeResponses","PASSWORD_CLAIM_SECRET_BLOCK","TIMESTAMP","PASSWORD_CLAIM_SIGNATURE","respondToAuthChallenge","challenge","challengeCallback","errChallenge","dataChallenge","clearCachedDeviceKeyAndPassword","jsonReqResp","ChallengeResponses","errAuthenticate","dataAuthenticate","authenticateUserInternal","PASSWORD","authResult","mfaRequired","selectMFAType","mfaSetup","totpRequired","userAttributes","rawRequiredAttributes","requiredAttributes","userAttributesPrefix","substr","newPasswordRequired","newDeviceMetadata","NewDeviceMetadata","DeviceGroupKey","DeviceKey","errGenHash","deviceSecretVerifierConfig","Salt","PasswordVerifier","DeviceSecretVerifierConfig","DeviceName","errConfirm","dataConfirm","cacheDeviceKeyAndPassword","UserConfirmationNecessary","getDeviceResponse","completeNewPasswordChallenge","newPassword","requiredAttributeData","finalUserAttributes","NEW_PASSWORD","_this6","errAValue","errHkdf","confirmRegistration","confirmationCode","forceAliasCreation","ConfirmationCode","ForceAliasCreation","sendCustomChallengeAnswer","answerChallenge","_this7","ANSWER","sendMFACode","mfaType","_this8","SMS_MFA_CODE","mfaTypeSelection","SOFTWARE_TOKEN_MFA_CODE","changePassword","oldUserPassword","newUserPassword","PreviousPassword","ProposedPassword","enableMFA","mfaOptions","mfaEnabled","DeliveryMedium","AttributeName","MFAOptions","setUserMfaPreference","smsMfaSettings","softwareTokenMfaSettings","SMSMfaSettings","SoftwareTokenMfaSettings","disableMFA","deleteUser","_this9","clearCachedUser","updateAttributes","attributes","_this10","UserAttributes","getUserData","bypassCache","getUserAttributes","userData","attributeList","attribute","userAttribute","getMFAOptions","createGetUserRequest","promisifyRequest","refreshSessionIfPossible","_this11","refresh","refreshSession","_this12","getUserDataFromCache","isFetchUserDataAndTokenRequired","fetchUserData","_ref$bypassCache","_this13","cacheUserData","deleteAttributes","UserAttributeNames","resendConfirmationCode","getSession","idTokenKey","accessTokenKey","refreshTokenKey","clockDriftKey","sessionData","cachedSession","_this14","wrappedCallback","wrapRefreshSessionCallback","REFRESH_TOKEN","lastUserKey","deviceKeyKey","authenticationResult","clearCachedTokens","randomPasswordKey","deviceGroupKeyKey","forgotPassword","inputVerificationCode","confirmPassword","getAttributeVerificationCode","attributeName","verifyAttribute","Code","getDevice","forgetSpecificDevice","forgetDevice","_this15","setDeviceStatusRemembered","DeviceRememberedStatus","setDeviceStatusNotRemembered","listDevices","limit","paginationToken","requestParams","Limit","PaginationToken","globalSignOut","_this16","signOut","sendMFASelectionAnswer","_this17","associateSoftwareToken","_this18","associateSecretCode","SecretCode","verifySoftwareToken","totpCode","friendlyDeviceName","_this19","UserCode","FriendlyDeviceName","errRespond","dataRespond","UserAgent","appendToCognitoUserAgent","includes","_wrapNativeSuper","Class","Map","_isNativeFunction","has","Wrapper","_construct","_getPrototypeOf","_setPrototypeOf","Parent","_isNativeReflectConstruct","Reflect","construct","sham","Proxy","CognitoError","_Error","statusCode","Client","endpoint","fetchOptions","credentials","operation","response","headers","fetch","json","ok","__type","pop","Message","_error","ex","CognitoUserPool","UserPoolId","AdvancedSecurityDataCollectionFlag","clientId","advancedSecurityDataCollectionFlag","signUp","cognitoUser","returnData","user","userConfirmed","UserConfirmed","userSub","UserSub","codeDeliveryDetails","CodeDeliveryDetails","getCurrentUser","lastAuthUser","AmazonCognitoAdvancedSecurityData","amazonCognitoAdvancedSecurityDataConst","advancedSecurityData","getData","userContextData","EncodedData","CookieStorage","domain","path","expires","secure","sameSite","cookies","findProc","startRegex","fullRegex","evp","okey","decrypted","cipherKey","match2","DESState","_desState","deriveKeys","shiftTable","kL","kR","pc1","r28shl","pc2","ip","_encrypt","pad","lStart","rStart","keyL","keyR","expand","substitute","rip","Sha512","Ch","maj","sigma0","sigma1","Gamma0","Gamma0l","Gamma1","Gamma1l","getCarry","_ah","_bh","_ch","_dh","_eh","_fh","_gh","_hh","_al","_bl","_cl","_dl","_el","_fl","_gl","_hl","ah","bh","ch","eh","fh","gh","hh","al","cl","dl","el","fl","gl","hl","gamma0","gamma0l","gamma1","gamma1l","Wi7h","Wi7l","Wi16h","Wi16l","Wil","Wih","majh","majl","sigma0h","sigma0l","sigma1h","sigma1l","Kih","Kil","chh","chl","t1l","t1h","t2l","t2h","writeInt64BE","getBlock","encryptByte","byteParam","shiftIn","paddedMsg","publicExponent","MillerRabin","millerRabin","TWENTYFOUR","ELEVEN","TEN","THREE","SEVEN","setPublicKey","setPrivateKey","_priv","primeCache","checkPrime","hex","rem","simpleSieve","fermatTest","malleable","setGenerator","__prime","_primeLen","_primeCode","formatReturnValue","bn","__gen","generateKeys","_gen","getPublicKey","computeSecret","getPrime","front","getPrivateKey","getGenerator","asn","Time","utcTime","utctime","generalTime","gentime","AttributeTypeValue","any","SubjectPublicKeyInfo","RelativeDistinguishedName","setof","RDNSequence","seqof","rdnSequence","Validity","Extension","bool","def","TBSCertificate","implicit","X509Certificate","findPrime","TWO","FIVE","FOUR","_getPrimes","n2","sha224","MD5","objectKeys","allowHalfOpen","onEndNT","inL","inR","outL","outR","pc2table","sTable","sb","permuteTable","padSplit","group","AuthErrorStrings","item","isEncoderBuffer","isDecoderBuffer","isCompatible","save","restore","isEmpty","readUInt8","skip","raw","fail","_reporterState","hashMode","_finalOrDigest","__final","_decoder","_encoding","inputEnc","outputEnc","outData","_toString","getAuthTag","setAuthTag","setAAD","fin","MontCurve","i4","a24","precompute","aa","bb","diffAdd","da","jumlAdd","Algorithm","HmacDRBG","predResist","minEntropy","_reseed","reseedInterval","V","entropy","entropyEnc","nonce","nonceEnc","pers","persEnc","_hmac","kmac","reseed","addEnc","generate","temp","incr32","chunkNum","sum32_4","ch32","maj32","s0_256","s1_256","g0_256","g1_256","sha256_K","T1","T2","EC","hashType","signType","ecSign","dsaSign","curveId","keyFromPrivate","toDER","bits2int","kv","getKey","makeKey","makeR","hlen","hbits","bits2octets","obits","Sha256","Sha224","_f","_g","_h","safeBuffer","randombytes","kBufferMaxLength","kMaxLength","kMaxUint32","assertOffset","assertSize","actualFill","ourBuf","uint","zero2","arr","brorand","Rand","_randbelow","min_bytes","_randrange","stop","rone","n1","rn1","getDivisor","AuthState","MfaOption","AuthFormField","UsernameAlias","MAX_ALLOC","isEncoding","_normalizeEncoding","retried","normalizeEncoding","nenc","text","utf16Text","utf16End","fillLast","utf8FillLast","base64Text","base64End","simpleWrite","simpleEnd","lastNeed","lastTotal","lastChar","utf8CheckByte","byte","utf8CheckIncomplete","utf8CheckExtraBytes","utf8Text","utf8End","ripemd","ripemd160","Sha1","rotl1","bignum","xorTest","calcIv","ck","_finID","toPad","ivBits","writeUIntBE","_ghash","_alen","_authTag","_called","rump","tags","methods","overrided","children","reverseArgs","useDecoder","contains","_wrap","stateProps","cstate","prop","child","_useArgs","newKey","_decode","wrapResult","prevObj","present","prevKey","enterKey","_peekTag","_decodeGeneric","_decodeChoice","enterObject","_decodeTag","track","_getUse","leaveObject","exitKey","leaveKey","_decodeList","_decodeStr","_decodeObjid","_decodeTime","_decodeNull","_decodeBool","_decodeInt","some","node","_encodeChoice","_encodePrimitive","PEMEncoder","label","PADDING","padBuff","writeUInt8","tagClass","0","1","2","3","SHA512","SHA384","ArrayBuffer","isView","DERDecoder","PEMDecoder","lines","base64","throwIfNotStringOrBuffer","prefix","HashBase","_block","_blockSize","_blockOffset","_length","_finalized","EDDSA","pointClass","keyFromSecret","hashInt","messagePrefix","s_","makeSignature","keyFromPublic","SG","RplusAh","intFromLE","normed","xIsOdd","aesModes","desModes","keyLen","ivLen","arg1","arg2","arg3","ecVerify","dsaVerify","padNum","pubkey","unpacked","checkValue","montp","CognitoHostedUIIdentityProvider","AuthErrorTypes","isFederatedSignInOptions","isFederatedSignInOptionsCustom","hasCustomState","isCognitoHostedOpts","oauth","redirectSignIn","isUsernamePasswordOpts","createErrorType","getMessage","NodeError","_Base","oneOf","expected","startsWith","search","pos","endsWith","this_len","substring","actual","determiner","pVersionMajor","blind","getr","blinder","unblinder","blinds","blinded","prime1","prime2","qinv","coefficient","exponent1","m2","exponent2","rotr32","p32","ERR_MISSING_ARGS","destroyer","closed","to","popCallback","streams","destroys","mLen","hLen2","dblen","nonZero","cur","publicKey","readableHwm","readableHighWaterMark","defaultHwm","needMoreData","fromListPartial","list","copyFromBufferString","copyFromBuffer","increasedAwaitDrain","EVP_BytesToKey","keyBits","used","keyStart","ivStart","rotr64_hi","rotr64_lo","shr64_hi","shr64_lo","sum64","sum64_hi","sum64_lo","sum64_4_hi","sum64_4_lo","sum64_5_hi","sum64_5_lo","sha512_K","ch64_hi","yh","yl","zh","ch64_lo","zl","maj64_hi","maj64_lo","s0_512_hi","c0_hi","c1_hi","c2_hi","s0_512_lo","c0_lo","c1_lo","c2_lo","s1_512_hi","s1_512_lo","g0_512_hi","g0_512_lo","g1_512_hi","g1_512_lo","_prepareBlock","c3_hi","c3_lo","c4_hi","c4_lo","T1_hi","T1_lo","T2_hi","T2_lo","ARRAY16","zr","sl","sr","hr","rotl","fn1","fn2","fn3","fn4","fn5","readInt32LE","br","cr","dr","tl","tr","writeUInt32LE","writeInt32LE","finalSize","_finalSize","accum","assigned","remainder","lowBits","highBits","algorithms","_hashType","_tag","_signType","_importDER","recoveryParam","Position","place","getLength","initial","octetLen","rmPadding","constructLength","octets","log","LN2","slen","backHalf","warned","deprecated","console","trace","Sha384","nh","keyPair","fromPrivate","genKeyPair","drbg","ns2","_truncateToN","truncOnly","bkey","getPrivate","ns1","kp","kpX","canonical","sinv","_maxwellTrick","recoverPubKey","isYOdd","isSecondKey","rInv","getKeyRecoveryParam","Q","Qprime","modeModules","ECB","CFB","CFB8","CFB1","OFB","CTR","GCM","_importPrivate","privEnc","_importPublic","pubEnc","reason","compact","derive","sum32_3","Kh","E","Ah","Bh","Dh","Eh","T","rh","UniversalStorage","context","store","cookie","getAll","entries","getLocalItem","getUniversalItem","removeLocalItem","removeUniversalItem","setLocalItem","tokenType","setUniversalItem","location","hostname","urlSafeEncode","char","padStart","urlSafeDecode","SELF","launchUri","url","windowProxy","open","setState","sessionStorage","getState","oauth_state","setPKCE","private_key","getPKCE","ouath_pkce_key","__awaiter","thisArg","_arguments","P","adopt","fulfilled","rejected","__generator","sent","trys","ops","verb","op","dispatchAuthEvent","OAuth","cognitoClientId","scopes","_urlOpener","urlOpener","_config","_cognitoClientId","isValidScopes","_scopes","every","scope","oauthSignIn","responseType","provider","customState","Cognito","generatedState","_generateState","pkce_key","_generateRandom","code_challenge","_generateChallenge","code_challenge_method","scopesString","queryString","redirect_uri","response_type","client_id","identity_provider","encodeURIComponent","URL","_handleCodeFlow","currentUrl","oAuthTokenEndpoint","code_verifier","oAuthTokenBody","access_token","refresh_token","id_token","query","pairings","pathname","clientID","redirectUri","grant_type","_handleImplicitFlow","handleAuthResponse","urlParams","error_description","e_1","_validateState","savedState","returnedState","oAuthLogoutEndpoint","signout_uri","redirectSignOut","returnTo","logout_uri","oAuth","chars","_base64URL","string","CHARSET","_bufferToString","JS","browserOrNode","href","isNode","__extends","extendStatics","__","AuthError","_super","authErrorMessages","NoUserPoolError","noConfig","DEFAULT_MSG","missingAuthConfig","emptyUsername","EMPTY_USERNAME","invalidUsername","INVALID_USERNAME","emptyPassword","EMPTY_PASSWORD","emptyCode","EMPTY_CODE","signUpError","SIGN_UP_ERROR","noMFA","NO_MFA","invalidMFA","INVALID_MFA","emptyChallengeResponse","EMPTY_CHALLENGE","noUserSession","NO_USER_SESSION","default","USER_ADMIN_SCOPE","OAUTH_FLOW_MS_TIMEOUT","AuthClass","userPool","oAuthFlowInProgress","Credentials","wrapped","configure","currentCredentials","currentUserCredentials","_storage","getModuleName","cookieStorage","refreshHandlers","_isValidAuthStorage","ssr","_storageSync","userPoolData","cognitoHostedUIConfig","awsCognito","cognitoAuthParams","_oAuthHandler","usedResponseUrls_1","urlListener","_handleAuthResponse","restOfAttrs","_i","rejectNoUserPool","email","phone_number","rejectAuthError","SignUpError","attrs_1","validationDataObject","EmptyPassword","EmptyUsername","confirmSignUp","EmptyCode","createCognitoUser","resendSignUp","signIn","usernameOrSignInOpts","pw","InvalidUsername","signInWithPassword","signInWithoutPassword","authCallbacks","that","session","cred","currentUser","e_2","currentUserPoolUser","challengeParam","pendingSignIn","rej","getPreferredMFA","_getMfaTypeFromUserData","preferredMFA","PreferredMfaSetting","mfaList","UserMFASettingList","_getUserData","setPreferredMFA","mfaMethod","totpMfaSettings","currentMFAType","PreferredMfa","Enabled","InvalidMFA","NoMFA","disableSMS","enableSMS","setupTOTP","secretCode","verifyTotpToken","challengeAnswer","confirmSignIn","e_3","completeNewPassword","e_4","EmptyChallengeResponse","updateUserAttributes","userSession","attr","verifiedContact","attrs","attributesToObject","unverified","verified","isOAuthInProgress","timeoutId","setTimeout","hostedUISignCallback","clearTimeout","currentAuthenticatedUser","federatedUser","e_5","federatedInfo","e_6","currentSession","NoUserSession","e_7","refreshFederatedToken","verifyUserAttribute","verifyUserAttributeSubmit","verifyCurrentUserAttribute","verifyCurrentUserAttributeSubmit","cognitoIdentitySignOut","e_8","isSignedInHostedUI","oAuthSignOutRedirect","oAuthSignOutRedirectOrReject","oAuthSignOutAndResolve","cleanCachedItems","oldPassword","forgotPasswordSubmit","currentUserInfo","userAttrs","e_10","info","err_1","getCredSource","identityId","federatedSignIn","providerOrOptions","loggedInUser","identity_id","expires_at","customProvider","hasCodeOrError","hasTokenOrError","isCustomStateIncluded","err_2","history","replaceState","essentialCredentials","accessKeyId","sessionToken","secretAccessKey","authenticated","noUserPoolErrorHandler","NoConfig","MissingAuthConfig","Amplify","register","isSurrogatePair","htonl","zero8","join32","safer","Safer","kStringMaxLength","binding","MAX_LENGTH","MAX_STRING_LENGTH","derDecodeTag","oct","tagStr","derDecodeLen","decodedTag","_skipUntilEnd","possibleEnd","readUInt16BE","numstr","printstr","identifiers","subident","second","mon","hour","sec","UTC","_getDecoder","errors","ReporterError","rethrow","pathLen","inherited","elem","stack","partial","captureStackTrace","EE","_isStdio","didOnEnd","asyncWrite","setImmediate","writableHwm","writableHighWaterMark","valid","sizes","rmd160","saltLen","getDigest","ipad1","ipad2","shaFunc","rmd160Func","DK","block1","destPos","run","U","ECDH","aliases","secp256k1","secp224r1","prime256v1","prime192v1","ed25519","secp384r1","secp521r1","curveType","p256","secp256r1","secp192r1","p384","p521","format","inenc","otherPub","Uint32Array","getNAF","getJSF","BaseCurve","_wnafT1","_wnafT2","_wnafT3","_wnafT4","_bitLength","adjustCount","_getDoubles","I","nafW","repr","nafPoints","_getNAFPoints","defW","wndWidth","comb","jsf","ja","jb","encodeCompressed","power","pending","pendingTotal","_delta8","_delta32","api","Entity","_createNamed","Generated","_initNamed","minAssert","minUtils","m8","m14","m24","computer","i2ops","fnF","fnG","fnH","fnI","deciphers","_rand","getBytes","getByte"],"mappings":"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ACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,kEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,sEAINW,IAAK,CACHliB,IAAK,EACLuhB,OAAQ,CACN,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,iEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mE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","file":"js/chunk-e75cfaf2.8e6880e3.js","sourcesContent":["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","(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 Buffer = require('buffer').Buffer;\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 }\n\n if (base === 16) {\n this._parseHex(number, start);\n } else {\n this._parseBase(number, base, start);\n }\n\n if (number[0] === '-') {\n this.negative = 1;\n }\n\n this.strip();\n\n if (endian !== 'le') return;\n\n this._initArray(this.toArray(), base, endian);\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 parseHex (str, start, end) {\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 <<= 4;\n\n // 'a' - 'f'\n if (c >= 49 && c <= 54) {\n r |= c - 49 + 0xa;\n\n // 'A' - 'F'\n } else if (c >= 17 && c <= 22) {\n r |= c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r |= c & 0xf;\n }\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start) {\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 var j, w;\n // Scan 24-bit chunks and add them to the number\n var off = 0;\n for (i = number.length - 6, j = 0; i >= start; i -= 6) {\n w = parseHex(number, i, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n if (i + 6 !== start) {\n w = parseHex(number, start, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\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\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","exports.encrypt = function (self, block) {\n return self._cipher.encryptBlock(block)\n}\n\nexports.decrypt = function (self, block) {\n return self._cipher.decryptBlock(block)\n}\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\nconst constants = exports;\n\n// Helper\nconstants._reverse = function reverse(map) {\n const res = {};\n\n Object.keys(map).forEach(function(key) {\n // Convert key to integer if it is stringified\n if ((key | 0) == key)\n key = key | 0;\n\n const value = map[key];\n res[value] = key;\n });\n\n return res;\n};\n\nconstants.der = require('./der');\n","'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\n\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\n\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n\n if (hwm != null) {\n if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n var name = isDuplex ? duplexKey : 'highWaterMark';\n throw new ERR_INVALID_OPT_VALUE(name, hwm);\n }\n\n return Math.floor(hwm);\n } // Default value\n\n\n return state.objectMode ? 16 : 16 * 1024;\n}\n\nmodule.exports = {\n getHighWaterMark: getHighWaterMark\n};","/*! safe-buffer. MIT License. Feross Aboukhadijeh */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","'use strict';\n\nvar utils = require('../utils');\nvar SHA256 = require('./256');\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined\n * in FIPS PUB 180-1\n * This source code is derived from sha1.js of the same repository.\n * The difference between SHA-0 and SHA-1 is just a bitwise rotate left\n * operation was added.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha, Hash)\n\nSha.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha\n","module.exports = require('./lib/_stream_duplex.js');\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n'use strict';\n\nmodule.exports = Transform;\n\nvar _require$codes = require('../errors').codes,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\n\nvar Duplex = require('./_stream_duplex');\n\nrequire('inherits')(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n var cb = ts.writecb;\n\n if (cb === null) {\n return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n cb(er);\n var rs = this._readableState;\n rs.reading = false;\n\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n Duplex.call(this, options);\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n }; // start out asking for a readable event once data is transformed.\n\n this._readableState.needReadable = true; // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n if (typeof options.flush === 'function') this._flush = options.flush;\n } // When the writable side finishes, then flush out anything remaining.\n\n\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n}; // This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\n\n\nTransform.prototype._transform = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n}; // Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\n\n\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && !ts.transforming) {\n ts.transforming = true;\n\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data); // TODO(BridgeAR): Write a test for these two error cases\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n\n if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n return stream.push(null);\n}","var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\n\nfunction StreamCipher (mode, key, iv, decrypt) {\n Transform.call(this)\n\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._cache = Buffer.allocUnsafe(0)\n this._secCache = Buffer.allocUnsafe(0)\n this._decrypt = decrypt\n this._mode = mode\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n return this._mode.encrypt(this, chunk, this._decrypt)\n}\n\nStreamCipher.prototype._final = function () {\n this._cipher.scrub()\n}\n\nmodule.exports = StreamCipher\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\nrequire('inherits')(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};","exports['des-ecb'] = {\n key: 8,\n iv: 0\n}\nexports['des-cbc'] = exports.des = {\n key: 8,\n iv: 8\n}\nexports['des-ede3-cbc'] = exports.des3 = {\n key: 24,\n iv: 8\n}\nexports['des-ede3'] = {\n key: 24,\n iv: 0\n}\nexports['des-ede-cbc'] = {\n key: 16,\n iv: 8\n}\nexports['des-ede'] = {\n key: 16,\n iv: 0\n}\n","'use strict';\n\nvar curves = exports;\n\nvar hash = require('hash.js');\nvar curve = require('./curve');\nvar utils = require('./utils');\n\nvar assert = utils.assert;\n\nfunction PresetCurve(options) {\n if (options.type === 'short')\n this.curve = new curve.short(options);\n else if (options.type === 'edwards')\n this.curve = new curve.edwards(options);\n else\n this.curve = new curve.mont(options);\n this.g = this.curve.g;\n this.n = this.curve.n;\n this.hash = options.hash;\n\n assert(this.g.validate(), 'Invalid curve');\n assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\n}\ncurves.PresetCurve = PresetCurve;\n\nfunction defineCurve(name, options) {\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n get: function() {\n var curve = new PresetCurve(options);\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n value: curve,\n });\n return curve;\n },\n });\n}\n\ndefineCurve('p192', {\n type: 'short',\n prime: 'p192',\n p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\n b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\n n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\n hash: hash.sha256,\n gRed: false,\n g: [\n '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\n '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811',\n ],\n});\n\ndefineCurve('p224', {\n type: 'short',\n prime: 'p224',\n p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\n b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\n n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\n hash: hash.sha256,\n gRed: false,\n g: [\n 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\n 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34',\n ],\n});\n\ndefineCurve('p256', {\n type: 'short',\n prime: null,\n p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\n a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\n b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\n n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\n hash: hash.sha256,\n gRed: false,\n g: [\n '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\n '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5',\n ],\n});\n\ndefineCurve('p384', {\n type: 'short',\n prime: null,\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 ffffffff',\n a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 fffffffc',\n b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\n '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\n n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\n 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\n hash: hash.sha384,\n gRed: false,\n g: [\n 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\n '5502f25d bf55296c 3a545e38 72760ab7',\n '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\n '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f',\n ],\n});\n\ndefineCurve('p521', {\n type: 'short',\n prime: null,\n p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff',\n a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff fffffffc',\n b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\n '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\n '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\n n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\n 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\n hash: hash.sha512,\n gRed: false,\n g: [\n '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\n '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\n 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\n '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\n '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\n '3fad0761 353c7086 a272c240 88be9476 9fd16650',\n ],\n});\n\ndefineCurve('curve25519', {\n type: 'mont',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '76d06',\n b: '1',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '9',\n ],\n});\n\ndefineCurve('ed25519', {\n type: 'edwards',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '-1',\n c: '1',\n // -121665 * (121666^(-1)) (mod P)\n d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\n\n // 4/5\n '6666666666666666666666666666666666666666666666666666666666666658',\n ],\n});\n\nvar pre;\ntry {\n pre = require('./precomputed/secp256k1');\n} catch (e) {\n pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n type: 'short',\n prime: 'k256',\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n a: '0',\n b: '7',\n n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n h: '1',\n hash: hash.sha256,\n\n // Precomputed endomorphism\n beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n basis: [\n {\n a: '3086d221a7d46bcde86c90e49284eb15',\n b: '-e4437ed6010e88286f547fa90abfe4c3',\n },\n {\n a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n b: '3086d221a7d46bcde86c90e49284eb15',\n },\n ],\n\n gRed: false,\n g: [\n '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\n pre,\n ],\n});\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","var parseKeys = require('parse-asn1')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar crt = require('browserify-rsa')\nvar createHash = require('create-hash')\nvar withPublic = require('./withPublic')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function privateDecrypt (privateKey, enc, reverse) {\n var padding\n if (privateKey.padding) {\n padding = privateKey.padding\n } else if (reverse) {\n padding = 1\n } else {\n padding = 4\n }\n\n var key = parseKeys(privateKey)\n var k = key.modulus.byteLength()\n if (enc.length > k || new BN(enc).cmp(key.modulus) >= 0) {\n throw new Error('decryption error')\n }\n var msg\n if (reverse) {\n msg = withPublic(new BN(enc), key)\n } else {\n msg = crt(enc, key)\n }\n var zBuffer = Buffer.alloc(k - msg.length)\n msg = Buffer.concat([zBuffer, msg], k)\n if (padding === 4) {\n return oaep(key, msg)\n } else if (padding === 1) {\n return pkcs1(key, msg, reverse)\n } else if (padding === 3) {\n return msg\n } else {\n throw new Error('unknown padding')\n }\n}\n\nfunction oaep (key, msg) {\n var k = key.modulus.byteLength()\n var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n var hLen = iHash.length\n if (msg[0] !== 0) {\n throw new Error('decryption error')\n }\n var maskedSeed = msg.slice(1, hLen + 1)\n var maskedDb = msg.slice(hLen + 1)\n var seed = xor(maskedSeed, mgf(maskedDb, hLen))\n var db = xor(maskedDb, mgf(seed, k - hLen - 1))\n if (compare(iHash, db.slice(0, hLen))) {\n throw new Error('decryption error')\n }\n var i = hLen\n while (db[i] === 0) {\n i++\n }\n if (db[i++] !== 1) {\n throw new Error('decryption error')\n }\n return db.slice(i)\n}\n\nfunction pkcs1 (key, msg, reverse) {\n var p1 = msg.slice(0, 2)\n var i = 2\n var status = 0\n while (msg[i++] !== 0) {\n if (i >= msg.length) {\n status++\n break\n }\n }\n var ps = msg.slice(2, i - 1)\n\n if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)) {\n status++\n }\n if (ps.length < 8) {\n status++\n }\n if (status) {\n throw new Error('decryption error')\n }\n return msg.slice(i)\n}\nfunction compare (a, b) {\n a = Buffer.from(a)\n b = Buffer.from(b)\n var dif = 0\n var len = a.length\n if (a.length !== b.length) {\n dif++\n len = Math.min(a.length, b.length)\n }\n var i = -1\n while (++i < len) {\n dif += (a[i] ^ b[i])\n }\n return dif\n}\n","module.exports = require('./browser/algorithms.json')\n","'use strict'\n\n// limit of Crypto.getRandomValues()\n// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues\nvar MAX_BYTES = 65536\n\n// Node supports requesting up to this number of bytes\n// https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48\nvar MAX_UINT32 = 4294967295\n\nfunction oldBrowser () {\n throw new Error('Secure random number generation is not supported by this browser.\\nUse Chrome, Firefox or Internet Explorer 11')\n}\n\nvar Buffer = require('safe-buffer').Buffer\nvar crypto = global.crypto || global.msCrypto\n\nif (crypto && crypto.getRandomValues) {\n module.exports = randomBytes\n} else {\n module.exports = oldBrowser\n}\n\nfunction randomBytes (size, cb) {\n // phantomjs needs to throw\n if (size > MAX_UINT32) throw new RangeError('requested too many random bytes')\n\n var bytes = Buffer.allocUnsafe(size)\n\n if (size > 0) { // getRandomValues fails on IE if size == 0\n if (size > MAX_BYTES) { // this is the max bytes crypto.getRandomValues\n // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues\n for (var generated = 0; generated < size; generated += MAX_BYTES) {\n // buffer.slice automatically checks if the end is past the end of\n // the buffer so we don't have to here\n crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES))\n }\n } else {\n crypto.getRandomValues(bytes)\n }\n }\n\n if (typeof cb === 'function') {\n return process.nextTick(function () {\n cb(null, bytes)\n })\n }\n\n return bytes\n}\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","'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","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n'use strict';\n\nmodule.exports = Writable;\n/* */\n\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n} // It seems a linked list but it is not\n// there will be only 2 of these for each stream\n\n\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* */\n\n/**/\n\n\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n/**/\n\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/**/\n\n/**/\n\nvar Stream = require('./internal/streams/stream');\n/**/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\n\nrequire('inherits')(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream,\n // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n\n this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); // if _final has been called\n\n this.finalCalled = false; // drain event flag.\n\n this.needDrain = false; // at the start of calling end()\n\n this.ending = false; // when end() has been called, and returned\n\n this.ended = false; // when 'finish' is emitted\n\n this.finished = false; // has it been destroyed\n\n this.destroyed = false; // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode; // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n\n this.length = 0; // a flag to see when we're in the middle of a write.\n\n this.writing = false; // when true all writes will be buffered until .uncork() call\n\n this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n\n this.sync = true; // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n\n this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb)\n\n this.onwrite = function (er) {\n onwrite(stream, er);\n }; // the callback that the user supplies to write(chunk,encoding,cb)\n\n\n this.writecb = null; // the amount that is being written when _write is called.\n\n this.writelen = 0;\n this.bufferedRequest = null;\n this.lastBufferedRequest = null; // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n\n this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n\n this.prefinished = false; // True if the error was already emitted and should not be thrown again\n\n this.errorEmitted = false; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'finish' (and potentially 'end')\n\n this.autoDestroy = !!options.autoDestroy; // count buffered requests\n\n this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n\n while (current) {\n out.push(current);\n current = current.next;\n }\n\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function writableStateBufferGetter() {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})(); // Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\n\n\nvar realHasInstance;\n\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function value(object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function realHasInstance(object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex'); // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the WritableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n this._writableState = new WritableState(options, this, isDuplex); // legacy.\n\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n if (typeof options.writev === 'function') this._writev = options.writev;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n} // Otherwise people can pipe Writable streams, which is just wrong.\n\n\nWritable.prototype.pipe = function () {\n errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new ERR_STREAM_WRITE_AFTER_END(); // TODO: defer error events consistently everywhere, not just the cb\n\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n} // Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\n\n\nfunction validChunk(stream, state, chunk, cb) {\n var er;\n\n if (chunk === null) {\n er = new ERR_STREAM_NULL_VALUES();\n } else if (typeof chunk !== 'string' && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n }\n\n if (er) {\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n return false;\n }\n\n return true;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n if (typeof cb !== 'function') cb = nop;\n if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n return ret;\n};\n\nWritable.prototype.cork = function () {\n this._writableState.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n}); // if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\n\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n\n var len = state.objectMode ? 1 : chunk.length;\n state.length += len;\n var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false.\n\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n process.nextTick(cb, er); // this can emit finish, and it will always happen\n // after error\n\n process.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er); // this can emit finish, but finish must\n // always follow error\n\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n onwriteStateUpdate(state);\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state) || stream.destroyed;\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n process.nextTick(afterWrite, stream, state, finished, cb);\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n} // Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\n\n\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n} // if there's something in the buffer waiting, then process it\n\n\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n var count = 0;\n var allBuffers = true;\n\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n\n buffer.allBuffers = allBuffers;\n doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n\n state.pendingcb++;\n state.lastBufferedRequest = null;\n\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks\n\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n } // ignore unnecessary end() calls.\n\n\n if (!state.ending) endWritable(this, state, cb);\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\n\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n\n if (err) {\n errorOrDestroy(stream, err);\n }\n\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\n\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function' && !state.destroyed) {\n state.pendingcb++;\n state.finalCalled = true;\n process.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n\n if (need) {\n prefinish(stream, state);\n\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the readable side is ready for autoDestroy as well\n var rState = stream._readableState;\n\n if (!rState || rState.autoDestroy && rState.endEmitted) {\n stream.destroy();\n }\n }\n }\n }\n\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n\n if (cb) {\n if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n }\n\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n } // reuse the free corkReq.\n\n\n state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._writableState === undefined) {\n return false;\n }\n\n return this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._writableState.destroyed = value;\n }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\n\nWritable.prototype._destroy = function (err, cb) {\n cb(err);\n};","'use strict'\nvar inherits = require('inherits')\nvar Legacy = require('./legacy')\nvar Base = require('cipher-base')\nvar Buffer = require('safe-buffer').Buffer\nvar md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\n\nvar sha = require('sha.js')\n\nvar ZEROS = Buffer.alloc(128)\n\nfunction Hmac (alg, key) {\n Base.call(this, 'digest')\n if (typeof key === 'string') {\n key = Buffer.from(key)\n }\n\n var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n this._alg = alg\n this._key = key\n if (key.length > blocksize) {\n var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n key = hash.update(key).digest()\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n this._hash.update(ipad)\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n this._hash.update(data)\n}\n\nHmac.prototype._final = function () {\n var h = this._hash.digest()\n var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)\n return hash.update(this._opad).update(h).digest()\n}\n\nmodule.exports = function createHmac (alg, key) {\n alg = alg.toLowerCase()\n if (alg === 'rmd160' || alg === 'ripemd160') {\n return new Hmac('rmd160', key)\n }\n if (alg === 'md5') {\n return new Legacy(md5, key)\n }\n return new Hmac(alg, key)\n}\n","'use strict'\n\nexports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes')\nexports.createHash = exports.Hash = require('create-hash')\nexports.createHmac = exports.Hmac = require('create-hmac')\n\nvar algos = require('browserify-sign/algos')\nvar algoKeys = Object.keys(algos)\nvar hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys)\nexports.getHashes = function () {\n return hashes\n}\n\nvar p = require('pbkdf2')\nexports.pbkdf2 = p.pbkdf2\nexports.pbkdf2Sync = p.pbkdf2Sync\n\nvar aes = require('browserify-cipher')\n\nexports.Cipher = aes.Cipher\nexports.createCipher = aes.createCipher\nexports.Cipheriv = aes.Cipheriv\nexports.createCipheriv = aes.createCipheriv\nexports.Decipher = aes.Decipher\nexports.createDecipher = aes.createDecipher\nexports.Decipheriv = aes.Decipheriv\nexports.createDecipheriv = aes.createDecipheriv\nexports.getCiphers = aes.getCiphers\nexports.listCiphers = aes.listCiphers\n\nvar dh = require('diffie-hellman')\n\nexports.DiffieHellmanGroup = dh.DiffieHellmanGroup\nexports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup\nexports.getDiffieHellman = dh.getDiffieHellman\nexports.createDiffieHellman = dh.createDiffieHellman\nexports.DiffieHellman = dh.DiffieHellman\n\nvar sign = require('browserify-sign')\n\nexports.createSign = sign.createSign\nexports.Sign = sign.Sign\nexports.createVerify = sign.createVerify\nexports.Verify = sign.Verify\n\nexports.createECDH = require('create-ecdh')\n\nvar publicEncrypt = require('public-encrypt')\n\nexports.publicEncrypt = publicEncrypt.publicEncrypt\nexports.privateEncrypt = publicEncrypt.privateEncrypt\nexports.publicDecrypt = publicEncrypt.publicDecrypt\nexports.privateDecrypt = publicEncrypt.privateDecrypt\n\n// the least I can do is make error messages for the rest of the node.js/crypto api.\n// ;[\n// 'createCredentials'\n// ].forEach(function (name) {\n// exports[name] = function () {\n// throw new Error([\n// 'sorry, ' + name + ' is not implemented yet',\n// 'we accept pull requests',\n// 'https://github.com/crypto-browserify/crypto-browserify'\n// ].join('\\n'))\n// }\n// })\n\nvar rf = require('randomfill')\n\nexports.randomFill = rf.randomFill\nexports.randomFillSync = rf.randomFillSync\n\nexports.createCredentials = function () {\n throw new Error([\n 'sorry, createCredentials is not implemented yet',\n 'we accept pull requests',\n 'https://github.com/crypto-browserify/crypto-browserify'\n ].join('\\n'))\n}\n\nexports.constants = {\n 'DH_CHECK_P_NOT_SAFE_PRIME': 2,\n 'DH_CHECK_P_NOT_PRIME': 1,\n 'DH_UNABLE_TO_CHECK_GENERATOR': 4,\n 'DH_NOT_SUITABLE_GENERATOR': 8,\n 'NPN_ENABLED': 1,\n 'ALPN_ENABLED': 1,\n 'RSA_PKCS1_PADDING': 1,\n 'RSA_SSLV23_PADDING': 2,\n 'RSA_NO_PADDING': 3,\n 'RSA_PKCS1_OAEP_PADDING': 4,\n 'RSA_X931_PADDING': 5,\n 'RSA_PKCS1_PSS_PADDING': 6,\n 'POINT_CONVERSION_COMPRESSED': 2,\n 'POINT_CONVERSION_UNCOMPRESSED': 4,\n 'POINT_CONVERSION_HYBRID': 6\n}\n","var CipherBase = require('cipher-base')\nvar des = require('des.js')\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar modes = {\n 'des-ede3-cbc': des.CBC.instantiate(des.EDE),\n 'des-ede3': des.EDE,\n 'des-ede-cbc': des.CBC.instantiate(des.EDE),\n 'des-ede': des.EDE,\n 'des-cbc': des.CBC.instantiate(des.DES),\n 'des-ecb': des.DES\n}\nmodes.des = modes['des-cbc']\nmodes.des3 = modes['des-ede3-cbc']\nmodule.exports = DES\ninherits(DES, CipherBase)\nfunction DES (opts) {\n CipherBase.call(this)\n var modeName = opts.mode.toLowerCase()\n var mode = modes[modeName]\n var type\n if (opts.decrypt) {\n type = 'decrypt'\n } else {\n type = 'encrypt'\n }\n var key = opts.key\n if (!Buffer.isBuffer(key)) {\n key = Buffer.from(key)\n }\n if (modeName === 'des-ede' || modeName === 'des-ede-cbc') {\n key = Buffer.concat([key, key.slice(0, 8)])\n }\n var iv = opts.iv\n if (!Buffer.isBuffer(iv)) {\n iv = Buffer.from(iv)\n }\n this._des = mode.create({\n key: key,\n iv: iv,\n type: type\n })\n}\nDES.prototype._update = function (data) {\n return Buffer.from(this._des.update(data))\n}\nDES.prototype._final = function () {\n return Buffer.from(this._des.final())\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 Buffer = require('safe-buffer').Buffer\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar sync = require('./sync')\nvar toBuffer = require('./to-buffer')\n\nvar ZERO_BUF\nvar subtle = global.crypto && global.crypto.subtle\nvar toBrowser = {\n sha: 'SHA-1',\n 'sha-1': 'SHA-1',\n sha1: 'SHA-1',\n sha256: 'SHA-256',\n 'sha-256': 'SHA-256',\n sha384: 'SHA-384',\n 'sha-384': 'SHA-384',\n 'sha-512': 'SHA-512',\n sha512: 'SHA-512'\n}\nvar checks = []\nfunction checkNative (algo) {\n if (global.process && !global.process.browser) {\n return Promise.resolve(false)\n }\n if (!subtle || !subtle.importKey || !subtle.deriveBits) {\n return Promise.resolve(false)\n }\n if (checks[algo] !== undefined) {\n return checks[algo]\n }\n ZERO_BUF = ZERO_BUF || Buffer.alloc(8)\n var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo)\n .then(function () {\n return true\n }).catch(function () {\n return false\n })\n checks[algo] = prom\n return prom\n}\n\nfunction browserPbkdf2 (password, salt, iterations, length, algo) {\n return subtle.importKey(\n 'raw', password, { name: 'PBKDF2' }, false, ['deriveBits']\n ).then(function (key) {\n return subtle.deriveBits({\n name: 'PBKDF2',\n salt: salt,\n iterations: iterations,\n hash: {\n name: algo\n }\n }, key, length << 3)\n }).then(function (res) {\n return Buffer.from(res)\n })\n}\n\nfunction resolvePromise (promise, callback) {\n promise.then(function (out) {\n process.nextTick(function () {\n callback(null, out)\n })\n }, function (e) {\n process.nextTick(function () {\n callback(e)\n })\n })\n}\nmodule.exports = function (password, salt, iterations, keylen, digest, callback) {\n if (typeof digest === 'function') {\n callback = digest\n digest = undefined\n }\n\n digest = digest || 'sha1'\n var algo = toBrowser[digest.toLowerCase()]\n\n if (!algo || typeof global.Promise !== 'function') {\n return process.nextTick(function () {\n var out\n try {\n out = sync(password, salt, iterations, keylen, digest)\n } catch (e) {\n return callback(e)\n }\n callback(null, out)\n })\n }\n\n checkParameters(iterations, keylen)\n password = toBuffer(password, defaultEncoding, 'Password')\n salt = toBuffer(salt, defaultEncoding, 'Salt')\n if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2')\n\n resolvePromise(checkNative(algo).then(function (resp) {\n if (resp) return browserPbkdf2(password, salt, iterations, keylen, algo)\n\n return sync(password, salt, iterations, keylen, digest)\n }), callback)\n}\n","'use strict';\n\nconst decoders = exports;\n\ndecoders.der = require('./der');\ndecoders.pem = require('./pem');\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n","'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar _require = require('buffer'),\n Buffer = _require.Buffer;\n\nvar _require2 = require('util'),\n inspect = _require2.inspect;\n\nvar custom = inspect && inspect.custom || 'inspect';\n\nfunction copyBuffer(src, target, offset) {\n Buffer.prototype.copy.call(src, target, offset);\n}\n\nmodule.exports =\n/*#__PURE__*/\nfunction () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n _createClass(BufferList, [{\n key: \"push\",\n value: function push(v) {\n var entry = {\n data: v,\n next: null\n };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n }\n }, {\n key: \"unshift\",\n value: function unshift(v) {\n var entry = {\n data: v,\n next: this.head\n };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n }\n }, {\n key: \"shift\",\n value: function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this.head = this.tail = null;\n this.length = 0;\n }\n }, {\n key: \"join\",\n value: function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n\n while (p = p.next) {\n ret += s + p.data;\n }\n\n return ret;\n }\n }, {\n key: \"concat\",\n value: function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n\n return ret;\n } // Consumes a specified amount of bytes or characters from the buffered data.\n\n }, {\n key: \"consume\",\n value: function consume(n, hasStrings) {\n var ret;\n\n if (n < this.head.data.length) {\n // `slice` is the same for buffers and strings.\n ret = this.head.data.slice(0, n);\n this.head.data = this.head.data.slice(n);\n } else if (n === this.head.data.length) {\n // First chunk is a perfect match.\n ret = this.shift();\n } else {\n // Result spans more than one buffer.\n ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n }\n\n return ret;\n }\n }, {\n key: \"first\",\n value: function first() {\n return this.head.data;\n } // Consumes a specified amount of characters from the buffered data.\n\n }, {\n key: \"_getString\",\n value: function _getString(n) {\n var p = this.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = str.slice(nb);\n }\n\n break;\n }\n\n ++c;\n }\n\n this.length -= c;\n return ret;\n } // Consumes a specified amount of bytes from the buffered data.\n\n }, {\n key: \"_getBuffer\",\n value: function _getBuffer(n) {\n var ret = Buffer.allocUnsafe(n);\n var p = this.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = buf.slice(nb);\n }\n\n break;\n }\n\n ++c;\n }\n\n this.length -= c;\n return ret;\n } // Make sure the linked list only shows the minimal necessary information.\n\n }, {\n key: custom,\n value: function value(_, options) {\n return inspect(this, _objectSpread({}, options, {\n // Only inspect one level.\n depth: 0,\n // It should not recurse.\n customInspect: false\n }));\n }\n }]);\n\n return BufferList;\n}();","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\n\nvar Duplex = require('./_stream_duplex');\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\nutil.inherits(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n\n var cb = ts.writecb;\n\n if (!cb) {\n return this.emit('error', new Error('write callback called multiple times'));\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n\n cb(er);\n\n var rs = this._readableState;\n rs.reading = false;\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n\n Duplex.call(this, options);\n\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n };\n\n // start out asking for a readable event once data is transformed.\n this._readableState.needReadable = true;\n\n // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n\n if (typeof options.flush === 'function') this._flush = options.flush;\n }\n\n // When the writable side finishes, then flush out anything remaining.\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function') {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n throw new Error('_transform() is not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n ts.transforming = true;\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n var _this2 = this;\n\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n _this2.emit('close');\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data);\n\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');\n\n if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');\n\n return stream.push(null);\n}","var asn1 = require('./asn1')\nvar aesid = require('./aesid.json')\nvar fixProc = require('./fixProc')\nvar ciphers = require('browserify-aes')\nvar compat = require('pbkdf2')\nvar Buffer = require('safe-buffer').Buffer\nmodule.exports = parseKeys\n\nfunction parseKeys (buffer) {\n var password\n if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) {\n password = buffer.passphrase\n buffer = buffer.key\n }\n if (typeof buffer === 'string') {\n buffer = Buffer.from(buffer)\n }\n\n var stripped = fixProc(buffer, password)\n\n var type = stripped.tag\n var data = stripped.data\n var subtype, ndata\n switch (type) {\n case 'CERTIFICATE':\n ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo\n // falls through\n case 'PUBLIC KEY':\n if (!ndata) {\n ndata = asn1.PublicKey.decode(data, 'der')\n }\n subtype = ndata.algorithm.algorithm.join('.')\n switch (subtype) {\n case '1.2.840.113549.1.1.1':\n return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der')\n case '1.2.840.10045.2.1':\n ndata.subjectPrivateKey = ndata.subjectPublicKey\n return {\n type: 'ec',\n data: ndata\n }\n case '1.2.840.10040.4.1':\n ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der')\n return {\n type: 'dsa',\n data: ndata.algorithm.params\n }\n default: throw new Error('unknown key id ' + subtype)\n }\n // throw new Error('unknown key type ' + type)\n case 'ENCRYPTED PRIVATE KEY':\n data = asn1.EncryptedPrivateKey.decode(data, 'der')\n data = decrypt(data, password)\n // falls through\n case 'PRIVATE KEY':\n ndata = asn1.PrivateKey.decode(data, 'der')\n subtype = ndata.algorithm.algorithm.join('.')\n switch (subtype) {\n case '1.2.840.113549.1.1.1':\n return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der')\n case '1.2.840.10045.2.1':\n return {\n curve: ndata.algorithm.curve,\n privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey\n }\n case '1.2.840.10040.4.1':\n ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der')\n return {\n type: 'dsa',\n params: ndata.algorithm.params\n }\n default: throw new Error('unknown key id ' + subtype)\n }\n // throw new Error('unknown key type ' + type)\n case 'RSA PUBLIC KEY':\n return asn1.RSAPublicKey.decode(data, 'der')\n case 'RSA PRIVATE KEY':\n return asn1.RSAPrivateKey.decode(data, 'der')\n case 'DSA PRIVATE KEY':\n return {\n type: 'dsa',\n params: asn1.DSAPrivateKey.decode(data, 'der')\n }\n case 'EC PRIVATE KEY':\n data = asn1.ECPrivateKey.decode(data, 'der')\n return {\n curve: data.parameters.value,\n privateKey: data.privateKey\n }\n default: throw new Error('unknown key type ' + type)\n }\n}\nparseKeys.signature = asn1.signature\nfunction decrypt (data, password) {\n var salt = data.algorithm.decrypt.kde.kdeparams.salt\n var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10)\n var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')]\n var iv = data.algorithm.decrypt.cipher.iv\n var cipherText = data.subjectPrivateKey\n var keylen = parseInt(algo.split('-')[1], 10) / 8\n var key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1')\n var cipher = ciphers.createDecipheriv(algo, key, iv)\n var out = []\n out.push(cipher.update(cipherText))\n out.push(cipher.final())\n return Buffer.concat(out)\n}\n","module.exports = require('./lib/_stream_writable.js');\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction ShortCurve(conf) {\n Base.call(this, 'short', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.tinv = this.two.redInvm();\n\n this.zeroA = this.a.fromRed().cmpn(0) === 0;\n this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;\n\n // If the curve is endomorphic, precalculate beta and lambda\n this.endo = this._getEndomorphism(conf);\n this._endoWnafT1 = new Array(4);\n this._endoWnafT2 = new Array(4);\n}\ninherits(ShortCurve, Base);\nmodule.exports = ShortCurve;\n\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\n // No efficient endomorphism\n if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)\n return;\n\n // Compute beta and lambda, that lambda * P = (beta * Px; Py)\n var beta;\n var lambda;\n if (conf.beta) {\n beta = new BN(conf.beta, 16).toRed(this.red);\n } else {\n var betas = this._getEndoRoots(this.p);\n // Choose the smallest beta\n beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];\n beta = beta.toRed(this.red);\n }\n if (conf.lambda) {\n lambda = new BN(conf.lambda, 16);\n } else {\n // Choose the lambda that is matching selected beta\n var lambdas = this._getEndoRoots(this.n);\n if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {\n lambda = lambdas[0];\n } else {\n lambda = lambdas[1];\n assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);\n }\n }\n\n // Get basis vectors, used for balanced length-two representation\n var basis;\n if (conf.basis) {\n basis = conf.basis.map(function(vec) {\n return {\n a: new BN(vec.a, 16),\n b: new BN(vec.b, 16),\n };\n });\n } else {\n basis = this._getEndoBasis(lambda);\n }\n\n return {\n beta: beta,\n lambda: lambda,\n basis: basis,\n };\n};\n\nShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {\n // Find roots of for x^2 + x + 1 in F\n // Root = (-1 +- Sqrt(-3)) / 2\n //\n var red = num === this.p ? this.red : BN.mont(num);\n var tinv = new BN(2).toRed(red).redInvm();\n var ntinv = tinv.redNeg();\n\n var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\n\n var l1 = ntinv.redAdd(s).fromRed();\n var l2 = ntinv.redSub(s).fromRed();\n return [ l1, l2 ];\n};\n\nShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {\n // aprxSqrt >= sqrt(this.n)\n var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));\n\n // 3.74\n // Run EGCD, until r(L + 1) < aprxSqrt\n var u = lambda;\n var v = this.n.clone();\n var x1 = new BN(1);\n var y1 = new BN(0);\n var x2 = new BN(0);\n var y2 = new BN(1);\n\n // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)\n var a0;\n var b0;\n // First vector\n var a1;\n var b1;\n // Second vector\n var a2;\n var b2;\n\n var prevR;\n var i = 0;\n var r;\n var x;\n while (u.cmpn(0) !== 0) {\n var q = v.div(u);\n r = v.sub(q.mul(u));\n x = x2.sub(q.mul(x1));\n var y = y2.sub(q.mul(y1));\n\n if (!a1 && r.cmp(aprxSqrt) < 0) {\n a0 = prevR.neg();\n b0 = x1;\n a1 = r.neg();\n b1 = x;\n } else if (a1 && ++i === 2) {\n break;\n }\n prevR = r;\n\n v = u;\n u = r;\n x2 = x1;\n x1 = x;\n y2 = y1;\n y1 = y;\n }\n a2 = r.neg();\n b2 = x;\n\n var len1 = a1.sqr().add(b1.sqr());\n var len2 = a2.sqr().add(b2.sqr());\n if (len2.cmp(len1) >= 0) {\n a2 = a0;\n b2 = b0;\n }\n\n // Normalize signs\n if (a1.negative) {\n a1 = a1.neg();\n b1 = b1.neg();\n }\n if (a2.negative) {\n a2 = a2.neg();\n b2 = b2.neg();\n }\n\n return [\n { a: a1, b: b1 },\n { a: a2, b: b2 },\n ];\n};\n\nShortCurve.prototype._endoSplit = function _endoSplit(k) {\n var basis = this.endo.basis;\n var v1 = basis[0];\n var v2 = basis[1];\n\n var c1 = v2.b.mul(k).divRound(this.n);\n var c2 = v1.b.neg().mul(k).divRound(this.n);\n\n var p1 = c1.mul(v1.a);\n var p2 = c2.mul(v2.a);\n var q1 = c1.mul(v1.b);\n var q2 = c2.mul(v2.b);\n\n // Calculate answer\n var k1 = k.sub(p1).sub(p2);\n var k2 = q1.add(q2).neg();\n return { k1: k1, k2: k2 };\n};\n\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n // XXX Is there any way to tell if the number is odd without converting it\n // to non-red form?\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nShortCurve.prototype.validate = function validate(point) {\n if (point.inf)\n return true;\n\n var x = point.x;\n var y = point.y;\n\n var ax = this.a.redMul(x);\n var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);\n return y.redSqr().redISub(rhs).cmpn(0) === 0;\n};\n\nShortCurve.prototype._endoWnafMulAdd =\n function _endoWnafMulAdd(points, coeffs, jacobianResult) {\n var npoints = this._endoWnafT1;\n var ncoeffs = this._endoWnafT2;\n for (var i = 0; i < points.length; i++) {\n var split = this._endoSplit(coeffs[i]);\n var p = points[i];\n var beta = p._getBeta();\n\n if (split.k1.negative) {\n split.k1.ineg();\n p = p.neg(true);\n }\n if (split.k2.negative) {\n split.k2.ineg();\n beta = beta.neg(true);\n }\n\n npoints[i * 2] = p;\n npoints[i * 2 + 1] = beta;\n ncoeffs[i * 2] = split.k1;\n ncoeffs[i * 2 + 1] = split.k2;\n }\n var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);\n\n // Clean-up references to points and coefficients\n for (var j = 0; j < i * 2; j++) {\n npoints[j] = null;\n ncoeffs[j] = null;\n }\n return res;\n };\n\nfunction Point(curve, x, y, isRed) {\n Base.BasePoint.call(this, curve, 'affine');\n if (x === null && y === null) {\n this.x = null;\n this.y = null;\n this.inf = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n // Force redgomery representation when loading from JSON\n if (isRed) {\n this.x.forceRed(this.curve.red);\n this.y.forceRed(this.curve.red);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n this.inf = false;\n }\n}\ninherits(Point, Base.BasePoint);\n\nShortCurve.prototype.point = function point(x, y, isRed) {\n return new Point(this, x, y, isRed);\n};\n\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\n return Point.fromJSON(this, obj, red);\n};\n\nPoint.prototype._getBeta = function _getBeta() {\n if (!this.curve.endo)\n return;\n\n var pre = this.precomputed;\n if (pre && pre.beta)\n return pre.beta;\n\n var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);\n if (pre) {\n var curve = this.curve;\n var endoMul = function(p) {\n return curve.point(p.x.redMul(curve.endo.beta), p.y);\n };\n pre.beta = beta;\n beta.precomputed = {\n beta: null,\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(endoMul),\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(endoMul),\n },\n };\n }\n return beta;\n};\n\nPoint.prototype.toJSON = function toJSON() {\n if (!this.precomputed)\n return [ this.x, this.y ];\n\n return [ this.x, this.y, this.precomputed && {\n doubles: this.precomputed.doubles && {\n step: this.precomputed.doubles.step,\n points: this.precomputed.doubles.points.slice(1),\n },\n naf: this.precomputed.naf && {\n wnd: this.precomputed.naf.wnd,\n points: this.precomputed.naf.points.slice(1),\n },\n } ];\n};\n\nPoint.fromJSON = function fromJSON(curve, obj, red) {\n if (typeof obj === 'string')\n obj = JSON.parse(obj);\n var res = curve.point(obj[0], obj[1], red);\n if (!obj[2])\n return res;\n\n function obj2point(obj) {\n return curve.point(obj[0], obj[1], red);\n }\n\n var pre = obj[2];\n res.precomputed = {\n beta: null,\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: [ res ].concat(pre.doubles.points.map(obj2point)),\n },\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: [ res ].concat(pre.naf.points.map(obj2point)),\n },\n };\n return res;\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n return this.inf;\n};\n\nPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.inf)\n return p;\n\n // P + O = P\n if (p.inf)\n return this;\n\n // P + P = 2P\n if (this.eq(p))\n return this.dbl();\n\n // P + (-P) = O\n if (this.neg().eq(p))\n return this.curve.point(null, null);\n\n // P + Q = O\n if (this.x.cmp(p.x) === 0)\n return this.curve.point(null, null);\n\n var c = this.y.redSub(p.y);\n if (c.cmpn(0) !== 0)\n c = c.redMul(this.x.redSub(p.x).redInvm());\n var nx = c.redSqr().redISub(this.x).redISub(p.x);\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.inf)\n return this;\n\n // 2P = O\n var ys1 = this.y.redAdd(this.y);\n if (ys1.cmpn(0) === 0)\n return this.curve.point(null, null);\n\n var a = this.curve.a;\n\n var x2 = this.x.redSqr();\n var dyinv = ys1.redInvm();\n var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\n\n var nx = c.redSqr().redISub(this.x.redAdd(this.x));\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.getX = function getX() {\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n return this.y.fromRed();\n};\n\nPoint.prototype.mul = function mul(k) {\n k = new BN(k, 16);\n if (this.isInfinity())\n return this;\n else if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else if (this.curve.endo)\n return this.curve._endoWnafMulAdd([ this ], [ k ]);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs, true);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\n};\n\nPoint.prototype.eq = function eq(p) {\n return this === p ||\n this.inf === p.inf &&\n (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\n};\n\nPoint.prototype.neg = function neg(_precompute) {\n if (this.inf)\n return this;\n\n var res = this.curve.point(this.x, this.y.redNeg());\n if (_precompute && this.precomputed) {\n var pre = this.precomputed;\n var negate = function(p) {\n return p.neg();\n };\n res.precomputed = {\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(negate),\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(negate),\n },\n };\n }\n return res;\n};\n\nPoint.prototype.toJ = function toJ() {\n if (this.inf)\n return this.curve.jpoint(null, null, null);\n\n var res = this.curve.jpoint(this.x, this.y, this.curve.one);\n return res;\n};\n\nfunction JPoint(curve, x, y, z) {\n Base.BasePoint.call(this, curve, 'jacobian');\n if (x === null && y === null && z === null) {\n this.x = this.curve.one;\n this.y = this.curve.one;\n this.z = new BN(0);\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = new BN(z, 16);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n\n this.zOne = this.z === this.curve.one;\n}\ninherits(JPoint, Base.BasePoint);\n\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\n return new JPoint(this, x, y, z);\n};\n\nJPoint.prototype.toP = function toP() {\n if (this.isInfinity())\n return this.curve.point(null, null);\n\n var zinv = this.z.redInvm();\n var zinv2 = zinv.redSqr();\n var ax = this.x.redMul(zinv2);\n var ay = this.y.redMul(zinv2).redMul(zinv);\n\n return this.curve.point(ax, ay);\n};\n\nJPoint.prototype.neg = function neg() {\n return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\n};\n\nJPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.isInfinity())\n return p;\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 12M + 4S + 7A\n var pz2 = p.z.redSqr();\n var z2 = this.z.redSqr();\n var u1 = this.x.redMul(pz2);\n var u2 = p.x.redMul(z2);\n var s1 = this.y.redMul(pz2.redMul(p.z));\n var s2 = p.y.redMul(z2.redMul(this.z));\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(p.z).redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\n // O + P = P\n if (this.isInfinity())\n return p.toJ();\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 8M + 3S + 7A\n var z2 = this.z.redSqr();\n var u1 = this.x;\n var u2 = p.x.redMul(z2);\n var s1 = this.y;\n var s2 = p.y.redMul(z2).redMul(this.z);\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.dblp = function dblp(pow) {\n if (pow === 0)\n return this;\n if (this.isInfinity())\n return this;\n if (!pow)\n return this.dbl();\n\n var i;\n if (this.curve.zeroA || this.curve.threeA) {\n var r = this;\n for (i = 0; i < pow; i++)\n r = r.dbl();\n return r;\n }\n\n // 1M + 2S + 1A + N * (4S + 5M + 8A)\n // N = 1 => 6M + 6S + 9A\n var a = this.curve.a;\n var tinv = this.curve.tinv;\n\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n // Reuse results\n var jyd = jy.redAdd(jy);\n for (i = 0; i < pow; i++) {\n var jx2 = jx.redSqr();\n var jyd2 = jyd.redSqr();\n var jyd4 = jyd2.redSqr();\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var t1 = jx.redMul(jyd2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n var dny = c.redMul(t2);\n dny = dny.redIAdd(dny).redISub(jyd4);\n var nz = jyd.redMul(jz);\n if (i + 1 < pow)\n jz4 = jz4.redMul(jyd4);\n\n jx = nx;\n jz = nz;\n jyd = dny;\n }\n\n return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\n};\n\nJPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n if (this.curve.zeroA)\n return this._zeroDbl();\n else if (this.curve.threeA)\n return this._threeDbl();\n else\n return this._dbl();\n};\n\nJPoint.prototype._zeroDbl = function _zeroDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 14A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // T = M ^ 2 - 2*S\n var t = m.redSqr().redISub(s).redISub(s);\n\n // 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2*Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-dbl-2009-l\n // 2M + 5S + 13A\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = B^2\n var c = b.redSqr();\n // D = 2 * ((X1 + B)^2 - A - C)\n var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\n d = d.redIAdd(d);\n // E = 3 * A\n var e = a.redAdd(a).redIAdd(a);\n // F = E^2\n var f = e.redSqr();\n\n // 8 * C\n var c8 = c.redIAdd(c);\n c8 = c8.redIAdd(c8);\n c8 = c8.redIAdd(c8);\n\n // X3 = F - 2 * D\n nx = f.redISub(d).redISub(d);\n // Y3 = E * (D - X3) - 8 * C\n ny = e.redMul(d.redISub(nx)).redISub(c8);\n // Z3 = 2 * Y1 * Z1\n nz = this.y.redMul(this.z);\n nz = nz.redIAdd(nz);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._threeDbl = function _threeDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 15A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a\n var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);\n // T = M^2 - 2 * S\n var t = m.redSqr().redISub(s).redISub(s);\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2 * Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\n // 3M + 5S\n\n // delta = Z1^2\n var delta = this.z.redSqr();\n // gamma = Y1^2\n var gamma = this.y.redSqr();\n // beta = X1 * gamma\n var beta = this.x.redMul(gamma);\n // alpha = 3 * (X1 - delta) * (X1 + delta)\n var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\n alpha = alpha.redAdd(alpha).redIAdd(alpha);\n // X3 = alpha^2 - 8 * beta\n var beta4 = beta.redIAdd(beta);\n beta4 = beta4.redIAdd(beta4);\n var beta8 = beta4.redAdd(beta4);\n nx = alpha.redSqr().redISub(beta8);\n // Z3 = (Y1 + Z1)^2 - gamma - delta\n nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);\n // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\n var ggamma8 = gamma.redSqr();\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._dbl = function _dbl() {\n var a = this.curve.a;\n\n // 4M + 6S + 10A\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n var jx2 = jx.redSqr();\n var jy2 = jy.redSqr();\n\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var jxd4 = jx.redAdd(jx);\n jxd4 = jxd4.redIAdd(jxd4);\n var t1 = jxd4.redMul(jy2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n\n var jyd8 = jy2.redSqr();\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n var ny = c.redMul(t2).redISub(jyd8);\n var nz = jy.redAdd(jy).redMul(jz);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.trpl = function trpl() {\n if (!this.curve.zeroA)\n return this.dbl().add(this);\n\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\n // 5M + 10S + ...\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // ZZ = Z1^2\n var zz = this.z.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // M = 3 * XX + a * ZZ2; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // MM = M^2\n var mm = m.redSqr();\n // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\n var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n e = e.redIAdd(e);\n e = e.redAdd(e).redIAdd(e);\n e = e.redISub(mm);\n // EE = E^2\n var ee = e.redSqr();\n // T = 16*YYYY\n var t = yyyy.redIAdd(yyyy);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n // U = (M + E)^2 - MM - EE - T\n var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);\n // X3 = 4 * (X1 * EE - 4 * YY * U)\n var yyu4 = yy.redMul(u);\n yyu4 = yyu4.redIAdd(yyu4);\n yyu4 = yyu4.redIAdd(yyu4);\n var nx = this.x.redMul(ee).redISub(yyu4);\n nx = nx.redIAdd(nx);\n nx = nx.redIAdd(nx);\n // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\n var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n // Z3 = (Z1 + E)^2 - ZZ - EE\n var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mul = function mul(k, kbase) {\n k = new BN(k, kbase);\n\n return this.curve._wnafMul(this, k);\n};\n\nJPoint.prototype.eq = function eq(p) {\n if (p.type === 'affine')\n return this.eq(p.toJ());\n\n if (this === p)\n return true;\n\n // x1 * z2^2 == x2 * z1^2\n var z2 = this.z.redSqr();\n var pz2 = p.z.redSqr();\n if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)\n return false;\n\n // y1 * z2^3 == y2 * z1^3\n var z3 = z2.redMul(this.z);\n var pz3 = pz2.redMul(p.z);\n return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\n};\n\nJPoint.prototype.eqXToP = function eqXToP(x) {\n var zs = this.z.redSqr();\n var rx = x.toRed(this.curve.red).redMul(zs);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(zs);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\nJPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nJPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n","'use strict';\n\nvar elliptic = exports;\n\nelliptic.version = require('../package.json').version;\nelliptic.utils = require('./elliptic/utils');\nelliptic.rand = require('brorand');\nelliptic.curve = require('./elliptic/curve');\nelliptic.curves = require('./elliptic/curves');\n\n// Protocols\nelliptic.ec = require('./elliptic/ec');\nelliptic.eddsa = require('./elliptic/eddsa');\n","exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\nexports.finished = require('./lib/internal/streams/end-of-stream.js');\nexports.pipeline = require('./lib/internal/streams/pipeline.js');\n","'use strict';\n\nconst encoders = exports;\n\nencoders.der = require('./der');\nencoders.pem = require('./pem');\n","exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\nexports.finished = require('./lib/internal/streams/end-of-stream.js');\nexports.pipeline = require('./lib/internal/streams/pipeline.js');\n","var Buffer = require('safe-buffer').Buffer\nvar xor = require('buffer-xor')\n\nfunction encryptStart (self, data, decrypt) {\n var len = data.length\n var out = xor(data, self._cache)\n self._cache = self._cache.slice(len)\n self._prev = Buffer.concat([self._prev, decrypt ? data : out])\n return out\n}\n\nexports.encrypt = function (self, data, decrypt) {\n var out = Buffer.allocUnsafe(0)\n var len\n\n while (data.length) {\n if (self._cache.length === 0) {\n self._cache = self._cipher.encryptBlock(self._prev)\n self._prev = Buffer.allocUnsafe(0)\n }\n\n if (self._cache.length <= data.length) {\n len = self._cache.length\n out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])\n data = data.slice(len)\n } else {\n out = Buffer.concat([out, encryptStart(self, data, decrypt)])\n break\n }\n }\n\n return out\n}\n","'use strict';\n\nconst inherits = require('inherits');\nconst Buffer = require('safer-buffer').Buffer;\nconst Node = require('../base/node');\n\n// Import DER constants\nconst der = require('../constants/der');\n\nfunction DEREncoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n}\nmodule.exports = DEREncoder;\n\nDEREncoder.prototype.encode = function encode(data, reporter) {\n return this.tree._encode(data, reporter).join();\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n Node.call(this, 'der', parent);\n}\ninherits(DERNode, Node);\n\nDERNode.prototype._encodeComposite = function encodeComposite(tag,\n primitive,\n cls,\n content) {\n const encodedTag = encodeTag(tag, primitive, cls, this.reporter);\n\n // Short form\n if (content.length < 0x80) {\n const header = Buffer.alloc(2);\n header[0] = encodedTag;\n header[1] = content.length;\n return this._createEncoderBuffer([ header, content ]);\n }\n\n // Long form\n // Count octets required to store length\n let lenOctets = 1;\n for (let i = content.length; i >= 0x100; i >>= 8)\n lenOctets++;\n\n const header = Buffer.alloc(1 + 1 + lenOctets);\n header[0] = encodedTag;\n header[1] = 0x80 | lenOctets;\n\n for (let i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8)\n header[i] = j & 0xff;\n\n return this._createEncoderBuffer([ header, content ]);\n};\n\nDERNode.prototype._encodeStr = function encodeStr(str, tag) {\n if (tag === 'bitstr') {\n return this._createEncoderBuffer([ str.unused | 0, str.data ]);\n } else if (tag === 'bmpstr') {\n const buf = Buffer.alloc(str.length * 2);\n for (let i = 0; i < str.length; i++) {\n buf.writeUInt16BE(str.charCodeAt(i), i * 2);\n }\n return this._createEncoderBuffer(buf);\n } else if (tag === 'numstr') {\n if (!this._isNumstr(str)) {\n return this.reporter.error('Encoding of string type: numstr supports ' +\n 'only digits and space');\n }\n return this._createEncoderBuffer(str);\n } else if (tag === 'printstr') {\n if (!this._isPrintstr(str)) {\n return this.reporter.error('Encoding of string type: printstr supports ' +\n 'only latin upper and lower case letters, ' +\n 'digits, space, apostrophe, left and rigth ' +\n 'parenthesis, plus sign, comma, hyphen, ' +\n 'dot, slash, colon, equal sign, ' +\n 'question mark');\n }\n return this._createEncoderBuffer(str);\n } else if (/str$/.test(tag)) {\n return this._createEncoderBuffer(str);\n } else if (tag === 'objDesc') {\n return this._createEncoderBuffer(str);\n } else {\n return this.reporter.error('Encoding of string type: ' + tag +\n ' unsupported');\n }\n};\n\nDERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {\n if (typeof id === 'string') {\n if (!values)\n return this.reporter.error('string objid given, but no values map found');\n if (!values.hasOwnProperty(id))\n return this.reporter.error('objid not found in values map');\n id = values[id].split(/[\\s.]+/g);\n for (let i = 0; i < id.length; i++)\n id[i] |= 0;\n } else if (Array.isArray(id)) {\n id = id.slice();\n for (let i = 0; i < id.length; i++)\n id[i] |= 0;\n }\n\n if (!Array.isArray(id)) {\n return this.reporter.error('objid() should be either array or string, ' +\n 'got: ' + JSON.stringify(id));\n }\n\n if (!relative) {\n if (id[1] >= 40)\n return this.reporter.error('Second objid identifier OOB');\n id.splice(0, 2, id[0] * 40 + id[1]);\n }\n\n // Count number of octets\n let size = 0;\n for (let i = 0; i < id.length; i++) {\n let ident = id[i];\n for (size++; ident >= 0x80; ident >>= 7)\n size++;\n }\n\n const objid = Buffer.alloc(size);\n let offset = objid.length - 1;\n for (let i = id.length - 1; i >= 0; i--) {\n let ident = id[i];\n objid[offset--] = ident & 0x7f;\n while ((ident >>= 7) > 0)\n objid[offset--] = 0x80 | (ident & 0x7f);\n }\n\n return this._createEncoderBuffer(objid);\n};\n\nfunction two(num) {\n if (num < 10)\n return '0' + num;\n else\n return num;\n}\n\nDERNode.prototype._encodeTime = function encodeTime(time, tag) {\n let str;\n const date = new Date(time);\n\n if (tag === 'gentime') {\n str = [\n two(date.getUTCFullYear()),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else if (tag === 'utctime') {\n str = [\n two(date.getUTCFullYear() % 100),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else {\n this.reporter.error('Encoding ' + tag + ' time is not supported yet');\n }\n\n return this._encodeStr(str, 'octstr');\n};\n\nDERNode.prototype._encodeNull = function encodeNull() {\n return this._createEncoderBuffer('');\n};\n\nDERNode.prototype._encodeInt = function encodeInt(num, values) {\n if (typeof num === 'string') {\n if (!values)\n return this.reporter.error('String int or enum given, but no values map');\n if (!values.hasOwnProperty(num)) {\n return this.reporter.error('Values map doesn\\'t contain: ' +\n JSON.stringify(num));\n }\n num = values[num];\n }\n\n // Bignum, assume big endian\n if (typeof num !== 'number' && !Buffer.isBuffer(num)) {\n const numArray = num.toArray();\n if (!num.sign && numArray[0] & 0x80) {\n numArray.unshift(0);\n }\n num = Buffer.from(numArray);\n }\n\n if (Buffer.isBuffer(num)) {\n let size = num.length;\n if (num.length === 0)\n size++;\n\n const out = Buffer.alloc(size);\n num.copy(out);\n if (num.length === 0)\n out[0] = 0;\n return this._createEncoderBuffer(out);\n }\n\n if (num < 0x80)\n return this._createEncoderBuffer(num);\n\n if (num < 0x100)\n return this._createEncoderBuffer([0, num]);\n\n let size = 1;\n for (let i = num; i >= 0x100; i >>= 8)\n size++;\n\n const out = new Array(size);\n for (let i = out.length - 1; i >= 0; i--) {\n out[i] = num & 0xff;\n num >>= 8;\n }\n if(out[0] & 0x80) {\n out.unshift(0);\n }\n\n return this._createEncoderBuffer(Buffer.from(out));\n};\n\nDERNode.prototype._encodeBool = function encodeBool(value) {\n return this._createEncoderBuffer(value ? 0xff : 0);\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getEncoder('der').tree;\n};\n\nDERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {\n const state = this._baseState;\n let i;\n if (state['default'] === null)\n return false;\n\n const data = dataBuffer.join();\n if (state.defaultBuffer === undefined)\n state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();\n\n if (data.length !== state.defaultBuffer.length)\n return false;\n\n for (i=0; i < data.length; i++)\n if (data[i] !== state.defaultBuffer[i])\n return false;\n\n return true;\n};\n\n// Utility methods\n\nfunction encodeTag(tag, primitive, cls, reporter) {\n let res;\n\n if (tag === 'seqof')\n tag = 'seq';\n else if (tag === 'setof')\n tag = 'set';\n\n if (der.tagByName.hasOwnProperty(tag))\n res = der.tagByName[tag];\n else if (typeof tag === 'number' && (tag | 0) === tag)\n res = tag;\n else\n return reporter.error('Unknown tag: ' + tag);\n\n if (res >= 0x1f)\n return reporter.error('Multi-octet tag encoding unsupported');\n\n if (!primitive)\n res |= 0x20;\n\n res |= (der.tagClassByName[cls || 'universal'] << 6);\n\n return res;\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 Buffer = require('buffer').Buffer;\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 }\n\n if (base === 16) {\n this._parseHex(number, start);\n } else {\n this._parseBase(number, base, start);\n }\n\n if (number[0] === '-') {\n this.negative = 1;\n }\n\n this.strip();\n\n if (endian !== 'le') return;\n\n this._initArray(this.toArray(), base, endian);\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 parseHex (str, start, end) {\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 <<= 4;\n\n // 'a' - 'f'\n if (c >= 49 && c <= 54) {\n r |= c - 49 + 0xa;\n\n // 'A' - 'F'\n } else if (c >= 17 && c <= 22) {\n r |= c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r |= c & 0xf;\n }\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start) {\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 var j, w;\n // Scan 24-bit chunks and add them to the number\n var off = 0;\n for (i = number.length - 6, j = 0; i >= start; i -= 6) {\n w = parseHex(number, i, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n if (i + 6 !== start) {\n w = parseHex(number, start, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\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\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","'use strict';\n\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar cachedProperty = utils.cachedProperty;\n\n/**\n* @param {EDDSA} eddsa - instance\n* @param {Object} params - public/private key parameters\n*\n* @param {Array} [params.secret] - secret seed bytes\n* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)\n* @param {Array} [params.pub] - public key point encoded as bytes\n*\n*/\nfunction KeyPair(eddsa, params) {\n this.eddsa = eddsa;\n this._secret = parseBytes(params.secret);\n if (eddsa.isPoint(params.pub))\n this._pub = params.pub;\n else\n this._pubBytes = parseBytes(params.pub);\n}\n\nKeyPair.fromPublic = function fromPublic(eddsa, pub) {\n if (pub instanceof KeyPair)\n return pub;\n return new KeyPair(eddsa, { pub: pub });\n};\n\nKeyPair.fromSecret = function fromSecret(eddsa, secret) {\n if (secret instanceof KeyPair)\n return secret;\n return new KeyPair(eddsa, { secret: secret });\n};\n\nKeyPair.prototype.secret = function secret() {\n return this._secret;\n};\n\ncachedProperty(KeyPair, 'pubBytes', function pubBytes() {\n return this.eddsa.encodePoint(this.pub());\n});\n\ncachedProperty(KeyPair, 'pub', function pub() {\n if (this._pubBytes)\n return this.eddsa.decodePoint(this._pubBytes);\n return this.eddsa.g.mul(this.priv());\n});\n\ncachedProperty(KeyPair, 'privBytes', function privBytes() {\n var eddsa = this.eddsa;\n var hash = this.hash();\n var lastIx = eddsa.encodingLength - 1;\n\n var a = hash.slice(0, eddsa.encodingLength);\n a[0] &= 248;\n a[lastIx] &= 127;\n a[lastIx] |= 64;\n\n return a;\n});\n\ncachedProperty(KeyPair, 'priv', function priv() {\n return this.eddsa.decodeInt(this.privBytes());\n});\n\ncachedProperty(KeyPair, 'hash', function hash() {\n return this.eddsa.hash().update(this.secret()).digest();\n});\n\ncachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {\n return this.hash().slice(this.eddsa.encodingLength);\n});\n\nKeyPair.prototype.sign = function sign(message) {\n assert(this._secret, 'KeyPair can only verify');\n return this.eddsa.sign(message, this);\n};\n\nKeyPair.prototype.verify = function verify(message, sig) {\n return this.eddsa.verify(message, sig, this);\n};\n\nKeyPair.prototype.getSecret = function getSecret(enc) {\n assert(this._secret, 'KeyPair is public only');\n return utils.encode(this.secret(), enc);\n};\n\nKeyPair.prototype.getPublic = function getPublic(enc) {\n return utils.encode(this.pubBytes(), enc);\n};\n\nmodule.exports = KeyPair;\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 Buffer = require('buffer').Buffer;\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 }\n\n if (base === 16) {\n this._parseHex(number, start);\n } else {\n this._parseBase(number, base, start);\n }\n\n if (number[0] === '-') {\n this.negative = 1;\n }\n\n this._strip();\n\n if (endian !== 'le') return;\n\n this._initArray(this.toArray(), base, endian);\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 parseHex (str, start, end) {\n var r = 0;\n var len = Math.min(str.length, end);\n var z = 0;\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r <<= 4;\n\n var b;\n\n // 'a' - 'f'\n if (c >= 49 && c <= 54) {\n b = c - 49 + 0xa;\n\n // 'A' - 'F'\n } else if (c >= 17 && c <= 22) {\n b = c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n b = c;\n }\n\n r |= b;\n z |= b;\n }\n\n assert(!(z & 0xf0), 'Invalid character in ' + str);\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start) {\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 var j, w;\n // Scan 24-bit chunks and add them to the number\n var off = 0;\n for (i = number.length - 6, j = 0; i >= start; i -= 6) {\n w = parseHex(number, i, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n if (i + 6 !== start) {\n w = parseHex(number, start, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n }\n this._strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var b = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n b = c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n b = c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n b = c;\n }\n assert(c >= 0 && b < mul, 'Invalid character');\n r += b;\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [0];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n function move (dest, src) {\n dest.words = src.words;\n dest.length = src.length;\n dest.negative = src.negative;\n dest.red = src.red;\n }\n\n BN.prototype._move = function _move (dest) {\n move(dest, this);\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype._strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n // Check Symbol.for because not everywhere where Symbol defined\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility\n if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') {\n try {\n BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect;\n } catch (e) {\n BN.prototype.inspect = inspect;\n }\n } else {\n BN.prototype.inspect = inspect;\n }\n\n function inspect () {\n return (this.red ? '';\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.modrn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16, 2);\n };\n\n if (Buffer) {\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n return this.toArrayLike(Buffer, endian, length);\n };\n }\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n var allocate = function allocate (ArrayType, size) {\n if (ArrayType.allocUnsafe) {\n return ArrayType.allocUnsafe(size);\n }\n return new ArrayType(size);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n this._strip();\n\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n var res = allocate(ArrayType, reqLength);\n var postfix = endian === 'le' ? 'LE' : 'BE';\n this['_toArrayLike' + postfix](res, byteLength);\n return res;\n };\n\n BN.prototype._toArrayLikeLE = function _toArrayLikeLE (res, byteLength) {\n var position = 0;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position++] = word & 0xff;\n if (position < res.length) {\n res[position++] = (word >> 8) & 0xff;\n }\n if (position < res.length) {\n res[position++] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position < res.length) {\n res[position++] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position < res.length) {\n res[position++] = carry;\n\n while (position < res.length) {\n res[position++] = 0;\n }\n }\n };\n\n BN.prototype._toArrayLikeBE = function _toArrayLikeBE (res, byteLength) {\n var position = res.length - 1;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position--] = word & 0xff;\n if (position >= 0) {\n res[position--] = (word >> 8) & 0xff;\n }\n if (position >= 0) {\n res[position--] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position >= 0) {\n res[position--] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position >= 0) {\n res[position--] = carry;\n\n while (position >= 0) {\n res[position--] = 0;\n }\n }\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] >>> wbit) & 0x01;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this._strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this._strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this._strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this._strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this._strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this._strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n function jumboMulTo (self, num, out) {\n // Temporary disable, see https://github.com/indutny/bn.js/issues/211\n // var fftm = new FFTM();\n // return fftm.mulp(self, num, out);\n return bigMulTo(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out._strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this._strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) <= num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this._strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this._strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this._strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q._strip();\n }\n a._strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || (r2 === 1 && cmp === 0)) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modrn = function modrn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return isNegNum ? -acc : acc;\n };\n\n // WARNING: DEPRECATED\n BN.prototype.modn = function modn (num) {\n return this.modrn(num);\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n this._strip();\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this._strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is a BN v4 instance\n r.strip();\n } else {\n // r is a BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n\n move(a, a.umod(this.m)._forceRed(this));\n return a;\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","/*! safe-buffer. MIT License. Feross Aboukhadijeh */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","// based on the aes implimentation in triple sec\n// https://github.com/keybase/triplesec\n// which is in turn based on the one from crypto-js\n// https://code.google.com/p/crypto-js/\n\nvar Buffer = require('safe-buffer').Buffer\n\nfunction asUInt32Array (buf) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n\n var len = (buf.length / 4) | 0\n var out = new Array(len)\n\n for (var i = 0; i < len; i++) {\n out[i] = buf.readUInt32BE(i * 4)\n }\n\n return out\n}\n\nfunction scrubVec (v) {\n for (var i = 0; i < v.length; v++) {\n v[i] = 0\n }\n}\n\nfunction cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) {\n var SUB_MIX0 = SUB_MIX[0]\n var SUB_MIX1 = SUB_MIX[1]\n var SUB_MIX2 = SUB_MIX[2]\n var SUB_MIX3 = SUB_MIX[3]\n\n var s0 = M[0] ^ keySchedule[0]\n var s1 = M[1] ^ keySchedule[1]\n var s2 = M[2] ^ keySchedule[2]\n var s3 = M[3] ^ keySchedule[3]\n var t0, t1, t2, t3\n var ksRow = 4\n\n for (var round = 1; round < nRounds; round++) {\n t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++]\n t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++]\n t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++]\n t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++]\n s0 = t0\n s1 = t1\n s2 = t2\n s3 = t3\n }\n\n t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]\n t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]\n t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]\n t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]\n t0 = t0 >>> 0\n t1 = t1 >>> 0\n t2 = t2 >>> 0\n t3 = t3 >>> 0\n\n return [t0, t1, t2, t3]\n}\n\n// AES constants\nvar RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]\nvar G = (function () {\n // Compute double table\n var d = new Array(256)\n for (var j = 0; j < 256; j++) {\n if (j < 128) {\n d[j] = j << 1\n } else {\n d[j] = (j << 1) ^ 0x11b\n }\n }\n\n var SBOX = []\n var INV_SBOX = []\n var SUB_MIX = [[], [], [], []]\n var INV_SUB_MIX = [[], [], [], []]\n\n // Walk GF(2^8)\n var x = 0\n var xi = 0\n for (var i = 0; i < 256; ++i) {\n // Compute sbox\n var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)\n sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63\n SBOX[x] = sx\n INV_SBOX[sx] = x\n\n // Compute multiplication\n var x2 = d[x]\n var x4 = d[x2]\n var x8 = d[x4]\n\n // Compute sub bytes, mix columns tables\n var t = (d[sx] * 0x101) ^ (sx * 0x1010100)\n SUB_MIX[0][x] = (t << 24) | (t >>> 8)\n SUB_MIX[1][x] = (t << 16) | (t >>> 16)\n SUB_MIX[2][x] = (t << 8) | (t >>> 24)\n SUB_MIX[3][x] = t\n\n // Compute inv sub bytes, inv mix columns tables\n t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)\n INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)\n INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)\n INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)\n INV_SUB_MIX[3][sx] = t\n\n if (x === 0) {\n x = xi = 1\n } else {\n x = x2 ^ d[d[d[x8 ^ x2]]]\n xi ^= d[d[xi]]\n }\n }\n\n return {\n SBOX: SBOX,\n INV_SBOX: INV_SBOX,\n SUB_MIX: SUB_MIX,\n INV_SUB_MIX: INV_SUB_MIX\n }\n})()\n\nfunction AES (key) {\n this._key = asUInt32Array(key)\n this._reset()\n}\n\nAES.blockSize = 4 * 4\nAES.keySize = 256 / 8\nAES.prototype.blockSize = AES.blockSize\nAES.prototype.keySize = AES.keySize\nAES.prototype._reset = function () {\n var keyWords = this._key\n var keySize = keyWords.length\n var nRounds = keySize + 6\n var ksRows = (nRounds + 1) * 4\n\n var keySchedule = []\n for (var k = 0; k < keySize; k++) {\n keySchedule[k] = keyWords[k]\n }\n\n for (k = keySize; k < ksRows; k++) {\n var t = keySchedule[k - 1]\n\n if (k % keySize === 0) {\n t = (t << 8) | (t >>> 24)\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n\n t ^= RCON[(k / keySize) | 0] << 24\n } else if (keySize > 6 && k % keySize === 4) {\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n }\n\n keySchedule[k] = keySchedule[k - keySize] ^ t\n }\n\n var invKeySchedule = []\n for (var ik = 0; ik < ksRows; ik++) {\n var ksR = ksRows - ik\n var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)]\n\n if (ik < 4 || ksR <= 4) {\n invKeySchedule[ik] = tt\n } else {\n invKeySchedule[ik] =\n G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^\n G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^\n G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^\n G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]]\n }\n }\n\n this._nRounds = nRounds\n this._keySchedule = keySchedule\n this._invKeySchedule = invKeySchedule\n}\n\nAES.prototype.encryptBlockRaw = function (M) {\n M = asUInt32Array(M)\n return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds)\n}\n\nAES.prototype.encryptBlock = function (M) {\n var out = this.encryptBlockRaw(M)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[1], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[3], 12)\n return buf\n}\n\nAES.prototype.decryptBlock = function (M) {\n M = asUInt32Array(M)\n\n // swap\n var m1 = M[1]\n M[1] = M[3]\n M[3] = m1\n\n var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[3], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[1], 12)\n return buf\n}\n\nAES.prototype.scrub = function () {\n scrubVec(this._keySchedule)\n scrubVec(this._invKeySchedule)\n scrubVec(this._key)\n}\n\nmodule.exports.AES = AES\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\n\nfunction isArray(arg) {\n if (Array.isArray) {\n return Array.isArray(arg);\n }\n return objectToString(arg) === '[object Array]';\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = Buffer.isBuffer;\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction EdwardsCurve(conf) {\n // NOTE: Important as we are creating point in Base.call()\n this.twisted = (conf.a | 0) !== 1;\n this.mOneA = this.twisted && (conf.a | 0) === -1;\n this.extended = this.mOneA;\n\n Base.call(this, 'edwards', conf);\n\n this.a = new BN(conf.a, 16).umod(this.red.m);\n this.a = this.a.toRed(this.red);\n this.c = new BN(conf.c, 16).toRed(this.red);\n this.c2 = this.c.redSqr();\n this.d = new BN(conf.d, 16).toRed(this.red);\n this.dd = this.d.redAdd(this.d);\n\n assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);\n this.oneC = (conf.c | 0) === 1;\n}\ninherits(EdwardsCurve, Base);\nmodule.exports = EdwardsCurve;\n\nEdwardsCurve.prototype._mulA = function _mulA(num) {\n if (this.mOneA)\n return num.redNeg();\n else\n return this.a.redMul(num);\n};\n\nEdwardsCurve.prototype._mulC = function _mulC(num) {\n if (this.oneC)\n return num;\n else\n return this.c.redMul(num);\n};\n\n// Just for compatibility with Short curve\nEdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {\n return this.point(x, y, z, t);\n};\n\nEdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var x2 = x.redSqr();\n var rhs = this.c2.redSub(this.a.redMul(x2));\n var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));\n\n var y2 = rhs.redMul(lhs.redInvm());\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {\n y = new BN(y, 16);\n if (!y.red)\n y = y.toRed(this.red);\n\n // x^2 = (y^2 - c^2) / (c^2 d y^2 - a)\n var y2 = y.redSqr();\n var lhs = y2.redSub(this.c2);\n var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);\n var x2 = lhs.redMul(rhs.redInvm());\n\n if (x2.cmp(this.zero) === 0) {\n if (odd)\n throw new Error('invalid point');\n else\n return this.point(this.zero, y);\n }\n\n var x = x2.redSqrt();\n if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n if (x.fromRed().isOdd() !== odd)\n x = x.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.validate = function validate(point) {\n if (point.isInfinity())\n return true;\n\n // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)\n point.normalize();\n\n var x2 = point.x.redSqr();\n var y2 = point.y.redSqr();\n var lhs = x2.redMul(this.a).redAdd(y2);\n var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));\n\n return lhs.cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, y, z, t) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && y === null && z === null) {\n this.x = this.curve.zero;\n this.y = this.curve.one;\n this.z = this.curve.one;\n this.t = this.curve.zero;\n this.zOne = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = z ? new BN(z, 16) : this.curve.one;\n this.t = t && new BN(t, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n if (this.t && !this.t.red)\n this.t = this.t.toRed(this.curve.red);\n this.zOne = this.z === this.curve.one;\n\n // Use extended coordinates\n if (this.curve.extended && !this.t) {\n this.t = this.x.redMul(this.y);\n if (!this.zOne)\n this.t = this.t.redMul(this.z.redInvm());\n }\n }\n}\ninherits(Point, Base.BasePoint);\n\nEdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nEdwardsCurve.prototype.point = function point(x, y, z, t) {\n return new Point(this, x, y, z, t);\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1], obj[2]);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.x.cmpn(0) === 0 &&\n (this.y.cmp(this.z) === 0 ||\n (this.zOne && this.y.cmp(this.curve.c) === 0));\n};\n\nPoint.prototype._extDbl = function _extDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #doubling-dbl-2008-hwcd\n // 4M + 4S\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = 2 * Z1^2\n var c = this.z.redSqr();\n c = c.redIAdd(c);\n // D = a * A\n var d = this.curve._mulA(a);\n // E = (X1 + Y1)^2 - A - B\n var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);\n // G = D + B\n var g = d.redAdd(b);\n // F = G - C\n var f = g.redSub(c);\n // H = D - B\n var h = d.redSub(b);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projDbl = function _projDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #doubling-dbl-2008-bbjlp\n // #doubling-dbl-2007-bl\n // and others\n // Generally 3M + 4S or 2M + 4S\n\n // B = (X1 + Y1)^2\n var b = this.x.redAdd(this.y).redSqr();\n // C = X1^2\n var c = this.x.redSqr();\n // D = Y1^2\n var d = this.y.redSqr();\n\n var nx;\n var ny;\n var nz;\n var e;\n var h;\n var j;\n if (this.curve.twisted) {\n // E = a * C\n e = this.curve._mulA(c);\n // F = E + D\n var f = e.redAdd(d);\n if (this.zOne) {\n // X3 = (B - C - D) * (F - 2)\n nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F^2 - 2 * F\n nz = f.redSqr().redSub(f).redSub(f);\n } else {\n // H = Z1^2\n h = this.z.redSqr();\n // J = F - 2 * H\n j = f.redSub(h).redISub(h);\n // X3 = (B-C-D)*J\n nx = b.redSub(c).redISub(d).redMul(j);\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F * J\n nz = f.redMul(j);\n }\n } else {\n // E = C + D\n e = c.redAdd(d);\n // H = (c * Z1)^2\n h = this.curve._mulC(this.z).redSqr();\n // J = E - 2 * H\n j = e.redSub(h).redSub(h);\n // X3 = c * (B - E) * J\n nx = this.curve._mulC(b.redISub(e)).redMul(j);\n // Y3 = c * E * (C - D)\n ny = this.curve._mulC(e).redMul(c.redISub(d));\n // Z3 = E * J\n nz = e.redMul(j);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n // Double in extended coordinates\n if (this.curve.extended)\n return this._extDbl();\n else\n return this._projDbl();\n};\n\nPoint.prototype._extAdd = function _extAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #addition-add-2008-hwcd-3\n // 8M\n\n // A = (Y1 - X1) * (Y2 - X2)\n var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));\n // B = (Y1 + X1) * (Y2 + X2)\n var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));\n // C = T1 * k * T2\n var c = this.t.redMul(this.curve.dd).redMul(p.t);\n // D = Z1 * 2 * Z2\n var d = this.z.redMul(p.z.redAdd(p.z));\n // E = B - A\n var e = b.redSub(a);\n // F = D - C\n var f = d.redSub(c);\n // G = D + C\n var g = d.redAdd(c);\n // H = B + A\n var h = b.redAdd(a);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projAdd = function _projAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #addition-add-2008-bbjlp\n // #addition-add-2007-bl\n // 10M + 1S\n\n // A = Z1 * Z2\n var a = this.z.redMul(p.z);\n // B = A^2\n var b = a.redSqr();\n // C = X1 * X2\n var c = this.x.redMul(p.x);\n // D = Y1 * Y2\n var d = this.y.redMul(p.y);\n // E = d * C * D\n var e = this.curve.d.redMul(c).redMul(d);\n // F = B - E\n var f = b.redSub(e);\n // G = B + E\n var g = b.redAdd(e);\n // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)\n var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);\n var nx = a.redMul(f).redMul(tmp);\n var ny;\n var nz;\n if (this.curve.twisted) {\n // Y3 = A * G * (D - a * C)\n ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));\n // Z3 = F * G\n nz = f.redMul(g);\n } else {\n // Y3 = A * G * (D - C)\n ny = a.redMul(g).redMul(d.redSub(c));\n // Z3 = c * F * G\n nz = this.curve._mulC(f).redMul(g);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.add = function add(p) {\n if (this.isInfinity())\n return p;\n if (p.isInfinity())\n return this;\n\n if (this.curve.extended)\n return this._extAdd(p);\n else\n return this._projAdd(p);\n};\n\nPoint.prototype.mul = function mul(k) {\n if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);\n};\n\nPoint.prototype.normalize = function normalize() {\n if (this.zOne)\n return this;\n\n // Normalize coordinates\n var zi = this.z.redInvm();\n this.x = this.x.redMul(zi);\n this.y = this.y.redMul(zi);\n if (this.t)\n this.t = this.t.redMul(zi);\n this.z = this.curve.one;\n this.zOne = true;\n return this;\n};\n\nPoint.prototype.neg = function neg() {\n return this.curve.point(this.x.redNeg(),\n this.y,\n this.z,\n this.t && this.t.redNeg());\n};\n\nPoint.prototype.getX = function getX() {\n this.normalize();\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n this.normalize();\n return this.y.fromRed();\n};\n\nPoint.prototype.eq = function eq(other) {\n return this === other ||\n this.getX().cmp(other.getX()) === 0 &&\n this.getY().cmp(other.getY()) === 0;\n};\n\nPoint.prototype.eqXToP = function eqXToP(x) {\n var rx = x.toRed(this.curve.red).redMul(this.z);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(this.z);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\n// Compatibility with BaseCurve\nPoint.prototype.toP = Point.prototype.normalize;\nPoint.prototype.mixedAdd = Point.prototype.add;\n","var Buffer = require('safe-buffer').Buffer\nvar ZEROES = Buffer.alloc(16, 0)\n\nfunction toArray (buf) {\n return [\n buf.readUInt32BE(0),\n buf.readUInt32BE(4),\n buf.readUInt32BE(8),\n buf.readUInt32BE(12)\n ]\n}\n\nfunction fromArray (out) {\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0] >>> 0, 0)\n buf.writeUInt32BE(out[1] >>> 0, 4)\n buf.writeUInt32BE(out[2] >>> 0, 8)\n buf.writeUInt32BE(out[3] >>> 0, 12)\n return buf\n}\n\nfunction GHASH (key) {\n this.h = key\n this.state = Buffer.alloc(16, 0)\n this.cache = Buffer.allocUnsafe(0)\n}\n\n// from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html\n// by Juho Vähä-Herttua\nGHASH.prototype.ghash = function (block) {\n var i = -1\n while (++i < block.length) {\n this.state[i] ^= block[i]\n }\n this._multiply()\n}\n\nGHASH.prototype._multiply = function () {\n var Vi = toArray(this.h)\n var Zi = [0, 0, 0, 0]\n var j, xi, lsbVi\n var i = -1\n while (++i < 128) {\n xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0\n if (xi) {\n // Z_i+1 = Z_i ^ V_i\n Zi[0] ^= Vi[0]\n Zi[1] ^= Vi[1]\n Zi[2] ^= Vi[2]\n Zi[3] ^= Vi[3]\n }\n\n // Store the value of LSB(V_i)\n lsbVi = (Vi[3] & 1) !== 0\n\n // V_i+1 = V_i >> 1\n for (j = 3; j > 0; j--) {\n Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31)\n }\n Vi[0] = Vi[0] >>> 1\n\n // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R\n if (lsbVi) {\n Vi[0] = Vi[0] ^ (0xe1 << 24)\n }\n }\n this.state = fromArray(Zi)\n}\n\nGHASH.prototype.update = function (buf) {\n this.cache = Buffer.concat([this.cache, buf])\n var chunk\n while (this.cache.length >= 16) {\n chunk = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n this.ghash(chunk)\n }\n}\n\nGHASH.prototype.final = function (abl, bl) {\n if (this.cache.length) {\n this.ghash(Buffer.concat([this.cache, ZEROES], 16))\n }\n\n this.ghash(fromArray([0, abl, 0, bl]))\n return this.state\n}\n\nmodule.exports = GHASH\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (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}\n","module.exports = {\n doubles: {\n step: 4,\n points: [\n [\n 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',\n 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821',\n ],\n [\n '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',\n '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf',\n ],\n [\n '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',\n 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695',\n ],\n [\n '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',\n '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9',\n ],\n [\n '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',\n '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36',\n ],\n [\n '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',\n '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f',\n ],\n [\n 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',\n '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999',\n ],\n [\n '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',\n 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09',\n ],\n [\n 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',\n '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d',\n ],\n [\n 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',\n 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088',\n ],\n [\n 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',\n '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d',\n ],\n [\n '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',\n '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8',\n ],\n [\n '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',\n '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a',\n ],\n [\n '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',\n '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453',\n ],\n [\n '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',\n '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160',\n ],\n [\n '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',\n '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0',\n ],\n [\n '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',\n '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6',\n ],\n [\n '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',\n '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589',\n ],\n [\n '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',\n 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17',\n ],\n [\n 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',\n '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda',\n ],\n [\n 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',\n '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd',\n ],\n [\n '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',\n '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2',\n ],\n [\n '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',\n '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6',\n ],\n [\n 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',\n '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f',\n ],\n [\n '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',\n 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01',\n ],\n [\n 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',\n '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3',\n ],\n [\n 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',\n 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f',\n ],\n [\n 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',\n '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7',\n ],\n [\n 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',\n 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78',\n ],\n [\n 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',\n '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1',\n ],\n [\n '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',\n 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150',\n ],\n [\n '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',\n '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82',\n ],\n [\n 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',\n '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc',\n ],\n [\n '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',\n 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b',\n ],\n [\n 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',\n '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51',\n ],\n [\n 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',\n '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45',\n ],\n [\n 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',\n 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120',\n ],\n [\n '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',\n '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84',\n ],\n [\n '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',\n '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d',\n ],\n [\n '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',\n 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d',\n ],\n [\n '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',\n '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8',\n ],\n [\n 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',\n '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8',\n ],\n [\n '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',\n '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac',\n ],\n [\n '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',\n 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f',\n ],\n [\n '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',\n '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962',\n ],\n [\n 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',\n '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907',\n ],\n [\n '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',\n 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec',\n ],\n [\n 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',\n 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d',\n ],\n [\n 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',\n '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414',\n ],\n [\n '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',\n 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd',\n ],\n [\n '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',\n 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0',\n ],\n [\n 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',\n '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811',\n ],\n [\n 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',\n '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1',\n ],\n [\n 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',\n '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c',\n ],\n [\n '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',\n 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73',\n ],\n [\n '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',\n '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd',\n ],\n [\n 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',\n 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405',\n ],\n [\n '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',\n 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589',\n ],\n [\n '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',\n '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e',\n ],\n [\n '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',\n '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27',\n ],\n [\n 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',\n 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1',\n ],\n [\n '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',\n '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482',\n ],\n [\n '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',\n '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945',\n ],\n [\n 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',\n '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573',\n ],\n [\n 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',\n 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82',\n ],\n ],\n },\n naf: {\n wnd: 7,\n points: [\n [\n 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',\n '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672',\n ],\n [\n '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',\n 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6',\n ],\n [\n '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',\n '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da',\n ],\n [\n 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',\n 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37',\n ],\n [\n '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',\n 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b',\n ],\n [\n 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',\n 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81',\n ],\n [\n 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',\n '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58',\n ],\n [\n 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',\n '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77',\n ],\n [\n '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',\n '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a',\n ],\n [\n '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',\n '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c',\n ],\n [\n '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',\n '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67',\n ],\n [\n '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',\n '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402',\n ],\n [\n 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',\n 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55',\n ],\n [\n 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',\n '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482',\n ],\n [\n '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',\n 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82',\n ],\n [\n '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',\n 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396',\n ],\n [\n '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',\n '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49',\n ],\n [\n '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',\n '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf',\n ],\n [\n '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',\n '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a',\n ],\n [\n '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',\n 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7',\n ],\n [\n 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',\n 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933',\n ],\n [\n '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',\n '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a',\n ],\n [\n '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',\n '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6',\n ],\n [\n 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',\n 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37',\n ],\n [\n '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',\n '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e',\n ],\n [\n 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',\n 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6',\n ],\n [\n 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',\n 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476',\n ],\n [\n '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',\n '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40',\n ],\n [\n '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',\n '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61',\n ],\n [\n '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',\n '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683',\n ],\n [\n 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',\n '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5',\n ],\n [\n '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',\n '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b',\n ],\n [\n 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',\n '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417',\n ],\n [\n '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',\n 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868',\n ],\n [\n '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',\n 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a',\n ],\n [\n 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',\n 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6',\n ],\n [\n '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',\n '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996',\n ],\n [\n '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',\n 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e',\n ],\n [\n 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',\n 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d',\n ],\n [\n '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',\n '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2',\n ],\n [\n '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',\n 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e',\n ],\n [\n '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',\n '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437',\n ],\n [\n '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',\n 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311',\n ],\n [\n 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',\n '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4',\n ],\n [\n '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',\n '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575',\n ],\n [\n '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',\n 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d',\n ],\n [\n '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',\n 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d',\n ],\n [\n 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',\n 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629',\n ],\n [\n 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',\n 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06',\n ],\n [\n '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',\n '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374',\n ],\n [\n '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',\n '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee',\n ],\n [\n 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',\n '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1',\n ],\n [\n 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',\n 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b',\n ],\n [\n '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',\n '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661',\n ],\n [\n '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',\n '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6',\n ],\n [\n 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',\n '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e',\n ],\n [\n '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',\n '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d',\n ],\n [\n 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',\n 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc',\n ],\n [\n '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',\n 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4',\n ],\n [\n '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',\n '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c',\n ],\n [\n 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',\n '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b',\n ],\n [\n 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',\n '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913',\n ],\n [\n '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',\n '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154',\n ],\n [\n '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',\n '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865',\n ],\n [\n '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',\n 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc',\n ],\n [\n '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',\n 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224',\n ],\n [\n '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',\n '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e',\n ],\n [\n '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',\n '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6',\n ],\n [\n '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',\n '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511',\n ],\n [\n '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',\n 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b',\n ],\n [\n 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',\n 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2',\n ],\n [\n '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',\n 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c',\n ],\n [\n 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',\n '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3',\n ],\n [\n 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',\n '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d',\n ],\n [\n 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',\n '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700',\n ],\n [\n 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',\n '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4',\n ],\n [\n '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',\n 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196',\n ],\n [\n '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',\n '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4',\n ],\n [\n '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',\n 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257',\n ],\n [\n 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',\n 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13',\n ],\n [\n 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',\n '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096',\n ],\n [\n 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',\n 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38',\n ],\n [\n 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',\n '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f',\n ],\n [\n '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',\n '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448',\n ],\n [\n 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',\n '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a',\n ],\n [\n 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',\n '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4',\n ],\n [\n '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',\n '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437',\n ],\n [\n '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',\n 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7',\n ],\n [\n 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',\n '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d',\n ],\n [\n 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',\n '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a',\n ],\n [\n 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',\n '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54',\n ],\n [\n '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',\n '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77',\n ],\n [\n 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',\n 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517',\n ],\n [\n '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',\n 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10',\n ],\n [\n 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',\n 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125',\n ],\n [\n 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',\n '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e',\n ],\n [\n '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',\n 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1',\n ],\n [\n 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',\n '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2',\n ],\n [\n 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',\n '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423',\n ],\n [\n 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',\n '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8',\n ],\n [\n '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',\n 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758',\n ],\n [\n '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',\n 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375',\n ],\n [\n 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',\n '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d',\n ],\n [\n '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',\n 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec',\n ],\n [\n '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',\n '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0',\n ],\n [\n '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',\n 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c',\n ],\n [\n 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',\n 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4',\n ],\n [\n '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',\n 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f',\n ],\n [\n '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',\n '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649',\n ],\n [\n '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',\n 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826',\n ],\n [\n '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',\n '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5',\n ],\n [\n 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',\n 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87',\n ],\n [\n '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',\n '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b',\n ],\n [\n 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',\n '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc',\n ],\n [\n '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',\n '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c',\n ],\n [\n 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',\n 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f',\n ],\n [\n 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',\n '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a',\n ],\n [\n 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',\n 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46',\n ],\n [\n '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',\n 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f',\n ],\n [\n '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',\n '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03',\n ],\n [\n '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',\n 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08',\n ],\n [\n '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',\n '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8',\n ],\n [\n '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',\n '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373',\n ],\n [\n '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',\n 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3',\n ],\n [\n '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',\n '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8',\n ],\n [\n '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',\n '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1',\n ],\n [\n '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',\n '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9',\n ],\n ],\n },\n};\n","// from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js\n// Fedor, you are amazing.\n'use strict'\n\nvar asn1 = require('asn1.js')\n\nexports.certificate = require('./certificate')\n\nvar RSAPrivateKey = asn1.define('RSAPrivateKey', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('modulus').int(),\n this.key('publicExponent').int(),\n this.key('privateExponent').int(),\n this.key('prime1').int(),\n this.key('prime2').int(),\n this.key('exponent1').int(),\n this.key('exponent2').int(),\n this.key('coefficient').int()\n )\n})\nexports.RSAPrivateKey = RSAPrivateKey\n\nvar RSAPublicKey = asn1.define('RSAPublicKey', function () {\n this.seq().obj(\n this.key('modulus').int(),\n this.key('publicExponent').int()\n )\n})\nexports.RSAPublicKey = RSAPublicKey\n\nvar PublicKey = asn1.define('SubjectPublicKeyInfo', function () {\n this.seq().obj(\n this.key('algorithm').use(AlgorithmIdentifier),\n this.key('subjectPublicKey').bitstr()\n )\n})\nexports.PublicKey = PublicKey\n\nvar AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () {\n this.seq().obj(\n this.key('algorithm').objid(),\n this.key('none').null_().optional(),\n this.key('curve').objid().optional(),\n this.key('params').seq().obj(\n this.key('p').int(),\n this.key('q').int(),\n this.key('g').int()\n ).optional()\n )\n})\n\nvar PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('algorithm').use(AlgorithmIdentifier),\n this.key('subjectPrivateKey').octstr()\n )\n})\nexports.PrivateKey = PrivateKeyInfo\nvar EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () {\n this.seq().obj(\n this.key('algorithm').seq().obj(\n this.key('id').objid(),\n this.key('decrypt').seq().obj(\n this.key('kde').seq().obj(\n this.key('id').objid(),\n this.key('kdeparams').seq().obj(\n this.key('salt').octstr(),\n this.key('iters').int()\n )\n ),\n this.key('cipher').seq().obj(\n this.key('algo').objid(),\n this.key('iv').octstr()\n )\n )\n ),\n this.key('subjectPrivateKey').octstr()\n )\n})\n\nexports.EncryptedPrivateKey = EncryptedPrivateKeyInfo\n\nvar DSAPrivateKey = asn1.define('DSAPrivateKey', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('p').int(),\n this.key('q').int(),\n this.key('g').int(),\n this.key('pub_key').int(),\n this.key('priv_key').int()\n )\n})\nexports.DSAPrivateKey = DSAPrivateKey\n\nexports.DSAparam = asn1.define('DSAparam', function () {\n this.int()\n})\n\nvar ECPrivateKey = asn1.define('ECPrivateKey', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('privateKey').octstr(),\n this.key('parameters').optional().explicit(0).use(ECParameters),\n this.key('publicKey').optional().explicit(1).bitstr()\n )\n})\nexports.ECPrivateKey = ECPrivateKey\n\nvar ECParameters = asn1.define('ECParameters', function () {\n this.choice({\n namedCurve: this.objid()\n })\n})\n\nexports.signature = asn1.define('signature', function () {\n this.seq().obj(\n this.key('r').int(),\n this.key('s').int()\n )\n})\n","'use strict';\n\nvar curve = exports;\n\ncurve.base = require('./base');\ncurve.short = require('./short');\ncurve.mont = require('./mont');\ncurve.edwards = require('./edwards');\n","'use strict';\n\nvar _Object$setPrototypeO;\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar finished = require('./end-of-stream');\n\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\n\nfunction createIterResult(value, done) {\n return {\n value: value,\n done: done\n };\n}\n\nfunction readAndResolve(iter) {\n var resolve = iter[kLastResolve];\n\n if (resolve !== null) {\n var data = iter[kStream].read(); // we defer if data is null\n // we can be expecting either 'end' or\n // 'error'\n\n if (data !== null) {\n iter[kLastPromise] = null;\n iter[kLastResolve] = null;\n iter[kLastReject] = null;\n resolve(createIterResult(data, false));\n }\n }\n}\n\nfunction onReadable(iter) {\n // we wait for the next tick, because it might\n // emit an error with process.nextTick\n process.nextTick(readAndResolve, iter);\n}\n\nfunction wrapForNext(lastPromise, iter) {\n return function (resolve, reject) {\n lastPromise.then(function () {\n if (iter[kEnded]) {\n resolve(createIterResult(undefined, true));\n return;\n }\n\n iter[kHandlePromise](resolve, reject);\n }, reject);\n };\n}\n\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n get stream() {\n return this[kStream];\n },\n\n next: function next() {\n var _this = this;\n\n // if we have detected an error in the meanwhile\n // reject straight away\n var error = this[kError];\n\n if (error !== null) {\n return Promise.reject(error);\n }\n\n if (this[kEnded]) {\n return Promise.resolve(createIterResult(undefined, true));\n }\n\n if (this[kStream].destroyed) {\n // We need to defer via nextTick because if .destroy(err) is\n // called, the error will be emitted via nextTick, and\n // we cannot guarantee that there is no error lingering around\n // waiting to be emitted.\n return new Promise(function (resolve, reject) {\n process.nextTick(function () {\n if (_this[kError]) {\n reject(_this[kError]);\n } else {\n resolve(createIterResult(undefined, true));\n }\n });\n });\n } // if we have multiple next() calls\n // we will wait for the previous Promise to finish\n // this logic is optimized to support for await loops,\n // where next() is only called once at a time\n\n\n var lastPromise = this[kLastPromise];\n var promise;\n\n if (lastPromise) {\n promise = new Promise(wrapForNext(lastPromise, this));\n } else {\n // fast path needed to support multiple this.push()\n // without triggering the next() queue\n var data = this[kStream].read();\n\n if (data !== null) {\n return Promise.resolve(createIterResult(data, false));\n }\n\n promise = new Promise(this[kHandlePromise]);\n }\n\n this[kLastPromise] = promise;\n return promise;\n }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n var _this2 = this;\n\n // destroy(err, cb) is a private API\n // we can guarantee we have that here, because we control the\n // Readable class this is attached to\n return new Promise(function (resolve, reject) {\n _this2[kStream].destroy(null, function (err) {\n if (err) {\n reject(err);\n return;\n }\n\n resolve(createIterResult(undefined, true));\n });\n });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\n\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n var _Object$create;\n\n var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n value: stream,\n writable: true\n }), _defineProperty(_Object$create, kLastResolve, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kLastReject, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kError, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kEnded, {\n value: stream._readableState.endEmitted,\n writable: true\n }), _defineProperty(_Object$create, kHandlePromise, {\n value: function value(resolve, reject) {\n var data = iterator[kStream].read();\n\n if (data) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(data, false));\n } else {\n iterator[kLastResolve] = resolve;\n iterator[kLastReject] = reject;\n }\n },\n writable: true\n }), _Object$create));\n iterator[kLastPromise] = null;\n finished(stream, function (err) {\n if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n var reject = iterator[kLastReject]; // reject if we are waiting for data in the Promise\n // returned by next() and store the error\n\n if (reject !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n reject(err);\n }\n\n iterator[kError] = err;\n return;\n }\n\n var resolve = iterator[kLastResolve];\n\n if (resolve !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(undefined, true));\n }\n\n iterator[kEnded] = true;\n });\n stream.on('readable', onReadable.bind(null, iterator));\n return iterator;\n};\n\nmodule.exports = createReadableStreamAsyncIterator;","'use strict';\n\nconst base = exports;\n\nbase.Reporter = require('./reporter').Reporter;\nbase.DecoderBuffer = require('./buffer').DecoderBuffer;\nbase.EncoderBuffer = require('./buffer').EncoderBuffer;\nbase.Node = require('./node');\n","var AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar MODES = require('./modes')\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Decipher (mode, key, iv) {\n Transform.call(this)\n\n this._cache = new Splitter()\n this._last = void 0\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._mode = mode\n this._autopadding = true\n}\n\ninherits(Decipher, Transform)\n\nDecipher.prototype._update = function (data) {\n this._cache.add(data)\n var chunk\n var thing\n var out = []\n while ((chunk = this._cache.get(this._autopadding))) {\n thing = this._mode.decrypt(this, chunk)\n out.push(thing)\n }\n return Buffer.concat(out)\n}\n\nDecipher.prototype._final = function () {\n var chunk = this._cache.flush()\n if (this._autopadding) {\n return unpad(this._mode.decrypt(this, chunk))\n } else if (chunk) {\n throw new Error('data not multiple of block length')\n }\n}\n\nDecipher.prototype.setAutoPadding = function (setTo) {\n this._autopadding = !!setTo\n return this\n}\n\nfunction Splitter () {\n this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function (autoPadding) {\n var out\n if (autoPadding) {\n if (this.cache.length > 16) {\n out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n } else {\n if (this.cache.length >= 16) {\n out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n }\n\n return null\n}\n\nSplitter.prototype.flush = function () {\n if (this.cache.length) return this.cache\n}\n\nfunction unpad (last) {\n var padded = last[15]\n if (padded < 1 || padded > 16) {\n throw new Error('unable to decrypt data')\n }\n var i = -1\n while (++i < padded) {\n if (last[(i + (16 - padded))] !== padded) {\n throw new Error('unable to decrypt data')\n }\n }\n if (padded === 16) return\n\n return last.slice(0, 16 - padded)\n}\n\nfunction createDecipheriv (suite, password, iv) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n if (typeof iv === 'string') iv = Buffer.from(iv)\n if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n if (typeof password === 'string') password = Buffer.from(password)\n if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n if (config.type === 'stream') {\n return new StreamCipher(config.module, password, iv, true)\n } else if (config.type === 'auth') {\n return new AuthCipher(config.module, password, iv, true)\n }\n\n return new Decipher(config.module, password, iv)\n}\n\nfunction createDecipher (suite, password) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n var keys = ebtk(password, false, config.key, config.iv)\n return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createDecipher = createDecipher\nexports.createDecipheriv = createDecipheriv\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n'use strict';\n\nmodule.exports = Readable;\n/**/\n\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n/**/\n\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\n\n\nvar Stream = require('./internal/streams/stream');\n/**/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n/**/\n\n\nvar debugUtil = require('util');\n\nvar debug;\n\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function debug() {};\n}\n/**/\n\n\nvar BufferList = require('./internal/streams/buffer_list');\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; // Lazy loaded to improve the startup performance.\n\n\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\n\nrequire('inherits')(Readable, Stream);\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n\n this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n\n this.sync = true; // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n this.paused = true; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'end' (and potentially 'finish')\n\n this.autoDestroy = !!options.autoDestroy; // has it been destroyed\n\n this.destroyed = false; // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s\n\n this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled\n\n this.readingMore = false;\n this.decoder = null;\n this.encoding = null;\n\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n if (!(this instanceof Readable)) return new Readable(options); // Checking for a Stream.Duplex instance is faster here instead of inside\n // the ReadableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n this._readableState = new ReadableState(options, this, isDuplex); // legacy\n\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\n\nReadable.prototype._destroy = function (err, cb) {\n cb(err);\n}; // Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\n\n\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n}; // Unshift should *always* be something directly out of read()\n\n\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n debug('readableAddChunk', chunk);\n var state = stream._readableState;\n\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n\n if (er) {\n errorOrDestroy(stream, er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n } else if (state.destroyed) {\n return false;\n } else {\n state.reading = false;\n\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n maybeReadMore(stream, state);\n }\n } // We can push more data if we are below the highWaterMark.\n // Also, if we have no data yet, we can stand some more bytes.\n // This is to work around cases where hwm=0, such as the repl.\n\n\n return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n state.awaitDrain = 0;\n stream.emit('data', chunk);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n if (state.needReadable) emitReadable(stream);\n }\n\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n }\n\n return er;\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n}; // backwards compatibility.\n\n\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n var decoder = new StringDecoder(enc);\n this._readableState.decoder = decoder; // If setEncoding(null), decoder.encoding equals utf8\n\n this._readableState.encoding = this._readableState.decoder.encoding; // Iterate over current buffer to convert already stored Buffers:\n\n var p = this._readableState.buffer.head;\n var content = '';\n\n while (p !== null) {\n content += decoder.write(p.data);\n p = p.next;\n }\n\n this._readableState.buffer.clear();\n\n if (content !== '') this._readableState.buffer.push(content);\n this._readableState.length = content.length;\n return this;\n}; // Don't raise the hwm > 1GB\n\n\nvar MAX_HWM = 0x40000000;\n\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n\n return n;\n} // This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\n\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n } // If we're asking for more than the current hwm, then raise the hwm.\n\n\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n; // Don't have enough\n\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n\n return state.length;\n} // you can override either this method, or the async _read(n) below.\n\n\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n\n if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up.\n\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n } // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n // if we need a readable event, then we need to do some reading.\n\n\n var doRead = state.needReadable;\n debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some\n\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n } // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n\n\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true; // if the length is currently zero, then we *need* a readable event.\n\n if (state.length === 0) state.needReadable = true; // call internal read method\n\n this._read(state.highWaterMark);\n\n state.sync = false; // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = state.length <= state.highWaterMark;\n n = 0;\n } else {\n state.length -= n;\n state.awaitDrain = 0;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick.\n\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n debug('onEofChunk');\n if (state.ended) return;\n\n if (state.decoder) {\n var chunk = state.decoder.end();\n\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n\n state.ended = true;\n\n if (state.sync) {\n // if we are sync, wait until next tick to emit the data.\n // Otherwise we risk emitting data in the flow()\n // the readable code triggers during a read() call\n emitReadable(stream);\n } else {\n // emit 'readable' now to make sure it gets picked up.\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n state.emittedReadable = true;\n emitReadable_(stream);\n }\n }\n} // Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\n\n\nfunction emitReadable(stream) {\n var state = stream._readableState;\n debug('emitReadable', state.needReadable, state.emittedReadable);\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n process.nextTick(emitReadable_, stream);\n }\n}\n\nfunction emitReadable_(stream) {\n var state = stream._readableState;\n debug('emitReadable_', state.destroyed, state.length, state.ended);\n\n if (!state.destroyed && (state.length || state.ended)) {\n stream.emit('readable');\n state.emittedReadable = false;\n } // The stream needs another readable event if\n // 1. It is not flowing, as the flow mechanism will take\n // care of it.\n // 2. It is not ended.\n // 3. It is below the highWaterMark, so we can schedule\n // another readable later.\n\n\n state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n flow(stream);\n} // at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\n\n\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n process.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n // Attempt to read more data if we should.\n //\n // The conditions for reading more data are (one of):\n // - Not enough data buffered (state.length < state.highWaterMark). The loop\n // is responsible for filling the buffer with enough data if such data\n // is available. If highWaterMark is 0 and we are not in the flowing mode\n // we should _not_ attempt to buffer any extra data. We'll get more data\n // when the stream consumer calls read() instead.\n // - No data in the buffer, and the stream is in flowing mode. In this mode\n // the loop below is responsible for ensuring read() is called. Failing to\n // call read here would abort the flow and there's no other mechanism for\n // continuing the flow if the stream consumer has just subscribed to the\n // 'data' event.\n //\n // In addition to the above conditions to keep reading data, the following\n // conditions prevent the data from being read:\n // - The stream has ended (state.ended).\n // - There is already a pending 'read' operation (state.reading). This is a\n // case where the the stream has called the implementation defined _read()\n // method, but they are processing the call asynchronously and have _not_\n // called push() with new data. In this case we skip performing more\n // read()s. The execution ends in this method again after the _read() ends\n // up calling push() with more data.\n while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n var len = state.length;\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length) // didn't get any data, stop spinning.\n break;\n }\n\n state.readingMore = false;\n} // abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\n\n\nReadable.prototype._read = function (n) {\n errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n\n default:\n state.pipes.push(dest);\n break;\n }\n\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n dest.on('unpipe', onunpipe);\n\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n } // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n\n\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n var cleanedUp = false;\n\n function cleanup() {\n debug('cleanup'); // cleanup event handlers once the pipe is broken\n\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n cleanedUp = true; // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n src.on('data', ondata);\n\n function ondata(chunk) {\n debug('ondata');\n var ret = dest.write(chunk);\n debug('dest.write', ret);\n\n if (ret === false) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', state.awaitDrain);\n state.awaitDrain++;\n }\n\n src.pause();\n }\n } // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n\n\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n } // Make sure our error handler is attached before userland ones.\n\n\n prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once.\n\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n\n dest.once('close', onclose);\n\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n } // tell the dest that it's being piped to\n\n\n dest.emit('pipe', src); // start the flow if it hasn't been started already.\n\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function pipeOnDrainFunctionResult() {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = {\n hasUnpiped: false\n }; // if we're not piping anywhere, then do nothing.\n\n if (state.pipesCount === 0) return this; // just one destination. most common case.\n\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n if (!dest) dest = state.pipes; // got a match.\n\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n } // slow case. multiple pipe destinations.\n\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, {\n hasUnpiped: false\n });\n }\n\n return this;\n } // try to find the right one.\n\n\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n dest.emit('unpipe', this, unpipeInfo);\n return this;\n}; // set up data events if they are asked for\n// Ensure readable listeners eventually get something\n\n\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n var state = this._readableState;\n\n if (ev === 'data') {\n // update readableListening so that resume() may be a no-op\n // a few lines down. This is needed to support once('readable').\n state.readableListening = this.listenerCount('readable') > 0; // Try start flowing on next tick if stream isn't explicitly paused\n\n if (state.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.flowing = false;\n state.emittedReadable = false;\n debug('on readable', state.length, state.reading);\n\n if (state.length) {\n emitReadable(this);\n } else if (!state.reading) {\n process.nextTick(nReadingNextTick, this);\n }\n }\n }\n\n return res;\n};\n\nReadable.prototype.addListener = Readable.prototype.on;\n\nReadable.prototype.removeListener = function (ev, fn) {\n var res = Stream.prototype.removeListener.call(this, ev, fn);\n\n if (ev === 'readable') {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nReadable.prototype.removeAllListeners = function (ev) {\n var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n\n if (ev === 'readable' || ev === undefined) {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nfunction updateReadableListening(self) {\n var state = self._readableState;\n state.readableListening = self.listenerCount('readable') > 0;\n\n if (state.resumeScheduled && !state.paused) {\n // flowing needs to be set to true now, otherwise\n // the upcoming resume will not flow.\n state.flowing = true; // crude way to check if we should resume\n } else if (self.listenerCount('data') > 0) {\n self.resume();\n }\n}\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n} // pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\n\n\nReadable.prototype.resume = function () {\n var state = this._readableState;\n\n if (!state.flowing) {\n debug('resume'); // we flow only if there is no one listening\n // for readable, but we still have to call\n // resume()\n\n state.flowing = !state.readableListening;\n resume(this, state);\n }\n\n state.paused = false;\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n process.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n debug('resume', state.reading);\n\n if (!state.reading) {\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n\n if (this._readableState.flowing !== false) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n\n this._readableState.paused = true;\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n\n while (state.flowing && stream.read() !== null) {\n ;\n }\n} // wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\n\n\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n stream.on('end', function () {\n debug('wrapped end');\n\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode\n\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n\n if (!ret) {\n paused = true;\n stream.pause();\n }\n }); // proxy all the other methods.\n // important when wrapping filters and duplexes.\n\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function methodWrap(method) {\n return function methodWrapReturnFunction() {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n } // proxy certain important events.\n\n\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n } // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n\n\n this._read = function (n) {\n debug('wrapped _read', n);\n\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nif (typeof Symbol === 'function') {\n Readable.prototype[Symbol.asyncIterator] = function () {\n if (createReadableStreamAsyncIterator === undefined) {\n createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n }\n\n return createReadableStreamAsyncIterator(this);\n };\n}\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.highWaterMark;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState && this._readableState.buffer;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.flowing;\n },\n set: function set(state) {\n if (this._readableState) {\n this._readableState.flowing = state;\n }\n }\n}); // exposed for testing purposes only.\n\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.length;\n }\n}); // Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = state.buffer.consume(n, state.decoder);\n }\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n debug('endReadable', state.endEmitted);\n\n if (!state.endEmitted) {\n state.ended = true;\n process.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n debug('endReadableNT', state.endEmitted, state.length); // Check that we didn't get one last unshift.\n\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the writable side is ready for autoDestroy as well\n var wState = stream._writableState;\n\n if (!wState || wState.autoDestroy && wState.finished) {\n stream.destroy();\n }\n }\n }\n}\n\nif (typeof Symbol === 'function') {\n Readable.from = function (iterable, opts) {\n if (from === undefined) {\n from = require('./internal/streams/from');\n }\n\n return from(Readable, iterable, opts);\n };\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n\n return -1;\n}","module.exports = require('events').EventEmitter;\n","// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n callback.apply(this, args);\n };\n}\n\nfunction noop() {}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction eos(stream, opts, callback) {\n if (typeof opts === 'function') return eos(stream, null, opts);\n if (!opts) opts = {};\n callback = once(callback || noop);\n var readable = opts.readable || opts.readable !== false && stream.readable;\n var writable = opts.writable || opts.writable !== false && stream.writable;\n\n var onlegacyfinish = function onlegacyfinish() {\n if (!stream.writable) onfinish();\n };\n\n var writableEnded = stream._writableState && stream._writableState.finished;\n\n var onfinish = function onfinish() {\n writable = false;\n writableEnded = true;\n if (!readable) callback.call(stream);\n };\n\n var readableEnded = stream._readableState && stream._readableState.endEmitted;\n\n var onend = function onend() {\n readable = false;\n readableEnded = true;\n if (!writable) callback.call(stream);\n };\n\n var onerror = function onerror(err) {\n callback.call(stream, err);\n };\n\n var onclose = function onclose() {\n var err;\n\n if (readable && !readableEnded) {\n if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n\n if (writable && !writableEnded) {\n if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n };\n\n var onrequest = function onrequest() {\n stream.req.on('finish', onfinish);\n };\n\n if (isRequest(stream)) {\n stream.on('complete', onfinish);\n stream.on('abort', onclose);\n if (stream.req) onrequest();else stream.on('request', onrequest);\n } else if (writable && !stream._writableState) {\n // legacy streams\n stream.on('end', onlegacyfinish);\n stream.on('close', onlegacyfinish);\n }\n\n stream.on('end', onend);\n stream.on('finish', onfinish);\n if (opts.error !== false) stream.on('error', onerror);\n stream.on('close', onclose);\n return function () {\n stream.removeListener('complete', onfinish);\n stream.removeListener('abort', onclose);\n stream.removeListener('request', onrequest);\n if (stream.req) stream.req.removeListener('finish', onfinish);\n stream.removeListener('end', onlegacyfinish);\n stream.removeListener('close', onlegacyfinish);\n stream.removeListener('finish', onfinish);\n stream.removeListener('end', onend);\n stream.removeListener('error', onerror);\n stream.removeListener('close', onclose);\n };\n}\n\nmodule.exports = eos;","import { ConsoleLogger as Logger } from './Logger';\nvar logger = new Logger('Parser');\nexport var parseMobileHubConfig = function (config) {\n var amplifyConfig = {};\n // Analytics\n if (config['aws_mobile_analytics_app_id']) {\n var Analytics = {\n AWSPinpoint: {\n appId: config['aws_mobile_analytics_app_id'],\n region: config['aws_mobile_analytics_app_region'],\n },\n };\n amplifyConfig.Analytics = Analytics;\n }\n // Auth\n if (config['aws_cognito_identity_pool_id'] || config['aws_user_pools_id']) {\n amplifyConfig.Auth = {\n userPoolId: config['aws_user_pools_id'],\n userPoolWebClientId: config['aws_user_pools_web_client_id'],\n region: config['aws_cognito_region'],\n identityPoolId: config['aws_cognito_identity_pool_id'],\n identityPoolRegion: config['aws_cognito_region'],\n mandatorySignIn: config['aws_mandatory_sign_in'] === 'enable',\n };\n }\n // Storage\n var storageConfig;\n if (config['aws_user_files_s3_bucket']) {\n storageConfig = {\n AWSS3: {\n bucket: config['aws_user_files_s3_bucket'],\n region: config['aws_user_files_s3_bucket_region'],\n dangerouslyConnectToHttpEndpointForTesting: config['aws_user_files_s3_dangerously_connect_to_http_endpoint_for_testing'],\n },\n };\n }\n else {\n storageConfig = config ? config.Storage || config : {};\n }\n amplifyConfig.Analytics = Object.assign({}, amplifyConfig.Analytics, config.Analytics);\n amplifyConfig.Auth = Object.assign({}, amplifyConfig.Auth, config.Auth);\n amplifyConfig.Storage = Object.assign({}, storageConfig);\n logger.debug('parse config', config, 'to amplifyconfig', amplifyConfig);\n return amplifyConfig;\n};\n/**\n * @deprecated use per-function export\n */\nvar Parser = /** @class */ (function () {\n function Parser() {\n }\n Parser.parseMobilehubConfig = parseMobileHubConfig;\n return Parser;\n}());\nexport { Parser };\n/**\n * @deprecated use per-function export\n */\nexport default Parser;\n//# sourceMappingURL=Parser.js.map","/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n * http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __spread = (this && this.__spread) || function () {\n for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\n return ar;\n};\nimport { ConsoleLogger as Logger } from './Logger';\nvar logger = new Logger('Hub');\nvar AMPLIFY_SYMBOL = (typeof Symbol !== 'undefined' &&\n typeof Symbol.for === 'function'\n ? Symbol.for('amplify_default')\n : '@@amplify_default');\nfunction isLegacyCallback(callback) {\n return callback.onHubCapsule !== undefined;\n}\nvar HubClass = /** @class */ (function () {\n function HubClass(name) {\n this.listeners = [];\n this.patterns = [];\n this.protectedChannels = [\n 'core',\n 'auth',\n 'api',\n 'analytics',\n 'interactions',\n 'pubsub',\n 'storage',\n 'xr',\n ];\n this.name = name;\n }\n // Note - Need to pass channel as a reference for removal to work and not anonymous function\n HubClass.prototype.remove = function (channel, listener) {\n if (channel instanceof RegExp) {\n var pattern_1 = this.patterns.find(function (_a) {\n var pattern = _a.pattern;\n return pattern.source === channel.source;\n });\n if (!pattern_1) {\n logger.warn(\"No listeners for \" + channel);\n return;\n }\n this.patterns = __spread(this.patterns.filter(function (x) { return x !== pattern_1; }));\n }\n else {\n var holder = this.listeners[channel];\n if (!holder) {\n logger.warn(\"No listeners for \" + channel);\n return;\n }\n this.listeners[channel] = __spread(holder.filter(function (_a) {\n var callback = _a.callback;\n return callback !== listener;\n }));\n }\n };\n HubClass.prototype.dispatch = function (channel, payload, source, ampSymbol) {\n if (source === void 0) { source = ''; }\n if (this.protectedChannels.indexOf(channel) > -1) {\n var hasAccess = ampSymbol === AMPLIFY_SYMBOL;\n if (!hasAccess) {\n logger.warn(\"WARNING: \" + channel + \" is protected and dispatching on it can have unintended consequences\");\n }\n }\n var capsule = {\n channel: channel,\n payload: __assign({}, payload),\n source: source,\n patternInfo: [],\n };\n try {\n this._toListeners(capsule);\n }\n catch (e) {\n logger.error(e);\n }\n };\n HubClass.prototype.listen = function (channel, callback, listenerName) {\n var _this = this;\n if (listenerName === void 0) { listenerName = 'noname'; }\n var cb;\n // Check for legacy onHubCapsule callback for backwards compatability\n if (isLegacyCallback(callback)) {\n logger.warn(\"WARNING onHubCapsule is Deprecated. Please pass in a callback.\");\n cb = callback.onHubCapsule.bind(callback);\n }\n else if (typeof callback !== 'function') {\n throw new Error('No callback supplied to Hub');\n }\n else {\n cb = callback;\n }\n if (channel instanceof RegExp) {\n this.patterns.push({\n pattern: channel,\n callback: cb,\n });\n }\n else {\n var holder = this.listeners[channel];\n if (!holder) {\n holder = [];\n this.listeners[channel] = holder;\n }\n holder.push({\n name: listenerName,\n callback: cb,\n });\n }\n return function () {\n _this.remove(channel, cb);\n };\n };\n HubClass.prototype._toListeners = function (capsule) {\n var channel = capsule.channel, payload = capsule.payload;\n var holder = this.listeners[channel];\n if (holder) {\n holder.forEach(function (listener) {\n logger.debug(\"Dispatching to \" + channel + \" with \", payload);\n try {\n listener.callback(capsule);\n }\n catch (e) {\n logger.error(e);\n }\n });\n }\n if (this.patterns.length > 0) {\n if (!payload.message) {\n logger.warn(\"Cannot perform pattern matching without a message key\");\n return;\n }\n var payloadStr_1 = payload.message;\n this.patterns.forEach(function (pattern) {\n var match = payloadStr_1.match(pattern.pattern);\n if (match) {\n var _a = __read(match), groups = _a.slice(1);\n var dispatchingCapsule = __assign(__assign({}, capsule), { patternInfo: groups });\n try {\n pattern.callback(dispatchingCapsule);\n }\n catch (e) {\n logger.error(e);\n }\n }\n });\n }\n };\n return HubClass;\n}());\nexport { HubClass };\n/*We export a __default__ instance of HubClass to use it as a\npsuedo Singleton for the main messaging bus, however you can still create\nyour own instance of HubClass() for a separate \"private bus\" of events.*/\nexport var Hub = new HubClass('__default__');\n/**\n * @deprecated use named import\n */\nexport default Hub;\n//# sourceMappingURL=Hub.js.map","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar cachedProperty = utils.cachedProperty;\nvar parseBytes = utils.parseBytes;\n\n/**\n* @param {EDDSA} eddsa - eddsa instance\n* @param {Array|Object} sig -\n* @param {Array|Point} [sig.R] - R point as Point or bytes\n* @param {Array|bn} [sig.S] - S scalar as bn or bytes\n* @param {Array} [sig.Rencoded] - R point encoded\n* @param {Array} [sig.Sencoded] - S scalar encoded\n*/\nfunction Signature(eddsa, sig) {\n this.eddsa = eddsa;\n\n if (typeof sig !== 'object')\n sig = parseBytes(sig);\n\n if (Array.isArray(sig)) {\n sig = {\n R: sig.slice(0, eddsa.encodingLength),\n S: sig.slice(eddsa.encodingLength),\n };\n }\n\n assert(sig.R && sig.S, 'Signature without R or S');\n\n if (eddsa.isPoint(sig.R))\n this._R = sig.R;\n if (sig.S instanceof BN)\n this._S = sig.S;\n\n this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;\n this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;\n}\n\ncachedProperty(Signature, 'S', function S() {\n return this.eddsa.decodeInt(this.Sencoded());\n});\n\ncachedProperty(Signature, 'R', function R() {\n return this.eddsa.decodePoint(this.Rencoded());\n});\n\ncachedProperty(Signature, 'Rencoded', function Rencoded() {\n return this.eddsa.encodePoint(this.R());\n});\n\ncachedProperty(Signature, 'Sencoded', function Sencoded() {\n return this.eddsa.encodeInt(this.S());\n});\n\nSignature.prototype.toBytes = function toBytes() {\n return this.Rencoded().concat(this.Sencoded());\n};\n\nSignature.prototype.toHex = function toHex() {\n return utils.encode(this.toBytes(), 'hex').toUpperCase();\n};\n\nmodule.exports = Signature;\n","'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err && (!this._writableState || !this._writableState.errorEmitted)) {\n pna.nextTick(emitErrorNT, this, err);\n }\n return this;\n }\n\n // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n }\n\n // if this is a duplex stream mark the writable part as destroyed as well\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n pna.nextTick(emitErrorNT, _this, err);\n if (_this._writableState) {\n _this._writableState.errorEmitted = true;\n }\n } else if (cb) {\n cb(err);\n }\n });\n\n return this;\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy\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 Buffer = require('buffer').Buffer;\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 }\n\n if (base === 16) {\n this._parseHex(number, start);\n } else {\n this._parseBase(number, base, start);\n }\n\n if (number[0] === '-') {\n this.negative = 1;\n }\n\n this.strip();\n\n if (endian !== 'le') return;\n\n this._initArray(this.toArray(), base, endian);\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 parseHex (str, start, end) {\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 <<= 4;\n\n // 'a' - 'f'\n if (c >= 49 && c <= 54) {\n r |= c - 49 + 0xa;\n\n // 'A' - 'F'\n } else if (c >= 17 && c <= 22) {\n r |= c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r |= c & 0xf;\n }\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start) {\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 var j, w;\n // Scan 24-bit chunks and add them to the number\n var off = 0;\n for (i = number.length - 6, j = 0; i >= start; i -= 6) {\n w = parseHex(number, i, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n if (i + 6 !== start) {\n w = parseHex(number, start, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\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\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","'use strict'; // undocumented cb() API, needed for core, not for public API\n\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err) {\n if (!this._writableState) {\n process.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n process.nextTick(emitErrorNT, this, err);\n }\n }\n\n return this;\n } // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n } // if this is a duplex stream mark the writable part as destroyed as well\n\n\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n } else if (cb) {\n process.nextTick(emitCloseNT, _this);\n cb(err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n });\n\n return this;\n}\n\nfunction emitErrorAndCloseNT(self, err) {\n emitErrorNT(self, err);\n emitCloseNT(self);\n}\n\nfunction emitCloseNT(self) {\n if (self._writableState && !self._writableState.emitClose) return;\n if (self._readableState && !self._readableState.emitClose) return;\n self.emit('close');\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finalCalled = false;\n this._writableState.prefinished = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nfunction errorOrDestroy(stream, err) {\n // We have tests that rely on errors being emitted\n // in the same tick, so changing this is semver major.\n // For now when you opt-in to autoDestroy we allow\n // the error to be emitted nextTick. In a future\n // semver major update we should change the default to this.\n var rState = stream._readableState;\n var wState = stream._writableState;\n if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy,\n errorOrDestroy: errorOrDestroy\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n'use strict';\n\nmodule.exports = Writable;\n/* */\n\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n} // It seems a linked list but it is not\n// there will be only 2 of these for each stream\n\n\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* */\n\n/**/\n\n\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n/**/\n\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/**/\n\n/**/\n\nvar Stream = require('./internal/streams/stream');\n/**/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\n\nrequire('inherits')(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream,\n // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n\n this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); // if _final has been called\n\n this.finalCalled = false; // drain event flag.\n\n this.needDrain = false; // at the start of calling end()\n\n this.ending = false; // when end() has been called, and returned\n\n this.ended = false; // when 'finish' is emitted\n\n this.finished = false; // has it been destroyed\n\n this.destroyed = false; // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode; // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n\n this.length = 0; // a flag to see when we're in the middle of a write.\n\n this.writing = false; // when true all writes will be buffered until .uncork() call\n\n this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n\n this.sync = true; // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n\n this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb)\n\n this.onwrite = function (er) {\n onwrite(stream, er);\n }; // the callback that the user supplies to write(chunk,encoding,cb)\n\n\n this.writecb = null; // the amount that is being written when _write is called.\n\n this.writelen = 0;\n this.bufferedRequest = null;\n this.lastBufferedRequest = null; // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n\n this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n\n this.prefinished = false; // True if the error was already emitted and should not be thrown again\n\n this.errorEmitted = false; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'finish' (and potentially 'end')\n\n this.autoDestroy = !!options.autoDestroy; // count buffered requests\n\n this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n\n while (current) {\n out.push(current);\n current = current.next;\n }\n\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function writableStateBufferGetter() {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})(); // Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\n\n\nvar realHasInstance;\n\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function value(object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function realHasInstance(object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex'); // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the WritableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n this._writableState = new WritableState(options, this, isDuplex); // legacy.\n\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n if (typeof options.writev === 'function') this._writev = options.writev;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n} // Otherwise people can pipe Writable streams, which is just wrong.\n\n\nWritable.prototype.pipe = function () {\n errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new ERR_STREAM_WRITE_AFTER_END(); // TODO: defer error events consistently everywhere, not just the cb\n\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n} // Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\n\n\nfunction validChunk(stream, state, chunk, cb) {\n var er;\n\n if (chunk === null) {\n er = new ERR_STREAM_NULL_VALUES();\n } else if (typeof chunk !== 'string' && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n }\n\n if (er) {\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n return false;\n }\n\n return true;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n if (typeof cb !== 'function') cb = nop;\n if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n return ret;\n};\n\nWritable.prototype.cork = function () {\n this._writableState.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n}); // if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\n\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n\n var len = state.objectMode ? 1 : chunk.length;\n state.length += len;\n var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false.\n\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n process.nextTick(cb, er); // this can emit finish, and it will always happen\n // after error\n\n process.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er); // this can emit finish, but finish must\n // always follow error\n\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n onwriteStateUpdate(state);\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state) || stream.destroyed;\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n process.nextTick(afterWrite, stream, state, finished, cb);\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n} // Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\n\n\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n} // if there's something in the buffer waiting, then process it\n\n\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n var count = 0;\n var allBuffers = true;\n\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n\n buffer.allBuffers = allBuffers;\n doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n\n state.pendingcb++;\n state.lastBufferedRequest = null;\n\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks\n\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n } // ignore unnecessary end() calls.\n\n\n if (!state.ending) endWritable(this, state, cb);\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\n\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n\n if (err) {\n errorOrDestroy(stream, err);\n }\n\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\n\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function' && !state.destroyed) {\n state.pendingcb++;\n state.finalCalled = true;\n process.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n\n if (need) {\n prefinish(stream, state);\n\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the readable side is ready for autoDestroy as well\n var rState = stream._readableState;\n\n if (!rState || rState.autoDestroy && rState.endEmitted) {\n stream.destroy();\n }\n }\n }\n }\n\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n\n if (cb) {\n if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n }\n\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n } // reuse the free corkReq.\n\n\n state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._writableState === undefined) {\n return false;\n }\n\n return this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._writableState.destroyed = value;\n }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\n\nWritable.prototype._destroy = function (err, cb) {\n cb(err);\n};","/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n * http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @class */\nvar AuthenticationDetails = /*#__PURE__*/function () {\n /**\n * Constructs a new AuthenticationDetails object\n * @param {object=} data Creation options.\n * @param {string} data.Username User being authenticated.\n * @param {string} data.Password Plain-text password to authenticate with.\n * @param {(AttributeArg[])?} data.ValidationData Application extra metadata.\n * @param {(AttributeArg[])?} data.AuthParamaters Authentication paramaters for custom auth.\n */\n function AuthenticationDetails(data) {\n var _ref = data || {},\n ValidationData = _ref.ValidationData,\n Username = _ref.Username,\n Password = _ref.Password,\n AuthParameters = _ref.AuthParameters,\n ClientMetadata = _ref.ClientMetadata;\n\n this.validationData = ValidationData || {};\n this.authParameters = AuthParameters || {};\n this.clientMetadata = ClientMetadata || {};\n this.username = Username;\n this.password = Password;\n }\n /**\n * @returns {string} the record's username\n */\n\n\n var _proto = AuthenticationDetails.prototype;\n\n _proto.getUsername = function getUsername() {\n return this.username;\n }\n /**\n * @returns {string} the record's password\n */\n ;\n\n _proto.getPassword = function getPassword() {\n return this.password;\n }\n /**\n * @returns {Array} the record's validationData\n */\n ;\n\n _proto.getValidationData = function getValidationData() {\n return this.validationData;\n }\n /**\n * @returns {Array} the record's authParameters\n */\n ;\n\n _proto.getAuthParameters = function getAuthParameters() {\n return this.authParameters;\n }\n /**\n * @returns {ClientMetadata} the clientMetadata for a Lambda trigger\n */\n ;\n\n _proto.getClientMetadata = function getClientMetadata() {\n return this.clientMetadata;\n };\n\n return AuthenticationDetails;\n}();\n\nexport { AuthenticationDetails as default };","import cryptoSecureRandomInt from './cryptoSecureRandomInt';\n/**\n * Hex encoding strategy.\n * Converts a word array to a hex string.\n * @param {WordArray} wordArray The word array.\n * @return {string} The hex string.\n * @static\n */\n\nfunction hexStringify(wordArray) {\n // Shortcuts\n var words = wordArray.words;\n var sigBytes = wordArray.sigBytes; // Convert\n\n var hexChars = [];\n\n for (var i = 0; i < sigBytes; i++) {\n var bite = words[i >>> 2] >>> 24 - i % 4 * 8 & 0xff;\n hexChars.push((bite >>> 4).toString(16));\n hexChars.push((bite & 0x0f).toString(16));\n }\n\n return hexChars.join('');\n}\n\nvar WordArray = /*#__PURE__*/function () {\n function WordArray(words, sigBytes) {\n words = this.words = words || [];\n\n if (sigBytes != undefined) {\n this.sigBytes = sigBytes;\n } else {\n this.sigBytes = words.length * 4;\n }\n }\n\n var _proto = WordArray.prototype;\n\n _proto.random = function random(nBytes) {\n var words = [];\n\n for (var i = 0; i < nBytes; i += 4) {\n words.push(cryptoSecureRandomInt());\n }\n\n return new WordArray(words, nBytes);\n };\n\n _proto.toString = function toString() {\n return hexStringify(this);\n };\n\n return WordArray;\n}();\n\nexport { WordArray as default };","// A small implementation of BigInteger based on http://www-cs-students.stanford.edu/~tjw/jsbn/\n//\n// All public methods have been removed except the following:\n// new BigInteger(a, b) (only radix 2, 4, 8, 16 and 32 supported)\n// toString (only radix 2, 4, 8, 16 and 32 supported)\n// negate\n// abs\n// compareTo\n// bitLength\n// mod\n// equals\n// add\n// subtract\n// multiply\n// divide\n// modPow\nexport default BigInteger;\n/*\n * Copyright (c) 2003-2005 Tom Wu\n * All Rights Reserved.\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS-IS\" AND WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY\n * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n *\n * IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL,\n * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER\n * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF\n * THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT\n * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n *\n * In addition, the following condition applies:\n *\n * All redistributions must retain an intact copy of this copyright notice\n * and disclaimer.\n */\n// (public) Constructor\n\nfunction BigInteger(a, b) {\n if (a != null) this.fromString(a, b);\n} // return new, unset BigInteger\n\n\nfunction nbi() {\n return new BigInteger(null);\n} // Bits per digit\n\n\nvar dbits; // JavaScript engine analysis\n\nvar canary = 0xdeadbeefcafe;\nvar j_lm = (canary & 0xffffff) == 0xefcafe; // am: Compute w_j += (x*this_i), propagate carries,\n// c is initial carry, returns final carry.\n// c < 3*dvalue, x < 2*dvalue, this_i < dvalue\n// We need to select the fastest one that works in this environment.\n// am1: use a single mult and divide to get the high bits,\n// max digit bits should be 26 because\n// max internal value = 2*dvalue^2-2*dvalue (< 2^53)\n\nfunction am1(i, x, w, j, c, n) {\n while (--n >= 0) {\n var v = x * this[i++] + w[j] + c;\n c = Math.floor(v / 0x4000000);\n w[j++] = v & 0x3ffffff;\n }\n\n return c;\n} // am2 avoids a big mult-and-extract completely.\n// Max digit bits should be <= 30 because we do bitwise ops\n// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)\n\n\nfunction am2(i, x, w, j, c, n) {\n var xl = x & 0x7fff,\n xh = x >> 15;\n\n while (--n >= 0) {\n var l = this[i] & 0x7fff;\n var h = this[i++] >> 15;\n var m = xh * l + h * xl;\n l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff);\n c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30);\n w[j++] = l & 0x3fffffff;\n }\n\n return c;\n} // Alternately, set max digit bits to 28 since some\n// browsers slow down when dealing with 32-bit numbers.\n\n\nfunction am3(i, x, w, j, c, n) {\n var xl = x & 0x3fff,\n xh = x >> 14;\n\n while (--n >= 0) {\n var l = this[i] & 0x3fff;\n var h = this[i++] >> 14;\n var m = xh * l + h * xl;\n l = xl * l + ((m & 0x3fff) << 14) + w[j] + c;\n c = (l >> 28) + (m >> 14) + xh * h;\n w[j++] = l & 0xfffffff;\n }\n\n return c;\n}\n\nvar inBrowser = typeof navigator !== 'undefined';\n\nif (inBrowser && j_lm && navigator.appName == 'Microsoft Internet Explorer') {\n BigInteger.prototype.am = am2;\n dbits = 30;\n} else if (inBrowser && j_lm && navigator.appName != 'Netscape') {\n BigInteger.prototype.am = am1;\n dbits = 26;\n} else {\n // Mozilla/Netscape seems to prefer am3\n BigInteger.prototype.am = am3;\n dbits = 28;\n}\n\nBigInteger.prototype.DB = dbits;\nBigInteger.prototype.DM = (1 << dbits) - 1;\nBigInteger.prototype.DV = 1 << dbits;\nvar BI_FP = 52;\nBigInteger.prototype.FV = Math.pow(2, BI_FP);\nBigInteger.prototype.F1 = BI_FP - dbits;\nBigInteger.prototype.F2 = 2 * dbits - BI_FP; // Digit conversions\n\nvar BI_RM = '0123456789abcdefghijklmnopqrstuvwxyz';\nvar BI_RC = new Array();\nvar rr, vv;\nrr = '0'.charCodeAt(0);\n\nfor (vv = 0; vv <= 9; ++vv) {\n BI_RC[rr++] = vv;\n}\n\nrr = 'a'.charCodeAt(0);\n\nfor (vv = 10; vv < 36; ++vv) {\n BI_RC[rr++] = vv;\n}\n\nrr = 'A'.charCodeAt(0);\n\nfor (vv = 10; vv < 36; ++vv) {\n BI_RC[rr++] = vv;\n}\n\nfunction int2char(n) {\n return BI_RM.charAt(n);\n}\n\nfunction intAt(s, i) {\n var c = BI_RC[s.charCodeAt(i)];\n return c == null ? -1 : c;\n} // (protected) copy this to r\n\n\nfunction bnpCopyTo(r) {\n for (var i = this.t - 1; i >= 0; --i) {\n r[i] = this[i];\n }\n\n r.t = this.t;\n r.s = this.s;\n} // (protected) set from integer value x, -DV <= x < DV\n\n\nfunction bnpFromInt(x) {\n this.t = 1;\n this.s = x < 0 ? -1 : 0;\n if (x > 0) this[0] = x;else if (x < -1) this[0] = x + this.DV;else this.t = 0;\n} // return bigint initialized to value\n\n\nfunction nbv(i) {\n var r = nbi();\n r.fromInt(i);\n return r;\n} // (protected) set from string and radix\n\n\nfunction bnpFromString(s, b) {\n var k;\n if (b == 16) k = 4;else if (b == 8) k = 3;else if (b == 2) k = 1;else if (b == 32) k = 5;else if (b == 4) k = 2;else throw new Error('Only radix 2, 4, 8, 16, 32 are supported');\n this.t = 0;\n this.s = 0;\n var i = s.length,\n mi = false,\n sh = 0;\n\n while (--i >= 0) {\n var x = intAt(s, i);\n\n if (x < 0) {\n if (s.charAt(i) == '-') mi = true;\n continue;\n }\n\n mi = false;\n if (sh == 0) this[this.t++] = x;else if (sh + k > this.DB) {\n this[this.t - 1] |= (x & (1 << this.DB - sh) - 1) << sh;\n this[this.t++] = x >> this.DB - sh;\n } else this[this.t - 1] |= x << sh;\n sh += k;\n if (sh >= this.DB) sh -= this.DB;\n }\n\n this.clamp();\n if (mi) BigInteger.ZERO.subTo(this, this);\n} // (protected) clamp off excess high words\n\n\nfunction bnpClamp() {\n var c = this.s & this.DM;\n\n while (this.t > 0 && this[this.t - 1] == c) {\n --this.t;\n }\n} // (public) return string representation in given radix\n\n\nfunction bnToString(b) {\n if (this.s < 0) return '-' + this.negate().toString(b);\n var k;\n if (b == 16) k = 4;else if (b == 8) k = 3;else if (b == 2) k = 1;else if (b == 32) k = 5;else if (b == 4) k = 2;else throw new Error('Only radix 2, 4, 8, 16, 32 are supported');\n var km = (1 << k) - 1,\n d,\n m = false,\n r = '',\n i = this.t;\n var p = this.DB - i * this.DB % k;\n\n if (i-- > 0) {\n if (p < this.DB && (d = this[i] >> p) > 0) {\n m = true;\n r = int2char(d);\n }\n\n while (i >= 0) {\n if (p < k) {\n d = (this[i] & (1 << p) - 1) << k - p;\n d |= this[--i] >> (p += this.DB - k);\n } else {\n d = this[i] >> (p -= k) & km;\n\n if (p <= 0) {\n p += this.DB;\n --i;\n }\n }\n\n if (d > 0) m = true;\n if (m) r += int2char(d);\n }\n }\n\n return m ? r : '0';\n} // (public) -this\n\n\nfunction bnNegate() {\n var r = nbi();\n BigInteger.ZERO.subTo(this, r);\n return r;\n} // (public) |this|\n\n\nfunction bnAbs() {\n return this.s < 0 ? this.negate() : this;\n} // (public) return + if this > a, - if this < a, 0 if equal\n\n\nfunction bnCompareTo(a) {\n var r = this.s - a.s;\n if (r != 0) return r;\n var i = this.t;\n r = i - a.t;\n if (r != 0) return this.s < 0 ? -r : r;\n\n while (--i >= 0) {\n if ((r = this[i] - a[i]) != 0) return r;\n }\n\n return 0;\n} // returns bit length of the integer x\n\n\nfunction nbits(x) {\n var r = 1,\n t;\n\n if ((t = x >>> 16) != 0) {\n x = t;\n r += 16;\n }\n\n if ((t = x >> 8) != 0) {\n x = t;\n r += 8;\n }\n\n if ((t = x >> 4) != 0) {\n x = t;\n r += 4;\n }\n\n if ((t = x >> 2) != 0) {\n x = t;\n r += 2;\n }\n\n if ((t = x >> 1) != 0) {\n x = t;\n r += 1;\n }\n\n return r;\n} // (public) return the number of bits in \"this\"\n\n\nfunction bnBitLength() {\n if (this.t <= 0) return 0;\n return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ this.s & this.DM);\n} // (protected) r = this << n*DB\n\n\nfunction bnpDLShiftTo(n, r) {\n var i;\n\n for (i = this.t - 1; i >= 0; --i) {\n r[i + n] = this[i];\n }\n\n for (i = n - 1; i >= 0; --i) {\n r[i] = 0;\n }\n\n r.t = this.t + n;\n r.s = this.s;\n} // (protected) r = this >> n*DB\n\n\nfunction bnpDRShiftTo(n, r) {\n for (var i = n; i < this.t; ++i) {\n r[i - n] = this[i];\n }\n\n r.t = Math.max(this.t - n, 0);\n r.s = this.s;\n} // (protected) r = this << n\n\n\nfunction bnpLShiftTo(n, r) {\n var bs = n % this.DB;\n var cbs = this.DB - bs;\n var bm = (1 << cbs) - 1;\n var ds = Math.floor(n / this.DB),\n c = this.s << bs & this.DM,\n i;\n\n for (i = this.t - 1; i >= 0; --i) {\n r[i + ds + 1] = this[i] >> cbs | c;\n c = (this[i] & bm) << bs;\n }\n\n for (i = ds - 1; i >= 0; --i) {\n r[i] = 0;\n }\n\n r[ds] = c;\n r.t = this.t + ds + 1;\n r.s = this.s;\n r.clamp();\n} // (protected) r = this >> n\n\n\nfunction bnpRShiftTo(n, r) {\n r.s = this.s;\n var ds = Math.floor(n / this.DB);\n\n if (ds >= this.t) {\n r.t = 0;\n return;\n }\n\n var bs = n % this.DB;\n var cbs = this.DB - bs;\n var bm = (1 << bs) - 1;\n r[0] = this[ds] >> bs;\n\n for (var i = ds + 1; i < this.t; ++i) {\n r[i - ds - 1] |= (this[i] & bm) << cbs;\n r[i - ds] = this[i] >> bs;\n }\n\n if (bs > 0) r[this.t - ds - 1] |= (this.s & bm) << cbs;\n r.t = this.t - ds;\n r.clamp();\n} // (protected) r = this - a\n\n\nfunction bnpSubTo(a, r) {\n var i = 0,\n c = 0,\n m = Math.min(a.t, this.t);\n\n while (i < m) {\n c += this[i] - a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n\n if (a.t < this.t) {\n c -= a.s;\n\n while (i < this.t) {\n c += this[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n\n c += this.s;\n } else {\n c += this.s;\n\n while (i < a.t) {\n c -= a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n\n c -= a.s;\n }\n\n r.s = c < 0 ? -1 : 0;\n if (c < -1) r[i++] = this.DV + c;else if (c > 0) r[i++] = c;\n r.t = i;\n r.clamp();\n} // (protected) r = this * a, r != this,a (HAC 14.12)\n// \"this\" should be the larger one if appropriate.\n\n\nfunction bnpMultiplyTo(a, r) {\n var x = this.abs(),\n y = a.abs();\n var i = x.t;\n r.t = i + y.t;\n\n while (--i >= 0) {\n r[i] = 0;\n }\n\n for (i = 0; i < y.t; ++i) {\n r[i + x.t] = x.am(0, y[i], r, i, 0, x.t);\n }\n\n r.s = 0;\n r.clamp();\n if (this.s != a.s) BigInteger.ZERO.subTo(r, r);\n} // (protected) r = this^2, r != this (HAC 14.16)\n\n\nfunction bnpSquareTo(r) {\n var x = this.abs();\n var i = r.t = 2 * x.t;\n\n while (--i >= 0) {\n r[i] = 0;\n }\n\n for (i = 0; i < x.t - 1; ++i) {\n var c = x.am(i, x[i], r, 2 * i, 0, 1);\n\n if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {\n r[i + x.t] -= x.DV;\n r[i + x.t + 1] = 1;\n }\n }\n\n if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1);\n r.s = 0;\n r.clamp();\n} // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)\n// r != q, this != m. q or r may be null.\n\n\nfunction bnpDivRemTo(m, q, r) {\n var pm = m.abs();\n if (pm.t <= 0) return;\n var pt = this.abs();\n\n if (pt.t < pm.t) {\n if (q != null) q.fromInt(0);\n if (r != null) this.copyTo(r);\n return;\n }\n\n if (r == null) r = nbi();\n var y = nbi(),\n ts = this.s,\n ms = m.s;\n var nsh = this.DB - nbits(pm[pm.t - 1]); // normalize modulus\n\n if (nsh > 0) {\n pm.lShiftTo(nsh, y);\n pt.lShiftTo(nsh, r);\n } else {\n pm.copyTo(y);\n pt.copyTo(r);\n }\n\n var ys = y.t;\n var y0 = y[ys - 1];\n if (y0 == 0) return;\n var yt = y0 * (1 << this.F1) + (ys > 1 ? y[ys - 2] >> this.F2 : 0);\n var d1 = this.FV / yt,\n d2 = (1 << this.F1) / yt,\n e = 1 << this.F2;\n var i = r.t,\n j = i - ys,\n t = q == null ? nbi() : q;\n y.dlShiftTo(j, t);\n\n if (r.compareTo(t) >= 0) {\n r[r.t++] = 1;\n r.subTo(t, r);\n }\n\n BigInteger.ONE.dlShiftTo(ys, t);\n t.subTo(y, y); // \"negative\" y so we can replace sub with am later\n\n while (y.t < ys) {\n y[y.t++] = 0;\n }\n\n while (--j >= 0) {\n // Estimate quotient digit\n var qd = r[--i] == y0 ? this.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2);\n\n if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) {\n // Try it out\n y.dlShiftTo(j, t);\n r.subTo(t, r);\n\n while (r[i] < --qd) {\n r.subTo(t, r);\n }\n }\n }\n\n if (q != null) {\n r.drShiftTo(ys, q);\n if (ts != ms) BigInteger.ZERO.subTo(q, q);\n }\n\n r.t = ys;\n r.clamp();\n if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder\n\n if (ts < 0) BigInteger.ZERO.subTo(r, r);\n} // (public) this mod a\n\n\nfunction bnMod(a) {\n var r = nbi();\n this.abs().divRemTo(a, null, r);\n if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r);\n return r;\n} // (protected) return \"-1/this % 2^DB\"; useful for Mont. reduction\n// justification:\n// xy == 1 (mod m)\n// xy = 1+km\n// xy(2-xy) = (1+km)(1-km)\n// x[y(2-xy)] = 1-k^2m^2\n// x[y(2-xy)] == 1 (mod m^2)\n// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2\n// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.\n// JS multiply \"overflows\" differently from C/C++, so care is needed here.\n\n\nfunction bnpInvDigit() {\n if (this.t < 1) return 0;\n var x = this[0];\n if ((x & 1) == 0) return 0;\n var y = x & 3; // y == 1/x mod 2^2\n\n y = y * (2 - (x & 0xf) * y) & 0xf; // y == 1/x mod 2^4\n\n y = y * (2 - (x & 0xff) * y) & 0xff; // y == 1/x mod 2^8\n\n y = y * (2 - ((x & 0xffff) * y & 0xffff)) & 0xffff; // y == 1/x mod 2^16\n // last step - calculate inverse mod DV directly;\n // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints\n\n y = y * (2 - x * y % this.DV) % this.DV; // y == 1/x mod 2^dbits\n // we really want the negative inverse, and -DV < y < DV\n\n return y > 0 ? this.DV - y : -y;\n}\n\nfunction bnEquals(a) {\n return this.compareTo(a) == 0;\n} // (protected) r = this + a\n\n\nfunction bnpAddTo(a, r) {\n var i = 0,\n c = 0,\n m = Math.min(a.t, this.t);\n\n while (i < m) {\n c += this[i] + a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n\n if (a.t < this.t) {\n c += a.s;\n\n while (i < this.t) {\n c += this[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n\n c += this.s;\n } else {\n c += this.s;\n\n while (i < a.t) {\n c += a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n\n c += a.s;\n }\n\n r.s = c < 0 ? -1 : 0;\n if (c > 0) r[i++] = c;else if (c < -1) r[i++] = this.DV + c;\n r.t = i;\n r.clamp();\n} // (public) this + a\n\n\nfunction bnAdd(a) {\n var r = nbi();\n this.addTo(a, r);\n return r;\n} // (public) this - a\n\n\nfunction bnSubtract(a) {\n var r = nbi();\n this.subTo(a, r);\n return r;\n} // (public) this * a\n\n\nfunction bnMultiply(a) {\n var r = nbi();\n this.multiplyTo(a, r);\n return r;\n} // (public) this / a\n\n\nfunction bnDivide(a) {\n var r = nbi();\n this.divRemTo(a, r, null);\n return r;\n} // Montgomery reduction\n\n\nfunction Montgomery(m) {\n this.m = m;\n this.mp = m.invDigit();\n this.mpl = this.mp & 0x7fff;\n this.mph = this.mp >> 15;\n this.um = (1 << m.DB - 15) - 1;\n this.mt2 = 2 * m.t;\n} // xR mod m\n\n\nfunction montConvert(x) {\n var r = nbi();\n x.abs().dlShiftTo(this.m.t, r);\n r.divRemTo(this.m, null, r);\n if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r);\n return r;\n} // x/R mod m\n\n\nfunction montRevert(x) {\n var r = nbi();\n x.copyTo(r);\n this.reduce(r);\n return r;\n} // x = x/R mod m (HAC 14.32)\n\n\nfunction montReduce(x) {\n while (x.t <= this.mt2) {\n // pad x so am has enough room later\n x[x.t++] = 0;\n }\n\n for (var i = 0; i < this.m.t; ++i) {\n // faster way of calculating u0 = x[i]*mp mod DV\n var j = x[i] & 0x7fff;\n var u0 = j * this.mpl + ((j * this.mph + (x[i] >> 15) * this.mpl & this.um) << 15) & x.DM; // use am to combine the multiply-shift-add into one call\n\n j = i + this.m.t;\n x[j] += this.m.am(0, u0, x, i, 0, this.m.t); // propagate carry\n\n while (x[j] >= x.DV) {\n x[j] -= x.DV;\n x[++j]++;\n }\n }\n\n x.clamp();\n x.drShiftTo(this.m.t, x);\n if (x.compareTo(this.m) >= 0) x.subTo(this.m, x);\n} // r = \"x^2/R mod m\"; x != r\n\n\nfunction montSqrTo(x, r) {\n x.squareTo(r);\n this.reduce(r);\n} // r = \"xy/R mod m\"; x,y != r\n\n\nfunction montMulTo(x, y, r) {\n x.multiplyTo(y, r);\n this.reduce(r);\n}\n\nMontgomery.prototype.convert = montConvert;\nMontgomery.prototype.revert = montRevert;\nMontgomery.prototype.reduce = montReduce;\nMontgomery.prototype.mulTo = montMulTo;\nMontgomery.prototype.sqrTo = montSqrTo; // (public) this^e % m (HAC 14.85)\n\nfunction bnModPow(e, m, callback) {\n var i = e.bitLength(),\n k,\n r = nbv(1),\n z = new Montgomery(m);\n if (i <= 0) return r;else if (i < 18) k = 1;else if (i < 48) k = 3;else if (i < 144) k = 4;else if (i < 768) k = 5;else k = 6; // precomputation\n\n var g = new Array(),\n n = 3,\n k1 = k - 1,\n km = (1 << k) - 1;\n g[1] = z.convert(this);\n\n if (k > 1) {\n var g2 = nbi();\n z.sqrTo(g[1], g2);\n\n while (n <= km) {\n g[n] = nbi();\n z.mulTo(g2, g[n - 2], g[n]);\n n += 2;\n }\n }\n\n var j = e.t - 1,\n w,\n is1 = true,\n r2 = nbi(),\n t;\n i = nbits(e[j]) - 1;\n\n while (j >= 0) {\n if (i >= k1) w = e[j] >> i - k1 & km;else {\n w = (e[j] & (1 << i + 1) - 1) << k1 - i;\n if (j > 0) w |= e[j - 1] >> this.DB + i - k1;\n }\n n = k;\n\n while ((w & 1) == 0) {\n w >>= 1;\n --n;\n }\n\n if ((i -= n) < 0) {\n i += this.DB;\n --j;\n }\n\n if (is1) {\n // ret == 1, don't bother squaring or multiplying it\n g[w].copyTo(r);\n is1 = false;\n } else {\n while (n > 1) {\n z.sqrTo(r, r2);\n z.sqrTo(r2, r);\n n -= 2;\n }\n\n if (n > 0) z.sqrTo(r, r2);else {\n t = r;\n r = r2;\n r2 = t;\n }\n z.mulTo(r2, g[w], r);\n }\n\n while (j >= 0 && (e[j] & 1 << i) == 0) {\n z.sqrTo(r, r2);\n t = r;\n r = r2;\n r2 = t;\n\n if (--i < 0) {\n i = this.DB - 1;\n --j;\n }\n }\n }\n\n var result = z.revert(r);\n callback(null, result);\n return result;\n} // protected\n\n\nBigInteger.prototype.copyTo = bnpCopyTo;\nBigInteger.prototype.fromInt = bnpFromInt;\nBigInteger.prototype.fromString = bnpFromString;\nBigInteger.prototype.clamp = bnpClamp;\nBigInteger.prototype.dlShiftTo = bnpDLShiftTo;\nBigInteger.prototype.drShiftTo = bnpDRShiftTo;\nBigInteger.prototype.lShiftTo = bnpLShiftTo;\nBigInteger.prototype.rShiftTo = bnpRShiftTo;\nBigInteger.prototype.subTo = bnpSubTo;\nBigInteger.prototype.multiplyTo = bnpMultiplyTo;\nBigInteger.prototype.squareTo = bnpSquareTo;\nBigInteger.prototype.divRemTo = bnpDivRemTo;\nBigInteger.prototype.invDigit = bnpInvDigit;\nBigInteger.prototype.addTo = bnpAddTo; // public\n\nBigInteger.prototype.toString = bnToString;\nBigInteger.prototype.negate = bnNegate;\nBigInteger.prototype.abs = bnAbs;\nBigInteger.prototype.compareTo = bnCompareTo;\nBigInteger.prototype.bitLength = bnBitLength;\nBigInteger.prototype.mod = bnMod;\nBigInteger.prototype.equals = bnEquals;\nBigInteger.prototype.add = bnAdd;\nBigInteger.prototype.subtract = bnSubtract;\nBigInteger.prototype.multiply = bnMultiply;\nBigInteger.prototype.divide = bnDivide;\nBigInteger.prototype.modPow = bnModPow; // \"constants\"\n\nBigInteger.ZERO = nbv(0);\nBigInteger.ONE = nbv(1);","/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n * http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Buffer } from 'buffer';\nimport CryptoJS from 'crypto-js/core';\nimport 'crypto-js/lib-typedarrays'; // necessary for crypto js\n\nimport SHA256 from 'crypto-js/sha256';\nimport HmacSHA256 from 'crypto-js/hmac-sha256';\nimport WordArray from './utils/WordArray';\n\nvar randomBytes = function randomBytes(nBytes) {\n return Buffer.from(new WordArray().random(nBytes).toString(), 'hex');\n};\n\nimport BigInteger from './BigInteger';\nvar initN = 'FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1' + '29024E088A67CC74020BBEA63B139B22514A08798E3404DD' + 'EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245' + 'E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED' + 'EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D' + 'C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F' + '83655D23DCA3AD961C62F356208552BB9ED529077096966D' + '670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B' + 'E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9' + 'DE2BCBF6955817183995497CEA956AE515D2261898FA0510' + '15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64' + 'ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7' + 'ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B' + 'F12FFA06D98A0864D87602733EC86A64521F2B18177B200C' + 'BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31' + '43DB5BFCE0FD108E4B82D120A93AD2CAFFFFFFFFFFFFFFFF';\nvar newPasswordRequiredChallengeUserAttributePrefix = 'userAttributes.';\n/** @class */\n\nvar AuthenticationHelper = /*#__PURE__*/function () {\n /**\n * Constructs a new AuthenticationHelper object\n * @param {string} PoolName Cognito user pool name.\n */\n function AuthenticationHelper(PoolName) {\n this.N = new BigInteger(initN, 16);\n this.g = new BigInteger('2', 16);\n this.k = new BigInteger(this.hexHash(\"00\" + this.N.toString(16) + \"0\" + this.g.toString(16)), 16);\n this.smallAValue = this.generateRandomSmallA();\n this.getLargeAValue(function () {});\n this.infoBits = Buffer.from('Caldera Derived Key', 'utf8');\n this.poolName = PoolName;\n }\n /**\n * @returns {BigInteger} small A, a random number\n */\n\n\n var _proto = AuthenticationHelper.prototype;\n\n _proto.getSmallAValue = function getSmallAValue() {\n return this.smallAValue;\n }\n /**\n * @param {nodeCallback} callback Called with (err, largeAValue)\n * @returns {void}\n */\n ;\n\n _proto.getLargeAValue = function getLargeAValue(callback) {\n var _this = this;\n\n if (this.largeAValue) {\n callback(null, this.largeAValue);\n } else {\n this.calculateA(this.smallAValue, function (err, largeAValue) {\n if (err) {\n callback(err, null);\n }\n\n _this.largeAValue = largeAValue;\n callback(null, _this.largeAValue);\n });\n }\n }\n /**\n * helper function to generate a random big integer\n * @returns {BigInteger} a random value.\n * @private\n */\n ;\n\n _proto.generateRandomSmallA = function generateRandomSmallA() {\n var hexRandom = randomBytes(128).toString('hex');\n var randomBigInt = new BigInteger(hexRandom, 16);\n var smallABigInt = randomBigInt.mod(this.N);\n return smallABigInt;\n }\n /**\n * helper function to generate a random string\n * @returns {string} a random value.\n * @private\n */\n ;\n\n _proto.generateRandomString = function generateRandomString() {\n return randomBytes(40).toString('base64');\n }\n /**\n * @returns {string} Generated random value included in password hash.\n */\n ;\n\n _proto.getRandomPassword = function getRandomPassword() {\n return this.randomPassword;\n }\n /**\n * @returns {string} Generated random value included in devices hash.\n */\n ;\n\n _proto.getSaltDevices = function getSaltDevices() {\n return this.SaltToHashDevices;\n }\n /**\n * @returns {string} Value used to verify devices.\n */\n ;\n\n _proto.getVerifierDevices = function getVerifierDevices() {\n return this.verifierDevices;\n }\n /**\n * Generate salts and compute verifier.\n * @param {string} deviceGroupKey Devices to generate verifier for.\n * @param {string} username User to generate verifier for.\n * @param {nodeCallback} callback Called with (err, null)\n * @returns {void}\n */\n ;\n\n _proto.generateHashDevice = function generateHashDevice(deviceGroupKey, username, callback) {\n var _this2 = this;\n\n this.randomPassword = this.generateRandomString();\n var combinedString = \"\" + deviceGroupKey + username + \":\" + this.randomPassword;\n var hashedString = this.hash(combinedString);\n var hexRandom = randomBytes(16).toString('hex');\n this.SaltToHashDevices = this.padHex(new BigInteger(hexRandom, 16));\n this.g.modPow(new BigInteger(this.hexHash(this.SaltToHashDevices + hashedString), 16), this.N, function (err, verifierDevicesNotPadded) {\n if (err) {\n callback(err, null);\n }\n\n _this2.verifierDevices = _this2.padHex(verifierDevicesNotPadded);\n callback(null, null);\n });\n }\n /**\n * Calculate the client's public value A = g^a%N\n * with the generated random number a\n * @param {BigInteger} a Randomly generated small A.\n * @param {nodeCallback} callback Called with (err, largeAValue)\n * @returns {void}\n * @private\n */\n ;\n\n _proto.calculateA = function calculateA(a, callback) {\n var _this3 = this;\n\n this.g.modPow(a, this.N, function (err, A) {\n if (err) {\n callback(err, null);\n }\n\n if (A.mod(_this3.N).equals(BigInteger.ZERO)) {\n callback(new Error('Illegal paramater. A mod N cannot be 0.'), null);\n }\n\n callback(null, A);\n });\n }\n /**\n * Calculate the client's value U which is the hash of A and B\n * @param {BigInteger} A Large A value.\n * @param {BigInteger} B Server B value.\n * @returns {BigInteger} Computed U value.\n * @private\n */\n ;\n\n _proto.calculateU = function calculateU(A, B) {\n this.UHexHash = this.hexHash(this.padHex(A) + this.padHex(B));\n var finalU = new BigInteger(this.UHexHash, 16);\n return finalU;\n }\n /**\n * Calculate a hash from a bitArray\n * @param {Buffer} buf Value to hash.\n * @returns {String} Hex-encoded hash.\n * @private\n */\n ;\n\n _proto.hash = function hash(buf) {\n var str = buf instanceof Buffer ? CryptoJS.lib.WordArray.create(buf) : buf;\n var hashHex = SHA256(str).toString();\n return new Array(64 - hashHex.length).join('0') + hashHex;\n }\n /**\n * Calculate a hash from a hex string\n * @param {String} hexStr Value to hash.\n * @returns {String} Hex-encoded hash.\n * @private\n */\n ;\n\n _proto.hexHash = function hexHash(hexStr) {\n return this.hash(Buffer.from(hexStr, 'hex'));\n }\n /**\n * Standard hkdf algorithm\n * @param {Buffer} ikm Input key material.\n * @param {Buffer} salt Salt value.\n * @returns {Buffer} Strong key material.\n * @private\n */\n ;\n\n _proto.computehkdf = function computehkdf(ikm, salt) {\n var infoBitsWordArray = CryptoJS.lib.WordArray.create(Buffer.concat([this.infoBits, Buffer.from(String.fromCharCode(1), 'utf8')]));\n var ikmWordArray = ikm instanceof Buffer ? CryptoJS.lib.WordArray.create(ikm) : ikm;\n var saltWordArray = salt instanceof Buffer ? CryptoJS.lib.WordArray.create(salt) : salt;\n var prk = HmacSHA256(ikmWordArray, saltWordArray);\n var hmac = HmacSHA256(infoBitsWordArray, prk);\n return Buffer.from(hmac.toString(), 'hex').slice(0, 16);\n }\n /**\n * Calculates the final hkdf based on computed S value, and computed U value and the key\n * @param {String} username Username.\n * @param {String} password Password.\n * @param {BigInteger} serverBValue Server B value.\n * @param {BigInteger} salt Generated salt.\n * @param {nodeCallback} callback Called with (err, hkdfValue)\n * @returns {void}\n */\n ;\n\n _proto.getPasswordAuthenticationKey = function getPasswordAuthenticationKey(username, password, serverBValue, salt, callback) {\n var _this4 = this;\n\n if (serverBValue.mod(this.N).equals(BigInteger.ZERO)) {\n throw new Error('B cannot be zero.');\n }\n\n this.UValue = this.calculateU(this.largeAValue, serverBValue);\n\n if (this.UValue.equals(BigInteger.ZERO)) {\n throw new Error('U cannot be zero.');\n }\n\n var usernamePassword = \"\" + this.poolName + username + \":\" + password;\n var usernamePasswordHash = this.hash(usernamePassword);\n var xValue = new BigInteger(this.hexHash(this.padHex(salt) + usernamePasswordHash), 16);\n this.calculateS(xValue, serverBValue, function (err, sValue) {\n if (err) {\n callback(err, null);\n }\n\n var hkdf = _this4.computehkdf(Buffer.from(_this4.padHex(sValue), 'hex'), Buffer.from(_this4.padHex(_this4.UValue.toString(16)), 'hex'));\n\n callback(null, hkdf);\n });\n }\n /**\n * Calculates the S value used in getPasswordAuthenticationKey\n * @param {BigInteger} xValue Salted password hash value.\n * @param {BigInteger} serverBValue Server B value.\n * @param {nodeCallback} callback Called on success or error.\n * @returns {void}\n */\n ;\n\n _proto.calculateS = function calculateS(xValue, serverBValue, callback) {\n var _this5 = this;\n\n this.g.modPow(xValue, this.N, function (err, gModPowXN) {\n if (err) {\n callback(err, null);\n }\n\n var intValue2 = serverBValue.subtract(_this5.k.multiply(gModPowXN));\n intValue2.modPow(_this5.smallAValue.add(_this5.UValue.multiply(xValue)), _this5.N, function (err2, result) {\n if (err2) {\n callback(err2, null);\n }\n\n callback(null, result.mod(_this5.N));\n });\n });\n }\n /**\n * Return constant newPasswordRequiredChallengeUserAttributePrefix\n * @return {newPasswordRequiredChallengeUserAttributePrefix} constant prefix value\n */\n ;\n\n _proto.getNewPasswordRequiredChallengeUserAttributePrefix = function getNewPasswordRequiredChallengeUserAttributePrefix() {\n return newPasswordRequiredChallengeUserAttributePrefix;\n }\n /**\n * Converts a BigInteger (or hex string) to hex format padded with zeroes for hashing\n * @param {BigInteger|String} bigInt Number or string to pad.\n * @returns {String} Padded hex string.\n */\n ;\n\n _proto.padHex = function padHex(bigInt) {\n var hashStr = bigInt.toString(16);\n\n if (hashStr.length % 2 === 1) {\n hashStr = \"0\" + hashStr;\n } else if ('89ABCDEFabcdef'.indexOf(hashStr[0]) !== -1) {\n hashStr = \"00\" + hashStr;\n }\n\n return hashStr;\n };\n\n return AuthenticationHelper;\n}();\n\nexport { AuthenticationHelper as default };","/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n * http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Buffer } from 'buffer';\n/** @class */\n\nvar CognitoJwtToken = /*#__PURE__*/function () {\n /**\n * Constructs a new CognitoJwtToken object\n * @param {string=} token The JWT token.\n */\n function CognitoJwtToken(token) {\n // Assign object\n this.jwtToken = token || '';\n this.payload = this.decodePayload();\n }\n /**\n * @returns {string} the record's token.\n */\n\n\n var _proto = CognitoJwtToken.prototype;\n\n _proto.getJwtToken = function getJwtToken() {\n return this.jwtToken;\n }\n /**\n * @returns {int} the token's expiration (exp member).\n */\n ;\n\n _proto.getExpiration = function getExpiration() {\n return this.payload.exp;\n }\n /**\n * @returns {int} the token's \"issued at\" (iat member).\n */\n ;\n\n _proto.getIssuedAt = function getIssuedAt() {\n return this.payload.iat;\n }\n /**\n * @returns {object} the token's payload.\n */\n ;\n\n _proto.decodePayload = function decodePayload() {\n var payload = this.jwtToken.split('.')[1];\n\n try {\n return JSON.parse(Buffer.from(payload, 'base64').toString('utf8'));\n } catch (err) {\n return {};\n }\n };\n\n return CognitoJwtToken;\n}();\n\nexport { CognitoJwtToken as default };","function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\n/*\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n * http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\nimport CognitoJwtToken from './CognitoJwtToken';\n/** @class */\n\nvar CognitoAccessToken = /*#__PURE__*/function (_CognitoJwtToken) {\n _inheritsLoose(CognitoAccessToken, _CognitoJwtToken);\n\n /**\n * Constructs a new CognitoAccessToken object\n * @param {string=} AccessToken The JWT access token.\n */\n function CognitoAccessToken(_temp) {\n var _ref = _temp === void 0 ? {} : _temp,\n AccessToken = _ref.AccessToken;\n\n return _CognitoJwtToken.call(this, AccessToken || '') || this;\n }\n\n return CognitoAccessToken;\n}(CognitoJwtToken);\n\nexport { CognitoAccessToken as default };","function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\n/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n * http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\nimport CognitoJwtToken from './CognitoJwtToken';\n/** @class */\n\nvar CognitoIdToken = /*#__PURE__*/function (_CognitoJwtToken) {\n _inheritsLoose(CognitoIdToken, _CognitoJwtToken);\n\n /**\n * Constructs a new CognitoIdToken object\n * @param {string=} IdToken The JWT Id token\n */\n function CognitoIdToken(_temp) {\n var _ref = _temp === void 0 ? {} : _temp,\n IdToken = _ref.IdToken;\n\n return _CognitoJwtToken.call(this, IdToken || '') || this;\n }\n\n return CognitoIdToken;\n}(CognitoJwtToken);\n\nexport { CognitoIdToken as default };","/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n * http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @class */\nvar CognitoRefreshToken = /*#__PURE__*/function () {\n /**\n * Constructs a new CognitoRefreshToken object\n * @param {string=} RefreshToken The JWT refresh token.\n */\n function CognitoRefreshToken(_temp) {\n var _ref = _temp === void 0 ? {} : _temp,\n RefreshToken = _ref.RefreshToken;\n\n // Assign object\n this.token = RefreshToken || '';\n }\n /**\n * @returns {string} the record's token.\n */\n\n\n var _proto = CognitoRefreshToken.prototype;\n\n _proto.getToken = function getToken() {\n return this.token;\n };\n\n return CognitoRefreshToken;\n}();\n\nexport { CognitoRefreshToken as default };","/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n * http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @class */\nvar CognitoUserSession = /*#__PURE__*/function () {\n /**\n * Constructs a new CognitoUserSession object\n * @param {CognitoIdToken} IdToken The session's Id token.\n * @param {CognitoRefreshToken=} RefreshToken The session's refresh token.\n * @param {CognitoAccessToken} AccessToken The session's access token.\n * @param {int} ClockDrift The saved computer's clock drift or undefined to force calculation.\n */\n function CognitoUserSession(_temp) {\n var _ref = _temp === void 0 ? {} : _temp,\n IdToken = _ref.IdToken,\n RefreshToken = _ref.RefreshToken,\n AccessToken = _ref.AccessToken,\n ClockDrift = _ref.ClockDrift;\n\n if (AccessToken == null || IdToken == null) {\n throw new Error('Id token and Access Token must be present.');\n }\n\n this.idToken = IdToken;\n this.refreshToken = RefreshToken;\n this.accessToken = AccessToken;\n this.clockDrift = ClockDrift === undefined ? this.calculateClockDrift() : ClockDrift;\n }\n /**\n * @returns {CognitoIdToken} the session's Id token\n */\n\n\n var _proto = CognitoUserSession.prototype;\n\n _proto.getIdToken = function getIdToken() {\n return this.idToken;\n }\n /**\n * @returns {CognitoRefreshToken} the session's refresh token\n */\n ;\n\n _proto.getRefreshToken = function getRefreshToken() {\n return this.refreshToken;\n }\n /**\n * @returns {CognitoAccessToken} the session's access token\n */\n ;\n\n _proto.getAccessToken = function getAccessToken() {\n return this.accessToken;\n }\n /**\n * @returns {int} the session's clock drift\n */\n ;\n\n _proto.getClockDrift = function getClockDrift() {\n return this.clockDrift;\n }\n /**\n * @returns {int} the computer's clock drift\n */\n ;\n\n _proto.calculateClockDrift = function calculateClockDrift() {\n var now = Math.floor(new Date() / 1000);\n var iat = Math.min(this.accessToken.getIssuedAt(), this.idToken.getIssuedAt());\n return now - iat;\n }\n /**\n * Checks to see if the session is still valid based on session expiry information found\n * in tokens and the current time (adjusted with clock drift)\n * @returns {boolean} if the session is still valid\n */\n ;\n\n _proto.isValid = function isValid() {\n var now = Math.floor(new Date() / 1000);\n var adjusted = now - this.clockDrift;\n return adjusted < this.accessToken.getExpiration() && adjusted < this.idToken.getExpiration();\n };\n\n return CognitoUserSession;\n}();\n\nexport { CognitoUserSession as default };","/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n * http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\nvar monthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\nvar weekNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n/** @class */\n\nvar DateHelper = /*#__PURE__*/function () {\n function DateHelper() {}\n\n var _proto = DateHelper.prototype;\n\n /**\n * @returns {string} The current time in \"ddd MMM D HH:mm:ss UTC YYYY\" format.\n */\n _proto.getNowString = function getNowString() {\n var now = new Date();\n var weekDay = weekNames[now.getUTCDay()];\n var month = monthNames[now.getUTCMonth()];\n var day = now.getUTCDate();\n var hours = now.getUTCHours();\n\n if (hours < 10) {\n hours = \"0\" + hours;\n }\n\n var minutes = now.getUTCMinutes();\n\n if (minutes < 10) {\n minutes = \"0\" + minutes;\n }\n\n var seconds = now.getUTCSeconds();\n\n if (seconds < 10) {\n seconds = \"0\" + seconds;\n }\n\n var year = now.getUTCFullYear(); // ddd MMM D HH:mm:ss UTC YYYY\n\n var dateNow = weekDay + \" \" + month + \" \" + day + \" \" + hours + \":\" + minutes + \":\" + seconds + \" UTC \" + year;\n return dateNow;\n };\n\n return DateHelper;\n}();\n\nexport { DateHelper as default };","/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n * http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @class */\nvar CognitoUserAttribute = /*#__PURE__*/function () {\n /**\n * Constructs a new CognitoUserAttribute object\n * @param {string=} Name The record's name\n * @param {string=} Value The record's value\n */\n function CognitoUserAttribute(_temp) {\n var _ref = _temp === void 0 ? {} : _temp,\n Name = _ref.Name,\n Value = _ref.Value;\n\n this.Name = Name || '';\n this.Value = Value || '';\n }\n /**\n * @returns {string} the record's value.\n */\n\n\n var _proto = CognitoUserAttribute.prototype;\n\n _proto.getValue = function getValue() {\n return this.Value;\n }\n /**\n * Sets the record's value.\n * @param {string} value The new value.\n * @returns {CognitoUserAttribute} The record for method chaining.\n */\n ;\n\n _proto.setValue = function setValue(value) {\n this.Value = value;\n return this;\n }\n /**\n * @returns {string} the record's name.\n */\n ;\n\n _proto.getName = function getName() {\n return this.Name;\n }\n /**\n * Sets the record's name\n * @param {string} name The new name.\n * @returns {CognitoUserAttribute} The record for method chaining.\n */\n ;\n\n _proto.setName = function setName(name) {\n this.Name = name;\n return this;\n }\n /**\n * @returns {string} a string representation of the record.\n */\n ;\n\n _proto.toString = function toString() {\n return JSON.stringify(this);\n }\n /**\n * @returns {object} a flat object representing the record.\n */\n ;\n\n _proto.toJSON = function toJSON() {\n return {\n Name: this.Name,\n Value: this.Value\n };\n };\n\n return CognitoUserAttribute;\n}();\n\nexport { CognitoUserAttribute as default };","/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n * http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\nvar dataMemory = {};\n/** @class */\n\nvar MemoryStorage = /*#__PURE__*/function () {\n function MemoryStorage() {}\n\n /**\n * This is used to set a specific item in storage\n * @param {string} key - the key for the item\n * @param {object} value - the value\n * @returns {string} value that was set\n */\n MemoryStorage.setItem = function setItem(key, value) {\n dataMemory[key] = value;\n return dataMemory[key];\n }\n /**\n * This is used to get a specific key from storage\n * @param {string} key - the key for the item\n * This is used to clear the storage\n * @returns {string} the data item\n */\n ;\n\n MemoryStorage.getItem = function getItem(key) {\n return Object.prototype.hasOwnProperty.call(dataMemory, key) ? dataMemory[key] : undefined;\n }\n /**\n * This is used to remove an item from storage\n * @param {string} key - the key being set\n * @returns {string} value - value that was deleted\n */\n ;\n\n MemoryStorage.removeItem = function removeItem(key) {\n return delete dataMemory[key];\n }\n /**\n * This is used to clear the storage\n * @returns {string} nothing\n */\n ;\n\n MemoryStorage.clear = function clear() {\n dataMemory = {};\n return dataMemory;\n };\n\n return MemoryStorage;\n}();\n/** @class */\n\n\nvar StorageHelper = /*#__PURE__*/function () {\n /**\n * This is used to get a storage object\n * @returns {object} the storage\n */\n function StorageHelper() {\n try {\n this.storageWindow = window.localStorage;\n this.storageWindow.setItem('aws.cognito.test-ls', 1);\n this.storageWindow.removeItem('aws.cognito.test-ls');\n } catch (exception) {\n this.storageWindow = MemoryStorage;\n }\n }\n /**\n * This is used to return the storage\n * @returns {object} the storage\n */\n\n\n var _proto = StorageHelper.prototype;\n\n _proto.getStorage = function getStorage() {\n return this.storageWindow;\n };\n\n return StorageHelper;\n}();\n\nexport { StorageHelper as default };","/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n * http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Buffer } from 'buffer';\nimport CryptoJS from 'crypto-js/core';\nimport TypedArrays from 'crypto-js/lib-typedarrays'; // necessary for crypto js\n\nimport Base64 from 'crypto-js/enc-base64';\nimport HmacSHA256 from 'crypto-js/hmac-sha256';\nimport BigInteger from './BigInteger';\nimport AuthenticationHelper from './AuthenticationHelper';\nimport CognitoAccessToken from './CognitoAccessToken';\nimport CognitoIdToken from './CognitoIdToken';\nimport CognitoRefreshToken from './CognitoRefreshToken';\nimport CognitoUserSession from './CognitoUserSession';\nimport DateHelper from './DateHelper';\nimport CognitoUserAttribute from './CognitoUserAttribute';\nimport StorageHelper from './StorageHelper';\n/**\n * @callback nodeCallback\n * @template T result\n * @param {*} err The operation failure reason, or null.\n * @param {T} result The operation result.\n */\n\n/**\n * @callback onFailure\n * @param {*} err Failure reason.\n */\n\n/**\n * @callback onSuccess\n * @template T result\n * @param {T} result The operation result.\n */\n\n/**\n * @callback mfaRequired\n * @param {*} details MFA challenge details.\n */\n\n/**\n * @callback customChallenge\n * @param {*} details Custom challenge details.\n */\n\n/**\n * @callback inputVerificationCode\n * @param {*} data Server response.\n */\n\n/**\n * @callback authSuccess\n * @param {CognitoUserSession} session The new session.\n * @param {bool=} userConfirmationNecessary User must be confirmed.\n */\n\nvar isBrowser = typeof navigator !== 'undefined';\nvar userAgent = isBrowser ? navigator.userAgent : 'nodejs';\n/** @class */\n\nvar CognitoUser = /*#__PURE__*/function () {\n /**\n * Constructs a new CognitoUser object\n * @param {object} data Creation options\n * @param {string} data.Username The user's username.\n * @param {CognitoUserPool} data.Pool Pool containing the user.\n * @param {object} data.Storage Optional storage object.\n */\n function CognitoUser(data) {\n if (data == null || data.Username == null || data.Pool == null) {\n throw new Error('Username and Pool information are required.');\n }\n\n this.username = data.Username || '';\n this.pool = data.Pool;\n this.Session = null;\n this.client = data.Pool.client;\n this.signInUserSession = null;\n this.authenticationFlowType = 'USER_SRP_AUTH';\n this.storage = data.Storage || new StorageHelper().getStorage();\n this.keyPrefix = \"CognitoIdentityServiceProvider.\" + this.pool.getClientId();\n this.userDataKey = this.keyPrefix + \".\" + this.username + \".userData\";\n }\n /**\n * Sets the session for this user\n * @param {CognitoUserSession} signInUserSession the session\n * @returns {void}\n */\n\n\n var _proto = CognitoUser.prototype;\n\n _proto.setSignInUserSession = function setSignInUserSession(signInUserSession) {\n this.clearCachedUserData();\n this.signInUserSession = signInUserSession;\n this.cacheTokens();\n }\n /**\n * @returns {CognitoUserSession} the current session for this user\n */\n ;\n\n _proto.getSignInUserSession = function getSignInUserSession() {\n return this.signInUserSession;\n }\n /**\n * @returns {string} the user's username\n */\n ;\n\n _proto.getUsername = function getUsername() {\n return this.username;\n }\n /**\n * @returns {String} the authentication flow type\n */\n ;\n\n _proto.getAuthenticationFlowType = function getAuthenticationFlowType() {\n return this.authenticationFlowType;\n }\n /**\n * sets authentication flow type\n * @param {string} authenticationFlowType New value.\n * @returns {void}\n */\n ;\n\n _proto.setAuthenticationFlowType = function setAuthenticationFlowType(authenticationFlowType) {\n this.authenticationFlowType = authenticationFlowType;\n }\n /**\n * This is used for authenticating the user through the custom authentication flow.\n * @param {AuthenticationDetails} authDetails Contains the authentication data\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {customChallenge} callback.customChallenge Custom challenge\n * response required to continue.\n * @param {authSuccess} callback.onSuccess Called on success with the new session.\n * @returns {void}\n */\n ;\n\n _proto.initiateAuth = function initiateAuth(authDetails, callback) {\n var _this = this;\n\n var authParameters = authDetails.getAuthParameters();\n authParameters.USERNAME = this.username;\n var clientMetaData = Object.keys(authDetails.getValidationData()).length !== 0 ? authDetails.getValidationData() : authDetails.getClientMetadata();\n var jsonReq = {\n AuthFlow: 'CUSTOM_AUTH',\n ClientId: this.pool.getClientId(),\n AuthParameters: authParameters,\n ClientMetadata: clientMetaData\n };\n\n if (this.getUserContextData()) {\n jsonReq.UserContextData = this.getUserContextData();\n }\n\n this.client.request('InitiateAuth', jsonReq, function (err, data) {\n if (err) {\n return callback.onFailure(err);\n }\n\n var challengeName = data.ChallengeName;\n var challengeParameters = data.ChallengeParameters;\n\n if (challengeName === 'CUSTOM_CHALLENGE') {\n _this.Session = data.Session;\n return callback.customChallenge(challengeParameters);\n }\n\n _this.signInUserSession = _this.getCognitoUserSession(data.AuthenticationResult);\n\n _this.cacheTokens();\n\n return callback.onSuccess(_this.signInUserSession);\n });\n }\n /**\n * This is used for authenticating the user.\n * stuff\n * @param {AuthenticationDetails} authDetails Contains the authentication data\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {newPasswordRequired} callback.newPasswordRequired new\n * password and any required attributes are required to continue\n * @param {mfaRequired} callback.mfaRequired MFA code\n * required to continue.\n * @param {customChallenge} callback.customChallenge Custom challenge\n * response required to continue.\n * @param {authSuccess} callback.onSuccess Called on success with the new session.\n * @returns {void}\n */\n ;\n\n _proto.authenticateUser = function authenticateUser(authDetails, callback) {\n if (this.authenticationFlowType === 'USER_PASSWORD_AUTH') {\n return this.authenticateUserPlainUsernamePassword(authDetails, callback);\n } else if (this.authenticationFlowType === 'USER_SRP_AUTH' || this.authenticationFlowType === 'CUSTOM_AUTH') {\n return this.authenticateUserDefaultAuth(authDetails, callback);\n }\n\n return callback.onFailure(new Error('Authentication flow type is invalid.'));\n }\n /**\n * PRIVATE ONLY: This is an internal only method and should not\n * be directly called by the consumers.\n * It calls the AuthenticationHelper for SRP related\n * stuff\n * @param {AuthenticationDetails} authDetails Contains the authentication data\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {newPasswordRequired} callback.newPasswordRequired new\n * password and any required attributes are required to continue\n * @param {mfaRequired} callback.mfaRequired MFA code\n * required to continue.\n * @param {customChallenge} callback.customChallenge Custom challenge\n * response required to continue.\n * @param {authSuccess} callback.onSuccess Called on success with the new session.\n * @returns {void}\n */\n ;\n\n _proto.authenticateUserDefaultAuth = function authenticateUserDefaultAuth(authDetails, callback) {\n var _this2 = this;\n\n var authenticationHelper = new AuthenticationHelper(this.pool.getUserPoolId().split('_')[1]);\n var dateHelper = new DateHelper();\n var serverBValue;\n var salt;\n var authParameters = {};\n\n if (this.deviceKey != null) {\n authParameters.DEVICE_KEY = this.deviceKey;\n }\n\n authParameters.USERNAME = this.username;\n authenticationHelper.getLargeAValue(function (errOnAValue, aValue) {\n // getLargeAValue callback start\n if (errOnAValue) {\n callback.onFailure(errOnAValue);\n }\n\n authParameters.SRP_A = aValue.toString(16);\n\n if (_this2.authenticationFlowType === 'CUSTOM_AUTH') {\n authParameters.CHALLENGE_NAME = 'SRP_A';\n }\n\n var clientMetaData = Object.keys(authDetails.getValidationData()).length !== 0 ? authDetails.getValidationData() : authDetails.getClientMetadata();\n var jsonReq = {\n AuthFlow: _this2.authenticationFlowType,\n ClientId: _this2.pool.getClientId(),\n AuthParameters: authParameters,\n ClientMetadata: clientMetaData\n };\n\n if (_this2.getUserContextData(_this2.username)) {\n jsonReq.UserContextData = _this2.getUserContextData(_this2.username);\n }\n\n _this2.client.request('InitiateAuth', jsonReq, function (err, data) {\n if (err) {\n return callback.onFailure(err);\n }\n\n var challengeParameters = data.ChallengeParameters;\n _this2.username = challengeParameters.USER_ID_FOR_SRP;\n serverBValue = new BigInteger(challengeParameters.SRP_B, 16);\n salt = new BigInteger(challengeParameters.SALT, 16);\n\n _this2.getCachedDeviceKeyAndPassword();\n\n authenticationHelper.getPasswordAuthenticationKey(_this2.username, authDetails.getPassword(), serverBValue, salt, function (errOnHkdf, hkdf) {\n // getPasswordAuthenticationKey callback start\n if (errOnHkdf) {\n callback.onFailure(errOnHkdf);\n }\n\n var dateNow = dateHelper.getNowString();\n var message = CryptoJS.lib.WordArray.create(Buffer.concat([Buffer.from(_this2.pool.getUserPoolId().split('_')[1], 'utf8'), Buffer.from(_this2.username, 'utf8'), Buffer.from(challengeParameters.SECRET_BLOCK, 'base64'), Buffer.from(dateNow, 'utf8')]));\n var key = CryptoJS.lib.WordArray.create(hkdf);\n var signatureString = Base64.stringify(HmacSHA256(message, key));\n var challengeResponses = {};\n challengeResponses.USERNAME = _this2.username;\n challengeResponses.PASSWORD_CLAIM_SECRET_BLOCK = challengeParameters.SECRET_BLOCK;\n challengeResponses.TIMESTAMP = dateNow;\n challengeResponses.PASSWORD_CLAIM_SIGNATURE = signatureString;\n\n if (_this2.deviceKey != null) {\n challengeResponses.DEVICE_KEY = _this2.deviceKey;\n }\n\n var respondToAuthChallenge = function respondToAuthChallenge(challenge, challengeCallback) {\n return _this2.client.request('RespondToAuthChallenge', challenge, function (errChallenge, dataChallenge) {\n if (errChallenge && errChallenge.code === 'ResourceNotFoundException' && errChallenge.message.toLowerCase().indexOf('device') !== -1) {\n challengeResponses.DEVICE_KEY = null;\n _this2.deviceKey = null;\n _this2.randomPassword = null;\n _this2.deviceGroupKey = null;\n\n _this2.clearCachedDeviceKeyAndPassword();\n\n return respondToAuthChallenge(challenge, challengeCallback);\n }\n\n return challengeCallback(errChallenge, dataChallenge);\n });\n };\n\n var jsonReqResp = {\n ChallengeName: 'PASSWORD_VERIFIER',\n ClientId: _this2.pool.getClientId(),\n ChallengeResponses: challengeResponses,\n Session: data.Session,\n ClientMetadata: clientMetaData\n };\n\n if (_this2.getUserContextData()) {\n jsonReqResp.UserContextData = _this2.getUserContextData();\n }\n\n respondToAuthChallenge(jsonReqResp, function (errAuthenticate, dataAuthenticate) {\n if (errAuthenticate) {\n return callback.onFailure(errAuthenticate);\n }\n\n return _this2.authenticateUserInternal(dataAuthenticate, authenticationHelper, callback);\n });\n return undefined; // getPasswordAuthenticationKey callback end\n });\n return undefined;\n }); // getLargeAValue callback end\n\n });\n }\n /**\n * PRIVATE ONLY: This is an internal only method and should not\n * be directly called by the consumers.\n * @param {AuthenticationDetails} authDetails Contains the authentication data.\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {mfaRequired} callback.mfaRequired MFA code\n * required to continue.\n * @param {authSuccess} callback.onSuccess Called on success with the new session.\n * @returns {void}\n */\n ;\n\n _proto.authenticateUserPlainUsernamePassword = function authenticateUserPlainUsernamePassword(authDetails, callback) {\n var _this3 = this;\n\n var authParameters = {};\n authParameters.USERNAME = this.username;\n authParameters.PASSWORD = authDetails.getPassword();\n\n if (!authParameters.PASSWORD) {\n callback.onFailure(new Error('PASSWORD parameter is required'));\n return;\n }\n\n var authenticationHelper = new AuthenticationHelper(this.pool.getUserPoolId().split('_')[1]);\n this.getCachedDeviceKeyAndPassword();\n\n if (this.deviceKey != null) {\n authParameters.DEVICE_KEY = this.deviceKey;\n }\n\n var clientMetaData = Object.keys(authDetails.getValidationData()).length !== 0 ? authDetails.getValidationData() : authDetails.getClientMetadata();\n var jsonReq = {\n AuthFlow: 'USER_PASSWORD_AUTH',\n ClientId: this.pool.getClientId(),\n AuthParameters: authParameters,\n ClientMetadata: clientMetaData\n };\n\n if (this.getUserContextData(this.username)) {\n jsonReq.UserContextData = this.getUserContextData(this.username);\n } // USER_PASSWORD_AUTH happens in a single round-trip: client sends userName and password,\n // Cognito UserPools verifies password and returns tokens.\n\n\n this.client.request('InitiateAuth', jsonReq, function (err, authResult) {\n if (err) {\n return callback.onFailure(err);\n }\n\n return _this3.authenticateUserInternal(authResult, authenticationHelper, callback);\n });\n }\n /**\n * PRIVATE ONLY: This is an internal only method and should not\n * be directly called by the consumers.\n * @param {object} dataAuthenticate authentication data\n * @param {object} authenticationHelper helper created\n * @param {callback} callback passed on from caller\n * @returns {void}\n */\n ;\n\n _proto.authenticateUserInternal = function authenticateUserInternal(dataAuthenticate, authenticationHelper, callback) {\n var _this4 = this;\n\n var challengeName = dataAuthenticate.ChallengeName;\n var challengeParameters = dataAuthenticate.ChallengeParameters;\n\n if (challengeName === 'SMS_MFA') {\n this.Session = dataAuthenticate.Session;\n return callback.mfaRequired(challengeName, challengeParameters);\n }\n\n if (challengeName === 'SELECT_MFA_TYPE') {\n this.Session = dataAuthenticate.Session;\n return callback.selectMFAType(challengeName, challengeParameters);\n }\n\n if (challengeName === 'MFA_SETUP') {\n this.Session = dataAuthenticate.Session;\n return callback.mfaSetup(challengeName, challengeParameters);\n }\n\n if (challengeName === 'SOFTWARE_TOKEN_MFA') {\n this.Session = dataAuthenticate.Session;\n return callback.totpRequired(challengeName, challengeParameters);\n }\n\n if (challengeName === 'CUSTOM_CHALLENGE') {\n this.Session = dataAuthenticate.Session;\n return callback.customChallenge(challengeParameters);\n }\n\n if (challengeName === 'NEW_PASSWORD_REQUIRED') {\n this.Session = dataAuthenticate.Session;\n var userAttributes = null;\n var rawRequiredAttributes = null;\n var requiredAttributes = [];\n var userAttributesPrefix = authenticationHelper.getNewPasswordRequiredChallengeUserAttributePrefix();\n\n if (challengeParameters) {\n userAttributes = JSON.parse(dataAuthenticate.ChallengeParameters.userAttributes);\n rawRequiredAttributes = JSON.parse(dataAuthenticate.ChallengeParameters.requiredAttributes);\n }\n\n if (rawRequiredAttributes) {\n for (var i = 0; i < rawRequiredAttributes.length; i++) {\n requiredAttributes[i] = rawRequiredAttributes[i].substr(userAttributesPrefix.length);\n }\n }\n\n return callback.newPasswordRequired(userAttributes, requiredAttributes);\n }\n\n if (challengeName === 'DEVICE_SRP_AUTH') {\n this.getDeviceResponse(callback);\n return undefined;\n }\n\n this.signInUserSession = this.getCognitoUserSession(dataAuthenticate.AuthenticationResult);\n this.challengeName = challengeName;\n this.cacheTokens();\n var newDeviceMetadata = dataAuthenticate.AuthenticationResult.NewDeviceMetadata;\n\n if (newDeviceMetadata == null) {\n return callback.onSuccess(this.signInUserSession);\n }\n\n authenticationHelper.generateHashDevice(dataAuthenticate.AuthenticationResult.NewDeviceMetadata.DeviceGroupKey, dataAuthenticate.AuthenticationResult.NewDeviceMetadata.DeviceKey, function (errGenHash) {\n if (errGenHash) {\n return callback.onFailure(errGenHash);\n }\n\n var deviceSecretVerifierConfig = {\n Salt: Buffer.from(authenticationHelper.getSaltDevices(), 'hex').toString('base64'),\n PasswordVerifier: Buffer.from(authenticationHelper.getVerifierDevices(), 'hex').toString('base64')\n };\n _this4.verifierDevices = deviceSecretVerifierConfig.PasswordVerifier;\n _this4.deviceGroupKey = newDeviceMetadata.DeviceGroupKey;\n _this4.randomPassword = authenticationHelper.getRandomPassword();\n\n _this4.client.request('ConfirmDevice', {\n DeviceKey: newDeviceMetadata.DeviceKey,\n AccessToken: _this4.signInUserSession.getAccessToken().getJwtToken(),\n DeviceSecretVerifierConfig: deviceSecretVerifierConfig,\n DeviceName: userAgent\n }, function (errConfirm, dataConfirm) {\n if (errConfirm) {\n return callback.onFailure(errConfirm);\n }\n\n _this4.deviceKey = dataAuthenticate.AuthenticationResult.NewDeviceMetadata.DeviceKey;\n\n _this4.cacheDeviceKeyAndPassword();\n\n if (dataConfirm.UserConfirmationNecessary === true) {\n return callback.onSuccess(_this4.signInUserSession, dataConfirm.UserConfirmationNecessary);\n }\n\n return callback.onSuccess(_this4.signInUserSession);\n });\n\n return undefined;\n });\n return undefined;\n }\n /**\n * This method is user to complete the NEW_PASSWORD_REQUIRED challenge.\n * Pass the new password with any new user attributes to be updated.\n * User attribute keys must be of format userAttributes..\n * @param {string} newPassword new password for this user\n * @param {object} requiredAttributeData map with values for all required attributes\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {mfaRequired} callback.mfaRequired MFA code required to continue.\n * @param {customChallenge} callback.customChallenge Custom challenge\n * response required to continue.\n * @param {authSuccess} callback.onSuccess Called on success with the new session.\n * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n * @returns {void}\n */\n ;\n\n _proto.completeNewPasswordChallenge = function completeNewPasswordChallenge(newPassword, requiredAttributeData, callback, clientMetadata) {\n var _this5 = this;\n\n if (!newPassword) {\n return callback.onFailure(new Error('New password is required.'));\n }\n\n var authenticationHelper = new AuthenticationHelper(this.pool.getUserPoolId().split('_')[1]);\n var userAttributesPrefix = authenticationHelper.getNewPasswordRequiredChallengeUserAttributePrefix();\n var finalUserAttributes = {};\n\n if (requiredAttributeData) {\n Object.keys(requiredAttributeData).forEach(function (key) {\n finalUserAttributes[userAttributesPrefix + key] = requiredAttributeData[key];\n });\n }\n\n finalUserAttributes.NEW_PASSWORD = newPassword;\n finalUserAttributes.USERNAME = this.username;\n var jsonReq = {\n ChallengeName: 'NEW_PASSWORD_REQUIRED',\n ClientId: this.pool.getClientId(),\n ChallengeResponses: finalUserAttributes,\n Session: this.Session,\n ClientMetadata: clientMetadata\n };\n\n if (this.getUserContextData()) {\n jsonReq.UserContextData = this.getUserContextData();\n }\n\n this.client.request('RespondToAuthChallenge', jsonReq, function (errAuthenticate, dataAuthenticate) {\n if (errAuthenticate) {\n return callback.onFailure(errAuthenticate);\n }\n\n return _this5.authenticateUserInternal(dataAuthenticate, authenticationHelper, callback);\n });\n return undefined;\n }\n /**\n * This is used to get a session using device authentication. It is called at the end of user\n * authentication\n *\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {authSuccess} callback.onSuccess Called on success with the new session.\n * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n * @returns {void}\n * @private\n */\n ;\n\n _proto.getDeviceResponse = function getDeviceResponse(callback, clientMetadata) {\n var _this6 = this;\n\n var authenticationHelper = new AuthenticationHelper(this.deviceGroupKey);\n var dateHelper = new DateHelper();\n var authParameters = {};\n authParameters.USERNAME = this.username;\n authParameters.DEVICE_KEY = this.deviceKey;\n authenticationHelper.getLargeAValue(function (errAValue, aValue) {\n // getLargeAValue callback start\n if (errAValue) {\n callback.onFailure(errAValue);\n }\n\n authParameters.SRP_A = aValue.toString(16);\n var jsonReq = {\n ChallengeName: 'DEVICE_SRP_AUTH',\n ClientId: _this6.pool.getClientId(),\n ChallengeResponses: authParameters,\n ClientMetadata: clientMetadata\n };\n\n if (_this6.getUserContextData()) {\n jsonReq.UserContextData = _this6.getUserContextData();\n }\n\n _this6.client.request('RespondToAuthChallenge', jsonReq, function (err, data) {\n if (err) {\n return callback.onFailure(err);\n }\n\n var challengeParameters = data.ChallengeParameters;\n var serverBValue = new BigInteger(challengeParameters.SRP_B, 16);\n var salt = new BigInteger(challengeParameters.SALT, 16);\n authenticationHelper.getPasswordAuthenticationKey(_this6.deviceKey, _this6.randomPassword, serverBValue, salt, function (errHkdf, hkdf) {\n // getPasswordAuthenticationKey callback start\n if (errHkdf) {\n return callback.onFailure(errHkdf);\n }\n\n var dateNow = dateHelper.getNowString();\n var message = CryptoJS.lib.WordArray.create(Buffer.concat([Buffer.from(_this6.deviceGroupKey, 'utf8'), Buffer.from(_this6.deviceKey, 'utf8'), Buffer.from(challengeParameters.SECRET_BLOCK, 'base64'), Buffer.from(dateNow, 'utf8')]));\n var key = CryptoJS.lib.WordArray.create(hkdf);\n var signatureString = Base64.stringify(HmacSHA256(message, key));\n var challengeResponses = {};\n challengeResponses.USERNAME = _this6.username;\n challengeResponses.PASSWORD_CLAIM_SECRET_BLOCK = challengeParameters.SECRET_BLOCK;\n challengeResponses.TIMESTAMP = dateNow;\n challengeResponses.PASSWORD_CLAIM_SIGNATURE = signatureString;\n challengeResponses.DEVICE_KEY = _this6.deviceKey;\n var jsonReqResp = {\n ChallengeName: 'DEVICE_PASSWORD_VERIFIER',\n ClientId: _this6.pool.getClientId(),\n ChallengeResponses: challengeResponses,\n Session: data.Session\n };\n\n if (_this6.getUserContextData()) {\n jsonReqResp.UserContextData = _this6.getUserContextData();\n }\n\n _this6.client.request('RespondToAuthChallenge', jsonReqResp, function (errAuthenticate, dataAuthenticate) {\n if (errAuthenticate) {\n return callback.onFailure(errAuthenticate);\n }\n\n _this6.signInUserSession = _this6.getCognitoUserSession(dataAuthenticate.AuthenticationResult);\n\n _this6.cacheTokens();\n\n return callback.onSuccess(_this6.signInUserSession);\n });\n\n return undefined; // getPasswordAuthenticationKey callback end\n });\n return undefined;\n }); // getLargeAValue callback end\n\n });\n }\n /**\n * This is used for a certain user to confirm the registration by using a confirmation code\n * @param {string} confirmationCode Code entered by user.\n * @param {bool} forceAliasCreation Allow migrating from an existing email / phone number.\n * @param {nodeCallback} callback Called on success or error.\n * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n * @returns {void}\n */\n ;\n\n _proto.confirmRegistration = function confirmRegistration(confirmationCode, forceAliasCreation, callback, clientMetadata) {\n var jsonReq = {\n ClientId: this.pool.getClientId(),\n ConfirmationCode: confirmationCode,\n Username: this.username,\n ForceAliasCreation: forceAliasCreation,\n ClientMetadata: clientMetadata\n };\n\n if (this.getUserContextData()) {\n jsonReq.UserContextData = this.getUserContextData();\n }\n\n this.client.request('ConfirmSignUp', jsonReq, function (err) {\n if (err) {\n return callback(err, null);\n }\n\n return callback(null, 'SUCCESS');\n });\n }\n /**\n * This is used by the user once he has the responses to a custom challenge\n * @param {string} answerChallenge The custom challenge answer.\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {customChallenge} callback.customChallenge\n * Custom challenge response required to continue.\n * @param {authSuccess} callback.onSuccess Called on success with the new session.\n * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n * @returns {void}\n */\n ;\n\n _proto.sendCustomChallengeAnswer = function sendCustomChallengeAnswer(answerChallenge, callback, clientMetadata) {\n var _this7 = this;\n\n var challengeResponses = {};\n challengeResponses.USERNAME = this.username;\n challengeResponses.ANSWER = answerChallenge;\n var authenticationHelper = new AuthenticationHelper(this.pool.getUserPoolId().split('_')[1]);\n this.getCachedDeviceKeyAndPassword();\n\n if (this.deviceKey != null) {\n challengeResponses.DEVICE_KEY = this.deviceKey;\n }\n\n var jsonReq = {\n ChallengeName: 'CUSTOM_CHALLENGE',\n ChallengeResponses: challengeResponses,\n ClientId: this.pool.getClientId(),\n Session: this.Session,\n ClientMetadata: clientMetadata\n };\n\n if (this.getUserContextData()) {\n jsonReq.UserContextData = this.getUserContextData();\n }\n\n this.client.request('RespondToAuthChallenge', jsonReq, function (err, data) {\n if (err) {\n return callback.onFailure(err);\n }\n\n return _this7.authenticateUserInternal(data, authenticationHelper, callback);\n });\n }\n /**\n * This is used by the user once he has an MFA code\n * @param {string} confirmationCode The MFA code entered by the user.\n * @param {object} callback Result callback map.\n * @param {string} mfaType The mfa we are replying to.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {authSuccess} callback.onSuccess Called on success with the new session.\n * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n * @returns {void}\n */\n ;\n\n _proto.sendMFACode = function sendMFACode(confirmationCode, callback, mfaType, clientMetadata) {\n var _this8 = this;\n\n var challengeResponses = {};\n challengeResponses.USERNAME = this.username;\n challengeResponses.SMS_MFA_CODE = confirmationCode;\n var mfaTypeSelection = mfaType || 'SMS_MFA';\n\n if (mfaTypeSelection === 'SOFTWARE_TOKEN_MFA') {\n challengeResponses.SOFTWARE_TOKEN_MFA_CODE = confirmationCode;\n }\n\n if (this.deviceKey != null) {\n challengeResponses.DEVICE_KEY = this.deviceKey;\n }\n\n var jsonReq = {\n ChallengeName: mfaTypeSelection,\n ChallengeResponses: challengeResponses,\n ClientId: this.pool.getClientId(),\n Session: this.Session,\n ClientMetadata: clientMetadata\n };\n\n if (this.getUserContextData()) {\n jsonReq.UserContextData = this.getUserContextData();\n }\n\n this.client.request('RespondToAuthChallenge', jsonReq, function (err, dataAuthenticate) {\n if (err) {\n return callback.onFailure(err);\n }\n\n var challengeName = dataAuthenticate.ChallengeName;\n\n if (challengeName === 'DEVICE_SRP_AUTH') {\n _this8.getDeviceResponse(callback);\n\n return undefined;\n }\n\n _this8.signInUserSession = _this8.getCognitoUserSession(dataAuthenticate.AuthenticationResult);\n\n _this8.cacheTokens();\n\n if (dataAuthenticate.AuthenticationResult.NewDeviceMetadata == null) {\n return callback.onSuccess(_this8.signInUserSession);\n }\n\n var authenticationHelper = new AuthenticationHelper(_this8.pool.getUserPoolId().split('_')[1]);\n authenticationHelper.generateHashDevice(dataAuthenticate.AuthenticationResult.NewDeviceMetadata.DeviceGroupKey, dataAuthenticate.AuthenticationResult.NewDeviceMetadata.DeviceKey, function (errGenHash) {\n if (errGenHash) {\n return callback.onFailure(errGenHash);\n }\n\n var deviceSecretVerifierConfig = {\n Salt: Buffer.from(authenticationHelper.getSaltDevices(), 'hex').toString('base64'),\n PasswordVerifier: Buffer.from(authenticationHelper.getVerifierDevices(), 'hex').toString('base64')\n };\n _this8.verifierDevices = deviceSecretVerifierConfig.PasswordVerifier;\n _this8.deviceGroupKey = dataAuthenticate.AuthenticationResult.NewDeviceMetadata.DeviceGroupKey;\n _this8.randomPassword = authenticationHelper.getRandomPassword();\n\n _this8.client.request('ConfirmDevice', {\n DeviceKey: dataAuthenticate.AuthenticationResult.NewDeviceMetadata.DeviceKey,\n AccessToken: _this8.signInUserSession.getAccessToken().getJwtToken(),\n DeviceSecretVerifierConfig: deviceSecretVerifierConfig,\n DeviceName: userAgent\n }, function (errConfirm, dataConfirm) {\n if (errConfirm) {\n return callback.onFailure(errConfirm);\n }\n\n _this8.deviceKey = dataAuthenticate.AuthenticationResult.NewDeviceMetadata.DeviceKey;\n\n _this8.cacheDeviceKeyAndPassword();\n\n if (dataConfirm.UserConfirmationNecessary === true) {\n return callback.onSuccess(_this8.signInUserSession, dataConfirm.UserConfirmationNecessary);\n }\n\n return callback.onSuccess(_this8.signInUserSession);\n });\n\n return undefined;\n });\n return undefined;\n });\n }\n /**\n * This is used by an authenticated user to change the current password\n * @param {string} oldUserPassword The current password.\n * @param {string} newUserPassword The requested new password.\n * @param {nodeCallback} callback Called on success or error.\n * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n * @returns {void}\n */\n ;\n\n _proto.changePassword = function changePassword(oldUserPassword, newUserPassword, callback, clientMetadata) {\n if (!(this.signInUserSession != null && this.signInUserSession.isValid())) {\n return callback(new Error('User is not authenticated'), null);\n }\n\n this.client.request('ChangePassword', {\n PreviousPassword: oldUserPassword,\n ProposedPassword: newUserPassword,\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken(),\n ClientMetadata: clientMetadata\n }, function (err) {\n if (err) {\n return callback(err, null);\n }\n\n return callback(null, 'SUCCESS');\n });\n return undefined;\n }\n /**\n * This is used by an authenticated user to enable MFA for itself\n * @deprecated\n * @param {nodeCallback} callback Called on success or error.\n * @returns {void}\n */\n ;\n\n _proto.enableMFA = function enableMFA(callback) {\n if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n return callback(new Error('User is not authenticated'), null);\n }\n\n var mfaOptions = [];\n var mfaEnabled = {\n DeliveryMedium: 'SMS',\n AttributeName: 'phone_number'\n };\n mfaOptions.push(mfaEnabled);\n this.client.request('SetUserSettings', {\n MFAOptions: mfaOptions,\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n }, function (err) {\n if (err) {\n return callback(err, null);\n }\n\n return callback(null, 'SUCCESS');\n });\n return undefined;\n }\n /**\n * This is used by an authenticated user to enable MFA for itself\n * @param {IMfaSettings} smsMfaSettings the sms mfa settings\n * @param {IMFASettings} softwareTokenMfaSettings the software token mfa settings\n * @param {nodeCallback} callback Called on success or error.\n * @returns {void}\n */\n ;\n\n _proto.setUserMfaPreference = function setUserMfaPreference(smsMfaSettings, softwareTokenMfaSettings, callback) {\n if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n return callback(new Error('User is not authenticated'), null);\n }\n\n this.client.request('SetUserMFAPreference', {\n SMSMfaSettings: smsMfaSettings,\n SoftwareTokenMfaSettings: softwareTokenMfaSettings,\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n }, function (err) {\n if (err) {\n return callback(err, null);\n }\n\n return callback(null, 'SUCCESS');\n });\n return undefined;\n }\n /**\n * This is used by an authenticated user to disable MFA for itself\n * @deprecated\n * @param {nodeCallback} callback Called on success or error.\n * @returns {void}\n */\n ;\n\n _proto.disableMFA = function disableMFA(callback) {\n if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n return callback(new Error('User is not authenticated'), null);\n }\n\n var mfaOptions = [];\n this.client.request('SetUserSettings', {\n MFAOptions: mfaOptions,\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n }, function (err) {\n if (err) {\n return callback(err, null);\n }\n\n return callback(null, 'SUCCESS');\n });\n return undefined;\n }\n /**\n * This is used by an authenticated user to delete itself\n * @param {nodeCallback} callback Called on success or error.\n * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n * @returns {void}\n */\n ;\n\n _proto.deleteUser = function deleteUser(callback, clientMetadata) {\n var _this9 = this;\n\n if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n return callback(new Error('User is not authenticated'), null);\n }\n\n this.client.request('DeleteUser', {\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken(),\n ClientMetadata: clientMetadata\n }, function (err) {\n if (err) {\n return callback(err, null);\n }\n\n _this9.clearCachedUser();\n\n return callback(null, 'SUCCESS');\n });\n return undefined;\n }\n /**\n * @typedef {CognitoUserAttribute | { Name:string, Value:string }} AttributeArg\n */\n\n /**\n * This is used by an authenticated user to change a list of attributes\n * @param {AttributeArg[]} attributes A list of the new user attributes.\n * @param {nodeCallback} callback Called on success or error.\n * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n * @returns {void}\n */\n ;\n\n _proto.updateAttributes = function updateAttributes(attributes, callback, clientMetadata) {\n var _this10 = this;\n\n if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n return callback(new Error('User is not authenticated'), null);\n }\n\n this.client.request('UpdateUserAttributes', {\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken(),\n UserAttributes: attributes,\n ClientMetadata: clientMetadata\n }, function (err) {\n if (err) {\n return callback(err, null);\n } // update cached user\n\n\n return _this10.getUserData(function () {\n return callback(null, 'SUCCESS');\n }, {\n bypassCache: true\n });\n });\n return undefined;\n }\n /**\n * This is used by an authenticated user to get a list of attributes\n * @param {nodeCallback} callback Called on success or error.\n * @returns {void}\n */\n ;\n\n _proto.getUserAttributes = function getUserAttributes(callback) {\n if (!(this.signInUserSession != null && this.signInUserSession.isValid())) {\n return callback(new Error('User is not authenticated'), null);\n }\n\n this.client.request('GetUser', {\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n }, function (err, userData) {\n if (err) {\n return callback(err, null);\n }\n\n var attributeList = [];\n\n for (var i = 0; i < userData.UserAttributes.length; i++) {\n var attribute = {\n Name: userData.UserAttributes[i].Name,\n Value: userData.UserAttributes[i].Value\n };\n var userAttribute = new CognitoUserAttribute(attribute);\n attributeList.push(userAttribute);\n }\n\n return callback(null, attributeList);\n });\n return undefined;\n }\n /**\n * This is used by an authenticated user to get the MFAOptions\n * @param {nodeCallback} callback Called on success or error.\n * @returns {void}\n */\n ;\n\n _proto.getMFAOptions = function getMFAOptions(callback) {\n if (!(this.signInUserSession != null && this.signInUserSession.isValid())) {\n return callback(new Error('User is not authenticated'), null);\n }\n\n this.client.request('GetUser', {\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n }, function (err, userData) {\n if (err) {\n return callback(err, null);\n }\n\n return callback(null, userData.MFAOptions);\n });\n return undefined;\n }\n /**\n * PRIVATE ONLY: This is an internal only method and should not\n * be directly called by the consumers.\n */\n ;\n\n _proto.createGetUserRequest = function createGetUserRequest() {\n return this.client.promisifyRequest('GetUser', {\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n });\n }\n /**\n * PRIVATE ONLY: This is an internal only method and should not\n * be directly called by the consumers.\n */\n ;\n\n _proto.refreshSessionIfPossible = function refreshSessionIfPossible(options) {\n var _this11 = this;\n\n if (options === void 0) {\n options = {};\n }\n\n // best effort, if not possible\n return new Promise(function (resolve) {\n var refresh = _this11.signInUserSession.getRefreshToken();\n\n if (refresh && refresh.getToken()) {\n _this11.refreshSession(refresh, resolve, options.clientMetadata);\n } else {\n resolve();\n }\n });\n }\n /**\n * @typedef {Object} GetUserDataOptions \n * @property {boolean} bypassCache - force getting data from Cognito service\n * @property {Record} clientMetadata - clientMetadata for getSession\n */\n\n /**\n * This is used by an authenticated users to get the userData\n * @param {nodeCallback} callback Called on success or error.\n * @param {GetUserDataOptions} params\n * @returns {void}\n */\n ;\n\n _proto.getUserData = function getUserData(callback, params) {\n var _this12 = this;\n\n if (!(this.signInUserSession != null && this.signInUserSession.isValid())) {\n this.clearCachedUserData();\n return callback(new Error('User is not authenticated'), null);\n }\n\n var userData = this.getUserDataFromCache();\n\n if (!userData) {\n this.fetchUserData().then(function (data) {\n callback(null, data);\n })[\"catch\"](callback);\n return;\n }\n\n if (this.isFetchUserDataAndTokenRequired(params)) {\n this.fetchUserData().then(function (data) {\n return _this12.refreshSessionIfPossible(params).then(function () {\n return data;\n });\n }).then(function (data) {\n return callback(null, data);\n })[\"catch\"](callback);\n return;\n }\n\n try {\n callback(null, JSON.parse(userData));\n return;\n } catch (err) {\n this.clearCachedUserData();\n callback(err, null);\n return;\n }\n }\n /**\n *\n * PRIVATE ONLY: This is an internal only method and should not\n * be directly called by the consumers.\n */\n ;\n\n _proto.getUserDataFromCache = function getUserDataFromCache() {\n var userData = this.storage.getItem(this.userDataKey);\n return userData;\n }\n /**\n *\n * PRIVATE ONLY: This is an internal only method and should not\n * be directly called by the consumers.\n */\n ;\n\n _proto.isFetchUserDataAndTokenRequired = function isFetchUserDataAndTokenRequired(params) {\n var _ref = params || {},\n _ref$bypassCache = _ref.bypassCache,\n bypassCache = _ref$bypassCache === void 0 ? false : _ref$bypassCache;\n\n return bypassCache;\n }\n /**\n *\n * PRIVATE ONLY: This is an internal only method and should not\n * be directly called by the consumers.\n */\n ;\n\n _proto.fetchUserData = function fetchUserData() {\n var _this13 = this;\n\n return this.createGetUserRequest().then(function (data) {\n _this13.cacheUserData(data);\n\n return data;\n });\n }\n /**\n * This is used by an authenticated user to delete a list of attributes\n * @param {string[]} attributeList Names of the attributes to delete.\n * @param {nodeCallback} callback Called on success or error.\n * @returns {void}\n */\n ;\n\n _proto.deleteAttributes = function deleteAttributes(attributeList, callback) {\n if (!(this.signInUserSession != null && this.signInUserSession.isValid())) {\n return callback(new Error('User is not authenticated'), null);\n }\n\n this.client.request('DeleteUserAttributes', {\n UserAttributeNames: attributeList,\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n }, function (err) {\n if (err) {\n return callback(err, null);\n }\n\n return callback(null, 'SUCCESS');\n });\n return undefined;\n }\n /**\n * This is used by a user to resend a confirmation code\n * @param {nodeCallback} callback Called on success or error.\n * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n * @returns {void}\n */\n ;\n\n _proto.resendConfirmationCode = function resendConfirmationCode(callback, clientMetadata) {\n var jsonReq = {\n ClientId: this.pool.getClientId(),\n Username: this.username,\n ClientMetadata: clientMetadata\n };\n this.client.request('ResendConfirmationCode', jsonReq, function (err, result) {\n if (err) {\n return callback(err, null);\n }\n\n return callback(null, result);\n });\n }\n /**\n * @typedef {Object} GetSessionOptions \n * @property {Record} clientMetadata - clientMetadata for getSession\n */\n\n /**\n * This is used to get a session, either from the session object\n * or from the local storage, or by using a refresh token\n *\n * @param {nodeCallback} callback Called on success or error.\n * @param {GetSessionOptions} options\n * @returns {void}\n */\n ;\n\n _proto.getSession = function getSession(callback, options) {\n if (this.username == null) {\n return callback(new Error('Username is null. Cannot retrieve a new session'), null);\n }\n\n if (this.signInUserSession != null && this.signInUserSession.isValid()) {\n return callback(null, this.signInUserSession);\n }\n\n var keyPrefix = \"CognitoIdentityServiceProvider.\" + this.pool.getClientId() + \".\" + this.username;\n var idTokenKey = keyPrefix + \".idToken\";\n var accessTokenKey = keyPrefix + \".accessToken\";\n var refreshTokenKey = keyPrefix + \".refreshToken\";\n var clockDriftKey = keyPrefix + \".clockDrift\";\n\n if (this.storage.getItem(idTokenKey)) {\n var idToken = new CognitoIdToken({\n IdToken: this.storage.getItem(idTokenKey)\n });\n var accessToken = new CognitoAccessToken({\n AccessToken: this.storage.getItem(accessTokenKey)\n });\n var refreshToken = new CognitoRefreshToken({\n RefreshToken: this.storage.getItem(refreshTokenKey)\n });\n var clockDrift = parseInt(this.storage.getItem(clockDriftKey), 0) || 0;\n var sessionData = {\n IdToken: idToken,\n AccessToken: accessToken,\n RefreshToken: refreshToken,\n ClockDrift: clockDrift\n };\n var cachedSession = new CognitoUserSession(sessionData);\n\n if (cachedSession.isValid()) {\n this.signInUserSession = cachedSession;\n return callback(null, this.signInUserSession);\n }\n\n if (!refreshToken.getToken()) {\n return callback(new Error('Cannot retrieve a new session. Please authenticate.'), null);\n }\n\n this.refreshSession(refreshToken, callback, options.clientMetadata);\n } else {\n callback(new Error('Local storage is missing an ID Token, Please authenticate'), null);\n }\n\n return undefined;\n }\n /**\n * This uses the refreshToken to retrieve a new session\n * @param {CognitoRefreshToken} refreshToken A previous session's refresh token.\n * @param {nodeCallback} callback Called on success or error.\n * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n * @returns {void}\n */\n ;\n\n _proto.refreshSession = function refreshSession(refreshToken, callback, clientMetadata) {\n var _this14 = this;\n\n var wrappedCallback = this.pool.wrapRefreshSessionCallback ? this.pool.wrapRefreshSessionCallback(callback) : callback;\n var authParameters = {};\n authParameters.REFRESH_TOKEN = refreshToken.getToken();\n var keyPrefix = \"CognitoIdentityServiceProvider.\" + this.pool.getClientId();\n var lastUserKey = keyPrefix + \".LastAuthUser\";\n\n if (this.storage.getItem(lastUserKey)) {\n this.username = this.storage.getItem(lastUserKey);\n var deviceKeyKey = keyPrefix + \".\" + this.username + \".deviceKey\";\n this.deviceKey = this.storage.getItem(deviceKeyKey);\n authParameters.DEVICE_KEY = this.deviceKey;\n }\n\n var jsonReq = {\n ClientId: this.pool.getClientId(),\n AuthFlow: 'REFRESH_TOKEN_AUTH',\n AuthParameters: authParameters,\n ClientMetadata: clientMetadata\n };\n\n if (this.getUserContextData()) {\n jsonReq.UserContextData = this.getUserContextData();\n }\n\n this.client.request('InitiateAuth', jsonReq, function (err, authResult) {\n if (err) {\n if (err.code === 'NotAuthorizedException') {\n _this14.clearCachedUser();\n }\n\n return wrappedCallback(err, null);\n }\n\n if (authResult) {\n var authenticationResult = authResult.AuthenticationResult;\n\n if (!Object.prototype.hasOwnProperty.call(authenticationResult, 'RefreshToken')) {\n authenticationResult.RefreshToken = refreshToken.getToken();\n }\n\n _this14.signInUserSession = _this14.getCognitoUserSession(authenticationResult);\n\n _this14.cacheTokens();\n\n return wrappedCallback(null, _this14.signInUserSession);\n }\n\n return undefined;\n });\n }\n /**\n * This is used to save the session tokens to local storage\n * @returns {void}\n */\n ;\n\n _proto.cacheTokens = function cacheTokens() {\n var keyPrefix = \"CognitoIdentityServiceProvider.\" + this.pool.getClientId();\n var idTokenKey = keyPrefix + \".\" + this.username + \".idToken\";\n var accessTokenKey = keyPrefix + \".\" + this.username + \".accessToken\";\n var refreshTokenKey = keyPrefix + \".\" + this.username + \".refreshToken\";\n var clockDriftKey = keyPrefix + \".\" + this.username + \".clockDrift\";\n var lastUserKey = keyPrefix + \".LastAuthUser\";\n this.storage.setItem(idTokenKey, this.signInUserSession.getIdToken().getJwtToken());\n this.storage.setItem(accessTokenKey, this.signInUserSession.getAccessToken().getJwtToken());\n this.storage.setItem(refreshTokenKey, this.signInUserSession.getRefreshToken().getToken());\n this.storage.setItem(clockDriftKey, \"\" + this.signInUserSession.getClockDrift());\n this.storage.setItem(lastUserKey, this.username);\n }\n /**\n * This is to cache user data\n */\n ;\n\n _proto.cacheUserData = function cacheUserData(userData) {\n this.storage.setItem(this.userDataKey, JSON.stringify(userData));\n }\n /**\n * This is to remove cached user data\n */\n ;\n\n _proto.clearCachedUserData = function clearCachedUserData() {\n this.storage.removeItem(this.userDataKey);\n };\n\n _proto.clearCachedUser = function clearCachedUser() {\n this.clearCachedTokens();\n this.clearCachedUserData();\n }\n /**\n * This is used to cache the device key and device group and device password\n * @returns {void}\n */\n ;\n\n _proto.cacheDeviceKeyAndPassword = function cacheDeviceKeyAndPassword() {\n var keyPrefix = \"CognitoIdentityServiceProvider.\" + this.pool.getClientId() + \".\" + this.username;\n var deviceKeyKey = keyPrefix + \".deviceKey\";\n var randomPasswordKey = keyPrefix + \".randomPasswordKey\";\n var deviceGroupKeyKey = keyPrefix + \".deviceGroupKey\";\n this.storage.setItem(deviceKeyKey, this.deviceKey);\n this.storage.setItem(randomPasswordKey, this.randomPassword);\n this.storage.setItem(deviceGroupKeyKey, this.deviceGroupKey);\n }\n /**\n * This is used to get current device key and device group and device password\n * @returns {void}\n */\n ;\n\n _proto.getCachedDeviceKeyAndPassword = function getCachedDeviceKeyAndPassword() {\n var keyPrefix = \"CognitoIdentityServiceProvider.\" + this.pool.getClientId() + \".\" + this.username;\n var deviceKeyKey = keyPrefix + \".deviceKey\";\n var randomPasswordKey = keyPrefix + \".randomPasswordKey\";\n var deviceGroupKeyKey = keyPrefix + \".deviceGroupKey\";\n\n if (this.storage.getItem(deviceKeyKey)) {\n this.deviceKey = this.storage.getItem(deviceKeyKey);\n this.randomPassword = this.storage.getItem(randomPasswordKey);\n this.deviceGroupKey = this.storage.getItem(deviceGroupKeyKey);\n }\n }\n /**\n * This is used to clear the device key info from local storage\n * @returns {void}\n */\n ;\n\n _proto.clearCachedDeviceKeyAndPassword = function clearCachedDeviceKeyAndPassword() {\n var keyPrefix = \"CognitoIdentityServiceProvider.\" + this.pool.getClientId() + \".\" + this.username;\n var deviceKeyKey = keyPrefix + \".deviceKey\";\n var randomPasswordKey = keyPrefix + \".randomPasswordKey\";\n var deviceGroupKeyKey = keyPrefix + \".deviceGroupKey\";\n this.storage.removeItem(deviceKeyKey);\n this.storage.removeItem(randomPasswordKey);\n this.storage.removeItem(deviceGroupKeyKey);\n }\n /**\n * This is used to clear the session tokens from local storage\n * @returns {void}\n */\n ;\n\n _proto.clearCachedTokens = function clearCachedTokens() {\n var keyPrefix = \"CognitoIdentityServiceProvider.\" + this.pool.getClientId();\n var idTokenKey = keyPrefix + \".\" + this.username + \".idToken\";\n var accessTokenKey = keyPrefix + \".\" + this.username + \".accessToken\";\n var refreshTokenKey = keyPrefix + \".\" + this.username + \".refreshToken\";\n var lastUserKey = keyPrefix + \".LastAuthUser\";\n var clockDriftKey = keyPrefix + \".\" + this.username + \".clockDrift\";\n this.storage.removeItem(idTokenKey);\n this.storage.removeItem(accessTokenKey);\n this.storage.removeItem(refreshTokenKey);\n this.storage.removeItem(lastUserKey);\n this.storage.removeItem(clockDriftKey);\n }\n /**\n * This is used to build a user session from tokens retrieved in the authentication result\n * @param {object} authResult Successful auth response from server.\n * @returns {CognitoUserSession} The new user session.\n * @private\n */\n ;\n\n _proto.getCognitoUserSession = function getCognitoUserSession(authResult) {\n var idToken = new CognitoIdToken(authResult);\n var accessToken = new CognitoAccessToken(authResult);\n var refreshToken = new CognitoRefreshToken(authResult);\n var sessionData = {\n IdToken: idToken,\n AccessToken: accessToken,\n RefreshToken: refreshToken\n };\n return new CognitoUserSession(sessionData);\n }\n /**\n * This is used to initiate a forgot password request\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {inputVerificationCode?} callback.inputVerificationCode\n * Optional callback raised instead of onSuccess with response data.\n * @param {onSuccess} callback.onSuccess Called on success.\n * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n * @returns {void}\n */\n ;\n\n _proto.forgotPassword = function forgotPassword(callback, clientMetadata) {\n var jsonReq = {\n ClientId: this.pool.getClientId(),\n Username: this.username,\n ClientMetadata: clientMetadata\n };\n\n if (this.getUserContextData()) {\n jsonReq.UserContextData = this.getUserContextData();\n }\n\n this.client.request('ForgotPassword', jsonReq, function (err, data) {\n if (err) {\n return callback.onFailure(err);\n }\n\n if (typeof callback.inputVerificationCode === 'function') {\n return callback.inputVerificationCode(data);\n }\n\n return callback.onSuccess(data);\n });\n }\n /**\n * This is used to confirm a new password using a confirmationCode\n * @param {string} confirmationCode Code entered by user.\n * @param {string} newPassword Confirm new password.\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {onSuccess} callback.onSuccess Called on success.\n * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n * @returns {void}\n */\n ;\n\n _proto.confirmPassword = function confirmPassword(confirmationCode, newPassword, callback, clientMetadata) {\n var jsonReq = {\n ClientId: this.pool.getClientId(),\n Username: this.username,\n ConfirmationCode: confirmationCode,\n Password: newPassword,\n ClientMetadata: clientMetadata\n };\n\n if (this.getUserContextData()) {\n jsonReq.UserContextData = this.getUserContextData();\n }\n\n this.client.request('ConfirmForgotPassword', jsonReq, function (err) {\n if (err) {\n return callback.onFailure(err);\n }\n\n return callback.onSuccess();\n });\n }\n /**\n * This is used to initiate an attribute confirmation request\n * @param {string} attributeName User attribute that needs confirmation.\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {inputVerificationCode} callback.inputVerificationCode Called on success.\n * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n * @returns {void}\n */\n ;\n\n _proto.getAttributeVerificationCode = function getAttributeVerificationCode(attributeName, callback, clientMetadata) {\n if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n return callback.onFailure(new Error('User is not authenticated'));\n }\n\n this.client.request('GetUserAttributeVerificationCode', {\n AttributeName: attributeName,\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken(),\n ClientMetadata: clientMetadata\n }, function (err, data) {\n if (err) {\n return callback.onFailure(err);\n }\n\n if (typeof callback.inputVerificationCode === 'function') {\n return callback.inputVerificationCode(data);\n }\n\n return callback.onSuccess();\n });\n return undefined;\n }\n /**\n * This is used to confirm an attribute using a confirmation code\n * @param {string} attributeName Attribute being confirmed.\n * @param {string} confirmationCode Code entered by user.\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {onSuccess} callback.onSuccess Called on success.\n * @returns {void}\n */\n ;\n\n _proto.verifyAttribute = function verifyAttribute(attributeName, confirmationCode, callback) {\n if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n return callback.onFailure(new Error('User is not authenticated'));\n }\n\n this.client.request('VerifyUserAttribute', {\n AttributeName: attributeName,\n Code: confirmationCode,\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n }, function (err) {\n if (err) {\n return callback.onFailure(err);\n }\n\n return callback.onSuccess('SUCCESS');\n });\n return undefined;\n }\n /**\n * This is used to get the device information using the current device key\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {onSuccess<*>} callback.onSuccess Called on success with device data.\n * @returns {void}\n */\n ;\n\n _proto.getDevice = function getDevice(callback) {\n if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n return callback.onFailure(new Error('User is not authenticated'));\n }\n\n this.client.request('GetDevice', {\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken(),\n DeviceKey: this.deviceKey\n }, function (err, data) {\n if (err) {\n return callback.onFailure(err);\n }\n\n return callback.onSuccess(data);\n });\n return undefined;\n }\n /**\n * This is used to forget a specific device\n * @param {string} deviceKey Device key.\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {onSuccess} callback.onSuccess Called on success.\n * @returns {void}\n */\n ;\n\n _proto.forgetSpecificDevice = function forgetSpecificDevice(deviceKey, callback) {\n if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n return callback.onFailure(new Error('User is not authenticated'));\n }\n\n this.client.request('ForgetDevice', {\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken(),\n DeviceKey: deviceKey\n }, function (err) {\n if (err) {\n return callback.onFailure(err);\n }\n\n return callback.onSuccess('SUCCESS');\n });\n return undefined;\n }\n /**\n * This is used to forget the current device\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {onSuccess} callback.onSuccess Called on success.\n * @returns {void}\n */\n ;\n\n _proto.forgetDevice = function forgetDevice(callback) {\n var _this15 = this;\n\n this.forgetSpecificDevice(this.deviceKey, {\n onFailure: callback.onFailure,\n onSuccess: function onSuccess(result) {\n _this15.deviceKey = null;\n _this15.deviceGroupKey = null;\n _this15.randomPassword = null;\n\n _this15.clearCachedDeviceKeyAndPassword();\n\n return callback.onSuccess(result);\n }\n });\n }\n /**\n * This is used to set the device status as remembered\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {onSuccess} callback.onSuccess Called on success.\n * @returns {void}\n */\n ;\n\n _proto.setDeviceStatusRemembered = function setDeviceStatusRemembered(callback) {\n if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n return callback.onFailure(new Error('User is not authenticated'));\n }\n\n this.client.request('UpdateDeviceStatus', {\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken(),\n DeviceKey: this.deviceKey,\n DeviceRememberedStatus: 'remembered'\n }, function (err) {\n if (err) {\n return callback.onFailure(err);\n }\n\n return callback.onSuccess('SUCCESS');\n });\n return undefined;\n }\n /**\n * This is used to set the device status as not remembered\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {onSuccess} callback.onSuccess Called on success.\n * @returns {void}\n */\n ;\n\n _proto.setDeviceStatusNotRemembered = function setDeviceStatusNotRemembered(callback) {\n if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n return callback.onFailure(new Error('User is not authenticated'));\n }\n\n this.client.request('UpdateDeviceStatus', {\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken(),\n DeviceKey: this.deviceKey,\n DeviceRememberedStatus: 'not_remembered'\n }, function (err) {\n if (err) {\n return callback.onFailure(err);\n }\n\n return callback.onSuccess('SUCCESS');\n });\n return undefined;\n }\n /**\n * This is used to list all devices for a user\n *\n * @param {int} limit the number of devices returned in a call\n * @param {string | null} paginationToken the pagination token in case any was returned before\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {onSuccess<*>} callback.onSuccess Called on success with device list.\n * @returns {void}\n */\n ;\n\n _proto.listDevices = function listDevices(limit, paginationToken, callback) {\n if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n return callback.onFailure(new Error('User is not authenticated'));\n }\n\n var requestParams = {\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken(),\n Limit: limit\n };\n\n if (paginationToken) {\n requestParams.PaginationToken = paginationToken;\n }\n\n this.client.request('ListDevices', requestParams, function (err, data) {\n if (err) {\n return callback.onFailure(err);\n }\n\n return callback.onSuccess(data);\n });\n return undefined;\n }\n /**\n * This is used to globally revoke all tokens issued to a user\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {onSuccess} callback.onSuccess Called on success.\n * @returns {void}\n */\n ;\n\n _proto.globalSignOut = function globalSignOut(callback) {\n var _this16 = this;\n\n if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n return callback.onFailure(new Error('User is not authenticated'));\n }\n\n this.client.request('GlobalSignOut', {\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n }, function (err) {\n if (err) {\n return callback.onFailure(err);\n }\n\n _this16.clearCachedUser();\n\n return callback.onSuccess('SUCCESS');\n });\n return undefined;\n }\n /**\n * This is used for the user to signOut of the application and clear the cached tokens.\n * @returns {void}\n */\n ;\n\n _proto.signOut = function signOut() {\n this.signInUserSession = null;\n this.clearCachedUser();\n }\n /**\n * This is used by a user trying to select a given MFA\n * @param {string} answerChallenge the mfa the user wants\n * @param {nodeCallback} callback Called on success or error.\n * @returns {void}\n */\n ;\n\n _proto.sendMFASelectionAnswer = function sendMFASelectionAnswer(answerChallenge, callback) {\n var _this17 = this;\n\n var challengeResponses = {};\n challengeResponses.USERNAME = this.username;\n challengeResponses.ANSWER = answerChallenge;\n var jsonReq = {\n ChallengeName: 'SELECT_MFA_TYPE',\n ChallengeResponses: challengeResponses,\n ClientId: this.pool.getClientId(),\n Session: this.Session\n };\n\n if (this.getUserContextData()) {\n jsonReq.UserContextData = this.getUserContextData();\n }\n\n this.client.request('RespondToAuthChallenge', jsonReq, function (err, data) {\n if (err) {\n return callback.onFailure(err);\n }\n\n _this17.Session = data.Session;\n\n if (answerChallenge === 'SMS_MFA') {\n return callback.mfaRequired(data.ChallengeName, data.ChallengeParameters);\n }\n\n if (answerChallenge === 'SOFTWARE_TOKEN_MFA') {\n return callback.totpRequired(data.ChallengeName, data.ChallengeParameters);\n }\n\n return undefined;\n });\n }\n /**\n * This returns the user context data for advanced security feature.\n * @returns {void}\n */\n ;\n\n _proto.getUserContextData = function getUserContextData() {\n var pool = this.pool;\n return pool.getUserContextData(this.username);\n }\n /**\n * This is used by an authenticated or a user trying to authenticate to associate a TOTP MFA\n * @param {nodeCallback} callback Called on success or error.\n * @returns {void}\n */\n ;\n\n _proto.associateSoftwareToken = function associateSoftwareToken(callback) {\n var _this18 = this;\n\n if (!(this.signInUserSession != null && this.signInUserSession.isValid())) {\n this.client.request('AssociateSoftwareToken', {\n Session: this.Session\n }, function (err, data) {\n if (err) {\n return callback.onFailure(err);\n }\n\n _this18.Session = data.Session;\n return callback.associateSecretCode(data.SecretCode);\n });\n } else {\n this.client.request('AssociateSoftwareToken', {\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n }, function (err, data) {\n if (err) {\n return callback.onFailure(err);\n }\n\n return callback.associateSecretCode(data.SecretCode);\n });\n }\n }\n /**\n * This is used by an authenticated or a user trying to authenticate to verify a TOTP MFA\n * @param {string} totpCode The MFA code entered by the user.\n * @param {string} friendlyDeviceName The device name we are assigning to the device.\n * @param {nodeCallback} callback Called on success or error.\n * @returns {void}\n */\n ;\n\n _proto.verifySoftwareToken = function verifySoftwareToken(totpCode, friendlyDeviceName, callback) {\n var _this19 = this;\n\n if (!(this.signInUserSession != null && this.signInUserSession.isValid())) {\n this.client.request('VerifySoftwareToken', {\n Session: this.Session,\n UserCode: totpCode,\n FriendlyDeviceName: friendlyDeviceName\n }, function (err, data) {\n if (err) {\n return callback.onFailure(err);\n }\n\n _this19.Session = data.Session;\n var challengeResponses = {};\n challengeResponses.USERNAME = _this19.username;\n var jsonReq = {\n ChallengeName: 'MFA_SETUP',\n ClientId: _this19.pool.getClientId(),\n ChallengeResponses: challengeResponses,\n Session: _this19.Session\n };\n\n if (_this19.getUserContextData()) {\n jsonReq.UserContextData = _this19.getUserContextData();\n }\n\n _this19.client.request('RespondToAuthChallenge', jsonReq, function (errRespond, dataRespond) {\n if (errRespond) {\n return callback.onFailure(errRespond);\n }\n\n _this19.signInUserSession = _this19.getCognitoUserSession(dataRespond.AuthenticationResult);\n\n _this19.cacheTokens();\n\n return callback.onSuccess(_this19.signInUserSession);\n });\n\n return undefined;\n });\n } else {\n this.client.request('VerifySoftwareToken', {\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken(),\n UserCode: totpCode,\n FriendlyDeviceName: friendlyDeviceName\n }, function (err, data) {\n if (err) {\n return callback.onFailure(err);\n }\n\n return callback.onSuccess(data);\n });\n }\n };\n\n return CognitoUser;\n}();\n\nexport { CognitoUser as default };","// constructor\nfunction UserAgent() {} // public\n\n\nUserAgent.prototype.userAgent = 'aws-amplify/0.1.x js';\nexport var appendToCognitoUserAgent = function appendToCognitoUserAgent(content) {\n if (!content) {\n return;\n }\n\n if (UserAgent.prototype.userAgent && !UserAgent.prototype.userAgent.includes(content)) {\n UserAgent.prototype.userAgent = UserAgent.prototype.userAgent.concat(' ', content);\n }\n\n if (!UserAgent.prototype.userAgent || UserAgent.prototype.userAgent === '') {\n UserAgent.prototype.userAgent = content;\n }\n}; // class for defining the amzn user-agent\n\nexport default UserAgent;","function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === \"function\" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== \"function\") { throw new TypeError(\"Super expression must either be null or a function\"); } if (typeof _cache !== \"undefined\") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\n\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf(\"[native code]\") !== -1; }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport 'isomorphic-unfetch';\nimport UserAgent from './UserAgent';\n\nvar CognitoError = /*#__PURE__*/function (_Error) {\n _inheritsLoose(CognitoError, _Error);\n\n function CognitoError(message, code, name, statusCode) {\n var _this;\n\n _this = _Error.call(this, message) || this;\n _this.code = code;\n _this.name = name;\n _this.statusCode = statusCode;\n return _this;\n }\n\n return CognitoError;\n}( /*#__PURE__*/_wrapNativeSuper(Error));\n/** @class */\n\n\nvar Client = /*#__PURE__*/function () {\n /**\n * Constructs a new AWS Cognito Identity Provider client object\n * @param {string} region AWS region\n * @param {string} endpoint endpoint\n * @param {object} fetchOptions options for fetch API (only credentials is supported)\n */\n function Client(region, endpoint, fetchOptions) {\n this.endpoint = endpoint || \"https://cognito-idp.\" + region + \".amazonaws.com/\";\n\n var _ref = fetchOptions || {},\n credentials = _ref.credentials;\n\n this.fetchOptions = credentials ? {\n credentials: credentials\n } : {};\n }\n /**\n * Makes an unauthenticated request on AWS Cognito Identity Provider API\n * using fetch\n * @param {string} operation API operation\n * @param {object} params Input parameters\n * @returns Promise\n */\n\n\n var _proto = Client.prototype;\n\n _proto.promisifyRequest = function promisifyRequest(operation, params) {\n var _this2 = this;\n\n return new Promise(function (resolve, reject) {\n _this2.request(operation, params, function (err, data) {\n if (err) {\n reject(new CognitoError(err.message, err.code, err.name, err.statusCode));\n } else {\n resolve(data);\n }\n });\n });\n }\n /**\n * Makes an unauthenticated request on AWS Cognito Identity Provider API\n * using fetch\n * @param {string} operation API operation\n * @param {object} params Input parameters\n * @param {function} callback Callback called when a response is returned\n * @returns {void}\n */\n ;\n\n _proto.request = function request(operation, params, callback) {\n var headers = {\n 'Content-Type': 'application/x-amz-json-1.1',\n 'X-Amz-Target': \"AWSCognitoIdentityProviderService.\" + operation,\n 'X-Amz-User-Agent': UserAgent.prototype.userAgent\n };\n var options = Object.assign({}, this.fetchOptions, {\n headers: headers,\n method: 'POST',\n mode: 'cors',\n cache: 'no-cache',\n body: JSON.stringify(params)\n });\n var response;\n var responseJsonData;\n fetch(this.endpoint, options).then(function (resp) {\n response = resp;\n return resp;\n }, function (err) {\n // If error happens here, the request failed\n // if it is TypeError throw network error\n if (err instanceof TypeError) {\n throw new Error('Network error');\n }\n\n throw err;\n }).then(function (resp) {\n return resp.json()[\"catch\"](function () {\n return {};\n });\n }).then(function (data) {\n // return parsed body stream\n if (response.ok) return callback(null, data);\n responseJsonData = data; // Taken from aws-sdk-js/lib/protocol/json.js\n // eslint-disable-next-line no-underscore-dangle\n\n var code = (data.__type || data.code).split('#').pop();\n var error = {\n code: code,\n name: code,\n message: data.message || data.Message || null\n };\n return callback(error);\n })[\"catch\"](function (err) {\n // first check if we have a service error\n if (response && response.headers && response.headers.get('x-amzn-errortype')) {\n try {\n var code = response.headers.get('x-amzn-errortype').split(':')[0];\n var error = {\n code: code,\n name: code,\n statusCode: response.status,\n message: response.status ? response.status.toString() : null\n };\n return callback(error);\n } catch (ex) {\n return callback(err);\n } // otherwise check if error is Network error\n\n } else if (err instanceof Error && err.message === 'Network error') {\n var _error = {\n code: 'NetworkError',\n name: err.name,\n message: err.message\n };\n return callback(_error);\n } else {\n return callback(err);\n }\n });\n };\n\n return Client;\n}();\n\nexport { Client as default };","/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n * http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\nimport Client from './Client';\nimport CognitoUser from './CognitoUser';\nimport StorageHelper from './StorageHelper';\n/** @class */\n\nvar CognitoUserPool = /*#__PURE__*/function () {\n /**\n * Constructs a new CognitoUserPool object\n * @param {object} data Creation options.\n * @param {string} data.UserPoolId Cognito user pool id.\n * @param {string} data.ClientId User pool application client id.\n * @param {string} data.endpoint Optional custom service endpoint.\n * @param {object} data.fetchOptions Optional options for fetch API.\n * (only credentials option is supported)\n * @param {object} data.Storage Optional storage object.\n * @param {boolean} data.AdvancedSecurityDataCollectionFlag Optional:\n * boolean flag indicating if the data collection is enabled\n * to support cognito advanced security features. By default, this\n * flag is set to true.\n */\n function CognitoUserPool(data, wrapRefreshSessionCallback) {\n var _ref = data || {},\n UserPoolId = _ref.UserPoolId,\n ClientId = _ref.ClientId,\n endpoint = _ref.endpoint,\n fetchOptions = _ref.fetchOptions,\n AdvancedSecurityDataCollectionFlag = _ref.AdvancedSecurityDataCollectionFlag;\n\n if (!UserPoolId || !ClientId) {\n throw new Error('Both UserPoolId and ClientId are required.');\n }\n\n if (!/^[\\w-]+_.+$/.test(UserPoolId)) {\n throw new Error('Invalid UserPoolId format.');\n }\n\n var region = UserPoolId.split('_')[0];\n this.userPoolId = UserPoolId;\n this.clientId = ClientId;\n this.client = new Client(region, endpoint, fetchOptions);\n /**\n * By default, AdvancedSecurityDataCollectionFlag is set to true,\n * if no input value is provided.\n */\n\n this.advancedSecurityDataCollectionFlag = AdvancedSecurityDataCollectionFlag !== false;\n this.storage = data.Storage || new StorageHelper().getStorage();\n\n if (wrapRefreshSessionCallback) {\n this.wrapRefreshSessionCallback = wrapRefreshSessionCallback;\n }\n }\n /**\n * @returns {string} the user pool id\n */\n\n\n var _proto = CognitoUserPool.prototype;\n\n _proto.getUserPoolId = function getUserPoolId() {\n return this.userPoolId;\n }\n /**\n * @returns {string} the client id\n */\n ;\n\n _proto.getClientId = function getClientId() {\n return this.clientId;\n }\n /**\n * @typedef {object} SignUpResult\n * @property {CognitoUser} user New user.\n * @property {bool} userConfirmed If the user is already confirmed.\n */\n\n /**\n * method for signing up a user\n * @param {string} username User's username.\n * @param {string} password Plain-text initial password entered by user.\n * @param {(AttributeArg[])=} userAttributes New user attributes.\n * @param {(AttributeArg[])=} validationData Application metadata.\n * @param {(AttributeArg[])=} clientMetadata Client metadata.\n * @param {nodeCallback} callback Called on error or with the new user.\n * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n * @returns {void}\n */\n ;\n\n _proto.signUp = function signUp(username, password, userAttributes, validationData, callback, clientMetadata) {\n var _this = this;\n\n var jsonReq = {\n ClientId: this.clientId,\n Username: username,\n Password: password,\n UserAttributes: userAttributes,\n ValidationData: validationData,\n ClientMetadata: clientMetadata\n };\n\n if (this.getUserContextData(username)) {\n jsonReq.UserContextData = this.getUserContextData(username);\n }\n\n this.client.request('SignUp', jsonReq, function (err, data) {\n if (err) {\n return callback(err, null);\n }\n\n var cognitoUser = {\n Username: username,\n Pool: _this,\n Storage: _this.storage\n };\n var returnData = {\n user: new CognitoUser(cognitoUser),\n userConfirmed: data.UserConfirmed,\n userSub: data.UserSub,\n codeDeliveryDetails: data.CodeDeliveryDetails\n };\n return callback(null, returnData);\n });\n }\n /**\n * method for getting the current user of the application from the local storage\n *\n * @returns {CognitoUser} the user retrieved from storage\n */\n ;\n\n _proto.getCurrentUser = function getCurrentUser() {\n var lastUserKey = \"CognitoIdentityServiceProvider.\" + this.clientId + \".LastAuthUser\";\n var lastAuthUser = this.storage.getItem(lastUserKey);\n\n if (lastAuthUser) {\n var cognitoUser = {\n Username: lastAuthUser,\n Pool: this,\n Storage: this.storage\n };\n return new CognitoUser(cognitoUser);\n }\n\n return null;\n }\n /**\n * This method returns the encoded data string used for cognito advanced security feature.\n * This would be generated only when developer has included the JS used for collecting the\n * data on their client. Please refer to documentation to know more about using AdvancedSecurity\n * features\n * @param {string} username the username for the context data\n * @returns {string} the user context data\n **/\n ;\n\n _proto.getUserContextData = function getUserContextData(username) {\n if (typeof AmazonCognitoAdvancedSecurityData === 'undefined') {\n return undefined;\n }\n /* eslint-disable */\n\n\n var amazonCognitoAdvancedSecurityDataConst = AmazonCognitoAdvancedSecurityData;\n /* eslint-enable */\n\n if (this.advancedSecurityDataCollectionFlag) {\n var advancedSecurityData = amazonCognitoAdvancedSecurityDataConst.getData(username, this.userPoolId, this.clientId);\n\n if (advancedSecurityData) {\n var userContextData = {\n EncodedData: advancedSecurityData\n };\n return userContextData;\n }\n }\n\n return {};\n };\n\n return CognitoUserPool;\n}();\n\nexport { CognitoUserPool as default };","import * as Cookies from 'js-cookie';\n/** @class */\n\nvar CookieStorage = /*#__PURE__*/function () {\n /**\n * Constructs a new CookieStorage object\n * @param {object} data Creation options.\n * @param {string} data.domain Cookies domain (mandatory).\n * @param {string} data.path Cookies path (default: '/')\n * @param {integer} data.expires Cookie expiration (in days, default: 365)\n * @param {boolean} data.secure Cookie secure flag (default: true)\n * @param {string} data.sameSite Cookie request behaviour (default: null)\n */\n function CookieStorage(data) {\n if (data.domain) {\n this.domain = data.domain;\n } else {\n throw new Error('The domain of cookieStorage can not be undefined.');\n }\n\n if (data.path) {\n this.path = data.path;\n } else {\n this.path = '/';\n }\n\n if (Object.prototype.hasOwnProperty.call(data, 'expires')) {\n this.expires = data.expires;\n } else {\n this.expires = 365;\n }\n\n if (Object.prototype.hasOwnProperty.call(data, 'secure')) {\n this.secure = data.secure;\n } else {\n this.secure = true;\n }\n\n if (Object.prototype.hasOwnProperty.call(data, 'sameSite')) {\n if (!['strict', 'lax', 'none'].includes(data.sameSite)) {\n throw new Error('The sameSite value of cookieStorage must be \"lax\", \"strict\" or \"none\".');\n }\n\n if (data.sameSite === 'none' && !this.secure) {\n throw new Error('sameSite = None requires the Secure attribute in latest browser versions.');\n }\n\n this.sameSite = data.sameSite;\n } else {\n this.sameSite = null;\n }\n }\n /**\n * This is used to set a specific item in storage\n * @param {string} key - the key for the item\n * @param {object} value - the value\n * @returns {string} value that was set\n */\n\n\n var _proto = CookieStorage.prototype;\n\n _proto.setItem = function setItem(key, value) {\n var options = {\n path: this.path,\n expires: this.expires,\n domain: this.domain,\n secure: this.secure\n };\n\n if (this.sameSite) {\n options.sameSite = this.sameSite;\n }\n\n Cookies.set(key, value, options);\n return Cookies.get(key);\n }\n /**\n * This is used to get a specific key from storage\n * @param {string} key - the key for the item\n * This is used to clear the storage\n * @returns {string} the data item\n */\n ;\n\n _proto.getItem = function getItem(key) {\n return Cookies.get(key);\n }\n /**\n * This is used to remove an item from storage\n * @param {string} key - the key being set\n * @returns {string} value - value that was deleted\n */\n ;\n\n _proto.removeItem = function removeItem(key) {\n var options = {\n path: this.path,\n expires: this.expires,\n domain: this.domain,\n secure: this.secure\n };\n\n if (this.sameSite) {\n options.sameSite = this.sameSite;\n }\n\n return Cookies.remove(key, options);\n }\n /**\n * This is used to clear the storage\n * @returns {string} nothing\n */\n ;\n\n _proto.clear = function clear() {\n var cookies = Cookies.get();\n var index;\n\n for (index = 0; index < cookies.length; ++index) {\n Cookies.remove(cookies[index]);\n }\n\n return {};\n };\n\n return CookieStorage;\n}();\n\nexport { CookieStorage as default };","// adapted from https://github.com/apatil/pemstrip\nvar findProc = /Proc-Type: 4,ENCRYPTED[\\n\\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\\n\\r]+([0-9A-z\\n\\r+/=]+)[\\n\\r]+/m\nvar startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m\nvar fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\\n\\r+/=]+)-----END \\1-----$/m\nvar evp = require('evp_bytestokey')\nvar ciphers = require('browserify-aes')\nvar Buffer = require('safe-buffer').Buffer\nmodule.exports = function (okey, password) {\n var key = okey.toString()\n var match = key.match(findProc)\n var decrypted\n if (!match) {\n var match2 = key.match(fullRegex)\n decrypted = Buffer.from(match2[2].replace(/[\\r\\n]/g, ''), 'base64')\n } else {\n var suite = 'aes' + match[1]\n var iv = Buffer.from(match[2], 'hex')\n var cipherText = Buffer.from(match[3].replace(/[\\r\\n]/g, ''), 'base64')\n var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key\n var out = []\n var cipher = ciphers.createDecipheriv(suite, cipherKey, iv)\n out.push(cipher.update(cipherText))\n out.push(cipher.final())\n decrypted = Buffer.concat(out)\n }\n var tag = key.match(startRegex)[1]\n return {\n tag: tag,\n data: decrypted\n }\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 inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n]\n\nvar W = new Array(160)\n\nfunction Sha512 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha512, Hash)\n\nSha512.prototype.init = function () {\n this._ah = 0x6a09e667\n this._bh = 0xbb67ae85\n this._ch = 0x3c6ef372\n this._dh = 0xa54ff53a\n this._eh = 0x510e527f\n this._fh = 0x9b05688c\n this._gh = 0x1f83d9ab\n this._hh = 0x5be0cd19\n\n this._al = 0xf3bcc908\n this._bl = 0x84caa73b\n this._cl = 0xfe94f82b\n this._dl = 0x5f1d36f1\n this._el = 0xade682d1\n this._fl = 0x2b3e6c1f\n this._gl = 0xfb41bd6b\n this._hl = 0x137e2179\n\n return this\n}\n\nfunction Ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x, xl) {\n return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)\n}\n\nfunction sigma1 (x, xl) {\n return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)\n}\n\nfunction Gamma0 (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)\n}\n\nfunction Gamma0l (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)\n}\n\nfunction Gamma1 (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)\n}\n\nfunction Gamma1l (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)\n}\n\nfunction getCarry (a, b) {\n return (a >>> 0) < (b >>> 0) ? 1 : 0\n}\n\nSha512.prototype._update = function (M) {\n var W = this._w\n\n var ah = this._ah | 0\n var bh = this._bh | 0\n var ch = this._ch | 0\n var dh = this._dh | 0\n var eh = this._eh | 0\n var fh = this._fh | 0\n var gh = this._gh | 0\n var hh = this._hh | 0\n\n var al = this._al | 0\n var bl = this._bl | 0\n var cl = this._cl | 0\n var dl = this._dl | 0\n var el = this._el | 0\n var fl = this._fl | 0\n var gl = this._gl | 0\n var hl = this._hl | 0\n\n for (var i = 0; i < 32; i += 2) {\n W[i] = M.readInt32BE(i * 4)\n W[i + 1] = M.readInt32BE(i * 4 + 4)\n }\n for (; i < 160; i += 2) {\n var xh = W[i - 15 * 2]\n var xl = W[i - 15 * 2 + 1]\n var gamma0 = Gamma0(xh, xl)\n var gamma0l = Gamma0l(xl, xh)\n\n xh = W[i - 2 * 2]\n xl = W[i - 2 * 2 + 1]\n var gamma1 = Gamma1(xh, xl)\n var gamma1l = Gamma1l(xl, xh)\n\n // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n var Wi7h = W[i - 7 * 2]\n var Wi7l = W[i - 7 * 2 + 1]\n\n var Wi16h = W[i - 16 * 2]\n var Wi16l = W[i - 16 * 2 + 1]\n\n var Wil = (gamma0l + Wi7l) | 0\n var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0\n Wil = (Wil + gamma1l) | 0\n Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0\n Wil = (Wil + Wi16l) | 0\n Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0\n\n W[i] = Wih\n W[i + 1] = Wil\n }\n\n for (var j = 0; j < 160; j += 2) {\n Wih = W[j]\n Wil = W[j + 1]\n\n var majh = maj(ah, bh, ch)\n var majl = maj(al, bl, cl)\n\n var sigma0h = sigma0(ah, al)\n var sigma0l = sigma0(al, ah)\n var sigma1h = sigma1(eh, el)\n var sigma1l = sigma1(el, eh)\n\n // t1 = h + sigma1 + ch + K[j] + W[j]\n var Kih = K[j]\n var Kil = K[j + 1]\n\n var chh = Ch(eh, fh, gh)\n var chl = Ch(el, fl, gl)\n\n var t1l = (hl + sigma1l) | 0\n var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0\n t1l = (t1l + chl) | 0\n t1h = (t1h + chh + getCarry(t1l, chl)) | 0\n t1l = (t1l + Kil) | 0\n t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0\n t1l = (t1l + Wil) | 0\n t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0\n\n // t2 = sigma0 + maj\n var t2l = (sigma0l + majl) | 0\n var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0\n\n hh = gh\n hl = gl\n gh = fh\n gl = fl\n fh = eh\n fl = el\n el = (dl + t1l) | 0\n eh = (dh + t1h + getCarry(el, dl)) | 0\n dh = ch\n dl = cl\n ch = bh\n cl = bl\n bh = ah\n bl = al\n al = (t1l + t2l) | 0\n ah = (t1h + t2h + getCarry(al, t1l)) | 0\n }\n\n this._al = (this._al + al) | 0\n this._bl = (this._bl + bl) | 0\n this._cl = (this._cl + cl) | 0\n this._dl = (this._dl + dl) | 0\n this._el = (this._el + el) | 0\n this._fl = (this._fl + fl) | 0\n this._gl = (this._gl + gl) | 0\n this._hl = (this._hl + hl) | 0\n\n this._ah = (this._ah + ah + getCarry(this._al, al)) | 0\n this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0\n this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0\n this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0\n this._eh = (this._eh + eh + getCarry(this._el, el)) | 0\n this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0\n this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0\n this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0\n}\n\nSha512.prototype._hash = function () {\n var H = Buffer.allocUnsafe(64)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n writeInt64BE(this._gh, this._gl, 48)\n writeInt64BE(this._hh, this._hl, 56)\n\n return H\n}\n\nmodule.exports = Sha512\n","var xor = require('buffer-xor')\n\nfunction getBlock (self) {\n self._prev = self._cipher.encryptBlock(self._prev)\n return self._prev\n}\n\nexports.encrypt = function (self, chunk) {\n while (self._cache.length < chunk.length) {\n self._cache = Buffer.concat([self._cache, getBlock(self)])\n }\n\n var pad = self._cache.slice(0, chunk.length)\n self._cache = self._cache.slice(chunk.length)\n return xor(chunk, pad)\n}\n","var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n var pad\n var i = -1\n var len = 8\n var out = 0\n var bit, value\n while (++i < len) {\n pad = self._cipher.encryptBlock(self._prev)\n bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0\n value = pad[0] ^ bit\n out += ((value & 0x80) >> (i % 8))\n self._prev = shiftIn(self._prev, decrypt ? bit : value)\n }\n return out\n}\n\nfunction shiftIn (buffer, value) {\n var len = buffer.length\n var i = -1\n var out = Buffer.allocUnsafe(buffer.length)\n buffer = Buffer.concat([buffer, Buffer.from([value])])\n\n while (++i < len) {\n out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)\n }\n\n return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n var len = chunk.length\n var out = Buffer.allocUnsafe(len)\n var i = -1\n\n while (++i < len) {\n out[i] = encryptByte(self, chunk[i], decrypt)\n }\n\n return out\n}\n","var BN = require('bn.js')\nvar Buffer = require('safe-buffer').Buffer\n\nfunction withPublic (paddedMsg, key) {\n return Buffer.from(paddedMsg\n .toRed(BN.mont(key.modulus))\n .redPow(new BN(key.publicExponent))\n .fromRed()\n .toArray())\n}\n\nmodule.exports = withPublic\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","// from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js\n// thanks to @Rantanen\n\n'use strict'\n\nvar asn = require('asn1.js')\n\nvar Time = asn.define('Time', function () {\n this.choice({\n utcTime: this.utctime(),\n generalTime: this.gentime()\n })\n})\n\nvar AttributeTypeValue = asn.define('AttributeTypeValue', function () {\n this.seq().obj(\n this.key('type').objid(),\n this.key('value').any()\n )\n})\n\nvar AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () {\n this.seq().obj(\n this.key('algorithm').objid(),\n this.key('parameters').optional(),\n this.key('curve').objid().optional()\n )\n})\n\nvar SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () {\n this.seq().obj(\n this.key('algorithm').use(AlgorithmIdentifier),\n this.key('subjectPublicKey').bitstr()\n )\n})\n\nvar RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () {\n this.setof(AttributeTypeValue)\n})\n\nvar RDNSequence = asn.define('RDNSequence', function () {\n this.seqof(RelativeDistinguishedName)\n})\n\nvar Name = asn.define('Name', function () {\n this.choice({\n rdnSequence: this.use(RDNSequence)\n })\n})\n\nvar Validity = asn.define('Validity', function () {\n this.seq().obj(\n this.key('notBefore').use(Time),\n this.key('notAfter').use(Time)\n )\n})\n\nvar Extension = asn.define('Extension', function () {\n this.seq().obj(\n this.key('extnID').objid(),\n this.key('critical').bool().def(false),\n this.key('extnValue').octstr()\n )\n})\n\nvar TBSCertificate = asn.define('TBSCertificate', function () {\n this.seq().obj(\n this.key('version').explicit(0).int().optional(),\n this.key('serialNumber').int(),\n this.key('signature').use(AlgorithmIdentifier),\n this.key('issuer').use(Name),\n this.key('validity').use(Validity),\n this.key('subject').use(Name),\n this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo),\n this.key('issuerUniqueID').implicit(1).bitstr().optional(),\n this.key('subjectUniqueID').implicit(2).bitstr().optional(),\n this.key('extensions').explicit(3).seqof(Extension).optional()\n )\n})\n\nvar X509Certificate = asn.define('X509Certificate', function () {\n this.seq().obj(\n this.key('tbsCertificate').use(TBSCertificate),\n this.key('signatureAlgorithm').use(AlgorithmIdentifier),\n this.key('signatureValue').bitstr()\n )\n})\n\nmodule.exports = X509Certificate\n","'use strict';\n\nvar _Object$setPrototypeO;\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar finished = require('./end-of-stream');\n\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\n\nfunction createIterResult(value, done) {\n return {\n value: value,\n done: done\n };\n}\n\nfunction readAndResolve(iter) {\n var resolve = iter[kLastResolve];\n\n if (resolve !== null) {\n var data = iter[kStream].read(); // we defer if data is null\n // we can be expecting either 'end' or\n // 'error'\n\n if (data !== null) {\n iter[kLastPromise] = null;\n iter[kLastResolve] = null;\n iter[kLastReject] = null;\n resolve(createIterResult(data, false));\n }\n }\n}\n\nfunction onReadable(iter) {\n // we wait for the next tick, because it might\n // emit an error with process.nextTick\n process.nextTick(readAndResolve, iter);\n}\n\nfunction wrapForNext(lastPromise, iter) {\n return function (resolve, reject) {\n lastPromise.then(function () {\n if (iter[kEnded]) {\n resolve(createIterResult(undefined, true));\n return;\n }\n\n iter[kHandlePromise](resolve, reject);\n }, reject);\n };\n}\n\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n get stream() {\n return this[kStream];\n },\n\n next: function next() {\n var _this = this;\n\n // if we have detected an error in the meanwhile\n // reject straight away\n var error = this[kError];\n\n if (error !== null) {\n return Promise.reject(error);\n }\n\n if (this[kEnded]) {\n return Promise.resolve(createIterResult(undefined, true));\n }\n\n if (this[kStream].destroyed) {\n // We need to defer via nextTick because if .destroy(err) is\n // called, the error will be emitted via nextTick, and\n // we cannot guarantee that there is no error lingering around\n // waiting to be emitted.\n return new Promise(function (resolve, reject) {\n process.nextTick(function () {\n if (_this[kError]) {\n reject(_this[kError]);\n } else {\n resolve(createIterResult(undefined, true));\n }\n });\n });\n } // if we have multiple next() calls\n // we will wait for the previous Promise to finish\n // this logic is optimized to support for await loops,\n // where next() is only called once at a time\n\n\n var lastPromise = this[kLastPromise];\n var promise;\n\n if (lastPromise) {\n promise = new Promise(wrapForNext(lastPromise, this));\n } else {\n // fast path needed to support multiple this.push()\n // without triggering the next() queue\n var data = this[kStream].read();\n\n if (data !== null) {\n return Promise.resolve(createIterResult(data, false));\n }\n\n promise = new Promise(this[kHandlePromise]);\n }\n\n this[kLastPromise] = promise;\n return promise;\n }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n var _this2 = this;\n\n // destroy(err, cb) is a private API\n // we can guarantee we have that here, because we control the\n // Readable class this is attached to\n return new Promise(function (resolve, reject) {\n _this2[kStream].destroy(null, function (err) {\n if (err) {\n reject(err);\n return;\n }\n\n resolve(createIterResult(undefined, true));\n });\n });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\n\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n var _Object$create;\n\n var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n value: stream,\n writable: true\n }), _defineProperty(_Object$create, kLastResolve, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kLastReject, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kError, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kEnded, {\n value: stream._readableState.endEmitted,\n writable: true\n }), _defineProperty(_Object$create, kHandlePromise, {\n value: function value(resolve, reject) {\n var data = iterator[kStream].read();\n\n if (data) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(data, false));\n } else {\n iterator[kLastResolve] = resolve;\n iterator[kLastReject] = reject;\n }\n },\n writable: true\n }), _Object$create));\n iterator[kLastPromise] = null;\n finished(stream, function (err) {\n if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n var reject = iterator[kLastReject]; // reject if we are waiting for data in the Promise\n // returned by next() and store the error\n\n if (reject !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n reject(err);\n }\n\n iterator[kError] = err;\n return;\n }\n\n var resolve = iterator[kLastResolve];\n\n if (resolve !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(undefined, true));\n }\n\n iterator[kEnded] = true;\n });\n stream.on('readable', onReadable.bind(null, iterator));\n return iterator;\n};\n\nmodule.exports = createReadableStreamAsyncIterator;","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","'use strict';\n\nexports.sha1 = require('./sha/1');\nexports.sha224 = require('./sha/224');\nexports.sha256 = require('./sha/256');\nexports.sha384 = require('./sha/384');\nexports.sha512 = require('./sha/512');\n","var MD5 = require('md5.js')\n\nmodule.exports = function (buffer) {\n return new MD5().update(buffer).digest()\n}\n","module.exports = require('events').EventEmitter;\n","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Buffer = require('safe-buffer').Buffer;\nvar util = require('util');\n\nfunction copyBuffer(src, target, offset) {\n src.copy(target, offset);\n}\n\nmodule.exports = function () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n BufferList.prototype.push = function push(v) {\n var entry = { data: v, next: null };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n };\n\n BufferList.prototype.unshift = function unshift(v) {\n var entry = { data: v, next: this.head };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n };\n\n BufferList.prototype.shift = function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n };\n\n BufferList.prototype.clear = function clear() {\n this.head = this.tail = null;\n this.length = 0;\n };\n\n BufferList.prototype.join = function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n while (p = p.next) {\n ret += s + p.data;\n }return ret;\n };\n\n BufferList.prototype.concat = function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n if (this.length === 1) return this.head.data;\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n return ret;\n };\n\n return BufferList;\n}();\n\nif (util && util.inspect && util.inspect.custom) {\n module.exports.prototype[util.inspect.custom] = function () {\n var obj = util.inspect({ length: this.length });\n return this.constructor.name + ' ' + obj;\n };\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n'use strict';\n/**/\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n\n for (var key in obj) {\n keys.push(key);\n }\n\n return keys;\n};\n/**/\n\n\nmodule.exports = Duplex;\n\nvar Readable = require('./_stream_readable');\n\nvar Writable = require('./_stream_writable');\n\nrequire('inherits')(Duplex, Readable);\n\n{\n // Allow the keys array to be GC'ed.\n var keys = objectKeys(Writable.prototype);\n\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n Readable.call(this, options);\n Writable.call(this, options);\n this.allowHalfOpen = true;\n\n if (options) {\n if (options.readable === false) this.readable = false;\n if (options.writable === false) this.writable = false;\n\n if (options.allowHalfOpen === false) {\n this.allowHalfOpen = false;\n this.once('end', onend);\n }\n }\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n}); // the no-half-open enforcer\n\nfunction onend() {\n // If the writable side ended, then we're ok.\n if (this._writableState.ended) return; // no more data can be written.\n // But allow more writes to happen in this tick.\n\n process.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\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","export var AuthErrorStrings;\n(function (AuthErrorStrings) {\n AuthErrorStrings[\"DEFAULT_MSG\"] = \"Authentication Error\";\n AuthErrorStrings[\"EMPTY_USERNAME\"] = \"Username cannot be empty\";\n AuthErrorStrings[\"INVALID_USERNAME\"] = \"The username should either be a string or one of the sign in types\";\n AuthErrorStrings[\"EMPTY_PASSWORD\"] = \"Password cannot be empty\";\n AuthErrorStrings[\"EMPTY_CODE\"] = \"Confirmation code cannot be empty\";\n AuthErrorStrings[\"SIGN_UP_ERROR\"] = \"Error creating account\";\n AuthErrorStrings[\"NO_MFA\"] = \"No valid MFA method provided\";\n AuthErrorStrings[\"INVALID_MFA\"] = \"Invalid MFA type\";\n AuthErrorStrings[\"EMPTY_CHALLENGE\"] = \"Challenge response cannot be empty\";\n AuthErrorStrings[\"NO_USER_SESSION\"] = \"Failed to get the session because the user is empty\";\n})(AuthErrorStrings || (AuthErrorStrings = {}));\n//# sourceMappingURL=AuthErrorStrings.js.map","'use strict';\n\nconst inherits = require('inherits');\nconst Reporter = require('../base/reporter').Reporter;\nconst Buffer = require('safer-buffer').Buffer;\n\nfunction DecoderBuffer(base, options) {\n Reporter.call(this, options);\n if (!Buffer.isBuffer(base)) {\n this.error('Input not Buffer');\n return;\n }\n\n this.base = base;\n this.offset = 0;\n this.length = base.length;\n}\ninherits(DecoderBuffer, Reporter);\nexports.DecoderBuffer = DecoderBuffer;\n\nDecoderBuffer.isDecoderBuffer = function isDecoderBuffer(data) {\n if (data instanceof DecoderBuffer) {\n return true;\n }\n\n // Or accept compatible API\n const isCompatible = typeof data === 'object' &&\n Buffer.isBuffer(data.base) &&\n data.constructor.name === 'DecoderBuffer' &&\n typeof data.offset === 'number' &&\n typeof data.length === 'number' &&\n typeof data.save === 'function' &&\n typeof data.restore === 'function' &&\n typeof data.isEmpty === 'function' &&\n typeof data.readUInt8 === 'function' &&\n typeof data.skip === 'function' &&\n typeof data.raw === 'function';\n\n return isCompatible;\n};\n\nDecoderBuffer.prototype.save = function save() {\n return { offset: this.offset, reporter: Reporter.prototype.save.call(this) };\n};\n\nDecoderBuffer.prototype.restore = function restore(save) {\n // Return skipped data\n const res = new DecoderBuffer(this.base);\n res.offset = save.offset;\n res.length = this.offset;\n\n this.offset = save.offset;\n Reporter.prototype.restore.call(this, save.reporter);\n\n return res;\n};\n\nDecoderBuffer.prototype.isEmpty = function isEmpty() {\n return this.offset === this.length;\n};\n\nDecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {\n if (this.offset + 1 <= this.length)\n return this.base.readUInt8(this.offset++, true);\n else\n return this.error(fail || 'DecoderBuffer overrun');\n};\n\nDecoderBuffer.prototype.skip = function skip(bytes, fail) {\n if (!(this.offset + bytes <= this.length))\n return this.error(fail || 'DecoderBuffer overrun');\n\n const res = new DecoderBuffer(this.base);\n\n // Share reporter state\n res._reporterState = this._reporterState;\n\n res.offset = this.offset;\n res.length = this.offset + bytes;\n this.offset += bytes;\n return res;\n};\n\nDecoderBuffer.prototype.raw = function raw(save) {\n return this.base.slice(save ? save.offset : this.offset, this.length);\n};\n\nfunction EncoderBuffer(value, reporter) {\n if (Array.isArray(value)) {\n this.length = 0;\n this.value = value.map(function(item) {\n if (!EncoderBuffer.isEncoderBuffer(item))\n item = new EncoderBuffer(item, reporter);\n this.length += item.length;\n return item;\n }, this);\n } else if (typeof value === 'number') {\n if (!(0 <= value && value <= 0xff))\n return reporter.error('non-byte EncoderBuffer value');\n this.value = value;\n this.length = 1;\n } else if (typeof value === 'string') {\n this.value = value;\n this.length = Buffer.byteLength(value);\n } else if (Buffer.isBuffer(value)) {\n this.value = value;\n this.length = value.length;\n } else {\n return reporter.error('Unsupported type: ' + typeof value);\n }\n}\nexports.EncoderBuffer = EncoderBuffer;\n\nEncoderBuffer.isEncoderBuffer = function isEncoderBuffer(data) {\n if (data instanceof EncoderBuffer) {\n return true;\n }\n\n // Or accept compatible API\n const isCompatible = typeof data === 'object' &&\n data.constructor.name === 'EncoderBuffer' &&\n typeof data.length === 'number' &&\n typeof data.join === 'function';\n\n return isCompatible;\n};\n\nEncoderBuffer.prototype.join = function join(out, offset) {\n if (!out)\n out = Buffer.alloc(this.length);\n if (!offset)\n offset = 0;\n\n if (this.length === 0)\n return out;\n\n if (Array.isArray(this.value)) {\n this.value.forEach(function(item) {\n item.join(out, offset);\n offset += item.length;\n });\n } else {\n if (typeof this.value === 'number')\n out[offset] = this.value;\n else if (typeof this.value === 'string')\n out.write(this.value, offset);\n else if (Buffer.isBuffer(this.value))\n this.value.copy(out, offset);\n offset += this.length;\n }\n\n return out;\n};\n","var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n var pad = self._cipher.encryptBlock(self._prev)\n var out = pad[0] ^ byteParam\n\n self._prev = Buffer.concat([\n self._prev.slice(1),\n Buffer.from([decrypt ? byteParam : out])\n ])\n\n return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n var len = chunk.length\n var out = Buffer.allocUnsafe(len)\n var i = -1\n\n while (++i < len) {\n out[i] = encryptByte(self, chunk[i], decrypt)\n }\n\n return out\n}\n","var Buffer = require('safe-buffer').Buffer\nvar Transform = require('stream').Transform\nvar StringDecoder = require('string_decoder').StringDecoder\nvar inherits = require('inherits')\n\nfunction CipherBase (hashMode) {\n Transform.call(this)\n this.hashMode = typeof hashMode === 'string'\n if (this.hashMode) {\n this[hashMode] = this._finalOrDigest\n } else {\n this.final = this._finalOrDigest\n }\n if (this._final) {\n this.__final = this._final\n this._final = null\n }\n this._decoder = null\n this._encoding = null\n}\ninherits(CipherBase, Transform)\n\nCipherBase.prototype.update = function (data, inputEnc, outputEnc) {\n if (typeof data === 'string') {\n data = Buffer.from(data, inputEnc)\n }\n\n var outData = this._update(data)\n if (this.hashMode) return this\n\n if (outputEnc) {\n outData = this._toString(outData, outputEnc)\n }\n\n return outData\n}\n\nCipherBase.prototype.setAutoPadding = function () {}\nCipherBase.prototype.getAuthTag = function () {\n throw new Error('trying to get auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAuthTag = function () {\n throw new Error('trying to set auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAAD = function () {\n throw new Error('trying to set aad in unsupported state')\n}\n\nCipherBase.prototype._transform = function (data, _, next) {\n var err\n try {\n if (this.hashMode) {\n this._update(data)\n } else {\n this.push(this._update(data))\n }\n } catch (e) {\n err = e\n } finally {\n next(err)\n }\n}\nCipherBase.prototype._flush = function (done) {\n var err\n try {\n this.push(this.__final())\n } catch (e) {\n err = e\n }\n\n done(err)\n}\nCipherBase.prototype._finalOrDigest = function (outputEnc) {\n var outData = this.__final() || Buffer.alloc(0)\n if (outputEnc) {\n outData = this._toString(outData, outputEnc, true)\n }\n return outData\n}\n\nCipherBase.prototype._toString = function (value, enc, fin) {\n if (!this._decoder) {\n this._decoder = new StringDecoder(enc)\n this._encoding = enc\n }\n\n if (this._encoding !== enc) throw new Error('can\\'t switch encodings')\n\n var out = this._decoder.write(value)\n if (fin) {\n out += this._decoder.end()\n }\n\n return out\n}\n\nmodule.exports = CipherBase\n","exports.publicEncrypt = require('./publicEncrypt')\nexports.privateDecrypt = require('./privateDecrypt')\n\nexports.privateEncrypt = function privateEncrypt (key, buf) {\n return exports.publicEncrypt(key, buf, true)\n}\n\nexports.publicDecrypt = function publicDecrypt (key, buf) {\n return exports.privateDecrypt(key, buf, true)\n}\n","'use strict';\n\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar utils = require('../utils');\n\nfunction MontCurve(conf) {\n Base.call(this, 'mont', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.i4 = new BN(4).toRed(this.red).redInvm();\n this.two = new BN(2).toRed(this.red);\n this.a24 = this.i4.redMul(this.a.redAdd(this.two));\n}\ninherits(MontCurve, Base);\nmodule.exports = MontCurve;\n\nMontCurve.prototype.validate = function validate(point) {\n var x = point.normalize().x;\n var x2 = x.redSqr();\n var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);\n var y = rhs.redSqrt();\n\n return y.redSqr().cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, z) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && z === null) {\n this.x = this.curve.one;\n this.z = this.curve.zero;\n } else {\n this.x = new BN(x, 16);\n this.z = new BN(z, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n }\n}\ninherits(Point, Base.BasePoint);\n\nMontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n return this.point(utils.toArray(bytes, enc), 1);\n};\n\nMontCurve.prototype.point = function point(x, z) {\n return new Point(this, x, z);\n};\n\nMontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nPoint.prototype.precompute = function precompute() {\n // No-op\n};\n\nPoint.prototype._encode = function _encode() {\n return this.getX().toArray('be', this.curve.p.byteLength());\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1] || curve.one);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n\nPoint.prototype.dbl = function dbl() {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3\n // 2M + 2S + 4A\n\n // A = X1 + Z1\n var a = this.x.redAdd(this.z);\n // AA = A^2\n var aa = a.redSqr();\n // B = X1 - Z1\n var b = this.x.redSub(this.z);\n // BB = B^2\n var bb = b.redSqr();\n // C = AA - BB\n var c = aa.redSub(bb);\n // X3 = AA * BB\n var nx = aa.redMul(bb);\n // Z3 = C * (BB + A24 * C)\n var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.add = function add() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.diffAdd = function diffAdd(p, diff) {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3\n // 4M + 2S + 6A\n\n // A = X2 + Z2\n var a = this.x.redAdd(this.z);\n // B = X2 - Z2\n var b = this.x.redSub(this.z);\n // C = X3 + Z3\n var c = p.x.redAdd(p.z);\n // D = X3 - Z3\n var d = p.x.redSub(p.z);\n // DA = D * A\n var da = d.redMul(a);\n // CB = C * B\n var cb = c.redMul(b);\n // X5 = Z1 * (DA + CB)^2\n var nx = diff.z.redMul(da.redAdd(cb).redSqr());\n // Z5 = X1 * (DA - CB)^2\n var nz = diff.x.redMul(da.redISub(cb).redSqr());\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.mul = function mul(k) {\n var t = k.clone();\n var a = this; // (N / 2) * Q + Q\n var b = this.curve.point(null, null); // (N / 2) * Q\n var c = this; // Q\n\n for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))\n bits.push(t.andln(1));\n\n for (var i = bits.length - 1; i >= 0; i--) {\n if (bits[i] === 0) {\n // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q\n a = a.diffAdd(b, c);\n // N * Q = 2 * ((N / 2) * Q + Q))\n b = b.dbl();\n } else {\n // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)\n b = a.diffAdd(b, c);\n // N * Q + Q = 2 * ((N / 2) * Q + Q)\n a = a.dbl();\n }\n }\n return b;\n};\n\nPoint.prototype.mulAdd = function mulAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.jumlAdd = function jumlAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.eq = function eq(other) {\n return this.getX().cmp(other.getX()) === 0;\n};\n\nPoint.prototype.normalize = function normalize() {\n this.x = this.x.redMul(this.z.redInvm());\n this.z = this.curve.one;\n return this;\n};\n\nPoint.prototype.getX = function getX() {\n // Normalize coordinates\n this.normalize();\n\n return this.x.fromRed();\n};\n","var exports = module.exports = function SHA (algorithm) {\n algorithm = algorithm.toLowerCase()\n\n var Algorithm = exports[algorithm]\n if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')\n\n return new Algorithm()\n}\n\nexports.sha = require('./sha')\nexports.sha1 = require('./sha1')\nexports.sha224 = require('./sha224')\nexports.sha256 = require('./sha256')\nexports.sha384 = require('./sha384')\nexports.sha512 = require('./sha512')\n","'use strict';\n\nvar hash = require('hash.js');\nvar utils = require('minimalistic-crypto-utils');\nvar assert = require('minimalistic-assert');\n\nfunction HmacDRBG(options) {\n if (!(this instanceof HmacDRBG))\n return new HmacDRBG(options);\n this.hash = options.hash;\n this.predResist = !!options.predResist;\n\n this.outLen = this.hash.outSize;\n this.minEntropy = options.minEntropy || this.hash.hmacStrength;\n\n this._reseed = null;\n this.reseedInterval = null;\n this.K = null;\n this.V = null;\n\n var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');\n var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');\n var pers = utils.toArray(options.pers, options.persEnc || 'hex');\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n this._init(entropy, nonce, pers);\n}\nmodule.exports = HmacDRBG;\n\nHmacDRBG.prototype._init = function init(entropy, nonce, pers) {\n var seed = entropy.concat(nonce).concat(pers);\n\n this.K = new Array(this.outLen / 8);\n this.V = new Array(this.outLen / 8);\n for (var i = 0; i < this.V.length; i++) {\n this.K[i] = 0x00;\n this.V[i] = 0x01;\n }\n\n this._update(seed);\n this._reseed = 1;\n this.reseedInterval = 0x1000000000000; // 2^48\n};\n\nHmacDRBG.prototype._hmac = function hmac() {\n return new hash.hmac(this.hash, this.K);\n};\n\nHmacDRBG.prototype._update = function update(seed) {\n var kmac = this._hmac()\n .update(this.V)\n .update([ 0x00 ]);\n if (seed)\n kmac = kmac.update(seed);\n this.K = kmac.digest();\n this.V = this._hmac().update(this.V).digest();\n if (!seed)\n return;\n\n this.K = this._hmac()\n .update(this.V)\n .update([ 0x01 ])\n .update(seed)\n .digest();\n this.V = this._hmac().update(this.V).digest();\n};\n\nHmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {\n // Optional entropy enc\n if (typeof entropyEnc !== 'string') {\n addEnc = add;\n add = entropyEnc;\n entropyEnc = null;\n }\n\n entropy = utils.toArray(entropy, entropyEnc);\n add = utils.toArray(add, addEnc);\n\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n\n this._update(entropy.concat(add || []));\n this._reseed = 1;\n};\n\nHmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {\n if (this._reseed > this.reseedInterval)\n throw new Error('Reseed is required');\n\n // Optional encoding\n if (typeof enc !== 'string') {\n addEnc = add;\n add = enc;\n enc = null;\n }\n\n // Optional additional data\n if (add) {\n add = utils.toArray(add, addEnc || 'hex');\n this._update(add);\n }\n\n var temp = [];\n while (temp.length < len) {\n this.V = this._hmac().update(this.V).digest();\n temp = temp.concat(this.V);\n }\n\n var res = temp.slice(0, len);\n this._update(add);\n this._reseed++;\n return utils.encode(res, enc);\n};\n","var xor = require('buffer-xor')\nvar Buffer = require('safe-buffer').Buffer\nvar incr32 = require('../incr32')\n\nfunction getBlock (self) {\n var out = self._cipher.encryptBlockRaw(self._prev)\n incr32(self._prev)\n return out\n}\n\nvar blockSize = 16\nexports.encrypt = function (self, chunk) {\n var chunkNum = Math.ceil(chunk.length / blockSize)\n var start = self._cache.length\n self._cache = Buffer.concat([\n self._cache,\n Buffer.allocUnsafe(chunkNum * blockSize)\n ])\n for (var i = 0; i < chunkNum; i++) {\n var out = getBlock(self)\n var offset = start + i * blockSize\n self._cache.writeUInt32BE(out[0], offset + 0)\n self._cache.writeUInt32BE(out[1], offset + 4)\n self._cache.writeUInt32BE(out[2], offset + 8)\n self._cache.writeUInt32BE(out[3], offset + 12)\n }\n var pad = self._cache.slice(0, chunk.length)\n self._cache = self._cache.slice(chunk.length)\n return xor(chunk, pad)\n}\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\nvar assert = require('minimalistic-assert');\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-buffer').Buffer\nvar createHmac = require('create-hmac')\nvar crt = require('browserify-rsa')\nvar EC = require('elliptic').ec\nvar BN = require('bn.js')\nvar parseKeys = require('parse-asn1')\nvar curves = require('./curves.json')\n\nfunction sign (hash, key, hashType, signType, tag) {\n var priv = parseKeys(key)\n if (priv.curve) {\n // rsa keys can be interpreted as ecdsa ones in openssl\n if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')\n return ecSign(hash, priv)\n } else if (priv.type === 'dsa') {\n if (signType !== 'dsa') throw new Error('wrong private key type')\n return dsaSign(hash, priv, hashType)\n } else {\n if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')\n }\n hash = Buffer.concat([tag, hash])\n var len = priv.modulus.byteLength()\n var pad = [0, 1]\n while (hash.length + pad.length + 1 < len) pad.push(0xff)\n pad.push(0x00)\n var i = -1\n while (++i < hash.length) pad.push(hash[i])\n\n var out = crt(pad, priv)\n return out\n}\n\nfunction ecSign (hash, priv) {\n var curveId = curves[priv.curve.join('.')]\n if (!curveId) throw new Error('unknown curve ' + priv.curve.join('.'))\n\n var curve = new EC(curveId)\n var key = curve.keyFromPrivate(priv.privateKey)\n var out = key.sign(hash)\n\n return Buffer.from(out.toDER())\n}\n\nfunction dsaSign (hash, priv, algo) {\n var x = priv.params.priv_key\n var p = priv.params.p\n var q = priv.params.q\n var g = priv.params.g\n var r = new BN(0)\n var k\n var H = bits2int(hash, q).mod(q)\n var s = false\n var kv = getKey(x, q, hash, algo)\n while (s === false) {\n k = makeKey(q, kv, algo)\n r = makeR(g, k, p, q)\n s = k.invm(q).imul(H.add(x.mul(r))).mod(q)\n if (s.cmpn(0) === 0) {\n s = false\n r = new BN(0)\n }\n }\n return toDER(r, s)\n}\n\nfunction toDER (r, s) {\n r = r.toArray()\n s = s.toArray()\n\n // Pad values\n if (r[0] & 0x80) r = [0].concat(r)\n if (s[0] & 0x80) s = [0].concat(s)\n\n var total = r.length + s.length + 4\n var res = [0x30, total, 0x02, r.length]\n res = res.concat(r, [0x02, s.length], s)\n return Buffer.from(res)\n}\n\nfunction getKey (x, q, hash, algo) {\n x = Buffer.from(x.toArray())\n if (x.length < q.byteLength()) {\n var zeros = Buffer.alloc(q.byteLength() - x.length)\n x = Buffer.concat([zeros, x])\n }\n var hlen = hash.length\n var hbits = bits2octets(hash, q)\n var v = Buffer.alloc(hlen)\n v.fill(1)\n var k = Buffer.alloc(hlen)\n k = createHmac(algo, k).update(v).update(Buffer.from([0])).update(x).update(hbits).digest()\n v = createHmac(algo, k).update(v).digest()\n k = createHmac(algo, k).update(v).update(Buffer.from([1])).update(x).update(hbits).digest()\n v = createHmac(algo, k).update(v).digest()\n return { k: k, v: v }\n}\n\nfunction bits2int (obits, q) {\n var bits = new BN(obits)\n var shift = (obits.length << 3) - q.bitLength()\n if (shift > 0) bits.ishrn(shift)\n return bits\n}\n\nfunction bits2octets (bits, q) {\n bits = bits2int(bits, q)\n bits = bits.mod(q)\n var out = Buffer.from(bits.toArray())\n if (out.length < q.byteLength()) {\n var zeros = Buffer.alloc(q.byteLength() - out.length)\n out = Buffer.concat([zeros, out])\n }\n return out\n}\n\nfunction makeKey (q, kv, algo) {\n var t\n var k\n\n do {\n t = Buffer.alloc(0)\n\n while (t.length * 8 < q.bitLength()) {\n kv.v = createHmac(algo, kv.k).update(kv.v).digest()\n t = Buffer.concat([t, kv.v])\n }\n\n k = bits2int(t, q)\n kv.k = createHmac(algo, kv.k).update(kv.v).update(Buffer.from([0])).digest()\n kv.v = createHmac(algo, kv.k).update(kv.v).digest()\n } while (k.cmp(q) !== -1)\n\n return k\n}\n\nfunction makeR (g, k, p, q) {\n return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q)\n}\n\nmodule.exports = sign\nmodule.exports.getKey = getKey\nmodule.exports.makeKey = makeKey\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Sha256 = require('./sha256')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(64)\n\nfunction Sha224 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha224, Sha256)\n\nSha224.prototype.init = function () {\n this._a = 0xc1059ed8\n this._b = 0x367cd507\n this._c = 0x3070dd17\n this._d = 0xf70e5939\n this._e = 0xffc00b31\n this._f = 0x68581511\n this._g = 0x64f98fa7\n this._h = 0xbefa4fa4\n\n return this\n}\n\nSha224.prototype._hash = function () {\n var H = Buffer.allocUnsafe(28)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n\n return H\n}\n\nmodule.exports = Sha224\n","'use strict'\n\nfunction oldBrowser () {\n throw new Error('secure random number generation not supported by this browser\\nuse chrome, FireFox or Internet Explorer 11')\n}\nvar safeBuffer = require('safe-buffer')\nvar randombytes = require('randombytes')\nvar Buffer = safeBuffer.Buffer\nvar kBufferMaxLength = safeBuffer.kMaxLength\nvar crypto = global.crypto || global.msCrypto\nvar kMaxUint32 = Math.pow(2, 32) - 1\nfunction assertOffset (offset, length) {\n if (typeof offset !== 'number' || offset !== offset) { // eslint-disable-line no-self-compare\n throw new TypeError('offset must be a number')\n }\n\n if (offset > kMaxUint32 || offset < 0) {\n throw new TypeError('offset must be a uint32')\n }\n\n if (offset > kBufferMaxLength || offset > length) {\n throw new RangeError('offset out of range')\n }\n}\n\nfunction assertSize (size, offset, length) {\n if (typeof size !== 'number' || size !== size) { // eslint-disable-line no-self-compare\n throw new TypeError('size must be a number')\n }\n\n if (size > kMaxUint32 || size < 0) {\n throw new TypeError('size must be a uint32')\n }\n\n if (size + offset > length || size > kBufferMaxLength) {\n throw new RangeError('buffer too small')\n }\n}\nif ((crypto && crypto.getRandomValues) || !process.browser) {\n exports.randomFill = randomFill\n exports.randomFillSync = randomFillSync\n} else {\n exports.randomFill = oldBrowser\n exports.randomFillSync = oldBrowser\n}\nfunction randomFill (buf, offset, size, cb) {\n if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n }\n\n if (typeof offset === 'function') {\n cb = offset\n offset = 0\n size = buf.length\n } else if (typeof size === 'function') {\n cb = size\n size = buf.length - offset\n } else if (typeof cb !== 'function') {\n throw new TypeError('\"cb\" argument must be a function')\n }\n assertOffset(offset, buf.length)\n assertSize(size, offset, buf.length)\n return actualFill(buf, offset, size, cb)\n}\n\nfunction actualFill (buf, offset, size, cb) {\n if (process.browser) {\n var ourBuf = buf.buffer\n var uint = new Uint8Array(ourBuf, offset, size)\n crypto.getRandomValues(uint)\n if (cb) {\n process.nextTick(function () {\n cb(null, buf)\n })\n return\n }\n return buf\n }\n if (cb) {\n randombytes(size, function (err, bytes) {\n if (err) {\n return cb(err)\n }\n bytes.copy(buf, offset)\n cb(null, buf)\n })\n return\n }\n var bytes = randombytes(size)\n bytes.copy(buf, offset)\n return buf\n}\nfunction randomFillSync (buf, offset, size) {\n if (typeof offset === 'undefined') {\n offset = 0\n }\n if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n }\n\n assertOffset(offset, buf.length)\n\n if (size === undefined) size = buf.length - offset\n\n assertSize(size, offset, buf.length)\n\n return actualFill(buf, offset, size)\n}\n","'use strict';\n\nvar utils = exports;\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg !== 'string') {\n for (var i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n return res;\n }\n if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (var i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n } else {\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n var hi = c >> 8;\n var lo = c & 0xff;\n if (hi)\n res.push(hi, lo);\n else\n res.push(lo);\n }\n }\n return res;\n}\nutils.toArray = toArray;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nutils.zero2 = zero2;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nutils.toHex = toHex;\n\nutils.encode = function encode(arr, enc) {\n if (enc === 'hex')\n return toHex(arr);\n else\n return arr;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\nutil.inherits(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};","var bn = require('bn.js');\nvar brorand = require('brorand');\n\nfunction MillerRabin(rand) {\n this.rand = rand || new brorand.Rand();\n}\nmodule.exports = MillerRabin;\n\nMillerRabin.create = function create(rand) {\n return new MillerRabin(rand);\n};\n\nMillerRabin.prototype._randbelow = function _randbelow(n) {\n var len = n.bitLength();\n var min_bytes = Math.ceil(len / 8);\n\n // Generage random bytes until a number less than n is found.\n // This ensures that 0..n-1 have an equal probability of being selected.\n do\n var a = new bn(this.rand.generate(min_bytes));\n while (a.cmp(n) >= 0);\n\n return a;\n};\n\nMillerRabin.prototype._randrange = function _randrange(start, stop) {\n // Generate a random number greater than or equal to start and less than stop.\n var size = stop.sub(start);\n return start.add(this._randbelow(size));\n};\n\nMillerRabin.prototype.test = function test(n, k, cb) {\n var len = n.bitLength();\n var red = bn.mont(n);\n var rone = new bn(1).toRed(red);\n\n if (!k)\n k = Math.max(1, (len / 48) | 0);\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n var n1 = n.subn(1);\n for (var s = 0; !n1.testn(s); s++) {}\n var d = n.shrn(s);\n\n var rn1 = n1.toRed(red);\n\n var prime = true;\n for (; k > 0; k--) {\n var a = this._randrange(new bn(2), n1);\n if (cb)\n cb(a);\n\n var x = a.toRed(red).redPow(d);\n if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n continue;\n\n for (var i = 1; i < s; i++) {\n x = x.redSqr();\n\n if (x.cmp(rone) === 0)\n return false;\n if (x.cmp(rn1) === 0)\n break;\n }\n\n if (i === s)\n return false;\n }\n\n return prime;\n};\n\nMillerRabin.prototype.getDivisor = function getDivisor(n, k) {\n var len = n.bitLength();\n var red = bn.mont(n);\n var rone = new bn(1).toRed(red);\n\n if (!k)\n k = Math.max(1, (len / 48) | 0);\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n var n1 = n.subn(1);\n for (var s = 0; !n1.testn(s); s++) {}\n var d = n.shrn(s);\n\n var rn1 = n1.toRed(red);\n\n for (; k > 0; k--) {\n var a = this._randrange(new bn(2), n1);\n\n var g = n.gcd(a);\n if (g.cmpn(1) !== 0)\n return g;\n\n var x = a.toRed(red).redPow(d);\n if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n continue;\n\n for (var i = 1; i < s; i++) {\n x = x.redSqr();\n\n if (x.cmp(rone) === 0)\n return x.fromRed().subn(1).gcd(n);\n if (x.cmp(rn1) === 0)\n break;\n }\n\n if (i === s) {\n x = x.redSqr();\n return x.fromRed().subn(1).gcd(n);\n }\n }\n\n return false;\n};\n","// TODO: Move these values to or extract them from the Cognito Provider in the Auth category for Auth V2\nvar AuthState;\n(function (AuthState) {\n AuthState[\"SignUp\"] = \"signup\";\n AuthState[\"SignOut\"] = \"signout\";\n AuthState[\"SignIn\"] = \"signin\";\n AuthState[\"Loading\"] = \"loading\";\n AuthState[\"SignedOut\"] = \"signedout\";\n AuthState[\"SignedIn\"] = \"signedin\";\n AuthState[\"SigningUp\"] = \"signingup\";\n AuthState[\"ConfirmSignUp\"] = \"confirmSignUp\";\n AuthState[\"confirmingSignUpCustomFlow\"] = \"confirmsignupcustomflow\";\n AuthState[\"ConfirmSignIn\"] = \"confirmSignIn\";\n AuthState[\"confirmingSignInCustomFlow\"] = \"confirmingsignincustomflow\";\n AuthState[\"VerifyingAttributes\"] = \"verifyingattributes\";\n AuthState[\"ForgotPassword\"] = \"forgotpassword\";\n AuthState[\"ResetPassword\"] = \"resettingpassword\";\n AuthState[\"SettingMFA\"] = \"settingMFA\";\n AuthState[\"TOTPSetup\"] = \"TOTPSetup\";\n AuthState[\"CustomConfirmSignIn\"] = \"customConfirmSignIn\";\n AuthState[\"VerifyContact\"] = \"verifyContact\";\n})(AuthState || (AuthState = {}));\nvar MfaOption;\n(function (MfaOption) {\n MfaOption[\"TOTP\"] = \"TOTP\";\n MfaOption[\"SMS\"] = \"SMS\";\n MfaOption[\"NOMFA\"] = \"NOMFA\";\n})(MfaOption || (MfaOption = {}));\nvar ChallengeName;\n(function (ChallengeName) {\n ChallengeName[\"SoftwareTokenMFA\"] = \"SOFTWARE_TOKEN_MFA\";\n ChallengeName[\"SMSMFA\"] = \"SMS_MFA\";\n ChallengeName[\"NewPasswordRequired\"] = \"NEW_PASSWORD_REQUIRED\";\n ChallengeName[\"MFASetup\"] = \"MFA_SETUP\";\n ChallengeName[\"CustomChallenge\"] = \"CUSTOM_CHALLENGE\";\n})(ChallengeName || (ChallengeName = {}));\nvar AuthFormField;\n(function (AuthFormField) {\n AuthFormField[\"Password\"] = \"password\";\n})(AuthFormField || (AuthFormField = {}));\nvar UsernameAlias;\n(function (UsernameAlias) {\n UsernameAlias[\"username\"] = \"username\";\n UsernameAlias[\"email\"] = \"email\";\n UsernameAlias[\"phone_number\"] = \"phone_number\";\n})(UsernameAlias || (UsernameAlias = {}));\nexport { AuthState as A, ChallengeName as C, MfaOption as M, UsernameAlias as U, AuthFormField as a };\n","var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs\n\nmodule.exports = function (iterations, keylen) {\n if (typeof iterations !== 'number') {\n throw new TypeError('Iterations not a number')\n }\n\n if (iterations < 0) {\n throw new TypeError('Bad iterations')\n }\n\n if (typeof keylen !== 'number') {\n throw new TypeError('Key length not a number')\n }\n\n if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */\n throw new TypeError('Bad key length')\n }\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\n/**/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}","var hash = exports;\n\nhash.utils = require('./hash/utils');\nhash.common = require('./hash/common');\nhash.sha = require('./hash/sha');\nhash.ripemd = require('./hash/ripemd');\nhash.hmac = require('./hash/hmac');\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined\n * in FIPS PUB 180-1\n * Version 2.1a Copyright Paul Johnston 2000 - 2002.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for details.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha1 () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha1, Hash)\n\nSha1.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl1 (num) {\n return (num << 1) | (num >>> 31)\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha1.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha1.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha1\n","'use strict';\n\nconst asn1 = exports;\n\nasn1.bignum = require('bn.js');\n\nasn1.define = require('./asn1/api').define;\nasn1.base = require('./asn1/base');\nasn1.constants = require('./asn1/constants');\nasn1.decoders = require('./asn1/decoders');\nasn1.encoders = require('./asn1/encoders');\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 Buffer = require('buffer').Buffer;\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 }\n\n if (base === 16) {\n this._parseHex(number, start);\n } else {\n this._parseBase(number, base, start);\n }\n\n if (number[0] === '-') {\n this.negative = 1;\n }\n\n this.strip();\n\n if (endian !== 'le') return;\n\n this._initArray(this.toArray(), base, endian);\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 parseHex (str, start, end) {\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 <<= 4;\n\n // 'a' - 'f'\n if (c >= 49 && c <= 54) {\n r |= c - 49 + 0xa;\n\n // 'A' - 'F'\n } else if (c >= 17 && c <= 22) {\n r |= c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r |= c & 0xf;\n }\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start) {\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 var j, w;\n // Scan 24-bit chunks and add them to the number\n var off = 0;\n for (i = number.length - 6, j = 0; i >= start; i -= 6) {\n w = parseHex(number, i, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n if (i + 6 !== start) {\n w = parseHex(number, start, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\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\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","var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\nvar GHASH = require('./ghash')\nvar xor = require('buffer-xor')\nvar incr32 = require('./incr32')\n\nfunction xorTest (a, b) {\n var out = 0\n if (a.length !== b.length) out++\n\n var len = Math.min(a.length, b.length)\n for (var i = 0; i < len; ++i) {\n out += (a[i] ^ b[i])\n }\n\n return out\n}\n\nfunction calcIv (self, iv, ck) {\n if (iv.length === 12) {\n self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])])\n return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])])\n }\n var ghash = new GHASH(ck)\n var len = iv.length\n var toPad = len % 16\n ghash.update(iv)\n if (toPad) {\n toPad = 16 - toPad\n ghash.update(Buffer.alloc(toPad, 0))\n }\n ghash.update(Buffer.alloc(8, 0))\n var ivBits = len * 8\n var tail = Buffer.alloc(8)\n tail.writeUIntBE(ivBits, 0, 8)\n ghash.update(tail)\n self._finID = ghash.state\n var out = Buffer.from(self._finID)\n incr32(out)\n return out\n}\nfunction StreamCipher (mode, key, iv, decrypt) {\n Transform.call(this)\n\n var h = Buffer.alloc(4, 0)\n\n this._cipher = new aes.AES(key)\n var ck = this._cipher.encryptBlock(h)\n this._ghash = new GHASH(ck)\n iv = calcIv(this, iv, ck)\n\n this._prev = Buffer.from(iv)\n this._cache = Buffer.allocUnsafe(0)\n this._secCache = Buffer.allocUnsafe(0)\n this._decrypt = decrypt\n this._alen = 0\n this._len = 0\n this._mode = mode\n\n this._authTag = null\n this._called = false\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n if (!this._called && this._alen) {\n var rump = 16 - (this._alen % 16)\n if (rump < 16) {\n rump = Buffer.alloc(rump, 0)\n this._ghash.update(rump)\n }\n }\n\n this._called = true\n var out = this._mode.encrypt(this, chunk)\n if (this._decrypt) {\n this._ghash.update(chunk)\n } else {\n this._ghash.update(out)\n }\n this._len += chunk.length\n return out\n}\n\nStreamCipher.prototype._final = function () {\n if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data')\n\n var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))\n if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data')\n\n this._authTag = tag\n this._cipher.scrub()\n}\n\nStreamCipher.prototype.getAuthTag = function getAuthTag () {\n if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state')\n\n return this._authTag\n}\n\nStreamCipher.prototype.setAuthTag = function setAuthTag (tag) {\n if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state')\n\n this._authTag = tag\n}\n\nStreamCipher.prototype.setAAD = function setAAD (buf) {\n if (this._called) throw new Error('Attempting to set AAD in unsupported state')\n\n this._ghash.update(buf)\n this._alen += buf.length\n}\n\nmodule.exports = StreamCipher\n","'use strict';\n\nconst Reporter = require('../base/reporter').Reporter;\nconst EncoderBuffer = require('../base/buffer').EncoderBuffer;\nconst DecoderBuffer = require('../base/buffer').DecoderBuffer;\nconst assert = require('minimalistic-assert');\n\n// Supported tags\nconst tags = [\n 'seq', 'seqof', 'set', 'setof', 'objid', 'bool',\n 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc',\n 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str',\n 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr'\n];\n\n// Public methods list\nconst methods = [\n 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',\n 'any', 'contains'\n].concat(tags);\n\n// Overrided methods list\nconst overrided = [\n '_peekTag', '_decodeTag', '_use',\n '_decodeStr', '_decodeObjid', '_decodeTime',\n '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList',\n\n '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime',\n '_encodeNull', '_encodeInt', '_encodeBool'\n];\n\nfunction Node(enc, parent, name) {\n const state = {};\n this._baseState = state;\n\n state.name = name;\n state.enc = enc;\n\n state.parent = parent || null;\n state.children = null;\n\n // State\n state.tag = null;\n state.args = null;\n state.reverseArgs = null;\n state.choice = null;\n state.optional = false;\n state.any = false;\n state.obj = false;\n state.use = null;\n state.useDecoder = null;\n state.key = null;\n state['default'] = null;\n state.explicit = null;\n state.implicit = null;\n state.contains = null;\n\n // Should create new instance on each method\n if (!state.parent) {\n state.children = [];\n this._wrap();\n }\n}\nmodule.exports = Node;\n\nconst stateProps = [\n 'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice',\n 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit',\n 'implicit', 'contains'\n];\n\nNode.prototype.clone = function clone() {\n const state = this._baseState;\n const cstate = {};\n stateProps.forEach(function(prop) {\n cstate[prop] = state[prop];\n });\n const res = new this.constructor(cstate.parent);\n res._baseState = cstate;\n return res;\n};\n\nNode.prototype._wrap = function wrap() {\n const state = this._baseState;\n methods.forEach(function(method) {\n this[method] = function _wrappedMethod() {\n const clone = new this.constructor(this);\n state.children.push(clone);\n return clone[method].apply(clone, arguments);\n };\n }, this);\n};\n\nNode.prototype._init = function init(body) {\n const state = this._baseState;\n\n assert(state.parent === null);\n body.call(this);\n\n // Filter children\n state.children = state.children.filter(function(child) {\n return child._baseState.parent === this;\n }, this);\n assert.equal(state.children.length, 1, 'Root node can have only one child');\n};\n\nNode.prototype._useArgs = function useArgs(args) {\n const state = this._baseState;\n\n // Filter children and args\n const children = args.filter(function(arg) {\n return arg instanceof this.constructor;\n }, this);\n args = args.filter(function(arg) {\n return !(arg instanceof this.constructor);\n }, this);\n\n if (children.length !== 0) {\n assert(state.children === null);\n state.children = children;\n\n // Replace parent to maintain backward link\n children.forEach(function(child) {\n child._baseState.parent = this;\n }, this);\n }\n if (args.length !== 0) {\n assert(state.args === null);\n state.args = args;\n state.reverseArgs = args.map(function(arg) {\n if (typeof arg !== 'object' || arg.constructor !== Object)\n return arg;\n\n const res = {};\n Object.keys(arg).forEach(function(key) {\n if (key == (key | 0))\n key |= 0;\n const value = arg[key];\n res[value] = key;\n });\n return res;\n });\n }\n};\n\n//\n// Overrided methods\n//\n\noverrided.forEach(function(method) {\n Node.prototype[method] = function _overrided() {\n const state = this._baseState;\n throw new Error(method + ' not implemented for encoding: ' + state.enc);\n };\n});\n\n//\n// Public methods\n//\n\ntags.forEach(function(tag) {\n Node.prototype[tag] = function _tagMethod() {\n const state = this._baseState;\n const args = Array.prototype.slice.call(arguments);\n\n assert(state.tag === null);\n state.tag = tag;\n\n this._useArgs(args);\n\n return this;\n };\n});\n\nNode.prototype.use = function use(item) {\n assert(item);\n const state = this._baseState;\n\n assert(state.use === null);\n state.use = item;\n\n return this;\n};\n\nNode.prototype.optional = function optional() {\n const state = this._baseState;\n\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.def = function def(val) {\n const state = this._baseState;\n\n assert(state['default'] === null);\n state['default'] = val;\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.explicit = function explicit(num) {\n const state = this._baseState;\n\n assert(state.explicit === null && state.implicit === null);\n state.explicit = num;\n\n return this;\n};\n\nNode.prototype.implicit = function implicit(num) {\n const state = this._baseState;\n\n assert(state.explicit === null && state.implicit === null);\n state.implicit = num;\n\n return this;\n};\n\nNode.prototype.obj = function obj() {\n const state = this._baseState;\n const args = Array.prototype.slice.call(arguments);\n\n state.obj = true;\n\n if (args.length !== 0)\n this._useArgs(args);\n\n return this;\n};\n\nNode.prototype.key = function key(newKey) {\n const state = this._baseState;\n\n assert(state.key === null);\n state.key = newKey;\n\n return this;\n};\n\nNode.prototype.any = function any() {\n const state = this._baseState;\n\n state.any = true;\n\n return this;\n};\n\nNode.prototype.choice = function choice(obj) {\n const state = this._baseState;\n\n assert(state.choice === null);\n state.choice = obj;\n this._useArgs(Object.keys(obj).map(function(key) {\n return obj[key];\n }));\n\n return this;\n};\n\nNode.prototype.contains = function contains(item) {\n const state = this._baseState;\n\n assert(state.use === null);\n state.contains = item;\n\n return this;\n};\n\n//\n// Decoding\n//\n\nNode.prototype._decode = function decode(input, options) {\n const state = this._baseState;\n\n // Decode root node\n if (state.parent === null)\n return input.wrapResult(state.children[0]._decode(input, options));\n\n let result = state['default'];\n let present = true;\n\n let prevKey = null;\n if (state.key !== null)\n prevKey = input.enterKey(state.key);\n\n // Check if tag is there\n if (state.optional) {\n let tag = null;\n if (state.explicit !== null)\n tag = state.explicit;\n else if (state.implicit !== null)\n tag = state.implicit;\n else if (state.tag !== null)\n tag = state.tag;\n\n if (tag === null && !state.any) {\n // Trial and Error\n const save = input.save();\n try {\n if (state.choice === null)\n this._decodeGeneric(state.tag, input, options);\n else\n this._decodeChoice(input, options);\n present = true;\n } catch (e) {\n present = false;\n }\n input.restore(save);\n } else {\n present = this._peekTag(input, tag, state.any);\n\n if (input.isError(present))\n return present;\n }\n }\n\n // Push object on stack\n let prevObj;\n if (state.obj && present)\n prevObj = input.enterObject();\n\n if (present) {\n // Unwrap explicit values\n if (state.explicit !== null) {\n const explicit = this._decodeTag(input, state.explicit);\n if (input.isError(explicit))\n return explicit;\n input = explicit;\n }\n\n const start = input.offset;\n\n // Unwrap implicit and normal values\n if (state.use === null && state.choice === null) {\n let save;\n if (state.any)\n save = input.save();\n const body = this._decodeTag(\n input,\n state.implicit !== null ? state.implicit : state.tag,\n state.any\n );\n if (input.isError(body))\n return body;\n\n if (state.any)\n result = input.raw(save);\n else\n input = body;\n }\n\n if (options && options.track && state.tag !== null)\n options.track(input.path(), start, input.length, 'tagged');\n\n if (options && options.track && state.tag !== null)\n options.track(input.path(), input.offset, input.length, 'content');\n\n // Select proper method for tag\n if (state.any) {\n // no-op\n } else if (state.choice === null) {\n result = this._decodeGeneric(state.tag, input, options);\n } else {\n result = this._decodeChoice(input, options);\n }\n\n if (input.isError(result))\n return result;\n\n // Decode children\n if (!state.any && state.choice === null && state.children !== null) {\n state.children.forEach(function decodeChildren(child) {\n // NOTE: We are ignoring errors here, to let parser continue with other\n // parts of encoded data\n child._decode(input, options);\n });\n }\n\n // Decode contained/encoded by schema, only in bit or octet strings\n if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) {\n const data = new DecoderBuffer(result);\n result = this._getUse(state.contains, input._reporterState.obj)\n ._decode(data, options);\n }\n }\n\n // Pop object\n if (state.obj && present)\n result = input.leaveObject(prevObj);\n\n // Set key\n if (state.key !== null && (result !== null || present === true))\n input.leaveKey(prevKey, state.key, result);\n else if (prevKey !== null)\n input.exitKey(prevKey);\n\n return result;\n};\n\nNode.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {\n const state = this._baseState;\n\n if (tag === 'seq' || tag === 'set')\n return null;\n if (tag === 'seqof' || tag === 'setof')\n return this._decodeList(input, tag, state.args[0], options);\n else if (/str$/.test(tag))\n return this._decodeStr(input, tag, options);\n else if (tag === 'objid' && state.args)\n return this._decodeObjid(input, state.args[0], state.args[1], options);\n else if (tag === 'objid')\n return this._decodeObjid(input, null, null, options);\n else if (tag === 'gentime' || tag === 'utctime')\n return this._decodeTime(input, tag, options);\n else if (tag === 'null_')\n return this._decodeNull(input, options);\n else if (tag === 'bool')\n return this._decodeBool(input, options);\n else if (tag === 'objDesc')\n return this._decodeStr(input, tag, options);\n else if (tag === 'int' || tag === 'enum')\n return this._decodeInt(input, state.args && state.args[0], options);\n\n if (state.use !== null) {\n return this._getUse(state.use, input._reporterState.obj)\n ._decode(input, options);\n } else {\n return input.error('unknown tag: ' + tag);\n }\n};\n\nNode.prototype._getUse = function _getUse(entity, obj) {\n\n const state = this._baseState;\n // Create altered use decoder if implicit is set\n state.useDecoder = this._use(entity, obj);\n assert(state.useDecoder._baseState.parent === null);\n state.useDecoder = state.useDecoder._baseState.children[0];\n if (state.implicit !== state.useDecoder._baseState.implicit) {\n state.useDecoder = state.useDecoder.clone();\n state.useDecoder._baseState.implicit = state.implicit;\n }\n return state.useDecoder;\n};\n\nNode.prototype._decodeChoice = function decodeChoice(input, options) {\n const state = this._baseState;\n let result = null;\n let match = false;\n\n Object.keys(state.choice).some(function(key) {\n const save = input.save();\n const node = state.choice[key];\n try {\n const value = node._decode(input, options);\n if (input.isError(value))\n return false;\n\n result = { type: key, value: value };\n match = true;\n } catch (e) {\n input.restore(save);\n return false;\n }\n return true;\n }, this);\n\n if (!match)\n return input.error('Choice not matched');\n\n return result;\n};\n\n//\n// Encoding\n//\n\nNode.prototype._createEncoderBuffer = function createEncoderBuffer(data) {\n return new EncoderBuffer(data, this.reporter);\n};\n\nNode.prototype._encode = function encode(data, reporter, parent) {\n const state = this._baseState;\n if (state['default'] !== null && state['default'] === data)\n return;\n\n const result = this._encodeValue(data, reporter, parent);\n if (result === undefined)\n return;\n\n if (this._skipDefault(result, reporter, parent))\n return;\n\n return result;\n};\n\nNode.prototype._encodeValue = function encode(data, reporter, parent) {\n const state = this._baseState;\n\n // Decode root node\n if (state.parent === null)\n return state.children[0]._encode(data, reporter || new Reporter());\n\n let result = null;\n\n // Set reporter to share it with a child class\n this.reporter = reporter;\n\n // Check if data is there\n if (state.optional && data === undefined) {\n if (state['default'] !== null)\n data = state['default'];\n else\n return;\n }\n\n // Encode children first\n let content = null;\n let primitive = false;\n if (state.any) {\n // Anything that was given is translated to buffer\n result = this._createEncoderBuffer(data);\n } else if (state.choice) {\n result = this._encodeChoice(data, reporter);\n } else if (state.contains) {\n content = this._getUse(state.contains, parent)._encode(data, reporter);\n primitive = true;\n } else if (state.children) {\n content = state.children.map(function(child) {\n if (child._baseState.tag === 'null_')\n return child._encode(null, reporter, data);\n\n if (child._baseState.key === null)\n return reporter.error('Child should have a key');\n const prevKey = reporter.enterKey(child._baseState.key);\n\n if (typeof data !== 'object')\n return reporter.error('Child expected, but input is not object');\n\n const res = child._encode(data[child._baseState.key], reporter, data);\n reporter.leaveKey(prevKey);\n\n return res;\n }, this).filter(function(child) {\n return child;\n });\n content = this._createEncoderBuffer(content);\n } else {\n if (state.tag === 'seqof' || state.tag === 'setof') {\n // TODO(indutny): this should be thrown on DSL level\n if (!(state.args && state.args.length === 1))\n return reporter.error('Too many args for : ' + state.tag);\n\n if (!Array.isArray(data))\n return reporter.error('seqof/setof, but data is not Array');\n\n const child = this.clone();\n child._baseState.implicit = null;\n content = this._createEncoderBuffer(data.map(function(item) {\n const state = this._baseState;\n\n return this._getUse(state.args[0], data)._encode(item, reporter);\n }, child));\n } else if (state.use !== null) {\n result = this._getUse(state.use, parent)._encode(data, reporter);\n } else {\n content = this._encodePrimitive(state.tag, data);\n primitive = true;\n }\n }\n\n // Encode data itself\n if (!state.any && state.choice === null) {\n const tag = state.implicit !== null ? state.implicit : state.tag;\n const cls = state.implicit === null ? 'universal' : 'context';\n\n if (tag === null) {\n if (state.use === null)\n reporter.error('Tag could be omitted only for .use()');\n } else {\n if (state.use === null)\n result = this._encodeComposite(tag, primitive, cls, content);\n }\n }\n\n // Wrap in explicit\n if (state.explicit !== null)\n result = this._encodeComposite(state.explicit, false, 'context', result);\n\n return result;\n};\n\nNode.prototype._encodeChoice = function encodeChoice(data, reporter) {\n const state = this._baseState;\n\n const node = state.choice[data.type];\n if (!node) {\n assert(\n false,\n data.type + ' not found in ' +\n JSON.stringify(Object.keys(state.choice)));\n }\n return node._encode(data.value, reporter);\n};\n\nNode.prototype._encodePrimitive = function encodePrimitive(tag, data) {\n const state = this._baseState;\n\n if (/str$/.test(tag))\n return this._encodeStr(data, tag);\n else if (tag === 'objid' && state.args)\n return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);\n else if (tag === 'objid')\n return this._encodeObjid(data, null, null);\n else if (tag === 'gentime' || tag === 'utctime')\n return this._encodeTime(data, tag);\n else if (tag === 'null_')\n return this._encodeNull();\n else if (tag === 'int' || tag === 'enum')\n return this._encodeInt(data, state.args && state.reverseArgs[0]);\n else if (tag === 'bool')\n return this._encodeBool(data);\n else if (tag === 'objDesc')\n return this._encodeStr(data, tag);\n else\n throw new Error('Unsupported tag: ' + tag);\n};\n\nNode.prototype._isNumstr = function isNumstr(str) {\n return /^[0-9 ]*$/.test(str);\n};\n\nNode.prototype._isPrintstr = function isPrintstr(str) {\n return /^[A-Za-z0-9 '()+,-./:=?]*$/.test(str);\n};\n","module.exports = function xor (a, b) {\n var len = a.length\n var i = -1\n while (++i < len) {\n a[i] ^= b[i]\n }\n return a\n}\n","'use strict';\n\nconst inherits = require('inherits');\n\nconst DEREncoder = require('./der');\n\nfunction PEMEncoder(entity) {\n DEREncoder.call(this, entity);\n this.enc = 'pem';\n}\ninherits(PEMEncoder, DEREncoder);\nmodule.exports = PEMEncoder;\n\nPEMEncoder.prototype.encode = function encode(data, options) {\n const buf = DEREncoder.prototype.encode.call(this, data);\n\n const p = buf.toString('base64');\n const out = [ '-----BEGIN ' + options.label + '-----' ];\n for (let i = 0; i < p.length; i += 64)\n out.push(p.slice(i, i + 64));\n out.push('-----END ' + options.label + '-----');\n return out.join('\\n');\n};\n","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","var MODES = require('./modes')\nvar AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Cipher (mode, key, iv) {\n Transform.call(this)\n\n this._cache = new Splitter()\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._mode = mode\n this._autopadding = true\n}\n\ninherits(Cipher, Transform)\n\nCipher.prototype._update = function (data) {\n this._cache.add(data)\n var chunk\n var thing\n var out = []\n\n while ((chunk = this._cache.get())) {\n thing = this._mode.encrypt(this, chunk)\n out.push(thing)\n }\n\n return Buffer.concat(out)\n}\n\nvar PADDING = Buffer.alloc(16, 0x10)\n\nCipher.prototype._final = function () {\n var chunk = this._cache.flush()\n if (this._autopadding) {\n chunk = this._mode.encrypt(this, chunk)\n this._cipher.scrub()\n return chunk\n }\n\n if (!chunk.equals(PADDING)) {\n this._cipher.scrub()\n throw new Error('data not multiple of block length')\n }\n}\n\nCipher.prototype.setAutoPadding = function (setTo) {\n this._autopadding = !!setTo\n return this\n}\n\nfunction Splitter () {\n this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function () {\n if (this.cache.length > 15) {\n var out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n return null\n}\n\nSplitter.prototype.flush = function () {\n var len = 16 - this.cache.length\n var padBuff = Buffer.allocUnsafe(len)\n\n var i = -1\n while (++i < len) {\n padBuff.writeUInt8(len, i)\n }\n\n return Buffer.concat([this.cache, padBuff])\n}\n\nfunction createCipheriv (suite, password, iv) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n if (typeof password === 'string') password = Buffer.from(password)\n if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n if (typeof iv === 'string') iv = Buffer.from(iv)\n if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n if (config.type === 'stream') {\n return new StreamCipher(config.module, password, iv)\n } else if (config.type === 'auth') {\n return new AuthCipher(config.module, password, iv)\n }\n\n return new Cipher(config.module, password, iv)\n}\n\nfunction createCipher (suite, password) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n var keys = ebtk(password, false, config.key, config.iv)\n return createCipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createCipheriv = createCipheriv\nexports.createCipher = createCipher\n","'use strict';\n\n// Helper\nfunction reverse(map) {\n const res = {};\n\n Object.keys(map).forEach(function(key) {\n // Convert key to integer if it is stringified\n if ((key | 0) == key)\n key = key | 0;\n\n const value = map[key];\n res[value] = key;\n });\n\n return res;\n}\n\nexports.tagClass = {\n 0: 'universal',\n 1: 'application',\n 2: 'context',\n 3: 'private'\n};\nexports.tagClassByName = reverse(exports.tagClass);\n\nexports.tag = {\n 0x00: 'end',\n 0x01: 'bool',\n 0x02: 'int',\n 0x03: 'bitstr',\n 0x04: 'octstr',\n 0x05: 'null_',\n 0x06: 'objid',\n 0x07: 'objDesc',\n 0x08: 'external',\n 0x09: 'real',\n 0x0a: 'enum',\n 0x0b: 'embed',\n 0x0c: 'utf8str',\n 0x0d: 'relativeOid',\n 0x10: 'seq',\n 0x11: 'set',\n 0x12: 'numstr',\n 0x13: 'printstr',\n 0x14: 't61str',\n 0x15: 'videostr',\n 0x16: 'ia5str',\n 0x17: 'utctime',\n 0x18: 'gentime',\n 0x19: 'graphstr',\n 0x1a: 'iso646str',\n 0x1b: 'genstr',\n 0x1c: 'unistr',\n 0x1d: 'charstr',\n 0x1e: 'bmpstr'\n};\nexports.tagByName = reverse(exports.tag);\n","'use strict';\n\nvar utils = require('../utils');\n\nvar SHA512 = require('./512');\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n","var Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (thing, encoding, name) {\n if (Buffer.isBuffer(thing)) {\n return thing\n } else if (typeof thing === 'string') {\n return Buffer.from(thing, encoding)\n } else if (ArrayBuffer.isView(thing)) {\n return Buffer.from(thing.buffer)\n } else {\n throw new TypeError(name + ' must be a string, a Buffer, a typed array or a DataView')\n }\n}\n","module.exports = function xor (a, b) {\n var length = Math.min(a.length, b.length)\n var buffer = new Buffer(length)\n\n for (var i = 0; i < length; ++i) {\n buffer[i] = a[i] ^ b[i]\n }\n\n return buffer\n}\n","'use strict';\n\nconst inherits = require('inherits');\nconst Buffer = require('safer-buffer').Buffer;\n\nconst DERDecoder = require('./der');\n\nfunction PEMDecoder(entity) {\n DERDecoder.call(this, entity);\n this.enc = 'pem';\n}\ninherits(PEMDecoder, DERDecoder);\nmodule.exports = PEMDecoder;\n\nPEMDecoder.prototype.decode = function decode(data, options) {\n const lines = data.toString().split(/[\\r\\n]+/g);\n\n const label = options.label.toUpperCase();\n\n const re = /^-----(BEGIN|END) ([^-]+)-----$/;\n let start = -1;\n let end = -1;\n for (let i = 0; i < lines.length; i++) {\n const match = lines[i].match(re);\n if (match === null)\n continue;\n\n if (match[2] !== label)\n continue;\n\n if (start === -1) {\n if (match[1] !== 'BEGIN')\n break;\n start = i;\n } else {\n if (match[1] !== 'END')\n break;\n end = i;\n break;\n }\n }\n if (start === -1 || end === -1)\n throw new Error('PEM section not found for: ' + label);\n\n const base64 = lines.slice(start + 1, end).join('');\n // Remove excessive symbols\n base64.replace(/[^a-z0-9+/=]+/gi, '');\n\n const input = Buffer.from(base64, 'base64');\n return DERDecoder.prototype.decode.call(this, input, options);\n};\n","'use strict'; // undocumented cb() API, needed for core, not for public API\n\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err) {\n if (!this._writableState) {\n process.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n process.nextTick(emitErrorNT, this, err);\n }\n }\n\n return this;\n } // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n } // if this is a duplex stream mark the writable part as destroyed as well\n\n\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n } else if (cb) {\n process.nextTick(emitCloseNT, _this);\n cb(err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n });\n\n return this;\n}\n\nfunction emitErrorAndCloseNT(self, err) {\n emitErrorNT(self, err);\n emitCloseNT(self);\n}\n\nfunction emitCloseNT(self) {\n if (self._writableState && !self._writableState.emitClose) return;\n if (self._readableState && !self._readableState.emitClose) return;\n self.emit('close');\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finalCalled = false;\n this._writableState.prefinished = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nfunction errorOrDestroy(stream, err) {\n // We have tests that rely on errors being emitted\n // in the same tick, so changing this is semver major.\n // For now when you opt-in to autoDestroy we allow\n // the error to be emitted nextTick. In a future\n // semver major update we should change the default to this.\n var rState = stream._readableState;\n var wState = stream._writableState;\n if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy,\n errorOrDestroy: errorOrDestroy\n};","module.exports = function () {\n throw new Error('Readable.from is not available in the browser')\n};\n","'use strict'\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('readable-stream').Transform\nvar inherits = require('inherits')\n\nfunction throwIfNotStringOrBuffer (val, prefix) {\n if (!Buffer.isBuffer(val) && typeof val !== 'string') {\n throw new TypeError(prefix + ' must be a string or a buffer')\n }\n}\n\nfunction HashBase (blockSize) {\n Transform.call(this)\n\n this._block = Buffer.allocUnsafe(blockSize)\n this._blockSize = blockSize\n this._blockOffset = 0\n this._length = [0, 0, 0, 0]\n\n this._finalized = false\n}\n\ninherits(HashBase, Transform)\n\nHashBase.prototype._transform = function (chunk, encoding, callback) {\n var error = null\n try {\n this.update(chunk, encoding)\n } catch (err) {\n error = err\n }\n\n callback(error)\n}\n\nHashBase.prototype._flush = function (callback) {\n var error = null\n try {\n this.push(this.digest())\n } catch (err) {\n error = err\n }\n\n callback(error)\n}\n\nHashBase.prototype.update = function (data, encoding) {\n throwIfNotStringOrBuffer(data, 'Data')\n if (this._finalized) throw new Error('Digest already called')\n if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)\n\n // consume data\n var block = this._block\n var offset = 0\n while (this._blockOffset + data.length - offset >= this._blockSize) {\n for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]\n this._update()\n this._blockOffset = 0\n }\n while (offset < data.length) block[this._blockOffset++] = data[offset++]\n\n // update length\n for (var j = 0, carry = data.length * 8; carry > 0; ++j) {\n this._length[j] += carry\n carry = (this._length[j] / 0x0100000000) | 0\n if (carry > 0) this._length[j] -= 0x0100000000 * carry\n }\n\n return this\n}\n\nHashBase.prototype._update = function () {\n throw new Error('_update is not implemented')\n}\n\nHashBase.prototype.digest = function (encoding) {\n if (this._finalized) throw new Error('Digest already called')\n this._finalized = true\n\n var digest = this._digest()\n if (encoding !== undefined) digest = digest.toString(encoding)\n\n // reset state\n this._block.fill(0)\n this._blockOffset = 0\n for (var i = 0; i < 4; ++i) this._length[i] = 0\n\n return digest\n}\n\nHashBase.prototype._digest = function () {\n throw new Error('_digest is not implemented')\n}\n\nmodule.exports = HashBase\n","'use strict';\n\nvar hash = require('hash.js');\nvar curves = require('../curves');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EDDSA(curve) {\n assert(curve === 'ed25519', 'only tested with ed25519 so far');\n\n if (!(this instanceof EDDSA))\n return new EDDSA(curve);\n\n curve = curves[curve].curve;\n this.curve = curve;\n this.g = curve.g;\n this.g.precompute(curve.n.bitLength() + 1);\n\n this.pointClass = curve.point().constructor;\n this.encodingLength = Math.ceil(curve.n.bitLength() / 8);\n this.hash = hash.sha512;\n}\n\nmodule.exports = EDDSA;\n\n/**\n* @param {Array|String} message - message bytes\n* @param {Array|String|KeyPair} secret - secret bytes or a keypair\n* @returns {Signature} - signature\n*/\nEDDSA.prototype.sign = function sign(message, secret) {\n message = parseBytes(message);\n var key = this.keyFromSecret(secret);\n var r = this.hashInt(key.messagePrefix(), message);\n var R = this.g.mul(r);\n var Rencoded = this.encodePoint(R);\n var s_ = this.hashInt(Rencoded, key.pubBytes(), message)\n .mul(key.priv());\n var S = r.add(s_).umod(this.curve.n);\n return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });\n};\n\n/**\n* @param {Array} message - message bytes\n* @param {Array|String|Signature} sig - sig bytes\n* @param {Array|String|Point|KeyPair} pub - public key\n* @returns {Boolean} - true if public key matches sig of message\n*/\nEDDSA.prototype.verify = function verify(message, sig, pub) {\n message = parseBytes(message);\n sig = this.makeSignature(sig);\n var key = this.keyFromPublic(pub);\n var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);\n var SG = this.g.mul(sig.S());\n var RplusAh = sig.R().add(key.pub().mul(h));\n return RplusAh.eq(SG);\n};\n\nEDDSA.prototype.hashInt = function hashInt() {\n var hash = this.hash();\n for (var i = 0; i < arguments.length; i++)\n hash.update(arguments[i]);\n return utils.intFromLE(hash.digest()).umod(this.curve.n);\n};\n\nEDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {\n return KeyPair.fromPublic(this, pub);\n};\n\nEDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {\n return KeyPair.fromSecret(this, secret);\n};\n\nEDDSA.prototype.makeSignature = function makeSignature(sig) {\n if (sig instanceof Signature)\n return sig;\n return new Signature(this, sig);\n};\n\n/**\n* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2\n*\n* EDDSA defines methods for encoding and decoding points and integers. These are\n* helper convenience methods, that pass along to utility functions implied\n* parameters.\n*\n*/\nEDDSA.prototype.encodePoint = function encodePoint(point) {\n var enc = point.getY().toArray('le', this.encodingLength);\n enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;\n return enc;\n};\n\nEDDSA.prototype.decodePoint = function decodePoint(bytes) {\n bytes = utils.parseBytes(bytes);\n\n var lastIx = bytes.length - 1;\n var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);\n var xIsOdd = (bytes[lastIx] & 0x80) !== 0;\n\n var y = utils.intFromLE(normed);\n return this.curve.pointFromY(y, xIsOdd);\n};\n\nEDDSA.prototype.encodeInt = function encodeInt(num) {\n return num.toArray('le', this.encodingLength);\n};\n\nEDDSA.prototype.decodeInt = function decodeInt(bytes) {\n return utils.intFromLE(bytes);\n};\n\nEDDSA.prototype.isPoint = function isPoint(val) {\n return val instanceof this.pointClass;\n};\n","var DES = require('browserify-des')\nvar aes = require('browserify-aes/browser')\nvar aesModes = require('browserify-aes/modes')\nvar desModes = require('browserify-des/modes')\nvar ebtk = require('evp_bytestokey')\n\nfunction createCipher (suite, password) {\n suite = suite.toLowerCase()\n\n var keyLen, ivLen\n if (aesModes[suite]) {\n keyLen = aesModes[suite].key\n ivLen = aesModes[suite].iv\n } else if (desModes[suite]) {\n keyLen = desModes[suite].key * 8\n ivLen = desModes[suite].iv\n } else {\n throw new TypeError('invalid suite type')\n }\n\n var keys = ebtk(password, false, keyLen, ivLen)\n return createCipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createDecipher (suite, password) {\n suite = suite.toLowerCase()\n\n var keyLen, ivLen\n if (aesModes[suite]) {\n keyLen = aesModes[suite].key\n ivLen = aesModes[suite].iv\n } else if (desModes[suite]) {\n keyLen = desModes[suite].key * 8\n ivLen = desModes[suite].iv\n } else {\n throw new TypeError('invalid suite type')\n }\n\n var keys = ebtk(password, false, keyLen, ivLen)\n return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createCipheriv (suite, key, iv) {\n suite = suite.toLowerCase()\n if (aesModes[suite]) return aes.createCipheriv(suite, key, iv)\n if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite })\n\n throw new TypeError('invalid suite type')\n}\n\nfunction createDecipheriv (suite, key, iv) {\n suite = suite.toLowerCase()\n if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv)\n if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite, decrypt: true })\n\n throw new TypeError('invalid suite type')\n}\n\nfunction getCiphers () {\n return Object.keys(desModes).concat(aes.getCiphers())\n}\n\nexports.createCipher = exports.Cipher = createCipher\nexports.createCipheriv = exports.Cipheriv = createCipheriv\nexports.createDecipher = exports.Decipher = createDecipher\nexports.createDecipheriv = exports.Decipheriv = createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n","'use strict';\n\nif (typeof process === 'undefined' ||\n !process.version ||\n process.version.indexOf('v0.') === 0 ||\n process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {\n module.exports = { nextTick: nextTick };\n} else {\n module.exports = process\n}\n\nfunction nextTick(fn, arg1, arg2, arg3) {\n if (typeof fn !== 'function') {\n throw new TypeError('\"callback\" argument must be a function');\n }\n var len = arguments.length;\n var args, i;\n switch (len) {\n case 0:\n case 1:\n return process.nextTick(fn);\n case 2:\n return process.nextTick(function afterTickOne() {\n fn.call(null, arg1);\n });\n case 3:\n return process.nextTick(function afterTickTwo() {\n fn.call(null, arg1, arg2);\n });\n case 4:\n return process.nextTick(function afterTickThree() {\n fn.call(null, arg1, arg2, arg3);\n });\n default:\n args = new Array(len - 1);\n i = 0;\n while (i < args.length) {\n args[i++] = arguments[i];\n }\n return process.nextTick(function afterTick() {\n fn.apply(null, args);\n });\n }\n}\n\n","'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar _require = require('buffer'),\n Buffer = _require.Buffer;\n\nvar _require2 = require('util'),\n inspect = _require2.inspect;\n\nvar custom = inspect && inspect.custom || 'inspect';\n\nfunction copyBuffer(src, target, offset) {\n Buffer.prototype.copy.call(src, target, offset);\n}\n\nmodule.exports =\n/*#__PURE__*/\nfunction () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n _createClass(BufferList, [{\n key: \"push\",\n value: function push(v) {\n var entry = {\n data: v,\n next: null\n };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n }\n }, {\n key: \"unshift\",\n value: function unshift(v) {\n var entry = {\n data: v,\n next: this.head\n };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n }\n }, {\n key: \"shift\",\n value: function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this.head = this.tail = null;\n this.length = 0;\n }\n }, {\n key: \"join\",\n value: function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n\n while (p = p.next) {\n ret += s + p.data;\n }\n\n return ret;\n }\n }, {\n key: \"concat\",\n value: function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n\n return ret;\n } // Consumes a specified amount of bytes or characters from the buffered data.\n\n }, {\n key: \"consume\",\n value: function consume(n, hasStrings) {\n var ret;\n\n if (n < this.head.data.length) {\n // `slice` is the same for buffers and strings.\n ret = this.head.data.slice(0, n);\n this.head.data = this.head.data.slice(n);\n } else if (n === this.head.data.length) {\n // First chunk is a perfect match.\n ret = this.shift();\n } else {\n // Result spans more than one buffer.\n ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n }\n\n return ret;\n }\n }, {\n key: \"first\",\n value: function first() {\n return this.head.data;\n } // Consumes a specified amount of characters from the buffered data.\n\n }, {\n key: \"_getString\",\n value: function _getString(n) {\n var p = this.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = str.slice(nb);\n }\n\n break;\n }\n\n ++c;\n }\n\n this.length -= c;\n return ret;\n } // Consumes a specified amount of bytes from the buffered data.\n\n }, {\n key: \"_getBuffer\",\n value: function _getBuffer(n) {\n var ret = Buffer.allocUnsafe(n);\n var p = this.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = buf.slice(nb);\n }\n\n break;\n }\n\n ++c;\n }\n\n this.length -= c;\n return ret;\n } // Make sure the linked list only shows the minimal necessary information.\n\n }, {\n key: custom,\n value: function value(_, options) {\n return inspect(this, _objectSpread({}, options, {\n // Only inspect one level.\n depth: 0,\n // It should not recurse.\n customInspect: false\n }));\n }\n }]);\n\n return BufferList;\n}();","// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-buffer').Buffer\nvar BN = require('bn.js')\nvar EC = require('elliptic').ec\nvar parseKeys = require('parse-asn1')\nvar curves = require('./curves.json')\n\nfunction verify (sig, hash, key, signType, tag) {\n var pub = parseKeys(key)\n if (pub.type === 'ec') {\n // rsa keys can be interpreted as ecdsa ones in openssl\n if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')\n return ecVerify(sig, hash, pub)\n } else if (pub.type === 'dsa') {\n if (signType !== 'dsa') throw new Error('wrong public key type')\n return dsaVerify(sig, hash, pub)\n } else {\n if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')\n }\n hash = Buffer.concat([tag, hash])\n var len = pub.modulus.byteLength()\n var pad = [1]\n var padNum = 0\n while (hash.length + pad.length + 2 < len) {\n pad.push(0xff)\n padNum++\n }\n pad.push(0x00)\n var i = -1\n while (++i < hash.length) {\n pad.push(hash[i])\n }\n pad = Buffer.from(pad)\n var red = BN.mont(pub.modulus)\n sig = new BN(sig).toRed(red)\n\n sig = sig.redPow(new BN(pub.publicExponent))\n sig = Buffer.from(sig.fromRed().toArray())\n var out = padNum < 8 ? 1 : 0\n len = Math.min(sig.length, pad.length)\n if (sig.length !== pad.length) out = 1\n\n i = -1\n while (++i < len) out |= sig[i] ^ pad[i]\n return out === 0\n}\n\nfunction ecVerify (sig, hash, pub) {\n var curveId = curves[pub.data.algorithm.curve.join('.')]\n if (!curveId) throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.'))\n\n var curve = new EC(curveId)\n var pubkey = pub.data.subjectPrivateKey.data\n\n return curve.verify(hash, sig, pubkey)\n}\n\nfunction dsaVerify (sig, hash, pub) {\n var p = pub.data.p\n var q = pub.data.q\n var g = pub.data.g\n var y = pub.data.pub_key\n var unpacked = parseKeys.signature.decode(sig, 'der')\n var s = unpacked.s\n var r = unpacked.r\n checkValue(s, q)\n checkValue(r, q)\n var montp = BN.mont(p)\n var w = s.invm(q)\n var v = g.toRed(montp)\n .redPow(new BN(hash).mul(w).mod(q))\n .fromRed()\n .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed())\n .mod(p)\n .mod(q)\n return v.cmp(r) === 0\n}\n\nfunction checkValue (b, q) {\n if (b.cmpn(0) <= 0) throw new Error('invalid sig')\n if (b.cmp(q) >= q) throw new Error('invalid sig')\n}\n\nmodule.exports = verify\n","'use strict'\nvar inherits = require('inherits')\nvar MD5 = require('md5.js')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Base = require('cipher-base')\n\nfunction Hash (hash) {\n Base.call(this, 'digest')\n\n this._hash = hash\n}\n\ninherits(Hash, Base)\n\nHash.prototype._update = function (data) {\n this._hash.update(data)\n}\n\nHash.prototype._final = function () {\n return this._hash.digest()\n}\n\nmodule.exports = function createHash (alg) {\n alg = alg.toLowerCase()\n if (alg === 'md5') return new MD5()\n if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160()\n\n return new Hash(sha(alg))\n}\n","/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n * http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nexport var CognitoHostedUIIdentityProvider;\n(function (CognitoHostedUIIdentityProvider) {\n CognitoHostedUIIdentityProvider[\"Cognito\"] = \"COGNITO\";\n CognitoHostedUIIdentityProvider[\"Google\"] = \"Google\";\n CognitoHostedUIIdentityProvider[\"Facebook\"] = \"Facebook\";\n CognitoHostedUIIdentityProvider[\"Amazon\"] = \"LoginWithAmazon\";\n CognitoHostedUIIdentityProvider[\"Apple\"] = \"SignInWithApple\";\n})(CognitoHostedUIIdentityProvider || (CognitoHostedUIIdentityProvider = {}));\nexport function isFederatedSignInOptions(obj) {\n var keys = ['provider'];\n return obj && !!keys.find(function (k) { return obj.hasOwnProperty(k); });\n}\nexport function isFederatedSignInOptionsCustom(obj) {\n var keys = ['customProvider'];\n return obj && !!keys.find(function (k) { return obj.hasOwnProperty(k); });\n}\nexport function hasCustomState(obj) {\n var keys = ['customState'];\n return obj && !!keys.find(function (k) { return obj.hasOwnProperty(k); });\n}\nexport function isCognitoHostedOpts(oauth) {\n return oauth.redirectSignIn !== undefined;\n}\nexport var AuthErrorTypes;\n(function (AuthErrorTypes) {\n AuthErrorTypes[\"NoConfig\"] = \"noConfig\";\n AuthErrorTypes[\"MissingAuthConfig\"] = \"missingAuthConfig\";\n AuthErrorTypes[\"EmptyUsername\"] = \"emptyUsername\";\n AuthErrorTypes[\"InvalidUsername\"] = \"invalidUsername\";\n AuthErrorTypes[\"EmptyPassword\"] = \"emptyPassword\";\n AuthErrorTypes[\"EmptyCode\"] = \"emptyCode\";\n AuthErrorTypes[\"SignUpError\"] = \"signUpError\";\n AuthErrorTypes[\"NoMFA\"] = \"noMFA\";\n AuthErrorTypes[\"InvalidMFA\"] = \"invalidMFA\";\n AuthErrorTypes[\"EmptyChallengeResponse\"] = \"emptyChallengeResponse\";\n AuthErrorTypes[\"NoUserSession\"] = \"noUserSession\";\n AuthErrorTypes[\"Default\"] = \"default\";\n})(AuthErrorTypes || (AuthErrorTypes = {}));\nexport function isUsernamePasswordOpts(obj) {\n return !!obj.username;\n}\n//# sourceMappingURL=Auth.js.map","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\nrequire('inherits')(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};","'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n if (!Base) {\n Base = Error;\n }\n\n function getMessage(arg1, arg2, arg3) {\n if (typeof message === 'string') {\n return message;\n } else {\n return message(arg1, arg2, arg3);\n }\n }\n\n var NodeError =\n /*#__PURE__*/\n function (_Base) {\n _inheritsLoose(NodeError, _Base);\n\n function NodeError(arg1, arg2, arg3) {\n return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n }\n\n return NodeError;\n }(Base);\n\n NodeError.prototype.name = Base.name;\n NodeError.prototype.code = code;\n codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n if (Array.isArray(expected)) {\n var len = expected.length;\n expected = expected.map(function (i) {\n return String(i);\n });\n\n if (len > 2) {\n return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n } else if (len === 2) {\n return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n } else {\n return \"of \".concat(thing, \" \").concat(expected[0]);\n }\n } else {\n return \"of \".concat(thing, \" \").concat(String(expected));\n }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n\n return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n\n if (start + search.length > str.length) {\n return false;\n } else {\n return str.indexOf(search, start) !== -1;\n }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n // determiner: 'must be' or 'must not be'\n var determiner;\n\n if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n } else {\n determiner = 'must be';\n }\n\n var msg;\n\n if (endsWith(name, ' argument')) {\n // For cases like 'first argument'\n msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } else {\n var type = includes(name, '.') ? 'property' : 'argument';\n msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n }\n\n msg += \". Received type \".concat(typeof actual);\n return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\n","var defaultEncoding\n/* istanbul ignore next */\nif (process.browser) {\n defaultEncoding = 'utf-8'\n} else if (process.version) {\n var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10)\n\n defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'\n} else {\n defaultEncoding = 'utf-8'\n}\nmodule.exports = defaultEncoding\n","exports.pbkdf2 = require('./lib/async')\nexports.pbkdf2Sync = require('./lib/sync')\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,\n 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,\n 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,\n 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,\n 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,\n 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,\n 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,\n 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,\n 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,\n 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,\n 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,\n 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,\n 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,\n 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,\n 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,\n 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2\n]\n\nvar W = new Array(64)\n\nfunction Sha256 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha256, Hash)\n\nSha256.prototype.init = function () {\n this._a = 0x6a09e667\n this._b = 0xbb67ae85\n this._c = 0x3c6ef372\n this._d = 0xa54ff53a\n this._e = 0x510e527f\n this._f = 0x9b05688c\n this._g = 0x1f83d9ab\n this._h = 0x5be0cd19\n\n return this\n}\n\nfunction ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x) {\n return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)\n}\n\nfunction sigma1 (x) {\n return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)\n}\n\nfunction gamma0 (x) {\n return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)\n}\n\nfunction gamma1 (x) {\n return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)\n}\n\nSha256.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n var f = this._f | 0\n var g = this._g | 0\n var h = this._h | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0\n\n for (var j = 0; j < 64; ++j) {\n var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0\n var T2 = (sigma0(a) + maj(a, b, c)) | 0\n\n h = g\n g = f\n f = e\n e = (d + T1) | 0\n d = c\n c = b\n b = a\n a = (T1 + T2) | 0\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n this._f = (f + this._f) | 0\n this._g = (g + this._g) | 0\n this._h = (h + this._h) | 0\n}\n\nSha256.prototype._hash = function () {\n var H = Buffer.allocUnsafe(32)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n H.writeInt32BE(this._h, 28)\n\n return H\n}\n\nmodule.exports = Sha256\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 Buffer = require('buffer').Buffer;\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 }\n\n if (base === 16) {\n this._parseHex(number, start);\n } else {\n this._parseBase(number, base, start);\n }\n\n if (number[0] === '-') {\n this.negative = 1;\n }\n\n this.strip();\n\n if (endian !== 'le') return;\n\n this._initArray(this.toArray(), base, endian);\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 parseHex (str, start, end) {\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 <<= 4;\n\n // 'a' - 'f'\n if (c >= 49 && c <= 54) {\n r |= c - 49 + 0xa;\n\n // 'A' - 'F'\n } else if (c >= 17 && c <= 22) {\n r |= c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r |= c & 0xf;\n }\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start) {\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 var j, w;\n // Scan 24-bit chunks and add them to the number\n var off = 0;\n for (i = number.length - 6, j = 0; i >= start; i -= 6) {\n w = parseHex(number, i, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n if (i + 6 !== start) {\n w = parseHex(number, start, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\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\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","var bn = require('bn.js');\nvar randomBytes = require('randombytes');\nmodule.exports = crt;\nfunction blind(priv) {\n var r = getr(priv);\n var blinder = r.toRed(bn.mont(priv.modulus))\n .redPow(new bn(priv.publicExponent)).fromRed();\n return {\n blinder: blinder,\n unblinder:r.invm(priv.modulus)\n };\n}\nfunction crt(msg, priv) {\n var blinds = blind(priv);\n var len = priv.modulus.byteLength();\n var mod = bn.mont(priv.modulus);\n var blinded = new bn(msg).mul(blinds.blinder).umod(priv.modulus);\n var c1 = blinded.toRed(bn.mont(priv.prime1));\n var c2 = blinded.toRed(bn.mont(priv.prime2));\n var qinv = priv.coefficient;\n var p = priv.prime1;\n var q = priv.prime2;\n var m1 = c1.redPow(priv.exponent1);\n var m2 = c2.redPow(priv.exponent2);\n m1 = m1.fromRed();\n m2 = m2.fromRed();\n var h = m1.isub(m2).imul(qinv).umod(p);\n h.imul(q);\n m2.iadd(h);\n return new Buffer(m2.imul(blinds.unblinder).umod(priv.modulus).toArray(false, len));\n}\ncrt.getr = getr;\nfunction getr(priv) {\n var len = priv.modulus.byteLength();\n var r = new bn(randomBytes(len));\n while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2)) {\n r = new bn(randomBytes(len));\n }\n return r;\n}\n","'use strict';\n\nvar utils = require('../utils');\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n","// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar eos;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n callback.apply(void 0, arguments);\n };\n}\n\nvar _require$codes = require('../../../errors').codes,\n ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\n\nfunction noop(err) {\n // Rethrow the error if it exists to avoid swallowing it\n if (err) throw err;\n}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction destroyer(stream, reading, writing, callback) {\n callback = once(callback);\n var closed = false;\n stream.on('close', function () {\n closed = true;\n });\n if (eos === undefined) eos = require('./end-of-stream');\n eos(stream, {\n readable: reading,\n writable: writing\n }, function (err) {\n if (err) return callback(err);\n closed = true;\n callback();\n });\n var destroyed = false;\n return function (err) {\n if (closed) return;\n if (destroyed) return;\n destroyed = true; // request.destroy just do .end - .abort is what we want\n\n if (isRequest(stream)) return stream.abort();\n if (typeof stream.destroy === 'function') return stream.destroy();\n callback(err || new ERR_STREAM_DESTROYED('pipe'));\n };\n}\n\nfunction call(fn) {\n fn();\n}\n\nfunction pipe(from, to) {\n return from.pipe(to);\n}\n\nfunction popCallback(streams) {\n if (!streams.length) return noop;\n if (typeof streams[streams.length - 1] !== 'function') return noop;\n return streams.pop();\n}\n\nfunction pipeline() {\n for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n streams[_key] = arguments[_key];\n }\n\n var callback = popCallback(streams);\n if (Array.isArray(streams[0])) streams = streams[0];\n\n if (streams.length < 2) {\n throw new ERR_MISSING_ARGS('streams');\n }\n\n var error;\n var destroys = streams.map(function (stream, i) {\n var reading = i < streams.length - 1;\n var writing = i > 0;\n return destroyer(stream, reading, writing, function (err) {\n if (!error) error = err;\n if (err) destroys.forEach(call);\n if (reading) return;\n destroys.forEach(call);\n callback(error);\n });\n });\n return streams.reduce(pipe);\n}\n\nmodule.exports = pipeline;","var parseKeys = require('parse-asn1')\nvar randomBytes = require('randombytes')\nvar createHash = require('create-hash')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar withPublic = require('./withPublic')\nvar crt = require('browserify-rsa')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function publicEncrypt (publicKey, msg, reverse) {\n var padding\n if (publicKey.padding) {\n padding = publicKey.padding\n } else if (reverse) {\n padding = 1\n } else {\n padding = 4\n }\n var key = parseKeys(publicKey)\n var paddedMsg\n if (padding === 4) {\n paddedMsg = oaep(key, msg)\n } else if (padding === 1) {\n paddedMsg = pkcs1(key, msg, reverse)\n } else if (padding === 3) {\n paddedMsg = new BN(msg)\n if (paddedMsg.cmp(key.modulus) >= 0) {\n throw new Error('data too long for modulus')\n }\n } else {\n throw new Error('unknown padding')\n }\n if (reverse) {\n return crt(paddedMsg, key)\n } else {\n return withPublic(paddedMsg, key)\n }\n}\n\nfunction oaep (key, msg) {\n var k = key.modulus.byteLength()\n var mLen = msg.length\n var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n var hLen = iHash.length\n var hLen2 = 2 * hLen\n if (mLen > k - hLen2 - 2) {\n throw new Error('message too long')\n }\n var ps = Buffer.alloc(k - mLen - hLen2 - 2)\n var dblen = k - hLen - 1\n var seed = randomBytes(hLen)\n var maskedDb = xor(Buffer.concat([iHash, ps, Buffer.alloc(1, 1), msg], dblen), mgf(seed, dblen))\n var maskedSeed = xor(seed, mgf(maskedDb, hLen))\n return new BN(Buffer.concat([Buffer.alloc(1), maskedSeed, maskedDb], k))\n}\nfunction pkcs1 (key, msg, reverse) {\n var mLen = msg.length\n var k = key.modulus.byteLength()\n if (mLen > k - 11) {\n throw new Error('message too long')\n }\n var ps\n if (reverse) {\n ps = Buffer.alloc(k - mLen - 3, 0xff)\n } else {\n ps = nonZero(k - mLen - 3)\n }\n return new BN(Buffer.concat([Buffer.from([0, reverse ? 1 : 2]), ps, Buffer.alloc(1), msg], k))\n}\nfunction nonZero (len) {\n var out = Buffer.allocUnsafe(len)\n var i = 0\n var cache = randomBytes(len * 2)\n var cur = 0\n var num\n while (i < len) {\n if (cur === cache.length) {\n cache = randomBytes(len * 2)\n cur = 0\n }\n num = cache[cur++]\n if (num) {\n out[i++] = num\n }\n }\n return out\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\nmodule.exports = Readable;\n\n/**/\nvar isArray = require('isarray');\n/**/\n\n/**/\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n\n/**/\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function (emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = global.Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\n/**/\nvar debugUtil = require('util');\nvar debug = void 0;\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function () {};\n}\n/**/\n\nvar BufferList = require('./internal/streams/BufferList');\nvar destroyImpl = require('./internal/streams/destroy');\nvar StringDecoder;\n\nutil.inherits(Readable, Stream);\n\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n var hwm = options.highWaterMark;\n var readableHwm = options.readableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false;\n\n // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n this.sync = true;\n\n // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // the number of writers that are awaiting a drain event in .pipe()s\n this.awaitDrain = 0;\n\n // if true, a maybeReadMore has been scheduled\n this.readingMore = false;\n\n this.decoder = null;\n this.encoding = null;\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n if (!(this instanceof Readable)) return new Readable(options);\n\n this._readableState = new ReadableState(options, this);\n\n // legacy\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined) {\n return false;\n }\n return this._readableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n }\n});\n\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n this.push(null);\n cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n var state = stream._readableState;\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n if (er) {\n stream.emit('error', er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n stream.emit('error', new Error('stream.push() after EOF'));\n } else {\n state.reading = false;\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n }\n }\n\n return needMoreData(state);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n stream.emit('data', chunk);\n stream.read(0);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n\n if (state.needReadable) emitReadable(stream);\n }\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n return er;\n}\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes. This is to work around cases where hwm=0,\n// such as the repl. Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this._readableState.decoder = new StringDecoder(enc);\n this._readableState.encoding = enc;\n return this;\n};\n\n// Don't raise the hwm > 8MB\nvar MAX_HWM = 0x800000;\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n }\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n;\n // Don't have enough\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n\n if (n !== 0) state.emittedReadable = false;\n\n // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state);\n\n // if we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n var doRead = state.needReadable;\n debug('need readable', doRead);\n\n // if we currently have less than the highWaterMark, then also read some\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n }\n\n // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true;\n // if the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.needReadable = true;\n // call internal read method\n this._read(state.highWaterMark);\n state.sync = false;\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = true;\n n = 0;\n } else {\n state.length -= n;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true;\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n if (state.ended) return;\n if (state.decoder) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n state.ended = true;\n\n // emit 'readable' now to make sure it gets picked up.\n emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n var state = stream._readableState;\n state.needReadable = false;\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);\n }\n}\n\nfunction emitReadable_(stream) {\n debug('emit readable');\n stream.emit('readable');\n flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n pna.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n var len = state.length;\n while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length)\n // didn't get any data, stop spinning.\n break;else len = state.length;\n }\n state.readingMore = false;\n}\n\n// abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n this.emit('error', new Error('_read() is not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n default:\n state.pipes.push(dest);\n break;\n }\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);\n\n dest.on('unpipe', onunpipe);\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n }\n\n // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n\n var cleanedUp = false;\n function cleanup() {\n debug('cleanup');\n // cleanup event handlers once the pipe is broken\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n\n cleanedUp = true;\n\n // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n // If the user pushes more data while we're writing to dest then we'll end up\n // in ondata again. However, we only want to increase awaitDrain once because\n // dest will only emit one 'drain' event for the multiple writes.\n // => Introduce a guard on increasing awaitDrain.\n var increasedAwaitDrain = false;\n src.on('data', ondata);\n function ondata(chunk) {\n debug('ondata');\n increasedAwaitDrain = false;\n var ret = dest.write(chunk);\n if (false === ret && !increasedAwaitDrain) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', src._readableState.awaitDrain);\n src._readableState.awaitDrain++;\n increasedAwaitDrain = true;\n }\n src.pause();\n }\n }\n\n // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror);\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n dest.once('close', onclose);\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n }\n\n // tell the dest that it's being piped to\n dest.emit('pipe', src);\n\n // start the flow if it hasn't been started already.\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function () {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = { hasUnpiped: false };\n\n // if we're not piping anywhere, then do nothing.\n if (state.pipesCount === 0) return this;\n\n // just one destination. most common case.\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n\n if (!dest) dest = state.pipes;\n\n // got a match.\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n }\n\n // slow case. multiple pipe destinations.\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, unpipeInfo);\n }return this;\n }\n\n // try to find the right one.\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n dest.emit('unpipe', this, unpipeInfo);\n\n return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n\n if (ev === 'data') {\n // Start flowing on next tick if stream isn't explicitly paused\n if (this._readableState.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n var state = this._readableState;\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.emittedReadable = false;\n if (!state.reading) {\n pna.nextTick(nReadingNextTick, this);\n } else if (state.length) {\n emitReadable(this);\n }\n }\n }\n\n return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n var state = this._readableState;\n if (!state.flowing) {\n debug('resume');\n state.flowing = true;\n resume(this, state);\n }\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n pna.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n if (!state.reading) {\n debug('resume read 0');\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n state.awaitDrain = 0;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n if (false !== this._readableState.flowing) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n while (state.flowing && stream.read() !== null) {}\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n\n stream.on('end', function () {\n debug('wrapped end');\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk);\n\n // don't skip over falsy values in objectMode\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n if (!ret) {\n paused = true;\n stream.pause();\n }\n });\n\n // proxy all the other methods.\n // important when wrapping filters and duplexes.\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function (method) {\n return function () {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n }\n\n // proxy certain important events.\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n }\n\n // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n this._read = function (n) {\n debug('wrapped _read', n);\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._readableState.highWaterMark;\n }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = fromListPartial(n, state.buffer, state.decoder);\n }\n\n return ret;\n}\n\n// Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromListPartial(n, list, hasStrings) {\n var ret;\n if (n < list.head.data.length) {\n // slice is the same for buffers and strings\n ret = list.head.data.slice(0, n);\n list.head.data = list.head.data.slice(n);\n } else if (n === list.head.data.length) {\n // first chunk is a perfect match\n ret = list.shift();\n } else {\n // result spans more than one buffer\n ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n }\n return ret;\n}\n\n// Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBufferString(n, list) {\n var p = list.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = str.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\n// Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBuffer(n, list) {\n var ret = Buffer.allocUnsafe(n);\n var p = list.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = buf.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n\n // If we get here before consuming all the bytes, then that is a\n // bug in node. Should never happen.\n if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n if (!state.endEmitted) {\n state.ended = true;\n pna.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n // Check that we didn't get one last unshift.\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n }\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n return -1;\n}","var Buffer = require('safe-buffer').Buffer\nvar MD5 = require('md5.js')\n\n/* eslint-disable camelcase */\nfunction EVP_BytesToKey (password, salt, keyBits, ivLen) {\n if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary')\n if (salt) {\n if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary')\n if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length')\n }\n\n var keyLen = keyBits / 8\n var key = Buffer.alloc(keyLen)\n var iv = Buffer.alloc(ivLen || 0)\n var tmp = Buffer.alloc(0)\n\n while (keyLen > 0 || ivLen > 0) {\n var hash = new MD5()\n hash.update(tmp)\n hash.update(password)\n if (salt) hash.update(salt)\n tmp = hash.digest()\n\n var used = 0\n\n if (keyLen > 0) {\n var keyStart = key.length - keyLen\n used = Math.min(keyLen, tmp.length)\n tmp.copy(key, keyStart, 0, used)\n keyLen -= used\n }\n\n if (used < tmp.length && ivLen > 0) {\n var ivStart = iv.length - ivLen\n var length = Math.min(ivLen, tmp.length - used)\n tmp.copy(iv, ivStart, used, used + length)\n ivLen -= length\n }\n }\n\n tmp.fill(0)\n return { key: key, iv: iv }\n}\n\nmodule.exports = EVP_BytesToKey\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\n/**/\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n keys.push(key);\n }return keys;\n};\n/**/\n\nmodule.exports = Duplex;\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\n\nutil.inherits(Duplex, Readable);\n\n{\n // avoid scope creep, the keys array can then be collected\n var keys = objectKeys(Writable.prototype);\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n\n Readable.call(this, options);\n Writable.call(this, options);\n\n if (options && options.readable === false) this.readable = false;\n\n if (options && options.writable === false) this.writable = false;\n\n this.allowHalfOpen = true;\n if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n\n this.once('end', onend);\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n // if we allow half-open state, or if the writable side ended,\n // then we're ok.\n if (this.allowHalfOpen || this._writableState.ended) return;\n\n // no more data can be written.\n // But allow more writes to happen in this tick.\n pna.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});\n\nDuplex.prototype._destroy = function (err, cb) {\n this.push(null);\n this.end();\n\n pna.nextTick(cb, err);\n};","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar assert = require('minimalistic-assert');\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n","'use strict'\nvar Buffer = require('buffer').Buffer\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\n\nvar ARRAY16 = new Array(16)\n\nvar zl = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n]\n\nvar zr = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n]\n\nvar sl = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n]\n\nvar sr = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n]\n\nvar hl = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e]\nvar hr = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000]\n\nfunction RIPEMD160 () {\n HashBase.call(this, 64)\n\n // state\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n}\n\ninherits(RIPEMD160, HashBase)\n\nRIPEMD160.prototype._update = function () {\n var words = ARRAY16\n for (var j = 0; j < 16; ++j) words[j] = this._block.readInt32LE(j * 4)\n\n var al = this._a | 0\n var bl = this._b | 0\n var cl = this._c | 0\n var dl = this._d | 0\n var el = this._e | 0\n\n var ar = this._a | 0\n var br = this._b | 0\n var cr = this._c | 0\n var dr = this._d | 0\n var er = this._e | 0\n\n // computation\n for (var i = 0; i < 80; i += 1) {\n var tl\n var tr\n if (i < 16) {\n tl = fn1(al, bl, cl, dl, el, words[zl[i]], hl[0], sl[i])\n tr = fn5(ar, br, cr, dr, er, words[zr[i]], hr[0], sr[i])\n } else if (i < 32) {\n tl = fn2(al, bl, cl, dl, el, words[zl[i]], hl[1], sl[i])\n tr = fn4(ar, br, cr, dr, er, words[zr[i]], hr[1], sr[i])\n } else if (i < 48) {\n tl = fn3(al, bl, cl, dl, el, words[zl[i]], hl[2], sl[i])\n tr = fn3(ar, br, cr, dr, er, words[zr[i]], hr[2], sr[i])\n } else if (i < 64) {\n tl = fn4(al, bl, cl, dl, el, words[zl[i]], hl[3], sl[i])\n tr = fn2(ar, br, cr, dr, er, words[zr[i]], hr[3], sr[i])\n } else { // if (i<80) {\n tl = fn5(al, bl, cl, dl, el, words[zl[i]], hl[4], sl[i])\n tr = fn1(ar, br, cr, dr, er, words[zr[i]], hr[4], sr[i])\n }\n\n al = el\n el = dl\n dl = rotl(cl, 10)\n cl = bl\n bl = tl\n\n ar = er\n er = dr\n dr = rotl(cr, 10)\n cr = br\n br = tr\n }\n\n // update state\n var t = (this._b + cl + dr) | 0\n this._b = (this._c + dl + er) | 0\n this._c = (this._d + el + ar) | 0\n this._d = (this._e + al + br) | 0\n this._e = (this._a + bl + cr) | 0\n this._a = t\n}\n\nRIPEMD160.prototype._digest = function () {\n // create padding and handle blocks\n this._block[this._blockOffset++] = 0x80\n if (this._blockOffset > 56) {\n this._block.fill(0, this._blockOffset, 64)\n this._update()\n this._blockOffset = 0\n }\n\n this._block.fill(0, this._blockOffset, 56)\n this._block.writeUInt32LE(this._length[0], 56)\n this._block.writeUInt32LE(this._length[1], 60)\n this._update()\n\n // produce result\n var buffer = Buffer.alloc ? Buffer.alloc(20) : new Buffer(20)\n buffer.writeInt32LE(this._a, 0)\n buffer.writeInt32LE(this._b, 4)\n buffer.writeInt32LE(this._c, 8)\n buffer.writeInt32LE(this._d, 12)\n buffer.writeInt32LE(this._e, 16)\n return buffer\n}\n\nfunction rotl (x, n) {\n return (x << n) | (x >>> (32 - n))\n}\n\nfunction fn1 (a, b, c, d, e, m, k, s) {\n return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn2 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn3 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn4 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn5 (a, b, c, d, e, m, k, s) {\n return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0\n}\n\nmodule.exports = RIPEMD160\n","var Buffer = require('safe-buffer').Buffer\n\n// prototype class for hash functions\nfunction Hash (blockSize, finalSize) {\n this._block = Buffer.alloc(blockSize)\n this._finalSize = finalSize\n this._blockSize = blockSize\n this._len = 0\n}\n\nHash.prototype.update = function (data, enc) {\n if (typeof data === 'string') {\n enc = enc || 'utf8'\n data = Buffer.from(data, enc)\n }\n\n var block = this._block\n var blockSize = this._blockSize\n var length = data.length\n var accum = this._len\n\n for (var offset = 0; offset < length;) {\n var assigned = accum % blockSize\n var remainder = Math.min(length - offset, blockSize - assigned)\n\n for (var i = 0; i < remainder; i++) {\n block[assigned + i] = data[offset + i]\n }\n\n accum += remainder\n offset += remainder\n\n if ((accum % blockSize) === 0) {\n this._update(block)\n }\n }\n\n this._len += length\n return this\n}\n\nHash.prototype.digest = function (enc) {\n var rem = this._len % this._blockSize\n\n this._block[rem] = 0x80\n\n // zero (rem + 1) trailing bits, where (rem + 1) is the smallest\n // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize\n this._block.fill(0, rem + 1)\n\n if (rem >= this._finalSize) {\n this._update(this._block)\n this._block.fill(0)\n }\n\n var bits = this._len * 8\n\n // uint32\n if (bits <= 0xffffffff) {\n this._block.writeUInt32BE(bits, this._blockSize - 4)\n\n // uint64\n } else {\n var lowBits = (bits & 0xffffffff) >>> 0\n var highBits = (bits - lowBits) / 0x100000000\n\n this._block.writeUInt32BE(highBits, this._blockSize - 8)\n this._block.writeUInt32BE(lowBits, this._blockSize - 4)\n }\n\n this._update(this._block)\n var hash = this._hash()\n\n return enc ? hash.toString(enc) : hash\n}\n\nHash.prototype._update = function () {\n throw new Error('_update must be implemented by subclass')\n}\n\nmodule.exports = Hash\n","var Buffer = require('safe-buffer').Buffer\nvar createHash = require('create-hash')\nvar stream = require('readable-stream')\nvar inherits = require('inherits')\nvar sign = require('./sign')\nvar verify = require('./verify')\n\nvar algorithms = require('./algorithms.json')\nObject.keys(algorithms).forEach(function (key) {\n algorithms[key].id = Buffer.from(algorithms[key].id, 'hex')\n algorithms[key.toLowerCase()] = algorithms[key]\n})\n\nfunction Sign (algorithm) {\n stream.Writable.call(this)\n\n var data = algorithms[algorithm]\n if (!data) throw new Error('Unknown message digest')\n\n this._hashType = data.hash\n this._hash = createHash(data.hash)\n this._tag = data.id\n this._signType = data.sign\n}\ninherits(Sign, stream.Writable)\n\nSign.prototype._write = function _write (data, _, done) {\n this._hash.update(data)\n done()\n}\n\nSign.prototype.update = function update (data, enc) {\n if (typeof data === 'string') data = Buffer.from(data, enc)\n\n this._hash.update(data)\n return this\n}\n\nSign.prototype.sign = function signMethod (key, enc) {\n this.end()\n var hash = this._hash.digest()\n var sig = sign(hash, key, this._hashType, this._signType, this._tag)\n\n return enc ? sig.toString(enc) : sig\n}\n\nfunction Verify (algorithm) {\n stream.Writable.call(this)\n\n var data = algorithms[algorithm]\n if (!data) throw new Error('Unknown message digest')\n\n this._hash = createHash(data.hash)\n this._tag = data.id\n this._signType = data.sign\n}\ninherits(Verify, stream.Writable)\n\nVerify.prototype._write = function _write (data, _, done) {\n this._hash.update(data)\n done()\n}\n\nVerify.prototype.update = function update (data, enc) {\n if (typeof data === 'string') data = Buffer.from(data, enc)\n\n this._hash.update(data)\n return this\n}\n\nVerify.prototype.verify = function verifyMethod (key, sig, enc) {\n if (typeof sig === 'string') sig = Buffer.from(sig, enc)\n\n this.end()\n var hash = this._hash.digest()\n return verify(sig, hash, key, this._signType, this._tag)\n}\n\nfunction createSign (algorithm) {\n return new Sign(algorithm)\n}\n\nfunction createVerify (algorithm) {\n return new Verify(algorithm)\n}\n\nmodule.exports = {\n Sign: createSign,\n Verify: createVerify,\n createSign: createSign,\n createVerify: createVerify\n}\n","'use strict';\n\nvar BN = require('bn.js');\n\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction Signature(options, enc) {\n if (options instanceof Signature)\n return options;\n\n if (this._importDER(options, enc))\n return;\n\n assert(options.r && options.s, 'Signature without r or s');\n this.r = new BN(options.r, 16);\n this.s = new BN(options.s, 16);\n if (options.recoveryParam === undefined)\n this.recoveryParam = null;\n else\n this.recoveryParam = options.recoveryParam;\n}\nmodule.exports = Signature;\n\nfunction Position() {\n this.place = 0;\n}\n\nfunction getLength(buf, p) {\n var initial = buf[p.place++];\n if (!(initial & 0x80)) {\n return initial;\n }\n var octetLen = initial & 0xf;\n\n // Indefinite length or overflow\n if (octetLen === 0 || octetLen > 4) {\n return false;\n }\n\n var val = 0;\n for (var i = 0, off = p.place; i < octetLen; i++, off++) {\n val <<= 8;\n val |= buf[off];\n val >>>= 0;\n }\n\n // Leading zeroes\n if (val <= 0x7f) {\n return false;\n }\n\n p.place = off;\n return val;\n}\n\nfunction rmPadding(buf) {\n var i = 0;\n var len = buf.length - 1;\n while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {\n i++;\n }\n if (i === 0) {\n return buf;\n }\n return buf.slice(i);\n}\n\nSignature.prototype._importDER = function _importDER(data, enc) {\n data = utils.toArray(data, enc);\n var p = new Position();\n if (data[p.place++] !== 0x30) {\n return false;\n }\n var len = getLength(data, p);\n if (len === false) {\n return false;\n }\n if ((len + p.place) !== data.length) {\n return false;\n }\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var rlen = getLength(data, p);\n if (rlen === false) {\n return false;\n }\n var r = data.slice(p.place, rlen + p.place);\n p.place += rlen;\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var slen = getLength(data, p);\n if (slen === false) {\n return false;\n }\n if (data.length !== slen + p.place) {\n return false;\n }\n var s = data.slice(p.place, slen + p.place);\n if (r[0] === 0) {\n if (r[1] & 0x80) {\n r = r.slice(1);\n } else {\n // Leading zeroes\n return false;\n }\n }\n if (s[0] === 0) {\n if (s[1] & 0x80) {\n s = s.slice(1);\n } else {\n // Leading zeroes\n return false;\n }\n }\n\n this.r = new BN(r);\n this.s = new BN(s);\n this.recoveryParam = null;\n\n return true;\n};\n\nfunction constructLength(arr, len) {\n if (len < 0x80) {\n arr.push(len);\n return;\n }\n var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);\n arr.push(octets | 0x80);\n while (--octets) {\n arr.push((len >>> (octets << 3)) & 0xff);\n }\n arr.push(len);\n}\n\nSignature.prototype.toDER = function toDER(enc) {\n var r = this.r.toArray();\n var s = this.s.toArray();\n\n // Pad values\n if (r[0] & 0x80)\n r = [ 0 ].concat(r);\n // Pad values\n if (s[0] & 0x80)\n s = [ 0 ].concat(s);\n\n r = rmPadding(r);\n s = rmPadding(s);\n\n while (!s[0] && !(s[1] & 0x80)) {\n s = s.slice(1);\n }\n var arr = [ 0x02 ];\n constructLength(arr, r.length);\n arr = arr.concat(r);\n arr.push(0x02);\n constructLength(arr, s.length);\n var backHalf = arr.concat(s);\n var res = [ 0x30 ];\n constructLength(res, backHalf.length);\n res = res.concat(backHalf);\n return utils.encode(res, enc);\n};\n","\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n if (config('noDeprecation')) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (config('throwDeprecation')) {\n throw new Error(msg);\n } else if (config('traceDeprecation')) {\n console.trace(msg);\n } else {\n console.warn(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n try {\n if (!global.localStorage) return false;\n } catch (_) {\n return false;\n }\n var val = global.localStorage[name];\n if (null == val) return false;\n return String(val).toLowerCase() === 'true';\n}\n","var inherits = require('inherits')\nvar SHA512 = require('./sha512')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(160)\n\nfunction Sha384 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha384, SHA512)\n\nSha384.prototype.init = function () {\n this._ah = 0xcbbb9d5d\n this._bh = 0x629a292a\n this._ch = 0x9159015a\n this._dh = 0x152fecd8\n this._eh = 0x67332667\n this._fh = 0x8eb44a87\n this._gh = 0xdb0c2e0d\n this._hh = 0x47b5481d\n\n this._al = 0xc1059ed8\n this._bl = 0x367cd507\n this._cl = 0x3070dd17\n this._dl = 0xf70e5939\n this._el = 0xffc00b31\n this._fl = 0x68581511\n this._gl = 0x64f98fa7\n this._hl = 0xbefa4fa4\n\n return this\n}\n\nSha384.prototype._hash = function () {\n var H = Buffer.allocUnsafe(48)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n\n return H\n}\n\nmodule.exports = Sha384\n","'use strict';\n\nvar BN = require('bn.js');\nvar HmacDRBG = require('hmac-drbg');\nvar utils = require('../utils');\nvar curves = require('../curves');\nvar rand = require('brorand');\nvar assert = utils.assert;\n\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EC(options) {\n if (!(this instanceof EC))\n return new EC(options);\n\n // Shortcut `elliptic.ec(curve-name)`\n if (typeof options === 'string') {\n assert(Object.prototype.hasOwnProperty.call(curves, options),\n 'Unknown curve ' + options);\n\n options = curves[options];\n }\n\n // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\n if (options instanceof curves.PresetCurve)\n options = { curve: options };\n\n this.curve = options.curve.curve;\n this.n = this.curve.n;\n this.nh = this.n.ushrn(1);\n this.g = this.curve.g;\n\n // Point on curve\n this.g = options.curve.g;\n this.g.precompute(options.curve.n.bitLength() + 1);\n\n // Hash for function for DRBG\n this.hash = options.hash || options.curve.hash;\n}\nmodule.exports = EC;\n\nEC.prototype.keyPair = function keyPair(options) {\n return new KeyPair(this, options);\n};\n\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\n return KeyPair.fromPrivate(this, priv, enc);\n};\n\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\n return KeyPair.fromPublic(this, pub, enc);\n};\n\nEC.prototype.genKeyPair = function genKeyPair(options) {\n if (!options)\n options = {};\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n entropy: options.entropy || rand(this.hash.hmacStrength),\n entropyEnc: options.entropy && options.entropyEnc || 'utf8',\n nonce: this.n.toArray(),\n });\n\n var bytes = this.n.byteLength();\n var ns2 = this.n.sub(new BN(2));\n for (;;) {\n var priv = new BN(drbg.generate(bytes));\n if (priv.cmp(ns2) > 0)\n continue;\n\n priv.iaddn(1);\n return this.keyFromPrivate(priv);\n }\n};\n\nEC.prototype._truncateToN = function _truncateToN(msg, truncOnly) {\n var delta = msg.byteLength() * 8 - this.n.bitLength();\n if (delta > 0)\n msg = msg.ushrn(delta);\n if (!truncOnly && msg.cmp(this.n) >= 0)\n return msg.sub(this.n);\n else\n return msg;\n};\n\nEC.prototype.sign = function sign(msg, key, enc, options) {\n if (typeof enc === 'object') {\n options = enc;\n enc = null;\n }\n if (!options)\n options = {};\n\n key = this.keyFromPrivate(key, enc);\n msg = this._truncateToN(new BN(msg, 16));\n\n // Zero-extend key to provide enough entropy\n var bytes = this.n.byteLength();\n var bkey = key.getPrivate().toArray('be', bytes);\n\n // Zero-extend nonce to have the same byte size as N\n var nonce = msg.toArray('be', bytes);\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n entropy: bkey,\n nonce: nonce,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n });\n\n // Number of bytes to generate\n var ns1 = this.n.sub(new BN(1));\n\n for (var iter = 0; ; iter++) {\n var k = options.k ?\n options.k(iter) :\n new BN(drbg.generate(this.n.byteLength()));\n k = this._truncateToN(k, true);\n if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\n continue;\n\n var kp = this.g.mul(k);\n if (kp.isInfinity())\n continue;\n\n var kpX = kp.getX();\n var r = kpX.umod(this.n);\n if (r.cmpn(0) === 0)\n continue;\n\n var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\n s = s.umod(this.n);\n if (s.cmpn(0) === 0)\n continue;\n\n var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\n (kpX.cmp(r) !== 0 ? 2 : 0);\n\n // Use complement of `s`, if it is > `n / 2`\n if (options.canonical && s.cmp(this.nh) > 0) {\n s = this.n.sub(s);\n recoveryParam ^= 1;\n }\n\n return new Signature({ r: r, s: s, recoveryParam: recoveryParam });\n }\n};\n\nEC.prototype.verify = function verify(msg, signature, key, enc) {\n msg = this._truncateToN(new BN(msg, 16));\n key = this.keyFromPublic(key, enc);\n signature = new Signature(signature, 'hex');\n\n // Perform primitive values validation\n var r = signature.r;\n var s = signature.s;\n if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\n return false;\n if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\n return false;\n\n // Validate signature\n var sinv = s.invm(this.n);\n var u1 = sinv.mul(msg).umod(this.n);\n var u2 = sinv.mul(r).umod(this.n);\n var p;\n\n if (!this.curve._maxwellTrick) {\n p = this.g.mulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n return p.getX().umod(this.n).cmp(r) === 0;\n }\n\n // NOTE: Greg Maxwell's trick, inspired by:\n // https://git.io/vad3K\n\n p = this.g.jmulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n // Compare `p.x` of Jacobian point with `r`,\n // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\n // inverse of `p.z^2`\n return p.eqXToP(r);\n};\n\nEC.prototype.recoverPubKey = function(msg, signature, j, enc) {\n assert((3 & j) === j, 'The recovery param is more than two bits');\n signature = new Signature(signature, enc);\n\n var n = this.n;\n var e = new BN(msg);\n var r = signature.r;\n var s = signature.s;\n\n // A set LSB signifies that the y-coordinate is odd\n var isYOdd = j & 1;\n var isSecondKey = j >> 1;\n if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\n throw new Error('Unable to find sencond key candinate');\n\n // 1.1. Let x = r + jn.\n if (isSecondKey)\n r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\n else\n r = this.curve.pointFromX(r, isYOdd);\n\n var rInv = signature.r.invm(n);\n var s1 = n.sub(e).mul(rInv).umod(n);\n var s2 = s.mul(rInv).umod(n);\n\n // 1.6.1 Compute Q = r^-1 (sR - eG)\n // Q = r^-1 (sR + -eG)\n return this.g.mulAdd(s1, r, s2);\n};\n\nEC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {\n signature = new Signature(signature, enc);\n if (signature.recoveryParam !== null)\n return signature.recoveryParam;\n\n for (var i = 0; i < 4; i++) {\n var Qprime;\n try {\n Qprime = this.recoverPubKey(e, signature, i);\n } catch (e) {\n continue;\n }\n\n if (Qprime.eq(Q))\n return i;\n }\n throw new Error('Unable to find valid recovery factor');\n};\n","'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\n\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\n\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n\n if (hwm != null) {\n if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n var name = isDuplex ? duplexKey : 'highWaterMark';\n throw new ERR_INVALID_OPT_VALUE(name, hwm);\n }\n\n return Math.floor(hwm);\n } // Default value\n\n\n return state.objectMode ? 16 : 16 * 1024;\n}\n\nmodule.exports = {\n getHighWaterMark: getHighWaterMark\n};","var modeModules = {\n ECB: require('./ecb'),\n CBC: require('./cbc'),\n CFB: require('./cfb'),\n CFB8: require('./cfb8'),\n CFB1: require('./cfb1'),\n OFB: require('./ofb'),\n CTR: require('./ctr'),\n GCM: require('./ctr')\n}\n\nvar modes = require('./list.json')\n\nfor (var key in modes) {\n modes[key].module = modeModules[modes[key].mode]\n}\n\nmodule.exports = modes\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction KeyPair(ec, options) {\n this.ec = ec;\n this.priv = null;\n this.pub = null;\n\n // KeyPair(ec, { priv: ..., pub: ... })\n if (options.priv)\n this._importPrivate(options.priv, options.privEnc);\n if (options.pub)\n this._importPublic(options.pub, options.pubEnc);\n}\nmodule.exports = KeyPair;\n\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\n if (pub instanceof KeyPair)\n return pub;\n\n return new KeyPair(ec, {\n pub: pub,\n pubEnc: enc,\n });\n};\n\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\n if (priv instanceof KeyPair)\n return priv;\n\n return new KeyPair(ec, {\n priv: priv,\n privEnc: enc,\n });\n};\n\nKeyPair.prototype.validate = function validate() {\n var pub = this.getPublic();\n\n if (pub.isInfinity())\n return { result: false, reason: 'Invalid public key' };\n if (!pub.validate())\n return { result: false, reason: 'Public key is not a point' };\n if (!pub.mul(this.ec.curve.n).isInfinity())\n return { result: false, reason: 'Public key * N != O' };\n\n return { result: true, reason: null };\n};\n\nKeyPair.prototype.getPublic = function getPublic(compact, enc) {\n // compact is optional argument\n if (typeof compact === 'string') {\n enc = compact;\n compact = null;\n }\n\n if (!this.pub)\n this.pub = this.ec.g.mul(this.priv);\n\n if (!enc)\n return this.pub;\n\n return this.pub.encode(enc, compact);\n};\n\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\n if (enc === 'hex')\n return this.priv.toString(16, 2);\n else\n return this.priv;\n};\n\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\n this.priv = new BN(key, enc || 16);\n\n // Ensure that the priv won't be bigger than n, otherwise we may fail\n // in fixed multiplication method\n this.priv = this.priv.umod(this.ec.curve.n);\n};\n\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\n if (key.x || key.y) {\n // Montgomery points only have an `x` coordinate.\n // Weierstrass/Edwards points on the other hand have both `x` and\n // `y` coordinates.\n if (this.ec.curve.type === 'mont') {\n assert(key.x, 'Need x coordinate');\n } else if (this.ec.curve.type === 'short' ||\n this.ec.curve.type === 'edwards') {\n assert(key.x && key.y, 'Need both x and y coordinate');\n }\n this.pub = this.ec.curve.point(key.x, key.y);\n return;\n }\n this.pub = this.ec.curve.decodePoint(key, enc);\n};\n\n// ECDH\nKeyPair.prototype.derive = function derive(pub) {\n if(!pub.validate()) {\n assert(pub.validate(), 'public point not validated');\n }\n return pub.mul(this.priv).getX();\n};\n\n// ECDSA\nKeyPair.prototype.sign = function sign(msg, enc, options) {\n return this.ec.sign(msg, this, enc, options);\n};\n\nKeyPair.prototype.verify = function verify(msg, signature) {\n return this.ec.verify(msg, signature, this);\n};\n\nKeyPair.prototype.inspect = function inspect() {\n return '';\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar common = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\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 Buffer = require('buffer').Buffer;\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 }\n\n if (base === 16) {\n this._parseHex(number, start);\n } else {\n this._parseBase(number, base, start);\n }\n\n if (number[0] === '-') {\n this.negative = 1;\n }\n\n this.strip();\n\n if (endian !== 'le') return;\n\n this._initArray(this.toArray(), base, endian);\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 parseHex (str, start, end) {\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 <<= 4;\n\n // 'a' - 'f'\n if (c >= 49 && c <= 54) {\n r |= c - 49 + 0xa;\n\n // 'A' - 'F'\n } else if (c >= 17 && c <= 22) {\n r |= c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r |= c & 0xf;\n }\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start) {\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 var j, w;\n // Scan 24-bit chunks and add them to the number\n var off = 0;\n for (i = number.length - 6, j = 0; i >= start; i -= 6) {\n w = parseHex(number, i, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n if (i + 6 !== start) {\n w = parseHex(number, start, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\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\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 incr32 (iv) {\n var len = iv.length\n var item\n while (len--) {\n item = iv.readUInt8(len)\n if (item === 255) {\n iv.writeUInt8(0, len)\n } else {\n item++\n iv.writeUInt8(item, len)\n break\n }\n }\n}\nmodule.exports = incr32\n","import Cookies from 'universal-cookie';\nimport { browserOrNode } from '../JS';\nvar isBrowser = browserOrNode().isBrowser;\nvar UniversalStorage = /** @class */ (function () {\n function UniversalStorage(context) {\n if (context === void 0) { context = {}; }\n this.cookies = new Cookies();\n this.store = isBrowser ? window.localStorage : Object.create(null);\n this.cookies = context.req\n ? new Cookies(context.req.headers.cookie)\n : new Cookies();\n Object.assign(this.store, this.cookies.getAll());\n }\n Object.defineProperty(UniversalStorage.prototype, \"length\", {\n get: function () {\n return Object.entries(this.store).length;\n },\n enumerable: true,\n configurable: true\n });\n UniversalStorage.prototype.clear = function () {\n var _this = this;\n Array.from(new Array(this.length))\n .map(function (_, i) { return _this.key(i); })\n .forEach(function (key) { return _this.removeItem(key); });\n };\n UniversalStorage.prototype.getItem = function (key) {\n return this.getLocalItem(key);\n };\n UniversalStorage.prototype.getLocalItem = function (key) {\n return Object.prototype.hasOwnProperty.call(this.store, key)\n ? this.store[key]\n : null;\n };\n UniversalStorage.prototype.getUniversalItem = function (key) {\n return this.cookies.get(key);\n };\n UniversalStorage.prototype.key = function (index) {\n return Object.keys(this.store)[index];\n };\n UniversalStorage.prototype.removeItem = function (key) {\n this.removeLocalItem(key);\n this.removeUniversalItem(key);\n };\n UniversalStorage.prototype.removeLocalItem = function (key) {\n delete this.store[key];\n };\n UniversalStorage.prototype.removeUniversalItem = function (key) {\n this.cookies.remove(key, {\n path: '/',\n });\n };\n UniversalStorage.prototype.setItem = function (key, value) {\n this.setLocalItem(key, value);\n // keys take the shape:\n // 1. `${ProviderPrefix}.${userPoolClientId}.${username}.${tokenType}\n // 2. `${ProviderPrefix}.${userPoolClientId}.LastAuthUser\n var tokenType = key.split('.').pop();\n switch (tokenType) {\n // LastAuthUser is needed for computing other key names\n case 'LastAuthUser':\n // accessToken is required for CognitoUserSession\n case 'accessToken':\n // Required for CognitoUserSession\n case 'idToken':\n this.setUniversalItem(key, value);\n // userData is used when `Auth.currentAuthenticatedUser({ bypassCache: false })`.\n // Can be persisted to speed up calls to `Auth.currentAuthenticatedUser()`\n // case 'userData':\n // refreshToken isn't shared with the server so that the client handles refreshing\n // case 'refreshToken':\n // Ignoring clockDrift on the server for now, but needs testing\n // case 'clockDrift':\n }\n };\n UniversalStorage.prototype.setLocalItem = function (key, value) {\n this.store[key] = value;\n };\n UniversalStorage.prototype.setUniversalItem = function (key, value) {\n this.cookies.set(key, value, {\n path: '/',\n // `httpOnly` cannot be set via JavaScript: https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies#JavaScript_access_using_Document.cookie\n sameSite: true,\n // Allow unsecure requests to http://localhost:3000/ when in development.\n secure: window.location.hostname === 'localhost' ? false : true,\n });\n };\n return UniversalStorage;\n}());\nexport { UniversalStorage };\n//# sourceMappingURL=index.js.map","export function urlSafeEncode(str) {\n return str\n .split('')\n .map(function (char) {\n return char\n .charCodeAt(0)\n .toString(16)\n .padStart(2, '0');\n })\n .join('');\n}\nexport function urlSafeDecode(hex) {\n return hex\n .match(/.{2}/g)\n .map(function (char) { return String.fromCharCode(parseInt(char, 16)); })\n .join('');\n}\n//# sourceMappingURL=StringUtils.js.map","/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n * http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar SELF = '_self';\nexport var launchUri = function (url) {\n var windowProxy = window.open(url, SELF);\n if (windowProxy) {\n return Promise.resolve(windowProxy);\n }\n else {\n return Promise.reject();\n }\n};\n//# sourceMappingURL=urlOpener.js.map","/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n * http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nexport var setState = function (state) {\n window.sessionStorage.setItem('oauth_state', state);\n};\nexport var getState = function () {\n var oauth_state = window.sessionStorage.getItem('oauth_state');\n window.sessionStorage.removeItem('oauth_state');\n return oauth_state;\n};\nexport var setPKCE = function (private_key) {\n window.sessionStorage.setItem('ouath_pkce_key', private_key);\n};\nexport var getPKCE = function () {\n var ouath_pkce_key = window.sessionStorage.getItem('ouath_pkce_key');\n window.sessionStorage.removeItem('ouath_pkce_key');\n return ouath_pkce_key;\n};\nexport var clearAll = function () {\n window.sessionStorage.removeItem('ouath_pkce_key');\n window.sessionStorage.removeItem('oauth_state');\n};\n//# sourceMappingURL=oauthStorage.js.map","/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n * http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nimport { parse } from 'url'; // Used for OAuth parsing of Cognito Hosted UI\nimport { launchUri } from './urlOpener';\nimport * as oAuthStorage from './oauthStorage';\nimport { isCognitoHostedOpts, CognitoHostedUIIdentityProvider, } from '../types/Auth';\nimport { ConsoleLogger as Logger, Hub, urlSafeEncode } from '@aws-amplify/core';\nimport sha256 from 'crypto-js/sha256';\nimport Base64 from 'crypto-js/enc-base64';\nvar AMPLIFY_SYMBOL = (typeof Symbol !== 'undefined' &&\n typeof Symbol.for === 'function'\n ? Symbol.for('amplify_default')\n : '@@amplify_default');\nvar dispatchAuthEvent = function (event, data, message) {\n Hub.dispatch('auth', { event: event, data: data, message: message }, 'Auth', AMPLIFY_SYMBOL);\n};\nvar logger = new Logger('OAuth');\nvar OAuth = /** @class */ (function () {\n function OAuth(_a) {\n var config = _a.config, cognitoClientId = _a.cognitoClientId, _b = _a.scopes, scopes = _b === void 0 ? [] : _b;\n this._urlOpener = config.urlOpener || launchUri;\n this._config = config;\n this._cognitoClientId = cognitoClientId;\n if (!this.isValidScopes(scopes))\n throw Error('scopes must be a String Array');\n this._scopes = scopes;\n }\n OAuth.prototype.isValidScopes = function (scopes) {\n return (Array.isArray(scopes) && scopes.every(function (scope) { return typeof scope === 'string'; }));\n };\n OAuth.prototype.oauthSignIn = function (responseType, domain, redirectSignIn, clientId, provider, customState) {\n if (responseType === void 0) { responseType = 'code'; }\n if (provider === void 0) { provider = CognitoHostedUIIdentityProvider.Cognito; }\n var generatedState = this._generateState(32);\n /* encodeURIComponent is not URL safe, use urlSafeEncode instead. Cognito\n single-encodes/decodes url on first sign in and double-encodes/decodes url\n when user already signed in. Using encodeURIComponent, Base32, Base64 add\n characters % or = which on further encoding becomes unsafe. '=' create issue\n for parsing query params.\n Refer: https://github.com/aws-amplify/amplify-js/issues/5218 */\n var state = customState\n ? generatedState + \"-\" + urlSafeEncode(customState)\n : generatedState;\n oAuthStorage.setState(state);\n var pkce_key = this._generateRandom(128);\n oAuthStorage.setPKCE(pkce_key);\n var code_challenge = this._generateChallenge(pkce_key);\n var code_challenge_method = 'S256';\n var scopesString = this._scopes.join(' ');\n var queryString = Object.entries(__assign(__assign({ redirect_uri: redirectSignIn, response_type: responseType, client_id: clientId, identity_provider: provider, scope: scopesString, state: state }, (responseType === 'code' ? { code_challenge: code_challenge } : {})), (responseType === 'code' ? { code_challenge_method: code_challenge_method } : {})))\n .map(function (_a) {\n var _b = __read(_a, 2), k = _b[0], v = _b[1];\n return encodeURIComponent(k) + \"=\" + encodeURIComponent(v);\n })\n .join('&');\n var URL = \"https://\" + domain + \"/oauth2/authorize?\" + queryString;\n logger.debug(\"Redirecting to \" + URL);\n this._urlOpener(URL, redirectSignIn);\n };\n OAuth.prototype._handleCodeFlow = function (currentUrl) {\n return __awaiter(this, void 0, void 0, function () {\n var code, oAuthTokenEndpoint, client_id, redirect_uri, code_verifier, oAuthTokenBody, body, _a, access_token, refresh_token, id_token, error;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n code = (parse(currentUrl).query || '')\n .split('&')\n .map(function (pairings) { return pairings.split('='); })\n .reduce(function (accum, _a) {\n var _b;\n var _c = __read(_a, 2), k = _c[0], v = _c[1];\n return (__assign(__assign({}, accum), (_b = {}, _b[k] = v, _b)));\n }, { code: undefined }).code;\n if (!code || parse(currentUrl).pathname !== parse(this._config.redirectSignIn).pathname) {\n return [2 /*return*/];\n }\n oAuthTokenEndpoint = 'https://' + this._config.domain + '/oauth2/token';\n dispatchAuthEvent('codeFlow', {}, \"Retrieving tokens from \" + oAuthTokenEndpoint);\n client_id = isCognitoHostedOpts(this._config)\n ? this._cognitoClientId\n : this._config.clientID;\n redirect_uri = isCognitoHostedOpts(this._config)\n ? this._config.redirectSignIn\n : this._config.redirectUri;\n code_verifier = oAuthStorage.getPKCE();\n oAuthTokenBody = __assign({ grant_type: 'authorization_code', code: code,\n client_id: client_id,\n redirect_uri: redirect_uri }, (code_verifier ? { code_verifier: code_verifier } : {}));\n logger.debug(\"Calling token endpoint: \" + oAuthTokenEndpoint + \" with\", oAuthTokenBody);\n body = Object.entries(oAuthTokenBody)\n .map(function (_a) {\n var _b = __read(_a, 2), k = _b[0], v = _b[1];\n return encodeURIComponent(k) + \"=\" + encodeURIComponent(v);\n })\n .join('&');\n return [4 /*yield*/, fetch(oAuthTokenEndpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n body: body,\n })];\n case 1: return [4 /*yield*/, (_b.sent()).json()];\n case 2:\n _a = _b.sent(), access_token = _a.access_token, refresh_token = _a.refresh_token, id_token = _a.id_token, error = _a.error;\n if (error) {\n throw new Error(error);\n }\n return [2 /*return*/, {\n accessToken: access_token,\n refreshToken: refresh_token,\n idToken: id_token,\n }];\n }\n });\n });\n };\n OAuth.prototype._handleImplicitFlow = function (currentUrl) {\n return __awaiter(this, void 0, void 0, function () {\n var _a, id_token, access_token;\n return __generator(this, function (_b) {\n _a = (parse(currentUrl).hash || '#')\n .substr(1) // Remove # from returned code\n .split('&')\n .map(function (pairings) { return pairings.split('='); })\n .reduce(function (accum, _a) {\n var _b;\n var _c = __read(_a, 2), k = _c[0], v = _c[1];\n return (__assign(__assign({}, accum), (_b = {}, _b[k] = v, _b)));\n }, {\n id_token: undefined,\n access_token: undefined,\n }), id_token = _a.id_token, access_token = _a.access_token;\n dispatchAuthEvent('implicitFlow', {}, \"Got tokens from \" + currentUrl);\n logger.debug(\"Retrieving implicit tokens from \" + currentUrl + \" with\");\n return [2 /*return*/, {\n accessToken: access_token,\n idToken: id_token,\n refreshToken: null,\n }];\n });\n });\n };\n OAuth.prototype.handleAuthResponse = function (currentUrl) {\n return __awaiter(this, void 0, void 0, function () {\n var urlParams, error, error_description, state, _a, _b, e_1;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n _c.trys.push([0, 5, , 6]);\n urlParams = currentUrl\n ? __assign(__assign({}, (parse(currentUrl).hash || '#')\n .substr(1)\n .split('&')\n .map(function (entry) { return entry.split('='); })\n .reduce(function (acc, _a) {\n var _b = __read(_a, 2), k = _b[0], v = _b[1];\n return ((acc[k] = v), acc);\n }, {})), (parse(currentUrl).query || '')\n .split('&')\n .map(function (entry) { return entry.split('='); })\n .reduce(function (acc, _a) {\n var _b = __read(_a, 2), k = _b[0], v = _b[1];\n return ((acc[k] = v), acc);\n }, {}))\n : {};\n error = urlParams.error, error_description = urlParams.error_description;\n if (error) {\n throw new Error(error_description);\n }\n state = this._validateState(urlParams);\n logger.debug(\"Starting \" + this._config.responseType + \" flow with \" + currentUrl);\n if (!(this._config.responseType === 'code')) return [3 /*break*/, 2];\n _a = [{}];\n return [4 /*yield*/, this._handleCodeFlow(currentUrl)];\n case 1: return [2 /*return*/, __assign.apply(void 0, [__assign.apply(void 0, _a.concat([(_c.sent())])), { state: state }])];\n case 2:\n _b = [{}];\n return [4 /*yield*/, this._handleImplicitFlow(currentUrl)];\n case 3: return [2 /*return*/, __assign.apply(void 0, [__assign.apply(void 0, _b.concat([(_c.sent())])), { state: state }])];\n case 4: return [3 /*break*/, 6];\n case 5:\n e_1 = _c.sent();\n logger.error(\"Error handling auth response.\", e_1);\n throw e_1;\n case 6: return [2 /*return*/];\n }\n });\n });\n };\n OAuth.prototype._validateState = function (urlParams) {\n if (!urlParams) {\n return;\n }\n var savedState = oAuthStorage.getState();\n var returnedState = urlParams.state;\n // This is because savedState only exists if the flow was initiated by Amplify\n if (savedState && savedState !== returnedState) {\n throw new Error('Invalid state in OAuth flow');\n }\n return returnedState;\n };\n OAuth.prototype.signOut = function () {\n return __awaiter(this, void 0, void 0, function () {\n var oAuthLogoutEndpoint, client_id, signout_uri;\n return __generator(this, function (_a) {\n oAuthLogoutEndpoint = 'https://' + this._config.domain + '/logout?';\n client_id = isCognitoHostedOpts(this._config)\n ? this._cognitoClientId\n : this._config.oauth.clientID;\n signout_uri = isCognitoHostedOpts(this._config)\n ? this._config.redirectSignOut\n : this._config.returnTo;\n oAuthLogoutEndpoint += Object.entries({\n client_id: client_id,\n logout_uri: encodeURIComponent(signout_uri),\n })\n .map(function (_a) {\n var _b = __read(_a, 2), k = _b[0], v = _b[1];\n return k + \"=\" + v;\n })\n .join('&');\n dispatchAuthEvent('oAuthSignOut', { oAuth: 'signOut' }, \"Signing out from \" + oAuthLogoutEndpoint);\n logger.debug(\"Signing out from \" + oAuthLogoutEndpoint);\n return [2 /*return*/, this._urlOpener(oAuthLogoutEndpoint)];\n });\n });\n };\n OAuth.prototype._generateState = function (length) {\n var result = '';\n var i = length;\n var chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n for (; i > 0; --i)\n result += chars[Math.round(Math.random() * (chars.length - 1))];\n return result;\n };\n OAuth.prototype._generateChallenge = function (code) {\n return this._base64URL(sha256(code));\n };\n OAuth.prototype._base64URL = function (string) {\n return string\n .toString(Base64)\n .replace(/=/g, '')\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_');\n };\n OAuth.prototype._generateRandom = function (size) {\n var CHARSET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~';\n var buffer = new Uint8Array(size);\n if (typeof window !== 'undefined' && !!window.crypto) {\n window.crypto.getRandomValues(buffer);\n }\n else {\n for (var i = 0; i < size; i += 1) {\n buffer[i] = (Math.random() * CHARSET.length) | 0;\n }\n }\n return this._bufferToString(buffer);\n };\n OAuth.prototype._bufferToString = function (buffer) {\n var CHARSET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n var state = [];\n for (var i = 0; i < buffer.byteLength; i += 1) {\n var index = buffer[i] % CHARSET.length;\n state.push(CHARSET[index]);\n }\n return state.join('');\n };\n return OAuth;\n}());\nexport default OAuth;\n//# sourceMappingURL=OAuth.js.map","/*\n * Copyright 2017-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n * http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nimport { JS } from '@aws-amplify/core';\nexport default (function (callback) {\n if (JS.browserOrNode().isBrowser && window.location) {\n var url = window.location.href;\n callback({ url: url });\n }\n else if (JS.browserOrNode().isNode) {\n // continue building on ssr\n (function () { }); // noop\n }\n else {\n throw new Error('Not supported');\n }\n});\n//# sourceMappingURL=urlListener.js.map","/*\n * Copyright 2019-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n * http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { ConsoleLogger as Logger } from '@aws-amplify/core';\nimport { AuthErrorStrings } from './common/AuthErrorStrings';\nvar logger = new Logger('AuthError');\nvar AuthError = /** @class */ (function (_super) {\n __extends(AuthError, _super);\n function AuthError(type) {\n var _this = this;\n var _a = authErrorMessages[type], message = _a.message, log = _a.log;\n _this = _super.call(this, message) || this;\n // Hack for making the custom error class work when transpiled to es5\n // TODO: Delete the following 2 lines after we change the build target to >= es2015\n _this.constructor = AuthError;\n Object.setPrototypeOf(_this, AuthError.prototype);\n _this.name = 'AuthError';\n _this.log = log || message;\n logger.error(_this.log);\n return _this;\n }\n return AuthError;\n}(Error));\nexport { AuthError };\nvar NoUserPoolError = /** @class */ (function (_super) {\n __extends(NoUserPoolError, _super);\n function NoUserPoolError(type) {\n var _this = _super.call(this, type) || this;\n // Hack for making the custom error class work when transpiled to es5\n // TODO: Delete the following 2 lines after we change the build target to >= es2015\n _this.constructor = NoUserPoolError;\n Object.setPrototypeOf(_this, NoUserPoolError.prototype);\n _this.name = 'NoUserPoolError';\n return _this;\n }\n return NoUserPoolError;\n}(AuthError));\nexport { NoUserPoolError };\nexport var authErrorMessages = {\n noConfig: {\n message: AuthErrorStrings.DEFAULT_MSG,\n log: \"\\n Error: Amplify has not been configured correctly.\\n This error is typically caused by one of the following scenarios:\\n\\n 1. Make sure you're passing the awsconfig object to Amplify.configure() in your app's entry point\\n See https://aws-amplify.github.io/docs/js/authentication#configure-your-app for more information\\n \\n 2. There might be multiple conflicting versions of aws-amplify or amplify packages in your node_modules.\\n Try deleting your node_modules folder and reinstalling the dependencies with `yarn install`\\n \",\n },\n missingAuthConfig: {\n message: AuthErrorStrings.DEFAULT_MSG,\n log: \"\\n Error: Amplify has not been configured correctly. \\n The configuration object is missing required auth properties. \\n Did you run `amplify push` after adding auth via `amplify add auth`?\\n See https://aws-amplify.github.io/docs/js/authentication#amplify-project-setup for more information\\n \",\n },\n emptyUsername: {\n message: AuthErrorStrings.EMPTY_USERNAME,\n },\n // TODO: should include a list of valid sign-in types\n invalidUsername: {\n message: AuthErrorStrings.INVALID_USERNAME,\n },\n emptyPassword: {\n message: AuthErrorStrings.EMPTY_PASSWORD,\n },\n emptyCode: {\n message: AuthErrorStrings.EMPTY_CODE,\n },\n signUpError: {\n message: AuthErrorStrings.SIGN_UP_ERROR,\n log: 'The first parameter should either be non-null string or object',\n },\n noMFA: {\n message: AuthErrorStrings.NO_MFA,\n },\n invalidMFA: {\n message: AuthErrorStrings.INVALID_MFA,\n },\n emptyChallengeResponse: {\n message: AuthErrorStrings.EMPTY_CHALLENGE,\n },\n noUserSession: {\n message: AuthErrorStrings.NO_USER_SESSION,\n },\n default: {\n message: AuthErrorStrings.DEFAULT_MSG,\n },\n};\n//# sourceMappingURL=Errors.js.map","/*\n * Copyright 2017-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *\t http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nimport { isUsernamePasswordOpts, isCognitoHostedOpts, isFederatedSignInOptions, isFederatedSignInOptionsCustom, hasCustomState, } from './types';\nimport { Amplify, ConsoleLogger as Logger, Credentials, Hub, StorageHelper, Parser, JS, UniversalStorage, urlSafeDecode, } from '@aws-amplify/core';\nimport { CookieStorage, CognitoUserPool, AuthenticationDetails, CognitoUser, CognitoUserSession, CognitoUserAttribute, CognitoIdToken, CognitoRefreshToken, CognitoAccessToken, } from 'amazon-cognito-identity-js';\nimport { parse } from 'url';\nimport OAuth from './OAuth/OAuth';\nimport { default as urlListener } from './urlListener';\nimport { AuthError, NoUserPoolError } from './Errors';\nimport { AuthErrorTypes, CognitoHostedUIIdentityProvider } from './types/Auth';\nvar logger = new Logger('AuthClass');\nvar USER_ADMIN_SCOPE = 'aws.cognito.signin.user.admin';\n// 10 sec, following this guide https://www.nngroup.com/articles/response-times-3-important-limits/\nvar OAUTH_FLOW_MS_TIMEOUT = 10 * 1000;\nvar AMPLIFY_SYMBOL = (typeof Symbol !== 'undefined' &&\n typeof Symbol.for === 'function'\n ? Symbol.for('amplify_default')\n : '@@amplify_default');\nvar dispatchAuthEvent = function (event, data, message) {\n Hub.dispatch('auth', { event: event, data: data, message: message }, 'Auth', AMPLIFY_SYMBOL);\n};\n/**\n * Provide authentication steps\n */\nvar AuthClass = /** @class */ (function () {\n /**\n * Initialize Auth with AWS configurations\n * @param {Object} config - Configuration of the Auth\n */\n function AuthClass(config) {\n var _this = this;\n this.userPool = null;\n this.user = null;\n this.oAuthFlowInProgress = false;\n this.Credentials = Credentials;\n this.wrapRefreshSessionCallback = function (callback) {\n var wrapped = function (error, data) {\n if (data) {\n dispatchAuthEvent('tokenRefresh', undefined, \"New token retrieved\");\n }\n else {\n dispatchAuthEvent('tokenRefresh_failure', error, \"Failed to retrieve new token\");\n }\n return callback(error, data);\n };\n return wrapped;\n }; // prettier-ignore\n this.configure(config);\n this.currentCredentials = this.currentCredentials.bind(this);\n this.currentUserCredentials = this.currentUserCredentials.bind(this);\n Hub.listen('auth', function (_a) {\n var payload = _a.payload;\n var event = payload.event;\n switch (event) {\n case 'signIn':\n _this._storage.setItem('amplify-signin-with-hostedUI', 'false');\n break;\n case 'signOut':\n _this._storage.removeItem('amplify-signin-with-hostedUI');\n break;\n case 'cognitoHostedUI':\n _this._storage.setItem('amplify-signin-with-hostedUI', 'true');\n break;\n }\n });\n }\n AuthClass.prototype.getModuleName = function () {\n return 'Auth';\n };\n AuthClass.prototype.configure = function (config) {\n var _this = this;\n if (!config)\n return this._config || {};\n logger.debug('configure Auth');\n var conf = Object.assign({}, this._config, Parser.parseMobilehubConfig(config).Auth, config);\n this._config = conf;\n var _a = this._config, userPoolId = _a.userPoolId, userPoolWebClientId = _a.userPoolWebClientId, cookieStorage = _a.cookieStorage, oauth = _a.oauth, region = _a.region, identityPoolId = _a.identityPoolId, mandatorySignIn = _a.mandatorySignIn, refreshHandlers = _a.refreshHandlers, identityPoolRegion = _a.identityPoolRegion, clientMetadata = _a.clientMetadata, endpoint = _a.endpoint;\n if (!this._config.storage) {\n // backward compatability\n if (cookieStorage)\n this._storage = new CookieStorage(cookieStorage);\n else {\n this._storage = config.ssr\n ? new UniversalStorage()\n : new StorageHelper().getStorage();\n }\n }\n else {\n if (!this._isValidAuthStorage(this._config.storage)) {\n logger.error('The storage in the Auth config is not valid!');\n throw new Error('Empty storage object');\n }\n this._storage = this._config.storage;\n }\n this._storageSync = Promise.resolve();\n if (typeof this._storage['sync'] === 'function') {\n this._storageSync = this._storage['sync']();\n }\n if (userPoolId) {\n var userPoolData = {\n UserPoolId: userPoolId,\n ClientId: userPoolWebClientId,\n endpoint: endpoint,\n };\n userPoolData.Storage = this._storage;\n this.userPool = new CognitoUserPool(userPoolData, this.wrapRefreshSessionCallback);\n }\n this.Credentials.configure({\n mandatorySignIn: mandatorySignIn,\n region: identityPoolRegion || region,\n userPoolId: userPoolId,\n identityPoolId: identityPoolId,\n refreshHandlers: refreshHandlers,\n storage: this._storage,\n });\n // initiailize cognitoauth client if hosted ui options provided\n // to keep backward compatibility:\n var cognitoHostedUIConfig = oauth\n ? isCognitoHostedOpts(this._config.oauth)\n ? oauth\n : oauth.awsCognito\n : undefined;\n if (cognitoHostedUIConfig) {\n var cognitoAuthParams = Object.assign({\n cognitoClientId: userPoolWebClientId,\n UserPoolId: userPoolId,\n domain: cognitoHostedUIConfig['domain'],\n scopes: cognitoHostedUIConfig['scope'],\n redirectSignIn: cognitoHostedUIConfig['redirectSignIn'],\n redirectSignOut: cognitoHostedUIConfig['redirectSignOut'],\n responseType: cognitoHostedUIConfig['responseType'],\n Storage: this._storage,\n urlOpener: cognitoHostedUIConfig['urlOpener'],\n clientMetadata: clientMetadata,\n }, cognitoHostedUIConfig['options']);\n this._oAuthHandler = new OAuth({\n scopes: cognitoAuthParams.scopes,\n config: cognitoAuthParams,\n cognitoClientId: cognitoAuthParams.cognitoClientId,\n });\n // **NOTE** - Remove this in a future major release as it is a breaking change\n // Prevents _handleAuthResponse from being called multiple times in Expo\n // See https://github.com/aws-amplify/amplify-js/issues/4388\n var usedResponseUrls_1 = {};\n urlListener(function (_a) {\n var url = _a.url;\n if (usedResponseUrls_1[url]) {\n return;\n }\n usedResponseUrls_1[url] = true;\n _this._handleAuthResponse(url);\n });\n }\n dispatchAuthEvent('configured', null, \"The Auth category has been configured successfully\");\n return this._config;\n };\n /**\n * Sign up with username, password and other attributes like phone, email\n * @param {String | object} params - The user attributes used for signin\n * @param {String[]} restOfAttrs - for the backward compatability\n * @return - A promise resolves callback data if success\n */\n AuthClass.prototype.signUp = function (params) {\n var _this = this;\n var restOfAttrs = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n restOfAttrs[_i - 1] = arguments[_i];\n }\n if (!this.userPool) {\n return this.rejectNoUserPool();\n }\n var username = null;\n var password = null;\n var attributes = [];\n var validationData = null;\n var clientMetadata;\n if (params && typeof params === 'string') {\n username = params;\n password = restOfAttrs ? restOfAttrs[0] : null;\n var email = restOfAttrs ? restOfAttrs[1] : null;\n var phone_number = restOfAttrs ? restOfAttrs[2] : null;\n if (email)\n attributes.push(new CognitoUserAttribute({ Name: 'email', Value: email }));\n if (phone_number)\n attributes.push(new CognitoUserAttribute({\n Name: 'phone_number',\n Value: phone_number,\n }));\n }\n else if (params && typeof params === 'object') {\n username = params['username'];\n password = params['password'];\n if (params && params.clientMetadata) {\n clientMetadata = params.clientMetadata;\n }\n else if (this._config.clientMetadata) {\n clientMetadata = this._config.clientMetadata;\n }\n var attrs_1 = params['attributes'];\n if (attrs_1) {\n Object.keys(attrs_1).map(function (key) {\n attributes.push(new CognitoUserAttribute({ Name: key, Value: attrs_1[key] }));\n });\n }\n var validationDataObject = params['validationData'];\n if (validationDataObject) {\n validationData = [];\n Object.keys(validationDataObject).map(function (key) {\n validationData.push(new CognitoUserAttribute({ Name: key, Value: attrs_1[key] }));\n });\n }\n }\n else {\n return this.rejectAuthError(AuthErrorTypes.SignUpError);\n }\n if (!username) {\n return this.rejectAuthError(AuthErrorTypes.EmptyUsername);\n }\n if (!password) {\n return this.rejectAuthError(AuthErrorTypes.EmptyPassword);\n }\n logger.debug('signUp attrs:', attributes);\n logger.debug('signUp validation data:', validationData);\n return new Promise(function (resolve, reject) {\n _this.userPool.signUp(username, password, attributes, validationData, function (err, data) {\n if (err) {\n dispatchAuthEvent('signUp_failure', err, username + \" failed to signup\");\n reject(err);\n }\n else {\n dispatchAuthEvent('signUp', data, username + \" has signed up successfully\");\n resolve(data);\n }\n }, clientMetadata);\n });\n };\n /**\n * Send the verification code to confirm sign up\n * @param {String} username - The username to be confirmed\n * @param {String} code - The verification code\n * @param {ConfirmSignUpOptions} options - other options for confirm signup\n * @return - A promise resolves callback data if success\n */\n AuthClass.prototype.confirmSignUp = function (username, code, options) {\n if (!this.userPool) {\n return this.rejectNoUserPool();\n }\n if (!username) {\n return this.rejectAuthError(AuthErrorTypes.EmptyUsername);\n }\n if (!code) {\n return this.rejectAuthError(AuthErrorTypes.EmptyCode);\n }\n var user = this.createCognitoUser(username);\n var forceAliasCreation = options && typeof options.forceAliasCreation === 'boolean'\n ? options.forceAliasCreation\n : true;\n var clientMetadata;\n if (options && options.clientMetadata) {\n clientMetadata = options.clientMetadata;\n }\n else if (this._config.clientMetadata) {\n clientMetadata = this._config.clientMetadata;\n }\n return new Promise(function (resolve, reject) {\n user.confirmRegistration(code, forceAliasCreation, function (err, data) {\n if (err) {\n reject(err);\n }\n else {\n resolve(data);\n }\n }, clientMetadata);\n });\n };\n /**\n * Resend the verification code\n * @param {String} username - The username to be confirmed\n * @param {ClientMetadata} clientMetadata - Metadata to be passed to Cognito Lambda triggers\n * @return - A promise resolves code delivery details if successful\n */\n AuthClass.prototype.resendSignUp = function (username, clientMetadata) {\n if (clientMetadata === void 0) { clientMetadata = this._config.clientMetadata; }\n if (!this.userPool) {\n return this.rejectNoUserPool();\n }\n if (!username) {\n return this.rejectAuthError(AuthErrorTypes.EmptyUsername);\n }\n var user = this.createCognitoUser(username);\n return new Promise(function (resolve, reject) {\n user.resendConfirmationCode(function (err, data) {\n if (err) {\n reject(err);\n }\n else {\n resolve(data);\n }\n }, clientMetadata);\n });\n };\n /**\n * Sign in\n * @param {String | SignInOpts} usernameOrSignInOpts - The username to be signed in or the sign in options\n * @param {String} password - The password of the username\n * @return - A promise resolves the CognitoUser\n */\n AuthClass.prototype.signIn = function (usernameOrSignInOpts, pw, clientMetadata) {\n if (clientMetadata === void 0) { clientMetadata = this._config.clientMetadata; }\n if (!this.userPool) {\n return this.rejectNoUserPool();\n }\n var username = null;\n var password = null;\n var validationData = {};\n // for backward compatibility\n if (typeof usernameOrSignInOpts === 'string') {\n username = usernameOrSignInOpts;\n password = pw;\n }\n else if (isUsernamePasswordOpts(usernameOrSignInOpts)) {\n if (typeof pw !== 'undefined') {\n logger.warn('The password should be defined under the first parameter object!');\n }\n username = usernameOrSignInOpts.username;\n password = usernameOrSignInOpts.password;\n validationData = usernameOrSignInOpts.validationData;\n }\n else {\n return this.rejectAuthError(AuthErrorTypes.InvalidUsername);\n }\n if (!username) {\n return this.rejectAuthError(AuthErrorTypes.EmptyUsername);\n }\n var authDetails = new AuthenticationDetails({\n Username: username,\n Password: password,\n ValidationData: validationData,\n ClientMetadata: clientMetadata,\n });\n if (password) {\n return this.signInWithPassword(authDetails);\n }\n else {\n return this.signInWithoutPassword(authDetails);\n }\n };\n /**\n * Return an object with the authentication callbacks\n * @param {CognitoUser} user - the cognito user object\n * @param {} resolve - function called when resolving the current step\n * @param {} reject - function called when rejecting the current step\n * @return - an object with the callback methods for user authentication\n */\n AuthClass.prototype.authCallbacks = function (user, resolve, reject) {\n var _this = this;\n var that = this;\n return {\n onSuccess: function (session) { return __awaiter(_this, void 0, void 0, function () {\n var cred, e_1, currentUser, e_2;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n logger.debug(session);\n delete user['challengeName'];\n delete user['challengeParam'];\n _a.label = 1;\n case 1:\n _a.trys.push([1, 4, 5, 9]);\n return [4 /*yield*/, this.Credentials.clear()];\n case 2:\n _a.sent();\n return [4 /*yield*/, this.Credentials.set(session, 'session')];\n case 3:\n cred = _a.sent();\n logger.debug('succeed to get cognito credentials', cred);\n return [3 /*break*/, 9];\n case 4:\n e_1 = _a.sent();\n logger.debug('cannot get cognito credentials', e_1);\n return [3 /*break*/, 9];\n case 5:\n _a.trys.push([5, 7, , 8]);\n return [4 /*yield*/, this.currentUserPoolUser()];\n case 6:\n currentUser = _a.sent();\n that.user = currentUser;\n dispatchAuthEvent('signIn', currentUser, \"A user \" + user.getUsername() + \" has been signed in\");\n resolve(currentUser);\n return [3 /*break*/, 8];\n case 7:\n e_2 = _a.sent();\n logger.error('Failed to get the signed in user', e_2);\n reject(e_2);\n return [3 /*break*/, 8];\n case 8: return [7 /*endfinally*/];\n case 9: return [2 /*return*/];\n }\n });\n }); },\n onFailure: function (err) {\n logger.debug('signIn failure', err);\n dispatchAuthEvent('signIn_failure', err, user.getUsername() + \" failed to signin\");\n reject(err);\n },\n customChallenge: function (challengeParam) {\n logger.debug('signIn custom challenge answer required');\n user['challengeName'] = 'CUSTOM_CHALLENGE';\n user['challengeParam'] = challengeParam;\n resolve(user);\n },\n mfaRequired: function (challengeName, challengeParam) {\n logger.debug('signIn MFA required');\n user['challengeName'] = challengeName;\n user['challengeParam'] = challengeParam;\n resolve(user);\n },\n mfaSetup: function (challengeName, challengeParam) {\n logger.debug('signIn mfa setup', challengeName);\n user['challengeName'] = challengeName;\n user['challengeParam'] = challengeParam;\n resolve(user);\n },\n newPasswordRequired: function (userAttributes, requiredAttributes) {\n logger.debug('signIn new password');\n user['challengeName'] = 'NEW_PASSWORD_REQUIRED';\n user['challengeParam'] = {\n userAttributes: userAttributes,\n requiredAttributes: requiredAttributes,\n };\n resolve(user);\n },\n totpRequired: function (challengeName, challengeParam) {\n logger.debug('signIn totpRequired');\n user['challengeName'] = challengeName;\n user['challengeParam'] = challengeParam;\n resolve(user);\n },\n selectMFAType: function (challengeName, challengeParam) {\n logger.debug('signIn selectMFAType', challengeName);\n user['challengeName'] = challengeName;\n user['challengeParam'] = challengeParam;\n resolve(user);\n },\n };\n };\n /**\n * Sign in with a password\n * @private\n * @param {AuthenticationDetails} authDetails - the user sign in data\n * @return - A promise resolves the CognitoUser object if success or mfa required\n */\n AuthClass.prototype.signInWithPassword = function (authDetails) {\n var _this = this;\n if (this.pendingSignIn) {\n throw new Error('Pending sign-in attempt already in progress');\n }\n var user = this.createCognitoUser(authDetails.getUsername());\n this.pendingSignIn = new Promise(function (resolve, reject) {\n user.authenticateUser(authDetails, _this.authCallbacks(user, function (value) {\n _this.pendingSignIn = null;\n resolve(value);\n }, function (error) {\n _this.pendingSignIn = null;\n reject(error);\n }));\n });\n return this.pendingSignIn;\n };\n /**\n * Sign in without a password\n * @private\n * @param {AuthenticationDetails} authDetails - the user sign in data\n * @return - A promise resolves the CognitoUser object if success or mfa required\n */\n AuthClass.prototype.signInWithoutPassword = function (authDetails) {\n var _this = this;\n var user = this.createCognitoUser(authDetails.getUsername());\n user.setAuthenticationFlowType('CUSTOM_AUTH');\n return new Promise(function (resolve, reject) {\n user.initiateAuth(authDetails, _this.authCallbacks(user, resolve, reject));\n });\n };\n /**\n * get user current preferred mfa option\n * this method doesn't work with totp, we need to deprecate it.\n * @deprecated\n * @param {CognitoUser} user - the current user\n * @return - A promise resolves the current preferred mfa option if success\n */\n AuthClass.prototype.getMFAOptions = function (user) {\n return new Promise(function (res, rej) {\n user.getMFAOptions(function (err, mfaOptions) {\n if (err) {\n logger.debug('get MFA Options failed', err);\n rej(err);\n return;\n }\n logger.debug('get MFA options success', mfaOptions);\n res(mfaOptions);\n return;\n });\n });\n };\n /**\n * get preferred mfa method\n * @param {CognitoUser} user - the current cognito user\n * @param {GetPreferredMFAOpts} params - options for getting the current user preferred MFA\n */\n AuthClass.prototype.getPreferredMFA = function (user, params) {\n var _this = this;\n var that = this;\n return new Promise(function (res, rej) {\n var clientMetadata = _this._config.clientMetadata; // TODO: verify behavior if this is override during signIn\n var bypassCache = params ? params.bypassCache : false;\n user.getUserData(function (err, data) {\n if (err) {\n logger.debug('getting preferred mfa failed', err);\n rej(err);\n return;\n }\n var mfaType = that._getMfaTypeFromUserData(data);\n if (!mfaType) {\n rej('invalid MFA Type');\n return;\n }\n else {\n res(mfaType);\n return;\n }\n }, { bypassCache: bypassCache, clientMetadata: clientMetadata });\n });\n };\n AuthClass.prototype._getMfaTypeFromUserData = function (data) {\n var ret = null;\n var preferredMFA = data.PreferredMfaSetting;\n // if the user has used Auth.setPreferredMFA() to setup the mfa type\n // then the \"PreferredMfaSetting\" would exist in the response\n if (preferredMFA) {\n ret = preferredMFA;\n }\n else {\n // if mfaList exists but empty, then its noMFA\n var mfaList = data.UserMFASettingList;\n if (!mfaList) {\n // if SMS was enabled by using Auth.enableSMS(),\n // the response would contain MFAOptions\n // as for now Cognito only supports for SMS, so we will say it is 'SMS_MFA'\n // if it does not exist, then it should be NOMFA\n var MFAOptions = data.MFAOptions;\n if (MFAOptions) {\n ret = 'SMS_MFA';\n }\n else {\n ret = 'NOMFA';\n }\n }\n else if (mfaList.length === 0) {\n ret = 'NOMFA';\n }\n else {\n logger.debug('invalid case for getPreferredMFA', data);\n }\n }\n return ret;\n };\n AuthClass.prototype._getUserData = function (user, params) {\n return new Promise(function (res, rej) {\n user.getUserData(function (err, data) {\n if (err) {\n logger.debug('getting user data failed', err);\n rej(err);\n return;\n }\n else {\n res(data);\n return;\n }\n }, params);\n });\n };\n /**\n * set preferred MFA method\n * @param {CognitoUser} user - the current Cognito user\n * @param {string} mfaMethod - preferred mfa method\n * @return - A promise resolve if success\n */\n AuthClass.prototype.setPreferredMFA = function (user, mfaMethod) {\n return __awaiter(this, void 0, void 0, function () {\n var clientMetadata, userData, smsMfaSettings, totpMfaSettings, _a, mfaList, currentMFAType, that;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n clientMetadata = this._config.clientMetadata;\n return [4 /*yield*/, this._getUserData(user, {\n bypassCache: true,\n clientMetadata: clientMetadata,\n })];\n case 1:\n userData = _b.sent();\n smsMfaSettings = null;\n totpMfaSettings = null;\n _a = mfaMethod;\n switch (_a) {\n case 'TOTP' || 'SOFTWARE_TOKEN_MFA': return [3 /*break*/, 2];\n case 'SMS' || 'SMS_MFA': return [3 /*break*/, 3];\n case 'NOMFA': return [3 /*break*/, 4];\n }\n return [3 /*break*/, 6];\n case 2:\n totpMfaSettings = {\n PreferredMfa: true,\n Enabled: true,\n };\n return [3 /*break*/, 7];\n case 3:\n smsMfaSettings = {\n PreferredMfa: true,\n Enabled: true,\n };\n return [3 /*break*/, 7];\n case 4:\n mfaList = userData['UserMFASettingList'];\n return [4 /*yield*/, this._getMfaTypeFromUserData(userData)];\n case 5:\n currentMFAType = _b.sent();\n if (currentMFAType === 'NOMFA') {\n return [2 /*return*/, Promise.resolve('No change for mfa type')];\n }\n else if (currentMFAType === 'SMS_MFA') {\n smsMfaSettings = {\n PreferredMfa: false,\n Enabled: false,\n };\n }\n else if (currentMFAType === 'SOFTWARE_TOKEN_MFA') {\n totpMfaSettings = {\n PreferredMfa: false,\n Enabled: false,\n };\n }\n else {\n return [2 /*return*/, this.rejectAuthError(AuthErrorTypes.InvalidMFA)];\n }\n // if there is a UserMFASettingList in the response\n // we need to disable every mfa type in that list\n if (mfaList && mfaList.length !== 0) {\n // to disable SMS or TOTP if exists in that list\n mfaList.forEach(function (mfaType) {\n if (mfaType === 'SMS_MFA') {\n smsMfaSettings = {\n PreferredMfa: false,\n Enabled: false,\n };\n }\n else if (mfaType === 'SOFTWARE_TOKEN_MFA') {\n totpMfaSettings = {\n PreferredMfa: false,\n Enabled: false,\n };\n }\n });\n }\n return [3 /*break*/, 7];\n case 6:\n logger.debug('no validmfa method provided');\n return [2 /*return*/, this.rejectAuthError(AuthErrorTypes.NoMFA)];\n case 7:\n that = this;\n return [2 /*return*/, new Promise(function (res, rej) {\n user.setUserMfaPreference(smsMfaSettings, totpMfaSettings, function (err, result) {\n if (err) {\n logger.debug('Set user mfa preference error', err);\n return rej(err);\n }\n logger.debug('Set user mfa success', result);\n logger.debug('Caching the latest user data into local');\n // cache the latest result into user data\n user.getUserData(function (err, data) {\n if (err) {\n logger.debug('getting user data failed', err);\n return rej(err);\n }\n else {\n return res(result);\n }\n }, {\n bypassCache: true,\n clientMetadata: clientMetadata,\n });\n });\n })];\n }\n });\n });\n };\n /**\n * diable SMS\n * @deprecated\n * @param {CognitoUser} user - the current user\n * @return - A promise resolves is success\n */\n AuthClass.prototype.disableSMS = function (user) {\n return new Promise(function (res, rej) {\n user.disableMFA(function (err, data) {\n if (err) {\n logger.debug('disable mfa failed', err);\n rej(err);\n return;\n }\n logger.debug('disable mfa succeed', data);\n res(data);\n return;\n });\n });\n };\n /**\n * enable SMS\n * @deprecated\n * @param {CognitoUser} user - the current user\n * @return - A promise resolves is success\n */\n AuthClass.prototype.enableSMS = function (user) {\n return new Promise(function (res, rej) {\n user.enableMFA(function (err, data) {\n if (err) {\n logger.debug('enable mfa failed', err);\n rej(err);\n return;\n }\n logger.debug('enable mfa succeed', data);\n res(data);\n return;\n });\n });\n };\n /**\n * Setup TOTP\n * @param {CognitoUser} user - the current user\n * @return - A promise resolves with the secret code if success\n */\n AuthClass.prototype.setupTOTP = function (user) {\n return new Promise(function (res, rej) {\n user.associateSoftwareToken({\n onFailure: function (err) {\n logger.debug('associateSoftwareToken failed', err);\n rej(err);\n return;\n },\n associateSecretCode: function (secretCode) {\n logger.debug('associateSoftwareToken sucess', secretCode);\n res(secretCode);\n return;\n },\n });\n });\n };\n /**\n * verify TOTP setup\n * @param {CognitoUser} user - the current user\n * @param {string} challengeAnswer - challenge answer\n * @return - A promise resolves is success\n */\n AuthClass.prototype.verifyTotpToken = function (user, challengeAnswer) {\n logger.debug('verification totp token', user, challengeAnswer);\n return new Promise(function (res, rej) {\n user.verifySoftwareToken(challengeAnswer, 'My TOTP device', {\n onFailure: function (err) {\n logger.debug('verifyTotpToken failed', err);\n rej(err);\n return;\n },\n onSuccess: function (data) {\n dispatchAuthEvent('signIn', user, \"A user \" + user.getUsername() + \" has been signed in\");\n logger.debug('verifyTotpToken success', data);\n res(data);\n return;\n },\n });\n });\n };\n /**\n * Send MFA code to confirm sign in\n * @param {Object} user - The CognitoUser object\n * @param {String} code - The confirmation code\n */\n AuthClass.prototype.confirmSignIn = function (user, code, mfaType, clientMetadata) {\n var _this = this;\n if (clientMetadata === void 0) { clientMetadata = this._config.clientMetadata; }\n if (!code) {\n return this.rejectAuthError(AuthErrorTypes.EmptyCode);\n }\n var that = this;\n return new Promise(function (resolve, reject) {\n user.sendMFACode(code, {\n onSuccess: function (session) { return __awaiter(_this, void 0, void 0, function () {\n var cred, e_3;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n logger.debug(session);\n _a.label = 1;\n case 1:\n _a.trys.push([1, 4, 5, 6]);\n return [4 /*yield*/, this.Credentials.clear()];\n case 2:\n _a.sent();\n return [4 /*yield*/, this.Credentials.set(session, 'session')];\n case 3:\n cred = _a.sent();\n logger.debug('succeed to get cognito credentials', cred);\n return [3 /*break*/, 6];\n case 4:\n e_3 = _a.sent();\n logger.debug('cannot get cognito credentials', e_3);\n return [3 /*break*/, 6];\n case 5:\n that.user = user;\n dispatchAuthEvent('signIn', user, \"A user \" + user.getUsername() + \" has been signed in\");\n resolve(user);\n return [7 /*endfinally*/];\n case 6: return [2 /*return*/];\n }\n });\n }); },\n onFailure: function (err) {\n logger.debug('confirm signIn failure', err);\n reject(err);\n },\n }, mfaType, clientMetadata);\n });\n };\n AuthClass.prototype.completeNewPassword = function (user, password, requiredAttributes, clientMetadata) {\n var _this = this;\n if (requiredAttributes === void 0) { requiredAttributes = {}; }\n if (clientMetadata === void 0) { clientMetadata = this._config.clientMetadata; }\n if (!password) {\n return this.rejectAuthError(AuthErrorTypes.EmptyPassword);\n }\n var that = this;\n return new Promise(function (resolve, reject) {\n user.completeNewPasswordChallenge(password, requiredAttributes, {\n onSuccess: function (session) { return __awaiter(_this, void 0, void 0, function () {\n var cred, e_4;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n logger.debug(session);\n _a.label = 1;\n case 1:\n _a.trys.push([1, 4, 5, 6]);\n return [4 /*yield*/, this.Credentials.clear()];\n case 2:\n _a.sent();\n return [4 /*yield*/, this.Credentials.set(session, 'session')];\n case 3:\n cred = _a.sent();\n logger.debug('succeed to get cognito credentials', cred);\n return [3 /*break*/, 6];\n case 4:\n e_4 = _a.sent();\n logger.debug('cannot get cognito credentials', e_4);\n return [3 /*break*/, 6];\n case 5:\n that.user = user;\n dispatchAuthEvent('signIn', user, \"A user \" + user.getUsername() + \" has been signed in\");\n resolve(user);\n return [7 /*endfinally*/];\n case 6: return [2 /*return*/];\n }\n });\n }); },\n onFailure: function (err) {\n logger.debug('completeNewPassword failure', err);\n dispatchAuthEvent('completeNewPassword_failure', err, _this.user + \" failed to complete the new password flow\");\n reject(err);\n },\n mfaRequired: function (challengeName, challengeParam) {\n logger.debug('signIn MFA required');\n user['challengeName'] = challengeName;\n user['challengeParam'] = challengeParam;\n resolve(user);\n },\n mfaSetup: function (challengeName, challengeParam) {\n logger.debug('signIn mfa setup', challengeName);\n user['challengeName'] = challengeName;\n user['challengeParam'] = challengeParam;\n resolve(user);\n },\n totpRequired: function (challengeName, challengeParam) {\n logger.debug('signIn mfa setup', challengeName);\n user['challengeName'] = challengeName;\n user['challengeParam'] = challengeParam;\n resolve(user);\n },\n }, clientMetadata);\n });\n };\n /**\n * Send the answer to a custom challenge\n * @param {CognitoUser} user - The CognitoUser object\n * @param {String} challengeResponses - The confirmation code\n */\n AuthClass.prototype.sendCustomChallengeAnswer = function (user, challengeResponses, clientMetadata) {\n var _this = this;\n if (clientMetadata === void 0) { clientMetadata = this._config.clientMetadata; }\n if (!this.userPool) {\n return this.rejectNoUserPool();\n }\n if (!challengeResponses) {\n return this.rejectAuthError(AuthErrorTypes.EmptyChallengeResponse);\n }\n var that = this;\n return new Promise(function (resolve, reject) {\n user.sendCustomChallengeAnswer(challengeResponses, _this.authCallbacks(user, resolve, reject), clientMetadata);\n });\n };\n /**\n * Update an authenticated users' attributes\n * @param {CognitoUser} - The currently logged in user object\n * @return {Promise}\n **/\n AuthClass.prototype.updateUserAttributes = function (user, attributes, clientMetadata) {\n if (clientMetadata === void 0) { clientMetadata = this._config.clientMetadata; }\n var attributeList = [];\n var that = this;\n return new Promise(function (resolve, reject) {\n that.userSession(user).then(function (session) {\n for (var key in attributes) {\n if (key !== 'sub' && key.indexOf('_verified') < 0) {\n var attr = {\n Name: key,\n Value: attributes[key],\n };\n attributeList.push(attr);\n }\n }\n user.updateAttributes(attributeList, function (err, result) {\n if (err) {\n return reject(err);\n }\n else {\n return resolve(result);\n }\n }, clientMetadata);\n });\n });\n };\n /**\n * Return user attributes\n * @param {Object} user - The CognitoUser object\n * @return - A promise resolves to user attributes if success\n */\n AuthClass.prototype.userAttributes = function (user) {\n var _this = this;\n return new Promise(function (resolve, reject) {\n _this.userSession(user).then(function (session) {\n user.getUserAttributes(function (err, attributes) {\n if (err) {\n reject(err);\n }\n else {\n resolve(attributes);\n }\n });\n });\n });\n };\n AuthClass.prototype.verifiedContact = function (user) {\n var that = this;\n return this.userAttributes(user).then(function (attributes) {\n var attrs = that.attributesToObject(attributes);\n var unverified = {};\n var verified = {};\n if (attrs['email']) {\n if (attrs['email_verified']) {\n verified['email'] = attrs['email'];\n }\n else {\n unverified['email'] = attrs['email'];\n }\n }\n if (attrs['phone_number']) {\n if (attrs['phone_number_verified']) {\n verified['phone_number'] = attrs['phone_number'];\n }\n else {\n unverified['phone_number'] = attrs['phone_number'];\n }\n }\n return {\n verified: verified,\n unverified: unverified,\n };\n });\n };\n /**\n * Get current authenticated user\n * @return - A promise resolves to current authenticated CognitoUser if success\n */\n AuthClass.prototype.currentUserPoolUser = function (params) {\n var _this = this;\n if (!this.userPool) {\n return this.rejectNoUserPool();\n }\n return new Promise(function (res, rej) {\n _this._storageSync\n .then(function () { return __awaiter(_this, void 0, void 0, function () {\n var user, clientMetadata;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isOAuthInProgress()) return [3 /*break*/, 2];\n logger.debug('OAuth signIn in progress, waiting for resolution...');\n return [4 /*yield*/, new Promise(function (res) {\n var timeoutId = setTimeout(function () {\n logger.debug('OAuth signIn in progress timeout');\n Hub.remove('auth', hostedUISignCallback);\n res();\n }, OAUTH_FLOW_MS_TIMEOUT);\n Hub.listen('auth', hostedUISignCallback);\n function hostedUISignCallback(_a) {\n var payload = _a.payload;\n var event = payload.event;\n if (event === 'cognitoHostedUI' ||\n event === 'cognitoHostedUI_failure') {\n logger.debug(\"OAuth signIn resolved: \" + event);\n clearTimeout(timeoutId);\n Hub.remove('auth', hostedUISignCallback);\n res();\n }\n }\n })];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2:\n user = this.userPool.getCurrentUser();\n if (!user) {\n logger.debug('Failed to get user from user pool');\n rej('No current user');\n return [2 /*return*/];\n }\n clientMetadata = this._config.clientMetadata;\n // refresh the session if the session expired.\n user.getSession(function (err, session) { return __awaiter(_this, void 0, void 0, function () {\n var bypassCache, clientMetadata, _a, scope;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (err) {\n logger.debug('Failed to get the user session', err);\n rej(err);\n return [2 /*return*/];\n }\n bypassCache = params ? params.bypassCache : false;\n if (!bypassCache) return [3 /*break*/, 2];\n return [4 /*yield*/, this.Credentials.clear()];\n case 1:\n _b.sent();\n _b.label = 2;\n case 2:\n clientMetadata = this._config.clientMetadata;\n _a = session.getAccessToken().decodePayload().scope, scope = _a === void 0 ? '' : _a;\n if (scope.split(' ').includes(USER_ADMIN_SCOPE)) {\n user.getUserData(function (err, data) {\n if (err) {\n logger.debug('getting user data failed', err);\n // Make sure the user is still valid\n if (err.message === 'User is disabled.' ||\n err.message === 'User does not exist.' ||\n err.message === 'Access Token has been revoked' // Session revoked by another app\n ) {\n rej(err);\n }\n else {\n // the error may also be thrown when lack of permissions to get user info etc\n // in that case we just bypass the error\n res(user);\n }\n return;\n }\n var preferredMFA = data.PreferredMfaSetting || 'NOMFA';\n var attributeList = [];\n for (var i = 0; i < data.UserAttributes.length; i++) {\n var attribute = {\n Name: data.UserAttributes[i].Name,\n Value: data.UserAttributes[i].Value,\n };\n var userAttribute = new CognitoUserAttribute(attribute);\n attributeList.push(userAttribute);\n }\n var attributes = _this.attributesToObject(attributeList);\n Object.assign(user, { attributes: attributes, preferredMFA: preferredMFA });\n return res(user);\n }, { bypassCache: bypassCache, clientMetadata: clientMetadata });\n }\n else {\n logger.debug(\"Unable to get the user data because the \" + USER_ADMIN_SCOPE + \" \" +\n \"is not in the scopes of the access token\");\n return [2 /*return*/, res(user)];\n }\n return [2 /*return*/];\n }\n });\n }); }, { clientMetadata: clientMetadata });\n return [2 /*return*/];\n }\n });\n }); })\n .catch(function (e) {\n logger.debug('Failed to sync cache info into memory', e);\n return rej(e);\n });\n });\n };\n AuthClass.prototype.isOAuthInProgress = function () {\n return this.oAuthFlowInProgress;\n };\n /**\n * Get current authenticated user\n * @param {CurrentUserOpts} - options for getting the current user\n * @return - A promise resolves to current authenticated CognitoUser if success\n */\n AuthClass.prototype.currentAuthenticatedUser = function (params) {\n return __awaiter(this, void 0, void 0, function () {\n var federatedUser, e_5, federatedInfo, user, e_6;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n logger.debug('getting current authenticated user');\n federatedUser = null;\n _a.label = 1;\n case 1:\n _a.trys.push([1, 3, , 4]);\n return [4 /*yield*/, this._storageSync];\n case 2:\n _a.sent();\n return [3 /*break*/, 4];\n case 3:\n e_5 = _a.sent();\n logger.debug('Failed to sync cache info into memory', e_5);\n throw e_5;\n case 4:\n try {\n federatedInfo = JSON.parse(this._storage.getItem('aws-amplify-federatedInfo'));\n if (federatedInfo) {\n federatedUser = __assign(__assign({}, federatedInfo.user), { token: federatedInfo.token });\n }\n }\n catch (e) {\n logger.debug('cannot load federated user from auth storage');\n }\n if (!federatedUser) return [3 /*break*/, 5];\n this.user = federatedUser;\n logger.debug('get current authenticated federated user', this.user);\n return [2 /*return*/, this.user];\n case 5:\n logger.debug('get current authenticated userpool user');\n user = null;\n _a.label = 6;\n case 6:\n _a.trys.push([6, 8, , 9]);\n return [4 /*yield*/, this.currentUserPoolUser(params)];\n case 7:\n user = _a.sent();\n return [3 /*break*/, 9];\n case 8:\n e_6 = _a.sent();\n if (e_6 === 'No userPool') {\n logger.error('Cannot get the current user because the user pool is missing. ' +\n 'Please make sure the Auth module is configured with a valid Cognito User Pool ID');\n }\n logger.debug('The user is not authenticated by the error', e_6);\n return [2 /*return*/, Promise.reject('The user is not authenticated')];\n case 9:\n this.user = user;\n return [2 /*return*/, this.user];\n }\n });\n });\n };\n /**\n * Get current user's session\n * @return - A promise resolves to session object if success\n */\n AuthClass.prototype.currentSession = function () {\n var that = this;\n logger.debug('Getting current session');\n // Purposely not calling the reject method here because we don't need a console error\n if (!this.userPool) {\n return Promise.reject();\n }\n return new Promise(function (res, rej) {\n that\n .currentUserPoolUser()\n .then(function (user) {\n that\n .userSession(user)\n .then(function (session) {\n res(session);\n return;\n })\n .catch(function (e) {\n logger.debug('Failed to get the current session', e);\n rej(e);\n return;\n });\n })\n .catch(function (e) {\n logger.debug('Failed to get the current user', e);\n rej(e);\n return;\n });\n });\n };\n /**\n * Get the corresponding user session\n * @param {Object} user - The CognitoUser object\n * @return - A promise resolves to the session\n */\n AuthClass.prototype.userSession = function (user) {\n if (!user) {\n logger.debug('the user is null');\n return this.rejectAuthError(AuthErrorTypes.NoUserSession);\n }\n var clientMetadata = this._config.clientMetadata; // TODO: verify behavior if this is override during signIn\n return new Promise(function (resolve, reject) {\n logger.debug('Getting the session from this user:', user);\n user.getSession(function (err, session) {\n if (err) {\n logger.debug('Failed to get the session from user', user);\n reject(err);\n return;\n }\n else {\n logger.debug('Succeed to get the user session', session);\n resolve(session);\n return;\n }\n }, { clientMetadata: clientMetadata });\n });\n };\n /**\n * Get authenticated credentials of current user.\n * @return - A promise resolves to be current user's credentials\n */\n AuthClass.prototype.currentUserCredentials = function () {\n return __awaiter(this, void 0, void 0, function () {\n var e_7, federatedInfo;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n logger.debug('Getting current user credentials');\n _a.label = 1;\n case 1:\n _a.trys.push([1, 3, , 4]);\n return [4 /*yield*/, this._storageSync];\n case 2:\n _a.sent();\n return [3 /*break*/, 4];\n case 3:\n e_7 = _a.sent();\n logger.debug('Failed to sync cache info into memory', e_7);\n throw e_7;\n case 4:\n federatedInfo = null;\n try {\n federatedInfo = JSON.parse(this._storage.getItem('aws-amplify-federatedInfo'));\n }\n catch (e) {\n logger.debug('failed to get or parse item aws-amplify-federatedInfo', e);\n }\n if (federatedInfo) {\n // refresh the jwt token here if necessary\n return [2 /*return*/, this.Credentials.refreshFederatedToken(federatedInfo)];\n }\n else {\n return [2 /*return*/, this.currentSession()\n .then(function (session) {\n logger.debug('getting session success', session);\n return _this.Credentials.set(session, 'session');\n })\n .catch(function (error) {\n logger.debug('getting session failed', error);\n return _this.Credentials.set(null, 'guest');\n })];\n }\n return [2 /*return*/];\n }\n });\n });\n };\n AuthClass.prototype.currentCredentials = function () {\n logger.debug('getting current credentials');\n return this.Credentials.get();\n };\n /**\n * Initiate an attribute confirmation request\n * @param {Object} user - The CognitoUser\n * @param {Object} attr - The attributes to be verified\n * @return - A promise resolves to callback data if success\n */\n AuthClass.prototype.verifyUserAttribute = function (user, attr, clientMetadata) {\n if (clientMetadata === void 0) { clientMetadata = this._config.clientMetadata; }\n return new Promise(function (resolve, reject) {\n user.getAttributeVerificationCode(attr, {\n onSuccess: function () {\n return resolve();\n },\n onFailure: function (err) {\n return reject(err);\n },\n }, clientMetadata);\n });\n };\n /**\n * Confirm an attribute using a confirmation code\n * @param {Object} user - The CognitoUser\n * @param {Object} attr - The attribute to be verified\n * @param {String} code - The confirmation code\n * @return - A promise resolves to callback data if success\n */\n AuthClass.prototype.verifyUserAttributeSubmit = function (user, attr, code) {\n if (!code) {\n return this.rejectAuthError(AuthErrorTypes.EmptyCode);\n }\n return new Promise(function (resolve, reject) {\n user.verifyAttribute(attr, code, {\n onSuccess: function (data) {\n resolve(data);\n return;\n },\n onFailure: function (err) {\n reject(err);\n return;\n },\n });\n });\n };\n AuthClass.prototype.verifyCurrentUserAttribute = function (attr) {\n var that = this;\n return that\n .currentUserPoolUser()\n .then(function (user) { return that.verifyUserAttribute(user, attr); });\n };\n /**\n * Confirm current user's attribute using a confirmation code\n * @param {Object} attr - The attribute to be verified\n * @param {String} code - The confirmation code\n * @return - A promise resolves to callback data if success\n */\n AuthClass.prototype.verifyCurrentUserAttributeSubmit = function (attr, code) {\n var that = this;\n return that\n .currentUserPoolUser()\n .then(function (user) { return that.verifyUserAttributeSubmit(user, attr, code); });\n };\n AuthClass.prototype.cognitoIdentitySignOut = function (opts, user) {\n return __awaiter(this, void 0, void 0, function () {\n var e_8, isSignedInHostedUI;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n return [4 /*yield*/, this._storageSync];\n case 1:\n _a.sent();\n return [3 /*break*/, 3];\n case 2:\n e_8 = _a.sent();\n logger.debug('Failed to sync cache info into memory', e_8);\n throw e_8;\n case 3:\n isSignedInHostedUI = this._oAuthHandler &&\n this._storage.getItem('amplify-signin-with-hostedUI') === 'true';\n return [2 /*return*/, new Promise(function (res, rej) {\n if (opts && opts.global) {\n logger.debug('user global sign out', user);\n // in order to use global signout\n // we must validate the user as an authenticated user by using getSession\n var clientMetadata = _this._config.clientMetadata; // TODO: verify behavior if this is override during signIn\n user.getSession(function (err, result) {\n if (err) {\n logger.debug('failed to get the user session', err);\n return rej(err);\n }\n user.globalSignOut({\n onSuccess: function (data) {\n logger.debug('global sign out success');\n if (isSignedInHostedUI) {\n _this.oAuthSignOutRedirect(res, rej);\n }\n else {\n return res();\n }\n },\n onFailure: function (err) {\n logger.debug('global sign out failed', err);\n return rej(err);\n },\n });\n }, { clientMetadata: clientMetadata });\n }\n else {\n logger.debug('user sign out', user);\n user.signOut();\n if (isSignedInHostedUI) {\n _this.oAuthSignOutRedirect(res, rej);\n }\n else {\n return res();\n }\n }\n })];\n }\n });\n });\n };\n AuthClass.prototype.oAuthSignOutRedirect = function (resolve, reject) {\n var isBrowser = JS.browserOrNode().isBrowser;\n if (isBrowser) {\n this.oAuthSignOutRedirectOrReject(reject);\n }\n else {\n this.oAuthSignOutAndResolve(resolve);\n }\n };\n AuthClass.prototype.oAuthSignOutAndResolve = function (resolve) {\n this._oAuthHandler.signOut();\n resolve();\n };\n AuthClass.prototype.oAuthSignOutRedirectOrReject = function (reject) {\n this._oAuthHandler.signOut(); // this method redirects url\n // App should be redirected to another url otherwise it will reject\n setTimeout(function () { return reject('Signout timeout fail'); }, 3000);\n };\n /**\n * Sign out method\n * @\n * @return - A promise resolved if success\n */\n AuthClass.prototype.signOut = function (opts) {\n return __awaiter(this, void 0, void 0, function () {\n var e_9, user;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n return [4 /*yield*/, this.cleanCachedItems()];\n case 1:\n _a.sent();\n return [3 /*break*/, 3];\n case 2:\n e_9 = _a.sent();\n logger.debug('failed to clear cached items');\n return [3 /*break*/, 3];\n case 3:\n if (!this.userPool) return [3 /*break*/, 7];\n user = this.userPool.getCurrentUser();\n if (!user) return [3 /*break*/, 5];\n return [4 /*yield*/, this.cognitoIdentitySignOut(opts, user)];\n case 4:\n _a.sent();\n return [3 /*break*/, 6];\n case 5:\n logger.debug('no current Cognito user');\n _a.label = 6;\n case 6: return [3 /*break*/, 8];\n case 7:\n logger.debug('no Congito User pool');\n _a.label = 8;\n case 8:\n /**\n * Note for future refactor - no reliable way to get username with\n * Cognito User Pools vs Identity when federating with Social Providers\n * This is why we need a well structured session object that can be inspected\n * and information passed back in the message below for Hub dispatch\n */\n dispatchAuthEvent('signOut', this.user, \"A user has been signed out\");\n this.user = null;\n return [2 /*return*/];\n }\n });\n });\n };\n AuthClass.prototype.cleanCachedItems = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: \n // clear cognito cached item\n return [4 /*yield*/, this.Credentials.clear()];\n case 1:\n // clear cognito cached item\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Change a password for an authenticated user\n * @param {Object} user - The CognitoUser object\n * @param {String} oldPassword - the current password\n * @param {String} newPassword - the requested new password\n * @return - A promise resolves if success\n */\n AuthClass.prototype.changePassword = function (user, oldPassword, newPassword, clientMetadata) {\n var _this = this;\n if (clientMetadata === void 0) { clientMetadata = this._config.clientMetadata; }\n return new Promise(function (resolve, reject) {\n _this.userSession(user).then(function (session) {\n user.changePassword(oldPassword, newPassword, function (err, data) {\n if (err) {\n logger.debug('change password failure', err);\n return reject(err);\n }\n else {\n return resolve(data);\n }\n }, clientMetadata);\n });\n });\n };\n /**\n * Initiate a forgot password request\n * @param {String} username - the username to change password\n * @return - A promise resolves if success\n */\n AuthClass.prototype.forgotPassword = function (username, clientMetadata) {\n if (clientMetadata === void 0) { clientMetadata = this._config.clientMetadata; }\n if (!this.userPool) {\n return this.rejectNoUserPool();\n }\n if (!username) {\n return this.rejectAuthError(AuthErrorTypes.EmptyUsername);\n }\n var user = this.createCognitoUser(username);\n return new Promise(function (resolve, reject) {\n user.forgotPassword({\n onSuccess: function () {\n resolve();\n return;\n },\n onFailure: function (err) {\n logger.debug('forgot password failure', err);\n dispatchAuthEvent('forgotPassword_failure', err, username + \" forgotPassword failed\");\n reject(err);\n return;\n },\n inputVerificationCode: function (data) {\n dispatchAuthEvent('forgotPassword', user, username + \" has initiated forgot password flow\");\n resolve(data);\n return;\n },\n }, clientMetadata);\n });\n };\n /**\n * Confirm a new password using a confirmation Code\n * @param {String} username - The username\n * @param {String} code - The confirmation code\n * @param {String} password - The new password\n * @return - A promise that resolves if success\n */\n AuthClass.prototype.forgotPasswordSubmit = function (username, code, password, clientMetadata) {\n if (clientMetadata === void 0) { clientMetadata = this._config.clientMetadata; }\n if (!this.userPool) {\n return this.rejectNoUserPool();\n }\n if (!username) {\n return this.rejectAuthError(AuthErrorTypes.EmptyUsername);\n }\n if (!code) {\n return this.rejectAuthError(AuthErrorTypes.EmptyCode);\n }\n if (!password) {\n return this.rejectAuthError(AuthErrorTypes.EmptyPassword);\n }\n var user = this.createCognitoUser(username);\n return new Promise(function (resolve, reject) {\n user.confirmPassword(code, password, {\n onSuccess: function () {\n dispatchAuthEvent('forgotPasswordSubmit', user, username + \" forgotPasswordSubmit successful\");\n resolve();\n return;\n },\n onFailure: function (err) {\n dispatchAuthEvent('forgotPasswordSubmit_failure', err, username + \" forgotPasswordSubmit failed\");\n reject(err);\n return;\n },\n }, clientMetadata);\n });\n };\n /**\n * Get user information\n * @async\n * @return {Object }- current User's information\n */\n AuthClass.prototype.currentUserInfo = function () {\n return __awaiter(this, void 0, void 0, function () {\n var source, user, attributes, userAttrs, credentials, e_10, info, err_1, user;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n source = this.Credentials.getCredSource();\n if (!(!source || source === 'aws' || source === 'userPool')) return [3 /*break*/, 9];\n return [4 /*yield*/, this.currentUserPoolUser().catch(function (err) {\n return logger.debug(err);\n })];\n case 1:\n user = _a.sent();\n if (!user) {\n return [2 /*return*/, null];\n }\n _a.label = 2;\n case 2:\n _a.trys.push([2, 8, , 9]);\n return [4 /*yield*/, this.userAttributes(user)];\n case 3:\n attributes = _a.sent();\n userAttrs = this.attributesToObject(attributes);\n credentials = null;\n _a.label = 4;\n case 4:\n _a.trys.push([4, 6, , 7]);\n return [4 /*yield*/, this.currentCredentials()];\n case 5:\n credentials = _a.sent();\n return [3 /*break*/, 7];\n case 6:\n e_10 = _a.sent();\n logger.debug('Failed to retrieve credentials while getting current user info', e_10);\n return [3 /*break*/, 7];\n case 7:\n info = {\n id: credentials ? credentials.identityId : undefined,\n username: user.getUsername(),\n attributes: userAttrs,\n };\n return [2 /*return*/, info];\n case 8:\n err_1 = _a.sent();\n logger.debug('currentUserInfo error', err_1);\n return [2 /*return*/, {}];\n case 9:\n if (source === 'federated') {\n user = this.user;\n return [2 /*return*/, user ? user : {}];\n }\n return [2 /*return*/];\n }\n });\n });\n };\n AuthClass.prototype.federatedSignIn = function (providerOrOptions, response, user) {\n return __awaiter(this, void 0, void 0, function () {\n var options, provider, customState, client_id, redirect_uri, provider, loggedInUser, token, identity_id, expires_at, credentials, currentUser;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this._config.identityPoolId && !this._config.userPoolId) {\n throw new Error(\"Federation requires either a User Pool or Identity Pool in config\");\n }\n // Ensure backwards compatability\n if (typeof providerOrOptions === 'undefined') {\n if (this._config.identityPoolId && !this._config.userPoolId) {\n throw new Error(\"Federation with Identity Pools requires tokens passed as arguments\");\n }\n }\n if (!(isFederatedSignInOptions(providerOrOptions) ||\n isFederatedSignInOptionsCustom(providerOrOptions) ||\n hasCustomState(providerOrOptions) ||\n typeof providerOrOptions === 'undefined')) return [3 /*break*/, 1];\n options = providerOrOptions || {\n provider: CognitoHostedUIIdentityProvider.Cognito,\n };\n provider = isFederatedSignInOptions(options)\n ? options.provider\n : options.customProvider;\n customState = isFederatedSignInOptions(options)\n ? options.customState\n : options.customState;\n if (this._config.userPoolId) {\n client_id = isCognitoHostedOpts(this._config.oauth)\n ? this._config.userPoolWebClientId\n : this._config.oauth.clientID;\n redirect_uri = isCognitoHostedOpts(this._config.oauth)\n ? this._config.oauth.redirectSignIn\n : this._config.oauth.redirectUri;\n this._oAuthHandler.oauthSignIn(this._config.oauth.responseType, this._config.oauth.domain, redirect_uri, client_id, provider, customState);\n }\n return [3 /*break*/, 4];\n case 1:\n provider = providerOrOptions;\n // To check if the user is already logged in\n try {\n loggedInUser = JSON.stringify(JSON.parse(this._storage.getItem('aws-amplify-federatedInfo')).user);\n if (loggedInUser) {\n logger.warn(\"There is already a signed in user: \" + loggedInUser + \" in your app.\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tYou should not call Auth.federatedSignIn method again as it may cause unexpected behavior.\");\n }\n }\n catch (e) { }\n token = response.token, identity_id = response.identity_id, expires_at = response.expires_at;\n return [4 /*yield*/, this.Credentials.set({ provider: provider, token: token, identity_id: identity_id, user: user, expires_at: expires_at }, 'federation')];\n case 2:\n credentials = _a.sent();\n return [4 /*yield*/, this.currentAuthenticatedUser()];\n case 3:\n currentUser = _a.sent();\n dispatchAuthEvent('signIn', currentUser, \"A user \" + currentUser.username + \" has been signed in\");\n logger.debug('federated sign in credentials', credentials);\n return [2 /*return*/, credentials];\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Used to complete the OAuth flow with or without the Cognito Hosted UI\n * @param {String} URL - optional parameter for customers to pass in the response URL\n */\n AuthClass.prototype._handleAuthResponse = function (URL) {\n return __awaiter(this, void 0, void 0, function () {\n var currentUrl, hasCodeOrError, hasTokenOrError, _a, accessToken, idToken, refreshToken, state, session, credentials, isCustomStateIncluded, currentUser, customState, err_2;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (this.oAuthFlowInProgress) {\n logger.debug(\"Skipping URL \" + URL + \" current flow in progress\");\n return [2 /*return*/];\n }\n _b.label = 1;\n case 1:\n _b.trys.push([1, , 8, 9]);\n this.oAuthFlowInProgress = true;\n if (!this._config.userPoolId) {\n throw new Error(\"OAuth responses require a User Pool defined in config\");\n }\n dispatchAuthEvent('parsingCallbackUrl', { url: URL }, \"The callback url is being parsed\");\n currentUrl = URL || (JS.browserOrNode().isBrowser ? window.location.href : '');\n hasCodeOrError = !!(parse(currentUrl).query || '')\n .split('&')\n .map(function (entry) { return entry.split('='); })\n .find(function (_a) {\n var _b = __read(_a, 1), k = _b[0];\n return k === 'code' || k === 'error';\n });\n hasTokenOrError = !!(parse(currentUrl).hash || '#')\n .substr(1)\n .split('&')\n .map(function (entry) { return entry.split('='); })\n .find(function (_a) {\n var _b = __read(_a, 1), k = _b[0];\n return k === 'access_token' || k === 'error';\n });\n if (!(hasCodeOrError || hasTokenOrError)) return [3 /*break*/, 7];\n this._storage.setItem('amplify-redirected-from-hosted-ui', 'true');\n _b.label = 2;\n case 2:\n _b.trys.push([2, 6, , 7]);\n return [4 /*yield*/, this._oAuthHandler.handleAuthResponse(currentUrl)];\n case 3:\n _a = _b.sent(), accessToken = _a.accessToken, idToken = _a.idToken, refreshToken = _a.refreshToken, state = _a.state;\n session = new CognitoUserSession({\n IdToken: new CognitoIdToken({ IdToken: idToken }),\n RefreshToken: new CognitoRefreshToken({\n RefreshToken: refreshToken,\n }),\n AccessToken: new CognitoAccessToken({\n AccessToken: accessToken,\n }),\n });\n credentials = void 0;\n if (!this._config.identityPoolId) return [3 /*break*/, 5];\n return [4 /*yield*/, this.Credentials.set(session, 'session')];\n case 4:\n credentials = _b.sent();\n logger.debug('AWS credentials', credentials);\n _b.label = 5;\n case 5:\n isCustomStateIncluded = /-/.test(state);\n currentUser = this.createCognitoUser(session.getIdToken().decodePayload()['cognito:username']);\n // This calls cacheTokens() in Cognito SDK\n currentUser.setSignInUserSession(session);\n if (window && typeof window.history !== 'undefined') {\n window.history.replaceState({}, null, this._config.oauth.redirectSignIn);\n }\n dispatchAuthEvent('signIn', currentUser, \"A user \" + currentUser.getUsername() + \" has been signed in\");\n dispatchAuthEvent('cognitoHostedUI', currentUser, \"A user \" + currentUser.getUsername() + \" has been signed in via Cognito Hosted UI\");\n if (isCustomStateIncluded) {\n customState = state\n .split('-')\n .splice(1)\n .join('-');\n dispatchAuthEvent('customOAuthState', urlSafeDecode(customState), \"State for user \" + currentUser.getUsername());\n }\n //#endregion\n return [2 /*return*/, credentials];\n case 6:\n err_2 = _b.sent();\n logger.debug('Error in cognito hosted auth response', err_2);\n dispatchAuthEvent('signIn_failure', err_2, \"The OAuth response flow failed\");\n dispatchAuthEvent('cognitoHostedUI_failure', err_2, \"A failure occurred when returning to the Cognito Hosted UI\");\n dispatchAuthEvent('customState_failure', err_2, \"A failure occurred when returning state\");\n return [3 /*break*/, 7];\n case 7: return [3 /*break*/, 9];\n case 8:\n this.oAuthFlowInProgress = false;\n return [7 /*endfinally*/];\n case 9: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Compact version of credentials\n * @param {Object} credentials\n * @return {Object} - Credentials\n */\n AuthClass.prototype.essentialCredentials = function (credentials) {\n return {\n accessKeyId: credentials.accessKeyId,\n sessionToken: credentials.sessionToken,\n secretAccessKey: credentials.secretAccessKey,\n identityId: credentials.identityId,\n authenticated: credentials.authenticated,\n };\n };\n AuthClass.prototype.attributesToObject = function (attributes) {\n var obj = {};\n if (attributes) {\n attributes.map(function (attribute) {\n if (attribute.Name === 'email_verified' ||\n attribute.Name === 'phone_number_verified') {\n obj[attribute.Name] =\n attribute.Value === 'true' || attribute.Value === true;\n }\n else {\n obj[attribute.Name] = attribute.Value;\n }\n });\n }\n return obj;\n };\n AuthClass.prototype.createCognitoUser = function (username) {\n var userData = {\n Username: username,\n Pool: this.userPool,\n };\n userData.Storage = this._storage;\n var authenticationFlowType = this._config.authenticationFlowType;\n var user = new CognitoUser(userData);\n if (authenticationFlowType) {\n user.setAuthenticationFlowType(authenticationFlowType);\n }\n return user;\n };\n AuthClass.prototype._isValidAuthStorage = function (obj) {\n // We need to check if the obj has the functions of Storage\n return (!!obj &&\n typeof obj.getItem === 'function' &&\n typeof obj.setItem === 'function' &&\n typeof obj.removeItem === 'function' &&\n typeof obj.clear === 'function');\n };\n AuthClass.prototype.noUserPoolErrorHandler = function (config) {\n if (config) {\n if (!config.userPoolId || !config.identityPoolId) {\n return AuthErrorTypes.MissingAuthConfig;\n }\n }\n return AuthErrorTypes.NoConfig;\n };\n AuthClass.prototype.rejectAuthError = function (type) {\n return Promise.reject(new AuthError(type));\n };\n AuthClass.prototype.rejectNoUserPool = function () {\n var type = this.noUserPoolErrorHandler(this._config);\n return Promise.reject(new NoUserPoolError(type));\n };\n return AuthClass;\n}());\nexport { AuthClass };\nexport var Auth = new AuthClass(null);\nAmplify.register(Auth);\n//# sourceMappingURL=Auth.js.map","var xor = require('buffer-xor')\n\nexports.encrypt = function (self, block) {\n var data = xor(block, self._prev)\n\n self._prev = self._cipher.encryptBlock(data)\n return self._prev\n}\n\nexports.decrypt = function (self, block) {\n var pad = self._prev\n\n self._prev = block\n var out = self._cipher.decryptBlock(block)\n\n return xor(out, pad)\n}\n","module.exports = require('./readable').PassThrough\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n","/* eslint-disable node/no-deprecated-api */\n\n'use strict'\n\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\nvar safer = {}\n\nvar key\n\nfor (key in buffer) {\n if (!buffer.hasOwnProperty(key)) continue\n if (key === 'SlowBuffer' || key === 'Buffer') continue\n safer[key] = buffer[key]\n}\n\nvar Safer = safer.Buffer = {}\nfor (key in Buffer) {\n if (!Buffer.hasOwnProperty(key)) continue\n if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue\n Safer[key] = Buffer[key]\n}\n\nsafer.Buffer.prototype = Buffer.prototype\n\nif (!Safer.from || Safer.from === Uint8Array.from) {\n Safer.from = function (value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('The \"value\" argument must not be of type number. Received type ' + typeof value)\n }\n if (value && typeof value.length === 'undefined') {\n throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value)\n }\n return Buffer(value, encodingOrOffset, length)\n }\n}\n\nif (!Safer.alloc) {\n Safer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('The \"size\" argument must be of type number. Received type ' + typeof size)\n }\n if (size < 0 || size >= 2 * (1 << 30)) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n var buf = Buffer(size)\n if (!fill || fill.length === 0) {\n buf.fill(0)\n } else if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n return buf\n }\n}\n\nif (!safer.kStringMaxLength) {\n try {\n safer.kStringMaxLength = process.binding('buffer').kStringMaxLength\n } catch (e) {\n // we can't determine kStringMaxLength in environments where process.binding\n // is unsupported, so let's not set it\n }\n}\n\nif (!safer.constants) {\n safer.constants = {\n MAX_LENGTH: safer.kMaxLength\n }\n if (safer.kStringMaxLength) {\n safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength\n }\n}\n\nmodule.exports = safer\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n'use strict';\n\nmodule.exports = Readable;\n/**/\n\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n/**/\n\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\n\n\nvar Stream = require('./internal/streams/stream');\n/**/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n/**/\n\n\nvar debugUtil = require('util');\n\nvar debug;\n\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function debug() {};\n}\n/**/\n\n\nvar BufferList = require('./internal/streams/buffer_list');\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; // Lazy loaded to improve the startup performance.\n\n\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\n\nrequire('inherits')(Readable, Stream);\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n\n this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n\n this.sync = true; // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n this.paused = true; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'end' (and potentially 'finish')\n\n this.autoDestroy = !!options.autoDestroy; // has it been destroyed\n\n this.destroyed = false; // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s\n\n this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled\n\n this.readingMore = false;\n this.decoder = null;\n this.encoding = null;\n\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n if (!(this instanceof Readable)) return new Readable(options); // Checking for a Stream.Duplex instance is faster here instead of inside\n // the ReadableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n this._readableState = new ReadableState(options, this, isDuplex); // legacy\n\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\n\nReadable.prototype._destroy = function (err, cb) {\n cb(err);\n}; // Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\n\n\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n}; // Unshift should *always* be something directly out of read()\n\n\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n debug('readableAddChunk', chunk);\n var state = stream._readableState;\n\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n\n if (er) {\n errorOrDestroy(stream, er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n } else if (state.destroyed) {\n return false;\n } else {\n state.reading = false;\n\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n maybeReadMore(stream, state);\n }\n } // We can push more data if we are below the highWaterMark.\n // Also, if we have no data yet, we can stand some more bytes.\n // This is to work around cases where hwm=0, such as the repl.\n\n\n return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n state.awaitDrain = 0;\n stream.emit('data', chunk);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n if (state.needReadable) emitReadable(stream);\n }\n\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n }\n\n return er;\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n}; // backwards compatibility.\n\n\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n var decoder = new StringDecoder(enc);\n this._readableState.decoder = decoder; // If setEncoding(null), decoder.encoding equals utf8\n\n this._readableState.encoding = this._readableState.decoder.encoding; // Iterate over current buffer to convert already stored Buffers:\n\n var p = this._readableState.buffer.head;\n var content = '';\n\n while (p !== null) {\n content += decoder.write(p.data);\n p = p.next;\n }\n\n this._readableState.buffer.clear();\n\n if (content !== '') this._readableState.buffer.push(content);\n this._readableState.length = content.length;\n return this;\n}; // Don't raise the hwm > 1GB\n\n\nvar MAX_HWM = 0x40000000;\n\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n\n return n;\n} // This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\n\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n } // If we're asking for more than the current hwm, then raise the hwm.\n\n\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n; // Don't have enough\n\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n\n return state.length;\n} // you can override either this method, or the async _read(n) below.\n\n\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n\n if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up.\n\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n } // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n // if we need a readable event, then we need to do some reading.\n\n\n var doRead = state.needReadable;\n debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some\n\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n } // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n\n\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true; // if the length is currently zero, then we *need* a readable event.\n\n if (state.length === 0) state.needReadable = true; // call internal read method\n\n this._read(state.highWaterMark);\n\n state.sync = false; // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = state.length <= state.highWaterMark;\n n = 0;\n } else {\n state.length -= n;\n state.awaitDrain = 0;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick.\n\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n debug('onEofChunk');\n if (state.ended) return;\n\n if (state.decoder) {\n var chunk = state.decoder.end();\n\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n\n state.ended = true;\n\n if (state.sync) {\n // if we are sync, wait until next tick to emit the data.\n // Otherwise we risk emitting data in the flow()\n // the readable code triggers during a read() call\n emitReadable(stream);\n } else {\n // emit 'readable' now to make sure it gets picked up.\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n state.emittedReadable = true;\n emitReadable_(stream);\n }\n }\n} // Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\n\n\nfunction emitReadable(stream) {\n var state = stream._readableState;\n debug('emitReadable', state.needReadable, state.emittedReadable);\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n process.nextTick(emitReadable_, stream);\n }\n}\n\nfunction emitReadable_(stream) {\n var state = stream._readableState;\n debug('emitReadable_', state.destroyed, state.length, state.ended);\n\n if (!state.destroyed && (state.length || state.ended)) {\n stream.emit('readable');\n state.emittedReadable = false;\n } // The stream needs another readable event if\n // 1. It is not flowing, as the flow mechanism will take\n // care of it.\n // 2. It is not ended.\n // 3. It is below the highWaterMark, so we can schedule\n // another readable later.\n\n\n state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n flow(stream);\n} // at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\n\n\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n process.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n // Attempt to read more data if we should.\n //\n // The conditions for reading more data are (one of):\n // - Not enough data buffered (state.length < state.highWaterMark). The loop\n // is responsible for filling the buffer with enough data if such data\n // is available. If highWaterMark is 0 and we are not in the flowing mode\n // we should _not_ attempt to buffer any extra data. We'll get more data\n // when the stream consumer calls read() instead.\n // - No data in the buffer, and the stream is in flowing mode. In this mode\n // the loop below is responsible for ensuring read() is called. Failing to\n // call read here would abort the flow and there's no other mechanism for\n // continuing the flow if the stream consumer has just subscribed to the\n // 'data' event.\n //\n // In addition to the above conditions to keep reading data, the following\n // conditions prevent the data from being read:\n // - The stream has ended (state.ended).\n // - There is already a pending 'read' operation (state.reading). This is a\n // case where the the stream has called the implementation defined _read()\n // method, but they are processing the call asynchronously and have _not_\n // called push() with new data. In this case we skip performing more\n // read()s. The execution ends in this method again after the _read() ends\n // up calling push() with more data.\n while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n var len = state.length;\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length) // didn't get any data, stop spinning.\n break;\n }\n\n state.readingMore = false;\n} // abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\n\n\nReadable.prototype._read = function (n) {\n errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n\n default:\n state.pipes.push(dest);\n break;\n }\n\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n dest.on('unpipe', onunpipe);\n\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n } // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n\n\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n var cleanedUp = false;\n\n function cleanup() {\n debug('cleanup'); // cleanup event handlers once the pipe is broken\n\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n cleanedUp = true; // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n src.on('data', ondata);\n\n function ondata(chunk) {\n debug('ondata');\n var ret = dest.write(chunk);\n debug('dest.write', ret);\n\n if (ret === false) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', state.awaitDrain);\n state.awaitDrain++;\n }\n\n src.pause();\n }\n } // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n\n\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n } // Make sure our error handler is attached before userland ones.\n\n\n prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once.\n\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n\n dest.once('close', onclose);\n\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n } // tell the dest that it's being piped to\n\n\n dest.emit('pipe', src); // start the flow if it hasn't been started already.\n\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function pipeOnDrainFunctionResult() {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = {\n hasUnpiped: false\n }; // if we're not piping anywhere, then do nothing.\n\n if (state.pipesCount === 0) return this; // just one destination. most common case.\n\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n if (!dest) dest = state.pipes; // got a match.\n\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n } // slow case. multiple pipe destinations.\n\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, {\n hasUnpiped: false\n });\n }\n\n return this;\n } // try to find the right one.\n\n\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n dest.emit('unpipe', this, unpipeInfo);\n return this;\n}; // set up data events if they are asked for\n// Ensure readable listeners eventually get something\n\n\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n var state = this._readableState;\n\n if (ev === 'data') {\n // update readableListening so that resume() may be a no-op\n // a few lines down. This is needed to support once('readable').\n state.readableListening = this.listenerCount('readable') > 0; // Try start flowing on next tick if stream isn't explicitly paused\n\n if (state.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.flowing = false;\n state.emittedReadable = false;\n debug('on readable', state.length, state.reading);\n\n if (state.length) {\n emitReadable(this);\n } else if (!state.reading) {\n process.nextTick(nReadingNextTick, this);\n }\n }\n }\n\n return res;\n};\n\nReadable.prototype.addListener = Readable.prototype.on;\n\nReadable.prototype.removeListener = function (ev, fn) {\n var res = Stream.prototype.removeListener.call(this, ev, fn);\n\n if (ev === 'readable') {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nReadable.prototype.removeAllListeners = function (ev) {\n var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n\n if (ev === 'readable' || ev === undefined) {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nfunction updateReadableListening(self) {\n var state = self._readableState;\n state.readableListening = self.listenerCount('readable') > 0;\n\n if (state.resumeScheduled && !state.paused) {\n // flowing needs to be set to true now, otherwise\n // the upcoming resume will not flow.\n state.flowing = true; // crude way to check if we should resume\n } else if (self.listenerCount('data') > 0) {\n self.resume();\n }\n}\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n} // pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\n\n\nReadable.prototype.resume = function () {\n var state = this._readableState;\n\n if (!state.flowing) {\n debug('resume'); // we flow only if there is no one listening\n // for readable, but we still have to call\n // resume()\n\n state.flowing = !state.readableListening;\n resume(this, state);\n }\n\n state.paused = false;\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n process.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n debug('resume', state.reading);\n\n if (!state.reading) {\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n\n if (this._readableState.flowing !== false) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n\n this._readableState.paused = true;\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n\n while (state.flowing && stream.read() !== null) {\n ;\n }\n} // wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\n\n\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n stream.on('end', function () {\n debug('wrapped end');\n\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode\n\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n\n if (!ret) {\n paused = true;\n stream.pause();\n }\n }); // proxy all the other methods.\n // important when wrapping filters and duplexes.\n\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function methodWrap(method) {\n return function methodWrapReturnFunction() {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n } // proxy certain important events.\n\n\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n } // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n\n\n this._read = function (n) {\n debug('wrapped _read', n);\n\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nif (typeof Symbol === 'function') {\n Readable.prototype[Symbol.asyncIterator] = function () {\n if (createReadableStreamAsyncIterator === undefined) {\n createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n }\n\n return createReadableStreamAsyncIterator(this);\n };\n}\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.highWaterMark;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState && this._readableState.buffer;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.flowing;\n },\n set: function set(state) {\n if (this._readableState) {\n this._readableState.flowing = state;\n }\n }\n}); // exposed for testing purposes only.\n\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.length;\n }\n}); // Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = state.buffer.consume(n, state.decoder);\n }\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n debug('endReadable', state.endEmitted);\n\n if (!state.endEmitted) {\n state.ended = true;\n process.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n debug('endReadableNT', state.endEmitted, state.length); // Check that we didn't get one last unshift.\n\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the writable side is ready for autoDestroy as well\n var wState = stream._writableState;\n\n if (!wState || wState.autoDestroy && wState.finished) {\n stream.destroy();\n }\n }\n }\n}\n\nif (typeof Symbol === 'function') {\n Readable.from = function (iterable, opts) {\n if (from === undefined) {\n from = require('./internal/streams/from');\n }\n\n return from(Readable, iterable, opts);\n };\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n\n return -1;\n}","'use strict';\n\nconst inherits = require('inherits');\n\nconst bignum = require('bn.js');\nconst DecoderBuffer = require('../base/buffer').DecoderBuffer;\nconst Node = require('../base/node');\n\n// Import DER constants\nconst der = require('../constants/der');\n\nfunction DERDecoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n}\nmodule.exports = DERDecoder;\n\nDERDecoder.prototype.decode = function decode(data, options) {\n if (!DecoderBuffer.isDecoderBuffer(data)) {\n data = new DecoderBuffer(data, options);\n }\n\n return this.tree._decode(data, options);\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n Node.call(this, 'der', parent);\n}\ninherits(DERNode, Node);\n\nDERNode.prototype._peekTag = function peekTag(buffer, tag, any) {\n if (buffer.isEmpty())\n return false;\n\n const state = buffer.save();\n const decodedTag = derDecodeTag(buffer, 'Failed to peek tag: \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n buffer.restore(state);\n\n return decodedTag.tag === tag || decodedTag.tagStr === tag ||\n (decodedTag.tagStr + 'of') === tag || any;\n};\n\nDERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {\n const decodedTag = derDecodeTag(buffer,\n 'Failed to decode tag of \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n let len = derDecodeLen(buffer,\n decodedTag.primitive,\n 'Failed to get length of \"' + tag + '\"');\n\n // Failure\n if (buffer.isError(len))\n return len;\n\n if (!any &&\n decodedTag.tag !== tag &&\n decodedTag.tagStr !== tag &&\n decodedTag.tagStr + 'of' !== tag) {\n return buffer.error('Failed to match tag: \"' + tag + '\"');\n }\n\n if (decodedTag.primitive || len !== null)\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n\n // Indefinite length... find END tag\n const state = buffer.save();\n const res = this._skipUntilEnd(\n buffer,\n 'Failed to skip indefinite length body: \"' + this.tag + '\"');\n if (buffer.isError(res))\n return res;\n\n len = buffer.offset - state.offset;\n buffer.restore(state);\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n};\n\nDERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {\n for (;;) {\n const tag = derDecodeTag(buffer, fail);\n if (buffer.isError(tag))\n return tag;\n const len = derDecodeLen(buffer, tag.primitive, fail);\n if (buffer.isError(len))\n return len;\n\n let res;\n if (tag.primitive || len !== null)\n res = buffer.skip(len);\n else\n res = this._skipUntilEnd(buffer, fail);\n\n // Failure\n if (buffer.isError(res))\n return res;\n\n if (tag.tagStr === 'end')\n break;\n }\n};\n\nDERNode.prototype._decodeList = function decodeList(buffer, tag, decoder,\n options) {\n const result = [];\n while (!buffer.isEmpty()) {\n const possibleEnd = this._peekTag(buffer, 'end');\n if (buffer.isError(possibleEnd))\n return possibleEnd;\n\n const res = decoder.decode(buffer, 'der', options);\n if (buffer.isError(res) && possibleEnd)\n break;\n result.push(res);\n }\n return result;\n};\n\nDERNode.prototype._decodeStr = function decodeStr(buffer, tag) {\n if (tag === 'bitstr') {\n const unused = buffer.readUInt8();\n if (buffer.isError(unused))\n return unused;\n return { unused: unused, data: buffer.raw() };\n } else if (tag === 'bmpstr') {\n const raw = buffer.raw();\n if (raw.length % 2 === 1)\n return buffer.error('Decoding of string type: bmpstr length mismatch');\n\n let str = '';\n for (let i = 0; i < raw.length / 2; i++) {\n str += String.fromCharCode(raw.readUInt16BE(i * 2));\n }\n return str;\n } else if (tag === 'numstr') {\n const numstr = buffer.raw().toString('ascii');\n if (!this._isNumstr(numstr)) {\n return buffer.error('Decoding of string type: ' +\n 'numstr unsupported characters');\n }\n return numstr;\n } else if (tag === 'octstr') {\n return buffer.raw();\n } else if (tag === 'objDesc') {\n return buffer.raw();\n } else if (tag === 'printstr') {\n const printstr = buffer.raw().toString('ascii');\n if (!this._isPrintstr(printstr)) {\n return buffer.error('Decoding of string type: ' +\n 'printstr unsupported characters');\n }\n return printstr;\n } else if (/str$/.test(tag)) {\n return buffer.raw().toString();\n } else {\n return buffer.error('Decoding of string type: ' + tag + ' unsupported');\n }\n};\n\nDERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {\n let result;\n const identifiers = [];\n let ident = 0;\n let subident = 0;\n while (!buffer.isEmpty()) {\n subident = buffer.readUInt8();\n ident <<= 7;\n ident |= subident & 0x7f;\n if ((subident & 0x80) === 0) {\n identifiers.push(ident);\n ident = 0;\n }\n }\n if (subident & 0x80)\n identifiers.push(ident);\n\n const first = (identifiers[0] / 40) | 0;\n const second = identifiers[0] % 40;\n\n if (relative)\n result = identifiers;\n else\n result = [first, second].concat(identifiers.slice(1));\n\n if (values) {\n let tmp = values[result.join(' ')];\n if (tmp === undefined)\n tmp = values[result.join('.')];\n if (tmp !== undefined)\n result = tmp;\n }\n\n return result;\n};\n\nDERNode.prototype._decodeTime = function decodeTime(buffer, tag) {\n const str = buffer.raw().toString();\n\n let year;\n let mon;\n let day;\n let hour;\n let min;\n let sec;\n if (tag === 'gentime') {\n year = str.slice(0, 4) | 0;\n mon = str.slice(4, 6) | 0;\n day = str.slice(6, 8) | 0;\n hour = str.slice(8, 10) | 0;\n min = str.slice(10, 12) | 0;\n sec = str.slice(12, 14) | 0;\n } else if (tag === 'utctime') {\n year = str.slice(0, 2) | 0;\n mon = str.slice(2, 4) | 0;\n day = str.slice(4, 6) | 0;\n hour = str.slice(6, 8) | 0;\n min = str.slice(8, 10) | 0;\n sec = str.slice(10, 12) | 0;\n if (year < 70)\n year = 2000 + year;\n else\n year = 1900 + year;\n } else {\n return buffer.error('Decoding ' + tag + ' time is not supported yet');\n }\n\n return Date.UTC(year, mon - 1, day, hour, min, sec, 0);\n};\n\nDERNode.prototype._decodeNull = function decodeNull() {\n return null;\n};\n\nDERNode.prototype._decodeBool = function decodeBool(buffer) {\n const res = buffer.readUInt8();\n if (buffer.isError(res))\n return res;\n else\n return res !== 0;\n};\n\nDERNode.prototype._decodeInt = function decodeInt(buffer, values) {\n // Bigint, return as it is (assume big endian)\n const raw = buffer.raw();\n let res = new bignum(raw);\n\n if (values)\n res = values[res.toString(10)] || res;\n\n return res;\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getDecoder('der').tree;\n};\n\n// Utility methods\n\nfunction derDecodeTag(buf, fail) {\n let tag = buf.readUInt8(fail);\n if (buf.isError(tag))\n return tag;\n\n const cls = der.tagClass[tag >> 6];\n const primitive = (tag & 0x20) === 0;\n\n // Multi-octet tag - load\n if ((tag & 0x1f) === 0x1f) {\n let oct = tag;\n tag = 0;\n while ((oct & 0x80) === 0x80) {\n oct = buf.readUInt8(fail);\n if (buf.isError(oct))\n return oct;\n\n tag <<= 7;\n tag |= oct & 0x7f;\n }\n } else {\n tag &= 0x1f;\n }\n const tagStr = der.tag[tag];\n\n return {\n cls: cls,\n primitive: primitive,\n tag: tag,\n tagStr: tagStr\n };\n}\n\nfunction derDecodeLen(buf, primitive, fail) {\n let len = buf.readUInt8(fail);\n if (buf.isError(len))\n return len;\n\n // Indefinite form\n if (!primitive && len === 0x80)\n return null;\n\n // Definite form\n if ((len & 0x80) === 0) {\n // Short form\n return len;\n }\n\n // Long form\n const num = len & 0x7f;\n if (num > 4)\n return buf.error('length octect is too long');\n\n len = 0;\n for (let i = 0; i < num; i++) {\n len <<= 8;\n const j = buf.readUInt8(fail);\n if (buf.isError(j))\n return j;\n len |= j;\n }\n\n return len;\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 Buffer = require('buffer').Buffer;\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 }\n\n if (base === 16) {\n this._parseHex(number, start);\n } else {\n this._parseBase(number, base, start);\n }\n\n if (number[0] === '-') {\n this.negative = 1;\n }\n\n this.strip();\n\n if (endian !== 'le') return;\n\n this._initArray(this.toArray(), base, endian);\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 parseHex (str, start, end) {\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 <<= 4;\n\n // 'a' - 'f'\n if (c >= 49 && c <= 54) {\n r |= c - 49 + 0xa;\n\n // 'A' - 'F'\n } else if (c >= 17 && c <= 22) {\n r |= c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r |= c & 0xf;\n }\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start) {\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 var j, w;\n // Scan 24-bit chunks and add them to the number\n var off = 0;\n for (i = number.length - 6, j = 0; i >= start; i -= 6) {\n w = parseHex(number, i, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n if (i + 6 !== start) {\n w = parseHex(number, start, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\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\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","'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n if (!Base) {\n Base = Error;\n }\n\n function getMessage(arg1, arg2, arg3) {\n if (typeof message === 'string') {\n return message;\n } else {\n return message(arg1, arg2, arg3);\n }\n }\n\n var NodeError =\n /*#__PURE__*/\n function (_Base) {\n _inheritsLoose(NodeError, _Base);\n\n function NodeError(arg1, arg2, arg3) {\n return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n }\n\n return NodeError;\n }(Base);\n\n NodeError.prototype.name = Base.name;\n NodeError.prototype.code = code;\n codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n if (Array.isArray(expected)) {\n var len = expected.length;\n expected = expected.map(function (i) {\n return String(i);\n });\n\n if (len > 2) {\n return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n } else if (len === 2) {\n return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n } else {\n return \"of \".concat(thing, \" \").concat(expected[0]);\n }\n } else {\n return \"of \".concat(thing, \" \").concat(String(expected));\n }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n\n return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n\n if (start + search.length > str.length) {\n return false;\n } else {\n return str.indexOf(search, start) !== -1;\n }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n // determiner: 'must be' or 'must not be'\n var determiner;\n\n if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n } else {\n determiner = 'must be';\n }\n\n var msg;\n\n if (endsWith(name, ' argument')) {\n // For cases like 'first argument'\n msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } else {\n var type = includes(name, '.') ? 'property' : 'argument';\n msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n }\n\n msg += \". Received type \".concat(typeof actual);\n return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\n","module.exports = require('./readable').Transform\n","'use strict';\n\nconst inherits = require('inherits');\n\nfunction Reporter(options) {\n this._reporterState = {\n obj: null,\n path: [],\n options: options || {},\n errors: []\n };\n}\nexports.Reporter = Reporter;\n\nReporter.prototype.isError = function isError(obj) {\n return obj instanceof ReporterError;\n};\n\nReporter.prototype.save = function save() {\n const state = this._reporterState;\n\n return { obj: state.obj, pathLen: state.path.length };\n};\n\nReporter.prototype.restore = function restore(data) {\n const state = this._reporterState;\n\n state.obj = data.obj;\n state.path = state.path.slice(0, data.pathLen);\n};\n\nReporter.prototype.enterKey = function enterKey(key) {\n return this._reporterState.path.push(key);\n};\n\nReporter.prototype.exitKey = function exitKey(index) {\n const state = this._reporterState;\n\n state.path = state.path.slice(0, index - 1);\n};\n\nReporter.prototype.leaveKey = function leaveKey(index, key, value) {\n const state = this._reporterState;\n\n this.exitKey(index);\n if (state.obj !== null)\n state.obj[key] = value;\n};\n\nReporter.prototype.path = function path() {\n return this._reporterState.path.join('/');\n};\n\nReporter.prototype.enterObject = function enterObject() {\n const state = this._reporterState;\n\n const prev = state.obj;\n state.obj = {};\n return prev;\n};\n\nReporter.prototype.leaveObject = function leaveObject(prev) {\n const state = this._reporterState;\n\n const now = state.obj;\n state.obj = prev;\n return now;\n};\n\nReporter.prototype.error = function error(msg) {\n let err;\n const state = this._reporterState;\n\n const inherited = msg instanceof ReporterError;\n if (inherited) {\n err = msg;\n } else {\n err = new ReporterError(state.path.map(function(elem) {\n return '[' + JSON.stringify(elem) + ']';\n }).join(''), msg.message || msg, msg.stack);\n }\n\n if (!state.options.partial)\n throw err;\n\n if (!inherited)\n state.errors.push(err);\n\n return err;\n};\n\nReporter.prototype.wrapResult = function wrapResult(result) {\n const state = this._reporterState;\n if (!state.options.partial)\n return result;\n\n return {\n result: this.isError(result) ? null : result,\n errors: state.errors\n };\n};\n\nfunction ReporterError(path, msg) {\n this.path = path;\n this.rethrow(msg);\n}\ninherits(ReporterError, Error);\n\nReporterError.prototype.rethrow = function rethrow(msg) {\n this.message = msg + ' at: ' + (this.path || '(shallow)');\n if (Error.captureStackTrace)\n Error.captureStackTrace(this, ReporterError);\n\n if (!this.stack) {\n try {\n // IE only adds stack when thrown\n throw new Error(this.message);\n } catch (e) {\n this.stack = e.stack;\n }\n }\n return this;\n};\n","'use strict'\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar Base = require('cipher-base')\n\nvar ZEROS = Buffer.alloc(128)\nvar blocksize = 64\n\nfunction Hmac (alg, key) {\n Base.call(this, 'digest')\n if (typeof key === 'string') {\n key = Buffer.from(key)\n }\n\n this._alg = alg\n this._key = key\n\n if (key.length > blocksize) {\n key = alg(key)\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n\n this._hash = [ipad]\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n this._hash.push(data)\n}\n\nHmac.prototype._final = function () {\n var h = this._alg(Buffer.concat(this._hash))\n return this._alg(Buffer.concat([this._opad, h]))\n}\nmodule.exports = Hmac\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nmodule.exports = Stream;\n\nvar EE = require('events').EventEmitter;\nvar inherits = require('inherits');\n\ninherits(Stream, EE);\nStream.Readable = require('readable-stream/readable.js');\nStream.Writable = require('readable-stream/writable.js');\nStream.Duplex = require('readable-stream/duplex.js');\nStream.Transform = require('readable-stream/transform.js');\nStream.PassThrough = require('readable-stream/passthrough.js');\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\n\n\n// old-style streams. Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n EE.call(this);\n}\n\nStream.prototype.pipe = function(dest, options) {\n var source = this;\n\n function ondata(chunk) {\n if (dest.writable) {\n if (false === dest.write(chunk) && source.pause) {\n source.pause();\n }\n }\n }\n\n source.on('data', ondata);\n\n function ondrain() {\n if (source.readable && source.resume) {\n source.resume();\n }\n }\n\n dest.on('drain', ondrain);\n\n // If the 'end' option is not supplied, dest.end() will be called when\n // source gets the 'end' or 'close' events. Only dest.end() once.\n if (!dest._isStdio && (!options || options.end !== false)) {\n source.on('end', onend);\n source.on('close', onclose);\n }\n\n var didOnEnd = false;\n function onend() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n dest.end();\n }\n\n\n function onclose() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n if (typeof dest.destroy === 'function') dest.destroy();\n }\n\n // don't leave dangling pipes when there are errors.\n function onerror(er) {\n cleanup();\n if (EE.listenerCount(this, 'error') === 0) {\n throw er; // Unhandled stream error in pipe.\n }\n }\n\n source.on('error', onerror);\n dest.on('error', onerror);\n\n // remove all the event listeners that were added.\n function cleanup() {\n source.removeListener('data', ondata);\n dest.removeListener('drain', ondrain);\n\n source.removeListener('end', onend);\n source.removeListener('close', onclose);\n\n source.removeListener('error', onerror);\n dest.removeListener('error', onerror);\n\n source.removeListener('end', cleanup);\n source.removeListener('close', cleanup);\n\n dest.removeListener('close', cleanup);\n }\n\n source.on('end', cleanup);\n source.on('close', cleanup);\n\n dest.on('close', cleanup);\n\n dest.emit('pipe', source);\n\n // Allow for unix-like usage: A.pipe(B).pipe(C)\n return dest;\n};\n","module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\nmodule.exports = Writable;\n\n/* */\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* */\n\n/**/\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;\n/**/\n\n/**/\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\n/**/\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = global.Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nutil.inherits(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n var hwm = options.highWaterMark;\n var writableHwm = options.writableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // if _final has been called\n this.finalCalled = false;\n\n // drain event flag.\n this.needDrain = false;\n // at the start of calling end()\n this.ending = false;\n // when end() has been called, and returned\n this.ended = false;\n // when 'finish' is emitted\n this.finished = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0;\n\n // a flag to see when we're in the middle of a write.\n this.writing = false;\n\n // when true all writes will be buffered until .uncork() call\n this.corked = 0;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false;\n\n // the callback that's passed to _write(chunk,cb)\n this.onwrite = function (er) {\n onwrite(stream, er);\n };\n\n // the callback that the user supplies to write(chunk,encoding,cb)\n this.writecb = null;\n\n // the amount that is being written when _write is called.\n this.writelen = 0;\n\n this.bufferedRequest = null;\n this.lastBufferedRequest = null;\n\n // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n this.pendingcb = 0;\n\n // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n this.prefinished = false;\n\n // True if the error was already emitted and should not be thrown again\n this.errorEmitted = false;\n\n // count buffered requests\n this.bufferedRequestCount = 0;\n\n // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n while (current) {\n out.push(current);\n current = current.next;\n }\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function () {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function (object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function (object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {\n return new Writable(options);\n }\n\n this._writableState = new WritableState(options, this);\n\n // legacy.\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n\n if (typeof options.writev === 'function') this._writev = options.writev;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new Error('write after end');\n // TODO: defer error events consistently everywhere, not just the cb\n stream.emit('error', er);\n pna.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n var valid = true;\n var er = false;\n\n if (chunk === null) {\n er = new TypeError('May not write null values to stream');\n } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n if (er) {\n stream.emit('error', er);\n pna.nextTick(cb, er);\n valid = false;\n }\n return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n\n if (typeof cb !== 'function') cb = nop;\n\n if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n\n return ret;\n};\n\nWritable.prototype.cork = function () {\n var state = this._writableState;\n\n state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n\n if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n var len = state.objectMode ? 1 : chunk.length;\n\n state.length += len;\n\n var ret = state.length < state.highWaterMark;\n // we must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n pna.nextTick(cb, er);\n // this can emit finish, and it will always happen\n // after error\n pna.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n // this can emit finish, but finish must\n // always follow error\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n\n onwriteStateUpdate(state);\n\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state);\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n /**/\n asyncWrite(afterWrite, stream, state, finished, cb);\n /**/\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n\n var count = 0;\n var allBuffers = true;\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n buffer.allBuffers = allBuffers;\n\n doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n state.pendingcb++;\n state.lastBufferedRequest = null;\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--;\n // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new Error('_write() is not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n // .end() fully uncorks\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n }\n\n // ignore unnecessary end() calls.\n if (!state.ending && !state.finished) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n if (err) {\n stream.emit('error', err);\n }\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function') {\n state.pendingcb++;\n state.finalCalled = true;\n pna.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n if (need) {\n prefinish(stream, state);\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n }\n }\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n if (cb) {\n if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);\n }\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n }\n if (state.corkedRequestsFree) {\n state.corkedRequestsFree.next = corkReq;\n } else {\n state.corkedRequestsFree = corkReq;\n }\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n get: function () {\n if (this._writableState === undefined) {\n return false;\n }\n return this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._writableState.destroyed = value;\n }\n});\n\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n this.end();\n cb(err);\n};","var md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Buffer = require('safe-buffer').Buffer\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar toBuffer = require('./to-buffer')\n\nvar ZEROS = Buffer.alloc(128)\nvar sizes = {\n md5: 16,\n sha1: 20,\n sha224: 28,\n sha256: 32,\n sha384: 48,\n sha512: 64,\n rmd160: 20,\n ripemd160: 20\n}\n\nfunction Hmac (alg, key, saltLen) {\n var hash = getDigest(alg)\n var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n if (key.length > blocksize) {\n key = hash(key)\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = Buffer.allocUnsafe(blocksize + sizes[alg])\n var opad = Buffer.allocUnsafe(blocksize + sizes[alg])\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n\n var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4)\n ipad.copy(ipad1, 0, 0, blocksize)\n this.ipad1 = ipad1\n this.ipad2 = ipad\n this.opad = opad\n this.alg = alg\n this.blocksize = blocksize\n this.hash = hash\n this.size = sizes[alg]\n}\n\nHmac.prototype.run = function (data, ipad) {\n data.copy(ipad, this.blocksize)\n var h = this.hash(ipad)\n h.copy(this.opad, this.blocksize)\n return this.hash(this.opad)\n}\n\nfunction getDigest (alg) {\n function shaFunc (data) {\n return sha(alg).update(data).digest()\n }\n function rmd160Func (data) {\n return new RIPEMD160().update(data).digest()\n }\n\n if (alg === 'rmd160' || alg === 'ripemd160') return rmd160Func\n if (alg === 'md5') return md5\n return shaFunc\n}\n\nfunction pbkdf2 (password, salt, iterations, keylen, digest) {\n checkParameters(iterations, keylen)\n password = toBuffer(password, defaultEncoding, 'Password')\n salt = toBuffer(salt, defaultEncoding, 'Salt')\n\n digest = digest || 'sha1'\n\n var hmac = new Hmac(digest, password, salt.length)\n\n var DK = Buffer.allocUnsafe(keylen)\n var block1 = Buffer.allocUnsafe(salt.length + 4)\n salt.copy(block1, 0, 0, salt.length)\n\n var destPos = 0\n var hLen = sizes[digest]\n var l = Math.ceil(keylen / hLen)\n\n for (var i = 1; i <= l; i++) {\n block1.writeUInt32BE(i, salt.length)\n\n var T = hmac.run(block1, hmac.ipad1)\n var U = T\n\n for (var j = 1; j < iterations; j++) {\n U = hmac.run(U, hmac.ipad2)\n for (var k = 0; k < hLen; k++) T[k] ^= U[k]\n }\n\n T.copy(DK, destPos)\n destPos += hLen\n }\n\n return DK\n}\n\nmodule.exports = pbkdf2\n","var elliptic = require('elliptic')\nvar BN = require('bn.js')\n\nmodule.exports = function createECDH (curve) {\n return new ECDH(curve)\n}\n\nvar aliases = {\n secp256k1: {\n name: 'secp256k1',\n byteLength: 32\n },\n secp224r1: {\n name: 'p224',\n byteLength: 28\n },\n prime256v1: {\n name: 'p256',\n byteLength: 32\n },\n prime192v1: {\n name: 'p192',\n byteLength: 24\n },\n ed25519: {\n name: 'ed25519',\n byteLength: 32\n },\n secp384r1: {\n name: 'p384',\n byteLength: 48\n },\n secp521r1: {\n name: 'p521',\n byteLength: 66\n }\n}\n\naliases.p224 = aliases.secp224r1\naliases.p256 = aliases.secp256r1 = aliases.prime256v1\naliases.p192 = aliases.secp192r1 = aliases.prime192v1\naliases.p384 = aliases.secp384r1\naliases.p521 = aliases.secp521r1\n\nfunction ECDH (curve) {\n this.curveType = aliases[curve]\n if (!this.curveType) {\n this.curveType = {\n name: curve\n }\n }\n this.curve = new elliptic.ec(this.curveType.name) // eslint-disable-line new-cap\n this.keys = void 0\n}\n\nECDH.prototype.generateKeys = function (enc, format) {\n this.keys = this.curve.genKeyPair()\n return this.getPublicKey(enc, format)\n}\n\nECDH.prototype.computeSecret = function (other, inenc, enc) {\n inenc = inenc || 'utf8'\n if (!Buffer.isBuffer(other)) {\n other = new Buffer(other, inenc)\n }\n var otherPub = this.curve.keyFromPublic(other).getPublic()\n var out = otherPub.mul(this.keys.getPrivate()).getX()\n return formatReturnValue(out, enc, this.curveType.byteLength)\n}\n\nECDH.prototype.getPublicKey = function (enc, format) {\n var key = this.keys.getPublic(format === 'compressed', true)\n if (format === 'hybrid') {\n if (key[key.length - 1] % 2) {\n key[0] = 7\n } else {\n key[0] = 6\n }\n }\n return formatReturnValue(key, enc)\n}\n\nECDH.prototype.getPrivateKey = function (enc) {\n return formatReturnValue(this.keys.getPrivate(), enc)\n}\n\nECDH.prototype.setPublicKey = function (pub, enc) {\n enc = enc || 'utf8'\n if (!Buffer.isBuffer(pub)) {\n pub = new Buffer(pub, enc)\n }\n this.keys._importPublic(pub)\n return this\n}\n\nECDH.prototype.setPrivateKey = function (priv, enc) {\n enc = enc || 'utf8'\n if (!Buffer.isBuffer(priv)) {\n priv = new Buffer(priv, enc)\n }\n\n var _priv = new BN(priv)\n _priv = _priv.toString(16)\n this.keys = this.curve.genKeyPair()\n this.keys._importPrivate(_priv)\n return this\n}\n\nfunction formatReturnValue (bn, enc, len) {\n if (!Array.isArray(bn)) {\n bn = bn.toArray()\n }\n var buf = new Buffer(bn)\n if (len && buf.length < len) {\n var zeros = new Buffer(len - buf.length)\n zeros.fill(0)\n buf = Buffer.concat([zeros, buf])\n }\n if (!enc) {\n return buf\n } else {\n return buf.toString(enc)\n }\n}\n","exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n'use strict';\n/**/\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n\n for (var key in obj) {\n keys.push(key);\n }\n\n return keys;\n};\n/**/\n\n\nmodule.exports = Duplex;\n\nvar Readable = require('./_stream_readable');\n\nvar Writable = require('./_stream_writable');\n\nrequire('inherits')(Duplex, Readable);\n\n{\n // Allow the keys array to be GC'ed.\n var keys = objectKeys(Writable.prototype);\n\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n Readable.call(this, options);\n Writable.call(this, options);\n this.allowHalfOpen = true;\n\n if (options) {\n if (options.readable === false) this.readable = false;\n if (options.writable === false) this.writable = false;\n\n if (options.allowHalfOpen === false) {\n this.allowHalfOpen = false;\n this.once('end', onend);\n }\n }\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n}); // the no-half-open enforcer\n\nfunction onend() {\n // If the writable side ended, then we're ok.\n if (this._writableState.ended) return; // no more data can be written.\n // But allow more writes to happen in this tick.\n\n process.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});","var crypto; // Native crypto from window (Browser)\n\nif (typeof window !== 'undefined' && window.crypto) {\n crypto = window.crypto;\n} // Native (experimental IE 11) crypto from window (Browser)\n\n\nif (!crypto && typeof window !== 'undefined' && window.msCrypto) {\n crypto = window.msCrypto;\n} // Native crypto from global (NodeJS)\n\n\nif (!crypto && typeof global !== 'undefined' && global.crypto) {\n crypto = global.crypto;\n} // Native crypto import via require (NodeJS)\n\n\nif (!crypto && typeof require === 'function') {\n try {\n crypto = require('crypto');\n } catch (err) {}\n}\n/*\n * Cryptographically secure pseudorandom number generator\n * As Math.random() is cryptographically not safe to use\n */\n\n\nexport default function cryptoSecureRandomInt() {\n if (crypto) {\n // Use getRandomValues method (Browser)\n if (typeof crypto.getRandomValues === 'function') {\n try {\n return crypto.getRandomValues(new Uint32Array(1))[0];\n } catch (err) {}\n } // Use randomBytes method (NodeJS)\n\n\n if (typeof crypto.randomBytes === 'function') {\n try {\n return crypto.randomBytes(4).readInt32LE();\n } catch (err) {}\n }\n }\n\n throw new Error('Native crypto module could not be used to get secure random number.');\n}","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar getNAF = utils.getNAF;\nvar getJSF = utils.getJSF;\nvar assert = utils.assert;\n\nfunction BaseCurve(type, conf) {\n this.type = type;\n this.p = new BN(conf.p, 16);\n\n // Use Montgomery, when there is no fast reduction for the prime\n this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\n\n // Useful for many curves\n this.zero = new BN(0).toRed(this.red);\n this.one = new BN(1).toRed(this.red);\n this.two = new BN(2).toRed(this.red);\n\n // Curve configuration, optional\n this.n = conf.n && new BN(conf.n, 16);\n this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\n\n // Temporary arrays\n this._wnafT1 = new Array(4);\n this._wnafT2 = new Array(4);\n this._wnafT3 = new Array(4);\n this._wnafT4 = new Array(4);\n\n this._bitLength = this.n ? this.n.bitLength() : 0;\n\n // Generalized Greg Maxwell's trick\n var adjustCount = this.n && this.p.div(this.n);\n if (!adjustCount || adjustCount.cmpn(100) > 0) {\n this.redN = null;\n } else {\n this._maxwellTrick = true;\n this.redN = this.n.toRed(this.red);\n }\n}\nmodule.exports = BaseCurve;\n\nBaseCurve.prototype.point = function point() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype.validate = function validate() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\n assert(p.precomputed);\n var doubles = p._getDoubles();\n\n var naf = getNAF(k, 1, this._bitLength);\n var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\n I /= 3;\n\n // Translate into more windowed form\n var repr = [];\n var j;\n var nafW;\n for (j = 0; j < naf.length; j += doubles.step) {\n nafW = 0;\n for (var l = j + doubles.step - 1; l >= j; l--)\n nafW = (nafW << 1) + naf[l];\n repr.push(nafW);\n }\n\n var a = this.jpoint(null, null, null);\n var b = this.jpoint(null, null, null);\n for (var i = I; i > 0; i--) {\n for (j = 0; j < repr.length; j++) {\n nafW = repr[j];\n if (nafW === i)\n b = b.mixedAdd(doubles.points[j]);\n else if (nafW === -i)\n b = b.mixedAdd(doubles.points[j].neg());\n }\n a = a.add(b);\n }\n return a.toP();\n};\n\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\n var w = 4;\n\n // Precompute window\n var nafPoints = p._getNAFPoints(w);\n w = nafPoints.wnd;\n var wnd = nafPoints.points;\n\n // Get NAF form\n var naf = getNAF(k, w, this._bitLength);\n\n // Add `this`*(N+1) for every w-NAF index\n var acc = this.jpoint(null, null, null);\n for (var i = naf.length - 1; i >= 0; i--) {\n // Count zeroes\n for (var l = 0; i >= 0 && naf[i] === 0; i--)\n l++;\n if (i >= 0)\n l++;\n acc = acc.dblp(l);\n\n if (i < 0)\n break;\n var z = naf[i];\n assert(z !== 0);\n if (p.type === 'affine') {\n // J +- P\n if (z > 0)\n acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\n else\n acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\n } else {\n // J +- J\n if (z > 0)\n acc = acc.add(wnd[(z - 1) >> 1]);\n else\n acc = acc.add(wnd[(-z - 1) >> 1].neg());\n }\n }\n return p.type === 'affine' ? acc.toP() : acc;\n};\n\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\n points,\n coeffs,\n len,\n jacobianResult) {\n var wndWidth = this._wnafT1;\n var wnd = this._wnafT2;\n var naf = this._wnafT3;\n\n // Fill all arrays\n var max = 0;\n var i;\n var j;\n var p;\n for (i = 0; i < len; i++) {\n p = points[i];\n var nafPoints = p._getNAFPoints(defW);\n wndWidth[i] = nafPoints.wnd;\n wnd[i] = nafPoints.points;\n }\n\n // Comb small window NAFs\n for (i = len - 1; i >= 1; i -= 2) {\n var a = i - 1;\n var b = i;\n if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\n naf[a] = getNAF(coeffs[a], wndWidth[a], this._bitLength);\n naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength);\n max = Math.max(naf[a].length, max);\n max = Math.max(naf[b].length, max);\n continue;\n }\n\n var comb = [\n points[a], /* 1 */\n null, /* 3 */\n null, /* 5 */\n points[b], /* 7 */\n ];\n\n // Try to avoid Projective points, if possible\n if (points[a].y.cmp(points[b].y) === 0) {\n comb[1] = points[a].add(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].add(points[b].neg());\n } else {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n }\n\n var index = [\n -3, /* -1 -1 */\n -1, /* -1 0 */\n -5, /* -1 1 */\n -7, /* 0 -1 */\n 0, /* 0 0 */\n 7, /* 0 1 */\n 5, /* 1 -1 */\n 1, /* 1 0 */\n 3, /* 1 1 */\n ];\n\n var jsf = getJSF(coeffs[a], coeffs[b]);\n max = Math.max(jsf[0].length, max);\n naf[a] = new Array(max);\n naf[b] = new Array(max);\n for (j = 0; j < max; j++) {\n var ja = jsf[0][j] | 0;\n var jb = jsf[1][j] | 0;\n\n naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\n naf[b][j] = 0;\n wnd[a] = comb;\n }\n }\n\n var acc = this.jpoint(null, null, null);\n var tmp = this._wnafT4;\n for (i = max; i >= 0; i--) {\n var k = 0;\n\n while (i >= 0) {\n var zero = true;\n for (j = 0; j < len; j++) {\n tmp[j] = naf[j][i] | 0;\n if (tmp[j] !== 0)\n zero = false;\n }\n if (!zero)\n break;\n k++;\n i--;\n }\n if (i >= 0)\n k++;\n acc = acc.dblp(k);\n if (i < 0)\n break;\n\n for (j = 0; j < len; j++) {\n var z = tmp[j];\n p;\n if (z === 0)\n continue;\n else if (z > 0)\n p = wnd[j][(z - 1) >> 1];\n else if (z < 0)\n p = wnd[j][(-z - 1) >> 1].neg();\n\n if (p.type === 'affine')\n acc = acc.mixedAdd(p);\n else\n acc = acc.add(p);\n }\n }\n // Zeroify references\n for (i = 0; i < len; i++)\n wnd[i] = null;\n\n if (jacobianResult)\n return acc;\n else\n return acc.toP();\n};\n\nfunction BasePoint(curve, type) {\n this.curve = curve;\n this.type = type;\n this.precomputed = null;\n}\nBaseCurve.BasePoint = BasePoint;\n\nBasePoint.prototype.eq = function eq(/*other*/) {\n throw new Error('Not implemented');\n};\n\nBasePoint.prototype.validate = function validate() {\n return this.curve.validate(this);\n};\n\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n bytes = utils.toArray(bytes, enc);\n\n var len = this.p.byteLength();\n\n // uncompressed, hybrid-odd, hybrid-even\n if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\n bytes.length - 1 === 2 * len) {\n if (bytes[0] === 0x06)\n assert(bytes[bytes.length - 1] % 2 === 0);\n else if (bytes[0] === 0x07)\n assert(bytes[bytes.length - 1] % 2 === 1);\n\n var res = this.point(bytes.slice(1, 1 + len),\n bytes.slice(1 + len, 1 + 2 * len));\n\n return res;\n } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\n bytes.length - 1 === len) {\n return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\n }\n throw new Error('Unknown point format');\n};\n\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\n return this.encode(enc, true);\n};\n\nBasePoint.prototype._encode = function _encode(compact) {\n var len = this.curve.p.byteLength();\n var x = this.getX().toArray('be', len);\n\n if (compact)\n return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\n\n return [ 0x04 ].concat(x, this.getY().toArray('be', len));\n};\n\nBasePoint.prototype.encode = function encode(enc, compact) {\n return utils.encode(this._encode(compact), enc);\n};\n\nBasePoint.prototype.precompute = function precompute(power) {\n if (this.precomputed)\n return this;\n\n var precomputed = {\n doubles: null,\n naf: null,\n beta: null,\n };\n precomputed.naf = this._getNAFPoints(8);\n precomputed.doubles = this._getDoubles(4, power);\n precomputed.beta = this._getBeta();\n this.precomputed = precomputed;\n\n return this;\n};\n\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\n if (!this.precomputed)\n return false;\n\n var doubles = this.precomputed.doubles;\n if (!doubles)\n return false;\n\n return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\n};\n\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\n if (this.precomputed && this.precomputed.doubles)\n return this.precomputed.doubles;\n\n var doubles = [ this ];\n var acc = this;\n for (var i = 0; i < power; i += step) {\n for (var j = 0; j < step; j++)\n acc = acc.dbl();\n doubles.push(acc);\n }\n return {\n step: step,\n points: doubles,\n };\n};\n\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\n if (this.precomputed && this.precomputed.naf)\n return this.precomputed.naf;\n\n var res = [ this ];\n var max = (1 << wnd) - 1;\n var dbl = max === 1 ? null : this.dbl();\n for (var i = 1; i < max; i++)\n res[i] = res[i - 1].add(dbl);\n return {\n wnd: wnd,\n points: res,\n };\n};\n\nBasePoint.prototype._getBeta = function _getBeta() {\n return null;\n};\n\nBasePoint.prototype.dblp = function dblp(k) {\n var r = this;\n for (var i = 0; i < k; i++)\n r = r.dbl();\n return r;\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n","// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n callback.apply(this, args);\n };\n}\n\nfunction noop() {}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction eos(stream, opts, callback) {\n if (typeof opts === 'function') return eos(stream, null, opts);\n if (!opts) opts = {};\n callback = once(callback || noop);\n var readable = opts.readable || opts.readable !== false && stream.readable;\n var writable = opts.writable || opts.writable !== false && stream.writable;\n\n var onlegacyfinish = function onlegacyfinish() {\n if (!stream.writable) onfinish();\n };\n\n var writableEnded = stream._writableState && stream._writableState.finished;\n\n var onfinish = function onfinish() {\n writable = false;\n writableEnded = true;\n if (!readable) callback.call(stream);\n };\n\n var readableEnded = stream._readableState && stream._readableState.endEmitted;\n\n var onend = function onend() {\n readable = false;\n readableEnded = true;\n if (!writable) callback.call(stream);\n };\n\n var onerror = function onerror(err) {\n callback.call(stream, err);\n };\n\n var onclose = function onclose() {\n var err;\n\n if (readable && !readableEnded) {\n if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n\n if (writable && !writableEnded) {\n if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n };\n\n var onrequest = function onrequest() {\n stream.req.on('finish', onfinish);\n };\n\n if (isRequest(stream)) {\n stream.on('complete', onfinish);\n stream.on('abort', onclose);\n if (stream.req) onrequest();else stream.on('request', onrequest);\n } else if (writable && !stream._writableState) {\n // legacy streams\n stream.on('end', onlegacyfinish);\n stream.on('close', onlegacyfinish);\n }\n\n stream.on('end', onend);\n stream.on('finish', onfinish);\n if (opts.error !== false) stream.on('error', onerror);\n stream.on('close', onclose);\n return function () {\n stream.removeListener('complete', onfinish);\n stream.removeListener('abort', onclose);\n stream.removeListener('request', onrequest);\n if (stream.req) stream.req.removeListener('finish', onfinish);\n stream.removeListener('end', onlegacyfinish);\n stream.removeListener('close', onlegacyfinish);\n stream.removeListener('finish', onfinish);\n stream.removeListener('end', onend);\n stream.removeListener('error', onerror);\n stream.removeListener('close', onclose);\n };\n}\n\nmodule.exports = eos;","'use strict';\n\nconst encoders = require('./encoders');\nconst decoders = require('./decoders');\nconst inherits = require('inherits');\n\nconst api = exports;\n\napi.define = function define(name, body) {\n return new Entity(name, body);\n};\n\nfunction Entity(name, body) {\n this.name = name;\n this.body = body;\n\n this.decoders = {};\n this.encoders = {};\n}\n\nEntity.prototype._createNamed = function createNamed(Base) {\n const name = this.name;\n\n function Generated(entity) {\n this._initNamed(entity, name);\n }\n inherits(Generated, Base);\n Generated.prototype._initNamed = function _initNamed(entity, name) {\n Base.call(this, entity, name);\n };\n\n return new Generated(this);\n};\n\nEntity.prototype._getDecoder = function _getDecoder(enc) {\n enc = enc || 'der';\n // Lazily create decoder\n if (!this.decoders.hasOwnProperty(enc))\n this.decoders[enc] = this._createNamed(decoders[enc]);\n return this.decoders[enc];\n};\n\nEntity.prototype.decode = function decode(data, enc, options) {\n return this._getDecoder(enc).decode(data, options);\n};\n\nEntity.prototype._getEncoder = function _getEncoder(enc) {\n enc = enc || 'der';\n // Lazily create encoder\n if (!this.encoders.hasOwnProperty(enc))\n this.encoders[enc] = this._createNamed(encoders[enc]);\n return this.encoders[enc];\n};\n\nEntity.prototype.encode = function encode(data, enc, /* internal */ reporter) {\n return this._getEncoder(enc).encode(data, reporter);\n};\n","module.exports = require('events').EventEmitter;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n'use strict';\n\nmodule.exports = Transform;\n\nvar _require$codes = require('../errors').codes,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\n\nvar Duplex = require('./_stream_duplex');\n\nrequire('inherits')(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n var cb = ts.writecb;\n\n if (cb === null) {\n return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n cb(er);\n var rs = this._readableState;\n rs.reading = false;\n\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n Duplex.call(this, options);\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n }; // start out asking for a readable event once data is transformed.\n\n this._readableState.needReadable = true; // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n if (typeof options.flush === 'function') this._flush = options.flush;\n } // When the writable side finishes, then flush out anything remaining.\n\n\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n}; // This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\n\n\nTransform.prototype._transform = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n}; // Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\n\n\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && !ts.transforming) {\n ts.transforming = true;\n\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data); // TODO(BridgeAR): Write a test for these two error cases\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n\n if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n return stream.push(null);\n}","'use strict';\n\nvar utils = exports;\nvar BN = require('bn.js');\nvar minAssert = require('minimalistic-assert');\nvar minUtils = require('minimalistic-crypto-utils');\n\nutils.assert = minAssert;\nutils.toArray = minUtils.toArray;\nutils.zero2 = minUtils.zero2;\nutils.toHex = minUtils.toHex;\nutils.encode = minUtils.encode;\n\n// Represent num in a w-NAF form\nfunction getNAF(num, w, bits) {\n var naf = new Array(Math.max(num.bitLength(), bits) + 1);\n naf.fill(0);\n\n var ws = 1 << (w + 1);\n var k = num.clone();\n\n for (var i = 0; i < naf.length; i++) {\n var z;\n var mod = k.andln(ws - 1);\n if (k.isOdd()) {\n if (mod > (ws >> 1) - 1)\n z = (ws >> 1) - mod;\n else\n z = mod;\n k.isubn(z);\n } else {\n z = 0;\n }\n\n naf[i] = z;\n k.iushrn(1);\n }\n\n return naf;\n}\nutils.getNAF = getNAF;\n\n// Represent k1, k2 in a Joint Sparse Form\nfunction getJSF(k1, k2) {\n var jsf = [\n [],\n [],\n ];\n\n k1 = k1.clone();\n k2 = k2.clone();\n var d1 = 0;\n var d2 = 0;\n var m8;\n while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\n // First phase\n var m14 = (k1.andln(3) + d1) & 3;\n var m24 = (k2.andln(3) + d2) & 3;\n if (m14 === 3)\n m14 = -1;\n if (m24 === 3)\n m24 = -1;\n var u1;\n if ((m14 & 1) === 0) {\n u1 = 0;\n } else {\n m8 = (k1.andln(7) + d1) & 7;\n if ((m8 === 3 || m8 === 5) && m24 === 2)\n u1 = -m14;\n else\n u1 = m14;\n }\n jsf[0].push(u1);\n\n var u2;\n if ((m24 & 1) === 0) {\n u2 = 0;\n } else {\n m8 = (k2.andln(7) + d2) & 7;\n if ((m8 === 3 || m8 === 5) && m14 === 2)\n u2 = -m24;\n else\n u2 = m24;\n }\n jsf[1].push(u2);\n\n // Second phase\n if (2 * d1 === u1 + 1)\n d1 = 1 - d1;\n if (2 * d2 === u2 + 1)\n d2 = 1 - d2;\n k1.iushrn(1);\n k2.iushrn(1);\n }\n\n return jsf;\n}\nutils.getJSF = getJSF;\n\nfunction cachedProperty(obj, name, computer) {\n var key = '_' + name;\n obj.prototype[name] = function cachedProperty() {\n return this[key] !== undefined ? this[key] :\n this[key] = computer.call(this);\n };\n}\nutils.cachedProperty = cachedProperty;\n\nfunction parseBytes(bytes) {\n return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\n bytes;\n}\nutils.parseBytes = parseBytes;\n\nfunction intFromLE(bytes) {\n return new BN(bytes, 'hex', 'le');\n}\nutils.intFromLE = intFromLE;\n\n","var createHash = require('create-hash')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (seed, len) {\n var t = Buffer.alloc(0)\n var i = 0\n var c\n while (t.length < len) {\n c = i2ops(i++)\n t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()])\n }\n return t.slice(0, len)\n}\n\nfunction i2ops (c) {\n var out = Buffer.allocUnsafe(4)\n out.writeUInt32BE(c, 0)\n return out\n}\n","'use strict'\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\nvar Buffer = require('safe-buffer').Buffer\n\nvar ARRAY16 = new Array(16)\n\nfunction MD5 () {\n HashBase.call(this, 64)\n\n // state\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n}\n\ninherits(MD5, HashBase)\n\nMD5.prototype._update = function () {\n var M = ARRAY16\n for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4)\n\n var a = this._a\n var b = this._b\n var c = this._c\n var d = this._d\n\n a = fnF(a, b, c, d, M[0], 0xd76aa478, 7)\n d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12)\n c = fnF(c, d, a, b, M[2], 0x242070db, 17)\n b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22)\n a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7)\n d = fnF(d, a, b, c, M[5], 0x4787c62a, 12)\n c = fnF(c, d, a, b, M[6], 0xa8304613, 17)\n b = fnF(b, c, d, a, M[7], 0xfd469501, 22)\n a = fnF(a, b, c, d, M[8], 0x698098d8, 7)\n d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12)\n c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17)\n b = fnF(b, c, d, a, M[11], 0x895cd7be, 22)\n a = fnF(a, b, c, d, M[12], 0x6b901122, 7)\n d = fnF(d, a, b, c, M[13], 0xfd987193, 12)\n c = fnF(c, d, a, b, M[14], 0xa679438e, 17)\n b = fnF(b, c, d, a, M[15], 0x49b40821, 22)\n\n a = fnG(a, b, c, d, M[1], 0xf61e2562, 5)\n d = fnG(d, a, b, c, M[6], 0xc040b340, 9)\n c = fnG(c, d, a, b, M[11], 0x265e5a51, 14)\n b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20)\n a = fnG(a, b, c, d, M[5], 0xd62f105d, 5)\n d = fnG(d, a, b, c, M[10], 0x02441453, 9)\n c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14)\n b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20)\n a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5)\n d = fnG(d, a, b, c, M[14], 0xc33707d6, 9)\n c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14)\n b = fnG(b, c, d, a, M[8], 0x455a14ed, 20)\n a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5)\n d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9)\n c = fnG(c, d, a, b, M[7], 0x676f02d9, 14)\n b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20)\n\n a = fnH(a, b, c, d, M[5], 0xfffa3942, 4)\n d = fnH(d, a, b, c, M[8], 0x8771f681, 11)\n c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16)\n b = fnH(b, c, d, a, M[14], 0xfde5380c, 23)\n a = fnH(a, b, c, d, M[1], 0xa4beea44, 4)\n d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11)\n c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16)\n b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23)\n a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4)\n d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11)\n c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16)\n b = fnH(b, c, d, a, M[6], 0x04881d05, 23)\n a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4)\n d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11)\n c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16)\n b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23)\n\n a = fnI(a, b, c, d, M[0], 0xf4292244, 6)\n d = fnI(d, a, b, c, M[7], 0x432aff97, 10)\n c = fnI(c, d, a, b, M[14], 0xab9423a7, 15)\n b = fnI(b, c, d, a, M[5], 0xfc93a039, 21)\n a = fnI(a, b, c, d, M[12], 0x655b59c3, 6)\n d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10)\n c = fnI(c, d, a, b, M[10], 0xffeff47d, 15)\n b = fnI(b, c, d, a, M[1], 0x85845dd1, 21)\n a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6)\n d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10)\n c = fnI(c, d, a, b, M[6], 0xa3014314, 15)\n b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21)\n a = fnI(a, b, c, d, M[4], 0xf7537e82, 6)\n d = fnI(d, a, b, c, M[11], 0xbd3af235, 10)\n c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15)\n b = fnI(b, c, d, a, M[9], 0xeb86d391, 21)\n\n this._a = (this._a + a) | 0\n this._b = (this._b + b) | 0\n this._c = (this._c + c) | 0\n this._d = (this._d + d) | 0\n}\n\nMD5.prototype._digest = function () {\n // create padding and handle blocks\n this._block[this._blockOffset++] = 0x80\n if (this._blockOffset > 56) {\n this._block.fill(0, this._blockOffset, 64)\n this._update()\n this._blockOffset = 0\n }\n\n this._block.fill(0, this._blockOffset, 56)\n this._block.writeUInt32LE(this._length[0], 56)\n this._block.writeUInt32LE(this._length[1], 60)\n this._update()\n\n // produce result\n var buffer = Buffer.allocUnsafe(16)\n buffer.writeInt32LE(this._a, 0)\n buffer.writeInt32LE(this._b, 4)\n buffer.writeInt32LE(this._c, 8)\n buffer.writeInt32LE(this._d, 12)\n return buffer\n}\n\nfunction rotl (x, n) {\n return (x << n) | (x >>> (32 - n))\n}\n\nfunction fnF (a, b, c, d, m, k, s) {\n return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnG (a, b, c, d, m, k, s) {\n return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnH (a, b, c, d, m, k, s) {\n return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnI (a, b, c, d, m, k, s) {\n return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0\n}\n\nmodule.exports = MD5\n","module.exports = function () {\n throw new Error('Readable.from is not available in the browser')\n};\n","// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar eos;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n callback.apply(void 0, arguments);\n };\n}\n\nvar _require$codes = require('../../../errors').codes,\n ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\n\nfunction noop(err) {\n // Rethrow the error if it exists to avoid swallowing it\n if (err) throw err;\n}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction destroyer(stream, reading, writing, callback) {\n callback = once(callback);\n var closed = false;\n stream.on('close', function () {\n closed = true;\n });\n if (eos === undefined) eos = require('./end-of-stream');\n eos(stream, {\n readable: reading,\n writable: writing\n }, function (err) {\n if (err) return callback(err);\n closed = true;\n callback();\n });\n var destroyed = false;\n return function (err) {\n if (closed) return;\n if (destroyed) return;\n destroyed = true; // request.destroy just do .end - .abort is what we want\n\n if (isRequest(stream)) return stream.abort();\n if (typeof stream.destroy === 'function') return stream.destroy();\n callback(err || new ERR_STREAM_DESTROYED('pipe'));\n };\n}\n\nfunction call(fn) {\n fn();\n}\n\nfunction pipe(from, to) {\n return from.pipe(to);\n}\n\nfunction popCallback(streams) {\n if (!streams.length) return noop;\n if (typeof streams[streams.length - 1] !== 'function') return noop;\n return streams.pop();\n}\n\nfunction pipeline() {\n for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n streams[_key] = arguments[_key];\n }\n\n var callback = popCallback(streams);\n if (Array.isArray(streams[0])) streams = streams[0];\n\n if (streams.length < 2) {\n throw new ERR_MISSING_ARGS('streams');\n }\n\n var error;\n var destroys = streams.map(function (stream, i) {\n var reading = i < streams.length - 1;\n var writing = i > 0;\n return destroyer(stream, reading, writing, function (err) {\n if (!error) error = err;\n if (err) destroys.forEach(call);\n if (reading) return;\n destroys.forEach(call);\n callback(error);\n });\n });\n return streams.reduce(pipe);\n}\n\nmodule.exports = pipeline;","var ciphers = require('./encrypter')\nvar deciphers = require('./decrypter')\nvar modes = require('./modes/list.json')\n\nfunction getCiphers () {\n return Object.keys(modes)\n}\n\nexports.createCipher = exports.Cipher = ciphers.createCipher\nexports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv\nexports.createDecipher = exports.Decipher = deciphers.createDecipher\nexports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n","var r;\n\nmodule.exports = function rand(len) {\n if (!r)\n r = new Rand(null);\n\n return r.generate(len);\n};\n\nfunction Rand(rand) {\n this.rand = rand;\n}\nmodule.exports.Rand = Rand;\n\nRand.prototype.generate = function generate(len) {\n return this._rand(len);\n};\n\n// Emulate crypto API using randy\nRand.prototype._rand = function _rand(n) {\n if (this.rand.getBytes)\n return this.rand.getBytes(n);\n\n var res = new Uint8Array(n);\n for (var i = 0; i < res.length; i++)\n res[i] = this.rand.getByte();\n return res;\n};\n\nif (typeof self === 'object') {\n if (self.crypto && self.crypto.getRandomValues) {\n // Modern browsers\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.crypto.getRandomValues(arr);\n return arr;\n };\n } else if (self.msCrypto && self.msCrypto.getRandomValues) {\n // IE\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.msCrypto.getRandomValues(arr);\n return arr;\n };\n\n // Safari's WebWorkers do not have `crypto`\n } else if (typeof window === 'object') {\n // Old junk\n Rand.prototype._rand = function() {\n throw new Error('Not implemented yet');\n };\n }\n} else {\n // Node.js or Web worker with no crypto support\n try {\n var crypto = require('crypto');\n if (typeof crypto.randomBytes !== 'function')\n throw new Error('Not supported');\n\n Rand.prototype._rand = function _rand(n) {\n return crypto.randomBytes(n);\n };\n } catch (e) {\n }\n}\n"],"sourceRoot":""}